SKILL.md
Agent Recipe Builder
A recipe is a written operating pattern for an agent loop: exact skill stack, inputs, outputs, checks, and stop conditions. Write the recipe and run it manually before you ever schedule it. Automating an undefined workflow automates its failures.
Recipe template
recipe_name: <kebab-case slug>
owner: <OWNER>
purpose: <one-line business outcome>
trigger: <manual | schedule | webhook | event>
inputs:
- <source, scope, freshness requirement>
skill_stack:
- <skill name: role in this loop>
steps:
- <ordered step, one action each>
outputs:
- <artifact, draft, record, PR, page>
verification:
- <observable check per output>
stop_conditions:
- <when to halt and ask the owner>
run_log: <where each run writes its record>
next_trigger: <date, time, or event>Every field is required. A recipe with an empty verification or stop_conditions block is a draft, not a recipe.
Build workflow
- Name the business outcome and the surface where the owner sees results.
- Pick the smallest skill stack that produces that outcome. Cut any skill you cannot name a step for.
- Specify each input: source, scope, how fresh it must be.
- List every external action (send, post, purchase, delete) and put a permission gate in front of it.
- Add a verification step per output. State what observable evidence proves it worked.
- Add run logging: one line per run with timestamp, outcome, and evidence pointer.
- Run the recipe manually end to end at least once.
- Promote to a scheduled automation only when inputs are stable, outputs are stable, and the next-trigger rule is explicit. If any of the three wobbles, keep it manual.
Permission gates
Halt and ask the owner before:
- sending outbound messages
- posting publicly
- purchasing, billing, or subscription changes
- deleting or overwriting production data
- creating or editing recurring automations
- granting connector or API access
Do not schedule a recipe that crosses these gates unattended unless the owner has granted that specific action in writing inside the recipe.
Good vs bad
Bad: skill_stack: [enrichment, outreach], steps: [find leads, message them]. No scope, no gate, no check. This recipe will message the wrong people and report success.
Good: inputs: [CRM segment <SEGMENT_ID>, contacts touched in last 30 days excluded], steps: [enrich top 10 by fit score, draft messages to drafts folder, stop], stop_conditions: [never send without owner approval], verification: [10 drafts exist in folder, each references a real enrichment field]. Bounded, gated, checkable.
Verification
Do a manual dry run of the finished recipe. Expect: every step executes without improvisation, every output listed in outputs exists afterward, and each verification line can be checked against a real artifact. If any step required a judgment call the recipe does not document, the recipe is incomplete. Write the missing rule and rerun.
Completion checklist
- [ ] All template fields filled, no placeholders left
- [ ] Every external action has a permission gate
- [ ] Every output has a matching verification line
- [ ] Run log location defined
- [ ] Manual dry run completed at least once
- [ ] Promotion decision recorded: stay manual or schedule, with reason
Any box unchecked: not done. Fix or say so.
Footguns
- Scheduling on the first draft. The first manual run always surfaces a missing input scope or an undocumented judgment call. Fix: require one clean manual run before any schedule exists.
- Skill stack bloat. Recipes accumulate skills "just in case", then each run burns context on unused capabilities. Fix: cut any skill without a named step; you can add it back when a step needs it.
- Verification that restates the step. "Step: send draft. Verify: draft was sent" proves nothing. Fix: verification must name an independent observable (record ID, file path, page URL) checked after the step ran.