Control flow has joined the repository.
GitHub released dynamic workflows in public preview for Copilot CLI, the Copilot app, and the Copilot SDK. A workflow can combine commands, tools, services, user checkpoints, and one or more agents. The author defines the steps, conditions, and handoffs in code. Agents handle work that needs analysis or judgment.[1][2]
That split matters. A coded branch can guarantee that two reviews are requested before a merge step. It cannot guarantee that either reviewer understood the change. The program controls when judgment runs and what shape it must return. The model still supplies the judgment.
Repeatable routing is not repeatable reasoning.
Pick the control owner on purpose.
GitHub distinguishes dynamic workflows from autopilot and /fleet. Autopilot keeps working without asking after each step. Fleet lets Copilot decide how to divide parallel work. A dynamic workflow follows steps and handoffs defined by its author.[2]
OpenAI's Agents SDK makes the same design choice explicit. An LLM can choose tools and handoffs for an open task. Code-driven orchestration can instead classify structured output, chain agents, run independent work in parallel, or loop an evaluator around another agent. OpenAI describes the code-driven route as more predictable for speed, cost, and performance.[3]
Use model judgment inside a bounded step. Use code for the order, branch condition, retry count, spend stop, approval point, and final record.
A budget field is not always a hard stop.
GitHub documents limits for concurrent workflow-owned agents, total agents launched, active running time, and approximate AI credits. It also says credit usage arrives after consumption, so work already running can take the total past the configured maximum.[2]
Write that distinction into the run card. Concurrency is a queue limit. Total agents and time can stop a run. The credit value is an approximate stop, not a billing ceiling. Put the provider's real account-level cap beside it if spend must not cross a number.
Pause and replay are different promises.
GitHub says a paused or limit-stopped workflow can retain status and saved results. A resumed run can reuse those saved results. Work that was not saved may run again. Sharing a workflow shares its definition, not the original run history or saved progress.[2]
Temporal shows the stronger durability contract that teams often assume without naming it. Its workflow engine records an ordered event history and replays code to rebuild state. External calls run as activities whose recorded results are reused during replay.[4] GitHub does not claim that model for dynamic workflows. If your process must survive a crash without repeating a payment, deployment, or message, define the idempotency and replay contract yourself.