Dynamic workflow is superpower
A field note from the AI Workforce project.
We've been building a marketing agent — 32 job workflows, everything from "write me a social post" to "why is our review score bleeding." Each one was a lovingly hand-distilled senior playbook. And each one started the same way: Stage 0, the intake.
Here's the embarrassing part. The intake existed for exactly one reason: humans show up with vibes, not specs. "Make something for the new restaurant" is not a brief. So we bolted a polite interrogation onto the front of every workflow — one question per screen, four options max, a recommended default, very civilized.
Then we noticed something. Once the questions were answered, the job never actually needed a human again — except we kept letting the agent stop mid-run to ask things like "should I also do Weibo?" Which is a bit like a chef running out of the kitchen mid-service to ask if you're sure about the salt.
The split
When Claude shipped dynamic workflows — write an orchestration script, fan out subagents, run the whole thing in the background — the answer got obvious. That runtime is a perfect home for the execution half of a job. On one condition: you hand it everything up front.
So we split every workflow in two:
Intake (one batch of questions → a complete brief)
→ Run (autonomous pipeline, zero human gates)
→ staged output → [a human, pressing a button, by name]
The intake condenses the human's input, the tenant's brand rules, and our distilled experience into one brief. Then it hands off. The run doesn't turn around.
The rules that made it work
Rounds = dependency layers, not field count. We used to ask five questions in five screens. Now: independent decisions go in one batch; you only earn a second round if the options literally can't exist yet (can't pitch angles before reading the material). Social post: two beats. Review reply: one. Scheduled weekly report: zero — the brief rides in on the trigger.
Infer everything, show it as editable defaults. "I'm assuming Palace, going for bookings — tap to change" beats a form every time.
Assumptions travel with the brief. Anything we didn't ask becomes an assumptions[] entry. The run proceeds on stated assumptions and lays them all out at review time.
Three legal endings. A run ends staged, escalated, or failed — with reasons. There is no fourth ending called "quick question…" We banned it. Our evals now treat a mid-run question as a bug.
Two approvals, two different objects. Confirming the intake means "go do it." Pressing publish means "send this one, in my name." We tried to merge them once, on paper, for about ten minutes — then remembered that pre-approving content that doesn't exist yet is exactly the red line we wrote for ourselves. The publish button stays human. Forever.
The compliance gate lives in the harness, not the script. The orchestration script is model-written, which is the whole superpower — and precisely why the brand-compliance check is a deterministic gate the script can't sweet-talk. You don't let the intern approve their own expense report.
The punchline
The superpower isn't that the AI runs unsupervised. It's that you know exactly where the human stands: at the entrance, with a brief — and at the exit, with a button. Everything between is a pipeline that never asks about the salt.
The playbooks live in our repo as intake.md + run.md pairs. Three jobs split so far — social posts, review replies, reports — the highest-frequency ones, because if a pattern survives the daily grind, it survives anything.