with one click
automation-shape-routing
Front door for agent automation — decide the SHAPE (Workflow vs ATM vs skill), then hand off. Triggers: "build automation", "convert skills to workflows", "which shape".
Menu
Front door for agent automation — decide the SHAPE (Workflow vs ATM vs skill), then hand off. Triggers: "build automation", "convert skills to workflows", "which shape".
| name | automation-shape-routing |
| description | Front door for agent automation — decide the SHAPE (Workflow vs ATM vs skill), then hand off. Triggers: "build automation", "convert skills to workflows", "which shape". |
| practices | ["hexagonal-architecture","team-topologies","pragmatic-programmer"] |
| hexagonal_role | supporting |
| consumes | [] |
| produces | [] |
| context_rel | [{"kind":"supplier-to","with":"skill-builder"},{"kind":"supplier-to","with":"workflow-builder"}] |
| skill_api_version | 1 |
| context | {"window":"inherit","intent":{"mode":"task"},"intel_scope":"none"} |
| metadata | {"tier":"meta","dependencies":[]} |
| output_contract | a routing verdict — Workflow | ATM swarm | plain skill — with the deciding axis named |
The trap this kills: "I built a lot of skills; they should become workflows." Mostly false. Most orchestration-looking skills are either long-lived/human-attachable (stay ATM) or hard-sequential (stay skills). The win is the routing rule, not a migration project.
| Shape | What it is | Mechanism |
|---|---|---|
| Workflow | Deterministic, reproducible orchestration of subagents | Claude Workflow tool — agent({schema}), parallel(), pipeline(), phase(), loop-until-budget. In-process, headless, ~16 concurrent. |
| ATM swarm | Long-lived, human-in-the-loop multi-agent run | atm (the CLI) driven by /using-atm — persistent tmux panes running whole /rpi//evolve loops over a bead queue, with attach + nudge + kill/relaunch and mail/locks coordination. |
| Plain skill | One model reasoning through a procedure or knowledge | A single SKILL.md. No fan-out, or a strictly sequential edit-loop. |
Ask in order:
One-line litmus:
deterministic DAG + structured JSON + no human-attach + headless-wanted → Workflow long-lived + attachable + open-ended file edits / fluid population → ATM no fan-out, or hard-sequential edit loop → plain skill
A live three-legged spike (~/dev/agentops-3cat-spike/) measured the same task on
all three backends. Two findings refine the rule:
Workflow when you
want independent verification / fresh eyes, not for speed. For speed, you need
large N and no barrier — use pipeline() (no barrier), not parallel().Degradation (ATM → Claude-native → beads floor) is governed by the
OrchestrationPort selector; opt out entirely with AGENTOPS_ORCHESTRATION=off →
beads floor, which always works.
loop-until-budget Workflow only once each step
returns structured output instead of free-form edits, and you want it
headless/reproducible.→ Workflow (deterministic fan-out / synthesize, structured returns):
council (N judges → consensus — near-trivial port), the planning half of
rpi, judge/refutation panels, any "fan out N analyses → triangulate" task.
→ Stay ATM (long-lived, attachable, open-ended edits, fluid population):
the *-with-atm family (hypothesis research, cross-model review swarms, browser
testing), plus swarm/crank in full epic-execution mode — they touch the
working tree and need wave-validity gating + human review.
→ Stay plain skill (no exploitable parallelism, or knowledge/one-shot): deliberately one-at-a-time loops (progressive reapply, multi-pass bug hunting); all reference docs; all single-shot transforms (jargon scrub, README authoring).
.claude/workflows/operating-loop.js is the worked example — a real Workflow-tool
script using agent(prompt,{schema}) with JSON schemas, parallel([thunks])
barriers (framing-lenses / judges / refutation / slices), phase() markers,
budget-scaled FANOUT, and bounded re-plan/retry. Start from it when porting a
Workflow. It is also the proof that the AgentOps operating loop has two
conformant runtimes (skill-driven via rpi/crank/swarm/council, and
Workflow-driven via this script) — the basis of the agentops-core-sdk
portability thesis. See operating-loop-workflow for the install+run path.
This skill is the front door. It does not build; it routes. Once the shape is decided, hand off:
| Verdict | Next | What it does |
|---|---|---|
| plain skill | skill-builder | Scaffold a new SKILL.md against the unified template → then skill-auditor → heal-skill. |
| Workflow | workflow-builder | Scaffold a new .claude/workflows/*.js from the operating-loop.js template. |
| ATM swarm | atm + /using-atm | Stand up + tend an ATM swarm running AgentOps loops (/rpi//evolve) over a bead queue. |
State the verdict and the deciding axis in one line, then invoke the chosen builder. Do not scaffold here.
A Workflow is a composite capability (an orchestration of sub-capabilities
with typed control flow); a skill is a leaf. The portable contract for this —
a shape: skill|workflow discriminator, a StepGraph, a control_flow enum, a
budget, and an OrchestrationPort interface — is net-new SDK work. Port the
shape, not the engine: keep concrete orchestrators (Codex subagents, swarm
dispatch, scheduler — BC4/BC5) behind adapters.
Resume sessions across Claude Code, Codex, Gemini, and other providers when switching agents or migrating active chat history.
Run AGY headlessly via scheduled ticks or `agy -p`, capture agentapi JSONL evidence, and validate automated AGY loops or event streams.
Wire MCP servers and AgentOps plugin bundles into the AGY image with least-privilege access, rollback evidence, and validation hooks.
Manage the PROGRAM.md/AUTODEV.md contract consumed by evolve/factory ticks. Use for loop rules, boundaries, or PROGRAM.md repair.
Audit SKILL.md files against the AgentOps template and readiness checks. Use for quality reviews or template compliance.
Run AGY headlessly via scheduled ticks or `agy -p`, capture agentapi JSONL evidence, and validate automated AGY loops or event streams.