Caro scaffold
Scaffold a new CaroML task file (.caro) from a natural-language description. Use this when the user wants to create a repeatable shell task that Caro will validate, generate, and maintain over time. Triggers on requests like "make a CaroML task that...", "scaffold a runbook for...", "create a .caro file for...", or invocations of `/caro new <name>`.From its SKILL.md
npx -y skills add wildcard/caro --skill caro-scaffoldAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
4.2 KB, as published. Nobody here has run it
CaroML Task Scaffolding
This skill helps you create a new .caro file (a CaroML task) and an
accompanying lock + runbook by walking through the user's intent in a
small number of focused steps.
When to invoke
The user is asking for a repeatable shell task that they'd otherwise script by hand and gradually drift away from. Examples:
- "Make a CaroML task that cleans up old log files weekly"
- "Scaffold a runbook to deploy the API to staging"
- "Create a .caro for the nightly snapshot job"
Caro's value proposition is that the intent (the what) stays stable while the generated script can evolve — across model upgrades, new CVE patterns, platform changes, or learned team preferences. The eight-keyword DSL (TASK / WHY / NEED / ON / LET / DO / NOTE / REM) is meant to feel like your first programming language: line-oriented, minimal syntax, BASIC-like.
Workflow
-
Clarify the intent. Ask 1–3 short questions:
- What's the one-line title? (becomes
TASK) - Why does this task exist? When does it run? (becomes
WHY) - Does it need sudo / network / a specific tool? (becomes
NEED) - Target platforms? macOS, Linux, both? (becomes
ON)
- What's the one-line title? (becomes
-
Sketch the steps. Each
DOline is one natural-language intent. Keep them short and imperative. Order matters — later steps may use earlier results. -
Run
caro new <name> "<description>"if the user is in a shell with caro installed. Otherwise, write the file content yourself following the format below. -
Show the user the resulting
.carobefore generating. Let them refine before committing. -
Run
caro check, thencaro generate <name> --backend mockfor a dry-run; show the resulting commands. If anything looks off, refine the intent (not the output). -
For real generation, point the user at
caro generatewith their configured backend; for nowmockis the only one wired through.
File format reference
REM Optional comments anywhere; ignored at runtime
TASK <one-line title>
WHY <reason; when does this run?>
NEED <prerequisite> # zero or more
ON <platform> [PREFER <a, b>] [AVOID <c, d>] # zero or more
LET <name> = <value> # zero or more; use {name} in DO lines
NOTE <hint to the LLM> # attaches to the next DO line
DO <natural-language intent>
DO <next intent>
Recognized platforms: macos, linux, windows, posix.
Example session
USER: Make a CaroML task that deletes log files older than 30 days,
with confirmation per file.
ASSISTANT: A few quick questions:
1. Title for the task? (e.g., "Clean up old log files")
2. Where do the logs live? (`/var/log` is the conventional spot)
3. Target platforms? Both macOS and Linux?
USER: Yes, both. /var/log is fine. Title is "Cleanup logs".
ASSISTANT: Drafting tasks/cleanup-logs.caro:
TASK Cleanup logs
WHY Free disk space; runs weekly via cron
NEED sudo
ON macos PREFER bsd-tools
ON linux PREFER gnu-tools
LET path = /var/log
LET days = 30
DO find log files in {path}
DO filter to those older than {days} days
DO delete each, asking confirmation per file
DO record what was deleted to /tmp/caro-cleanup.log
Want me to commit this as-is, or refine anything first?
Don'ts
- Don't over-constrain — leave the LLM room to choose a sensible idiom.
DO find all .log files older than 30 days and delete themis fine;DO run "find /var/log -mtime +30 -delete"defeats the point. - Don't put shell flags in the intent — that's the lock's job.
- Don't ship
.shrunbooks as the primary deliverable. The committed artifact is the.caro+.caro.lock; runbooks are derived.
Triggers
This skill should activate when the user says any of:
- "make a CaroML task"
- "scaffold a runbook"
- "create a .caro for ..."
- "/caro new"
- "I want a repeatable shell task"