I’m using a parent Skill to orchestrate a multi-step workflow (parse input → generate code → run long jobs → report results). Each step has strict input/output contracts, quality gates, and sometimes hour-long background jobs.
Current pattern
Parent Skill
→ Step 1: transform raw input into structured prompt
→ Step 2: generate + validate code
→ Step 3: run computation (often background)
→ Step 4: run evaluation / reporting
- Parent Skill defines IO contracts, hard-stop rules, and resume via
run_id - State persisted via a small CLI (
context.json, per-step logs) - Child Skills use
disable-model-invocation: true(explicit invoke only)
What works
- Skills carry domain knowledge well
- Explicit invocation avoids accidental triggers
- File-based state enables resume across long runs
Pain points
- Parent SKILL.md is very long (~500 lines) — high token cost, hard to maintain
- Orchestration correctness depends on the agent following instructions reliably
- Shell allowlist requires literal commands (no variable expansion)
- Pipeline variants share most logic but duplicate SKILL.md
- No clear best practice for long-running background steps
Questions
- Is Skills-as-pipeline the recommended pattern, or is something else better (Automations, subagents, SDK)?
- How do others handle long-running steps without polling or losing context?
- Any pattern to reduce SKILL.md size while keeping strict step contracts?