The DAG is dead: pi-dynamic-workflows and the case for runtime mutation

4 min read 6 sources clear_take
├── "Agent workloads have outgrown static DAGs — the workflow graph must become a runtime-mutable object"
│  └── Michaelliv (GitHub (pi-dynamic-workflows), 752 pts) → read

The repo's thesis is that agents fundamentally don't fit the DAG model — they make a decision, call a tool, then make another decision based on the result. pi-dynamic-workflows treats the graph as mutable data that nodes can rewrite mid-execution, eliminating the deploy-time validation step that every existing orchestrator depends on.

├── "Existing orchestrators have been incrementally moving toward runtime-decided execution without admitting it"
│  └── top10.dev editorial (top10.dev) → read below

The editorial argues that LangGraph's conditional edges, Temporal's signals and updates, and Prefect 2's 'flows are just Python' rewrite are all partial admissions of the same truth: the static DAG assumption is broken. Each framework took a step toward letting the runtime decide what executes next, but none of them named the destination — pi-dynamic-workflows finally does.

└── "The static-DAG assumption underlying a decade of orchestration tooling is now obsolete for the workloads developers actually ship"
  └── top10.dev editorial (top10.dev) → read below

The piece directly names Airflow, Prefect, Dagster, Temporal, and Step Functions clones as all sharing one assumption — that the workflow shape is known before the run starts — and argues that assumption was correct for ten years but no longer matches reality. Production LangGraph/CrewAI/AutoGen deployments held together by retry loops and conditional edges are evidence that the shape itself needs to be runtime-mutable.

What happened

Three repos hit GitHub Trending this week with three different surface stories — but one of them, Michaelliv/pi-dynamic-workflows (752 stars), is worth pulling apart on its own terms. The pitch is short: a workflow engine where nodes can add, remove, and rewire other nodes while the workflow is executing. No recompile. No DAG re-validation as a separate step. The graph is a runtime object, not a deploy-time artifact.

The other two trenders — qiuqiubuchongle-cloud/chokepoint-atlas (478) and anomalyco/rift (474) — are doing different things, but pi-dynamic-workflows is the one that names an assumption every existing orchestrator quietly holds. Airflow, Prefect, Dagster, Temporal, and every Step Functions clone all assume the workflow shape is known before the run starts. That assumption was correct for ten years. It is no longer correct for the workloads developers are actually shipping.

The repo's README is unusually direct about why: "Agents don't have a DAG. They have a decision and a tool call and another decision." That's not a hot take. That's a description of every LangGraph, CrewAI, and AutoGen production deployment that's currently being held together with retry loops and conditional edges.

Why it matters

The last two years of agent frameworks have been a slow admission that the orchestration layer underneath was the wrong shape. LangGraph added conditional edges. Temporal added signals and updates. Prefect 2 rewrote the entire engine around "flows are just Python." Each was a step toward the same destination — letting the runtime decide what to execute next based on what just happened — without any of them stating the destination out loud.

pi-dynamic-workflows states it: the graph is data, the data is mutable, and the executor walks whatever graph exists at the moment it asks for the next node. That's the move. Everything else is plumbing — checkpointing, idempotency keys, replay semantics, observability for a graph that changes shape between snapshots.

The plumbing is the hard part, and it's where the existing frameworks have a real advantage. Temporal's history-based replay is battle-tested at scale. Airflow's UI, for all its sins, is the thing every data team already knows how to read. A 752-star repo from one author has none of that, and the comments under its HN submission reflected that — the top reply was effectively "cool, show me the failure modes at 10k concurrent workflows." Fair question.

But the framing matters more than this specific repo. The interesting projects on GitHub Trending right now aren't libraries — they're claims about which assumptions in the existing libraries are wrong. Static graphs are one. The other one trending repos are touching this month: that orchestration and inference belong in separate processes, that retries are a framework concern rather than an agent concern, that "tool" is a useful abstraction at all. Each of these is a load-bearing assumption in something you probably already deploy.

There's also a real ergonomic argument the README doesn't make but should. When you express an agent as a static DAG with conditional edges, you end up with a graph that has every possible branch enumerated up front — and the actual run touches maybe four nodes. The DAG becomes documentation of what the agent *could* do, not what it *did*. With a runtime-mutable graph, the executed graph is the trace. That's a meaningful win for debugging, and it's the kind of thing that only becomes obvious after you've spent a weekend trying to figure out why your LangGraph agent took the path it took.

What this means for your stack

Don't rip out Temporal. The point isn't that pi-dynamic-workflows wins; it almost certainly doesn't, in its current form. The point is to look at your own orchestrator and ask one question: can a running workflow change its own future steps without going through a deploy, a restart, or a parent process? If the answer is no, and you're shipping anything agent-shaped, you are going to feel that constraint within six months.

Concretely, the things to audit:

Checkpoint granularity. If your engine snapshots at node boundaries on a fixed graph, mutating the graph mid-run breaks replay. Temporal handles this with versioning APIs; most others don't have an answer.

Observability. Dashboards built around a known graph fall over when nodes appear that weren't there at workflow-start. If you can't render a trace of "the graph as it actually executed," your on-call rotation is going to suffer.

Idempotency. Dynamic graphs make it easier to accidentally re-emit side effects on retry, because the "is this the same step" question now requires the graph history, not just the step ID. Worth a quarter to get right before you need it.

None of this requires adopting a new framework today. It requires knowing whether your current framework can be pushed in this direction, or whether you're going to be the team explaining at a postmortem that your agent re-charged a customer's card because the retry policy assumed a graph that no longer existed.

Looking ahead

The trending repos aren't the destination — they're a signal about which assumptions are starting to give. Static graphs are giving. The 2027 version of this conversation will be about whether the runtime-mutable graph itself is the wrong abstraction, and whether agents want something closer to a continuation-passing model with no graph at all. For now, the practical move is to make sure your orchestrator can survive the first half of that shift. The teams that don't will be the ones quietly rewriting their agent runtime next summer while their competitors ship features.

GitHub 766 pts 39 comments

Michaelliv/pi-dynamic-workflows: New trending repository

→ read on GitHub
GitHub 600 pts 126 comments

qiuqiubuchongle-cloud/chokepoint-atlas: New trending repository

→ read on GitHub
GitHub 545 pts 9 comments

anomalyco/rift: New trending repository

→ read on GitHub
GitHub 475 pts 232 comments

tiantianGPU/reg-factory: New trending repository

→ read on GitHub
GitHub 467 pts 18 comments

QwenLM/Qwen-VLA: New trending repository

→ read on GitHub
GitHub 247 pts 123 comments

johnmiddleton12/my-whoop: New trending repository

→ read on GitHub

// share this

// get daily digest

Top 10 dev stories every morning at 8am UTC. AI-curated. Retro terminal HTML email.