cull/SKILL.md
This skill should be used when the user wants to view, review, rate, organize, search, or export images / AI-art generations with the Cull app. 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.
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 interactive control is needed that the headless surface doesn't implement yet (see "When the MCP is needed").
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 -a /Applications/Cull.app "cull://open?path=/abs/path/to/batch&view=grid" # &view=loupe for single-image detail
open -a Cull # ensure the window is frontmost
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 any MCP operation can be tried 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 -a /Applications/Cull.app "cull://<action>?<params>" — paths URL-encoded, multiple paths comma-separated. Always pass -a /Applications/Cull.app: dev builds of Cull also register the cull:// scheme, and a bare open "cull://…" may route to a stale copy (URL silently goes nowhere). 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 a result is needed, use the CLI (--json) or the MCP.
Loupe one image. open -a /Applications/Cull.app "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 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.data-ai
--- name: disk-cleanup description: Scan and clean macOS caches, package-manager data, crash dumps, and app caches to reclaim disk space. Deterministic — a config registry (targets.json) plus two scripts (survey.py read-only, clean.py executor) do all the measuring and deleting; the agent only relays a compressed summary and makes the few human-judgment calls. IMPORTANT — use this skill whenever the user's request on macOS involves: freeing disk space, cleaning/clearing caches, "disk is full", "
development
Generate and edit images using Google's Gemini image generation models (Nano Banana family). Supports style presets, platform-specific sizing (YouTube/slides/blog), variants, image editing via inlineData, reference images for style transfer, and organized output with metadata. Default model is Nano Banana 2 (gemini-3.1-flash-image-preview). Key is auto-decrypted via SOPS.
development
--- name: agency-docs-updater description: End-to-end pipeline for publishing Claude Code lab meetings. Accepts optional args: date (YYYYMMDD, "yesterday", "today") and lab number (e.g. "04"). Examples: "yesterday 04", "20260420 05", "04" (today, lab 04), "" (today, auto-detect lab). --- # Agency Docs Updater Execute ALL steps automatically in sequence. Only pause if a step fails and cannot be recovered. Read `references/learnings.md` before starting for known pitfalls. **Configuration**: pat
tools
This skill should be used when applying proper typography to prose text or files in Russian, English, German, or French — smart quotes per locale («ёлочки», “curly”, „Gänsefüßchen“, « guillemets »), correct dashes (тире, em/en dash, Gedankenstrich, tiret), non-breaking spaces, ranges, ellipsis, and French espaces insécables before ! ? ; :. Fully deterministic via a pinned typograf-based CLI; never apply these rules by hand. Triggers on "типографика", "typograf", "оттипографь", "smart quotes", "fix typography", "неразрывные пробелы".