cull/SKILL.md
Use when the user wants to view, review, rate, organize, search, or export images / AI-art generations with the Cull app (https://cull.company/ · https://github.com/glebis/cull). Trigger on "show me these images", "review this batch", "open these in Cull", "rate / shortlist / collect these", "find similar images", "make a smart collection", "run a quality pass", "export the keepers", "publish this collection". Works via the `cull` CLI by default (no MCP required); the `mcp__cull__*` tools are optional for richer interactive control.
npx skillsauth add glebis/claude-skills cullInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Cull is a local AI-art image-library app: import folders, browse, rate/decide, build collections, run vision/quality analysis, find-similar via embeddings, and export/publish. This skill is a usage map over its automation surface, not a reimplementation.
Links: website cull.company · source github.com/glebis/cull
Cull exposes the same operations four ways: the cull CLI, the cull:// URL scheme, the GUI, and an MCP server — all thin wrappers over one Rust core. Default to the CLI + URL scheme. They need no MCP connection and survive app restarts. Reach for the MCP only when you need interactive control the headless surface doesn't implement yet (see "When you need the MCP").
To show or review images, use Cull — never open <image> or Preview. The user does not want Preview windows. Display by importing into Cull's library and fronting the app on the folder (below). Fronting the app is fine; opening image files with open is not.
The binary lives at /Applications/Cull.app/Contents/MacOS/cull. Set it once:
CULL="/Applications/Cull.app/Contents/MacOS/cull"
With no subcommand it launches the GUI; with a subcommand it runs headless and exits, writing to the same library DB the running app reads. Add --json for machine-readable output.
Show / review a batch — the most common task. Import (headless), then front the app on the folder via the URL scheme:
$CULL --json import_folder --folder_path "/abs/path/to/batch"
open "cull://open?path=/abs/path/to/batch&view=grid" # &view=loupe for single-image detail
open -a Cull # ensure the window is frontmost
The user now sees the batch in Cull. Never open the image files. Re-running import_folder is safe — already-imported files are skipped.
These are live in the shipped binary (cull --help to confirm). Field names match the MCP tool params.
| Command | Purpose |
|---|---|
| import_folder --folder_path P / import_files --file_paths a,b | Bring a folder / specific files into the library |
| list_folders / list_images [--limit N --offset N] / list_collections | Enumerate folders / images / collections |
| get_library_stats | Library-wide counts |
| list_export_presets / export_images --image_ids … --output_dir … --format … | List presets / export to disk (also --collection_id or --folder_path) |
| get_embedding_model_download_info / download_embedding_model / generate_embeddings | Embedding model prereq + build (async) |
| analyze_image_quality / get_image_quality / get_quality_count | Run quality analysis / read scores / count by bucket |
| call_tool <tool> --params_json '{…}' | Generic escape hatch — call any MCP-named tool with a JSON object |
call_tool accepts MCP-shaped params, so anything you'd do over MCP you can try headless:
$CULL --json call_tool import_folder --params_json '{"folder_path":"/abs/path"}'
$CULL --json call_tool export_images --params_json '{"collection_id":"<id>","output_dir":"/tmp/out","format":"original"}'
open "cull://<action>?<params>" — paths URL-encoded, multiple paths comma-separated. GUI actions front the window; if the app isn't running, macOS launches it.
| Action | Example |
|---|---|
| open / navigate | cull://open?path=/abs/folder&view=grid (view=loupe, &focus=N, &fullscreen=true) |
| search | cull://search?q=sunset |
| similar | cull://similar?path=/abs/ref.jpg&top=5 |
| rate / accept | cull://rate?path=/abs/img.jpg&stars=4 · cull://accept?path=/abs/img.jpg |
| collection | cull://collection/add?name=picks&paths=/abs/a.jpg,/abs/b.jpg |
URL-scheme calls are fire-and-forget (no return value). When you need a result, use the CLI (--json) or the MCP.
Review a fresh batch. import_folder → open "cull://open?path=…&view=grid" → open -a Cull. The user sees it in Cull. Never open the files.
Loupe one image. open "cull://open?path=/abs/img.png&view=loupe".
Export the keepers. list_export_presets → export_images with --collection_id / --folder_path / --image_ids, an --output_dir, and --format.
Quality pass. analyze_image_quality (async — it returns a job; for CLI poll by re-reading) → get_quality_count for the distribution → get_image_quality per image.
Embeddings prerequisite. download_embedding_model (once) → generate_embeddings (async). Only then does similarity work (cull://similar?…, or find_similar over MCP).
The headless CLI does not yet implement interactive curation and live navigation — those exist only as mcp__cull__* tools (or manual GUI). Reach for the MCP when you need to:
navigate_to_folder, show_image, show_collection (the URL scheme covers the common cases, but these give programmatic control and confirmation).set_rating, set_decision, create_collection, add_to_collection, create_smart_collection.find_similar, search_by_object, detect_objects / get_detections, analyze_images, get_vision_metadata.list_jobs / get_job / cancel_job.export_static_publish_package / serve_static_publish_package, clipboard-collection tools.MCP mechanics. These tools are named mcp__cull__<tool> and in Claude Code are deferred — schemas aren't loaded, so a direct call fails. Load before calling, only what the recipe needs:
ToolSearch "select:mcp__cull__navigate_to_folder,mcp__cull__set_rating"
The MCP drops when Cull restarts. Quitting/relaunching the app kills its MCP server; it must be reconnected by the user via /mcp before any mcp__cull__* call works again. The CLI + URL scheme have no such dependency — prefer them, and fall back to MCP only for the interactive operations above.
open / Preview instead of Cull. The cardinal sin — review always happens in Cull (import_folder + cull://open, or the MCP show/navigate tools)./mcp reconnect. Don't restart Cull mid-task if you depend on the MCP.ToolSearch "select:mcp__cull__…" first.cull <command> --help or load the MCP tool and read its schema.delete_collection and prune_audit_log remove data; confirm before running.create_token / rotate_token / revoke_token change access credentials — don't touch unless the user explicitly asks.development
Create Tufte-inspired data reports and infographic dashboards as standalone HTML files. Uses EB Garamond for text, Monaspace Argon for numbers, Chart.js for interactive charts, and inline SVG sparklines. Produces publication-quality reports with 2-column narrative+data layouts, status dashboards, scroll animations, and responsive mobile support. Use this skill whenever the user wants to create a data report, activity dashboard, infographic, personal analytics page, health tracker visualization, or any document that combines narrative text with interactive charts and tables. Also triggers for "make a report like Tufte", "create an infographic", "build a dashboard", "visualize my data", or requests for beautiful data-driven documents.
documentation
Cut a software release and maintain a tiered compatibility policy. Use when the user wants to release, ship a version, bump the version, tag a release, write a changelog, or update COMPATIBILITY. Config-driven via release.config.json; bumps version files, runs a readiness gate, updates COMPATIBILITY.md tiers and deprecations, tags (→ release workflow), and reports closed issues. Teaches the underlying standards as it runs.
development
Sync and manage bilingual (EN/RU) library content for agency-docs. Use when adding, updating, or reviewing library articles. Handles translation, sync checks, and Russian stylistic review.
development
This skill should be used to watch a long-running background job (ffmpeg/media encode, qmd or other embedding/vector-DB run, batch agent/LLM pipeline, or a real-browser/agent-browser daemon) until it finishes or wedges, then deliver a verdict (done, needs-attention, or blocked) plus the exact next command, without burning dozens of manual poll commands. Triggers on "babysit this job", "watch this until it's done", "ping me when the encode/embed/batch finishes", "is this background process stuck", "monitor this ffmpeg/qmd run", or any request to wait on a long-running process and be told when it's complete or hung.