image_search

$npx mdskill add obra/muse-skills/image_search

Use the bundled CLI to find public images by text query:

SKILL.md

.github/skills/image_searchView on GitHub ↗
---
name: "image_search"
description: "Search the web by text query for image URLs and source pages for feeds, artifacts, and visual references. Does not identify a supplied image or person."
metadata: { "includeInPrompt": true }
---

# Image Search

Use the bundled CLI to find public images by text query:

```sh
/opt/hatch/bin/image-search "Golden Gate Bridge at sunset" --max-results 5
```

Optional result language:

```sh
/opt/hatch/bin/image-search "Paris architecture" \
  --max-results 5 \
  --language fr
```

The CLI returns structured results and omits unavailable fields. Interpret the
URLs as follows:

- `media_url` is the public source image locator and the preferred full-image
  URL when present.
- `thumbnail_cdn_url` is Meta's renderable CDN preview and the fallback when
  `media_url` is absent. Treat it as a cache URL, not the sole durable copy of
  an artifact.
- `media_handle` and `candidate_ref` are internal, non-renderable fields. Do
  not fetch, display, or pass them as image URLs.
- `page_url` is the source page. Retain it for provenance or attribution.

The service returns only results with `media_url` or `thumbnail_cdn_url`.
Ignore any result that lacks both renderable URL fields.
Choose the result that best matches the request rather than blindly taking the
first one.

This skill returns locators only: it does not download, upload, or turn an
image into a Muse media reference. A Feed may use a suitable remote image URL.
For an Artifact that needs a durable local copy, pass the chosen locator and
source page through the Artifact's supported media-ingestion path; do not treat
the CDN thumbnail as permanent storage.

For an Artifact, choose a download-safe locator before starting any fetch:

1. Inspect all returned results and prefer an HTTPS `media_url` with no URL
   credentials, query string, or fragment. Preserve result order among those
   simple public URLs.
2. Preflight each candidate like a browser, with a cross-origin referer, then
   fetch one candidate at a time with bounded connect and total timeouts
   (substitute real values for the placeholders):

   ```sh
   curl -fsSLI -A 'Mozilla/5.0' -H 'Accept: image/png,image/jpeg,image/gif,image/webp,image/*;q=0.5' -H 'Referer: <any-https-origin-that-is-not-the-image-host>' '<image-url>'
   curl -fsSL --connect-timeout 10 --max-time 60 -A 'Mozilla/5.0' -H 'Accept: image/png,image/jpeg,image/gif,image/webp,image/*;q=0.5' -o '<dest-file>' '<image-url>'
   ```

   Accept only a final `2xx` whose content type and file magic are an image,
   then copy those bytes into Artifact-owned storage. Prefer PNG or JPEG:
   WEBP is fine except in a Word document, and AVIF except on a web page,
   which refuses it at share time with no retry that fixes it. Convert a HEIC
   to JPEG anywhere. Reject hotlink-blocked, expiring, redirecting, 403/404,
   non-image, watermarked, or unstable URLs. The referer matters: a
   hotlink-protected host serves a plain fetch but refuses requests that look
   like they come from someone else's page, so a URL that fails this probe
   breaks after the Artifact ships even though it loads for you today. The
   same preflight applies to any external image URL an Artifact uses, however
   it was found.
3. If no simple `media_url` succeeds, consider a query-bearing `media_url` or
   `thumbnail_cdn_url`. Use the returned locator byte-for-byte; never remove or
   rewrite its query string to make it look simpler.

Search-result pre-approval records the returned locator's exact path and query,
so a plain GET/HEAD that uses it byte-for-byte is normally allowed without
another prompt even when it has a query string. Do not keep retrying or
substitute an unrelated local image when a fetch fails.

This is text-to-image search, not reverse-image identification. Do not use it
to identify an unknown person from a supplied photograph.

More from obra/muse-skills

SkillDescription
apple_healthkitThe user's synced Apple Health (HealthKit) data: daily metrics (steps, distance, calories, heart rate, HRV, VO2max), sleep sessions (stages, quality, efficiency), and workouts.
artifact_documentCreate, read, edit, or manipulate Word documents (.docx) and Word templates (.dotx). Use whenever a build task's artifact kind is document with the default docx output, or the task mentions a Word doc, .docx, or .dotx, extracts or reorganizes content from one, inserts or replaces images, does find-and-replace in one, or works with tracked changes (redlines) or comments. Covers python-docx generation, raw OOXML editing of existing files, document structure and formatting, and render verification. Not for PDFs, spreadsheets, or Google Docs.
artifact_markdownBuild or revise a plain markdown file (md) deliverable such as notes, a README, meeting minutes, documentation, or text the user will edit or paste elsewhere. Use whenever a build task's artifact kind is markdown. Covers markdown formatting conventions and read-back verification.
artifact_pdfBuild, revise, or manipulate a fixed-layout PDF (report, guide, one-pager, printable document). Use whenever a build task's artifact kind is pdf, a document build's output format is pdf, or the task reads, merges, splits, crops, or fills an existing PDF, including fillable AcroForms. Covers authoring the print-CSS HTML source, rendering, the geometry and validation gates, existing-PDF manipulation and form filling, and delivery under workspace/your_files.
artifact_presentationBuild or revise a slide deck (pptx by default; pdf or html on request). Use whenever a build task's artifact kind is presentation, or the user asks for a deck, slides, or a presentation. Covers per-slide HTML authoring, the StylePlan theme system, font embedding, deck assembly, render gates, and the PPTX export.
artifact_spreadsheetCreate, read, edit, fix, or clean spreadsheet files (.xlsx, .xlsm, .csv, .tsv). Use whenever a build task's artifact kind is spreadsheet, or the task names a spreadsheet file and wants something done to it or produced from it, including restructuring messy tabular data into a proper workbook. Covers openpyxl generation, formulas and recalculation, editing existing workbooks, and the validation gates. Not for tasks whose deliverable is a document, report, or web page that merely contains a table.
artifact_testingVerify an artifact before delivering it - file deliverables (pdf, pptx, docx, xlsx, csv) and web artifacts alike. Use whenever a build is about to return a link, or a build task asks for validation, QA, or a visual check. Covers the per-kind gate scripts, render-and-look verification, and leftover-placeholder scanning.
asana>-
bookingPrimary entry point for direct flight, hotel, restaurant, or event-ticket transactions and for bounded live availability checks delegated by Travel Planning. Always use before provider-specific skills or browser work when the user asks to find live availability or prices, compare bookable options, book, or continue an active booking. Do not use for trip planning itself, broad inspiration, opening hours, schedules, flight status, or other factual questions without transaction intent.
boxSearch, read, upload, download, move, rename, delete, restore, and share Box content; manage comments and metadata.