Workflows Are Not All You Need
2026-05-26
The project: Serapeum — an R/Shiny research tool with RAG pipelines, citation networks, slide generation, and PDF extraction.
The experiment: Use Claude Code as an autonomous workflow engine via a custom framework called GSD (Get Stuff Done).
The numbers:
/gsd-discuss-phase
/gsd-plan-phase
/gsd-execute-phase
/gsd-verify-work
/gsd-audit-milestone
/gsd-complete-milestone
“Don’t prompt Claude to write code. Prompt Claude to run a software team.”
A phase-based development framework built entirely from custom Claude Code slash commands.
/gsd-discuss-phase
/gsd-plan-phase
/gsd-execute-phase
/gsd-verify-work
/gsd-audit-milestone
/gsd-complete-milestone
Each command orchestrates subagents:
Milestones group phases into versioned releases (v12–v20 in one month).
ACT I: THE TRIUMPH
| Metric | Value |
|---|---|
| Fully achieved outcomes | 73 / 91 (80%) |
| Multi-file changes | 56 sessions |
| Parallel sessions (multi-clauding) | 54 events, 15% of messages |
| Dissatisfied signals | Only 8 |
These aren’t rename this variable tasks.
These are multi-file, multi-step, plan-execute-verify pipelines.
Phase 35 example: discussion -> planning -> UI spec -> execution -> 80 passing tests
Multi-wave subagent architecture:
Each wave has gates — the next wave doesn’t start until the previous one passes.
plan
-> fix
-> Codex cross-audit
-> Copilot review
-> merge
The plan artifact does real work — it’s a contract between you and the agent about what “done” means.
Workflows transform an AI assistant from a pair programmer into a project manager with commit access.
Three things that worked:
…or so I thought.
ACT II: THE TROUBLE
| Friction Type | Count |
|---|---|
| Buggy generated code | 25 |
| Wrong initial approach | 18 |
| Misunderstood request | 7 |
| Environment issues | 4 |
| User rejected action | 3 |
| Error Type | Count |
|---|---|
| Command failed | 222 |
| User rejected tool call | 40 |
| File too large | 29 |
| File not found | 20 |
| Edit failed | 7 |
The workflow doesn’t eliminate mistakes — it changes where they happen.
The most common bug class: the workflow’s green checkmark and the data’s actual state don’t agree.
janitor::clean_names() — guessed wrongquantile() returns double, sprintf %d expects integer — crashWyoming had one hit in the curated dataset.
The dedup step collapsed rows by analyte name and lost the 1:many mapping.
Every workflow step passed:
WY went from 355 rows to 4. The workflow never noticed.
Structural correctness ≠ semantic correctness.
The workflow ran perfectly. The data was gutted.
I caught it by squinting at a number.
When you give an agent autonomy, it uses that autonomy:
Scope creep: Proposed dropping an embedding column without checking downstream usage. The research refiner needed it.
Not listening: Asked about merge strategy. Got a milestone proposal instead.
Premature claims: Claimed 12 issues were closed before finishing. “Did something stop?” became a recurring question.
Guessing: Applied a speculative shinyjs::delay() fix with no evidence. When challenged, admitted it was guessing. “Don’t guess! I’ll start the process over… again.”
Autonomy requires trust. Trust requires boundaries. The more autonomous the workflow, the more damage a wrong autonomous decision causes.
Workflows solve the process problem but not the judgment problem.
Better workflows can mask worse judgment.
Before Act III: the trouble is real. The trouble is also one month of data.
Calling a permanent ceiling from one month is the same forecasting error a team at Wharton made when they fit a sigmoid to the METR graph two weeks before the next model release ran the curve right past their projection.
The trouble in this talk is evidence of a correctable problem.
Not a fatal one.
Sigmoid fit: Ge, Bastani & Bastani (2026), arxiv.org/abs/2602.04836. Story via Scott Alexander, “The Sigmoids Won’t Save You,” Astral Codex Ten, May 2026.
ACT III: THE TRAINWRECK
Mid-March. Six milestones. Six branches. Six Claude sessions. Each running the full GSD pipeline independently.
| PR | Milestone | Created | Merged |
|---|---|---|---|
| #156 | v12 UX Polish & Onboarding | Mar 13 | Mar 20 |
| #161 | v13 Search & Discovery | Mar 17 | Mar 20 |
| #168 | v14 Citation Network Evolution | Mar 19 | Mar 20 |
| #162 | v15 AI Infrastructure | Mar 18 | Mar 20 |
| #221 | v16 Content & Output Quality | Mar 21 | never merged |
| #163 | v17 PDF Image Pipeline | Mar 19 | Mar 21 |
Each milestone: individually disciplined. Full discuss-plan-execute-verify lifecycle.
All six needed to merge in the same 48-hour window.
* d834744 merge: v17 + v16 into integration
|\
| * 6beabed v17.0 PDF image pipeline
| |\
| | * 202b90c merge: integration (v12-v15) INTO v17
| | |\
| | |/
| |/|
* | | 0f2ad9a merge: v16 Content & Output Quality
|\ \ \
| |/ /
|/| |
| * | 4322df7 fix: address PR #221 review feedback
* | 4e299ca Merge PR #162 (v15-ai-infrastructure)
| * | 69b9b32 merge: resolve conflicts with integration
|/
* 4c1516b Merge v14 into integration
* da06085 Revert "Merge PR #168 (v14)" <-- THE REVERT
* 152ffdb Merge PR #168 (v14-citation-network)
* 3b1fde3 Merge PR #161 (v13-search-discovery)
* 05852b6 Merge v12-ux-polish into integration
135 files. +28,656 lines. -1,261 lines.
This place is not a place of honor. No highly esteemed deed is commemorated here. Nothing valued is here.
The next week was integration debris:
| PR | What Broke | Days After |
|---|---|---|
| #233 | v16 uncommitted changes salvaged | +1 |
| #237 | Document download broken | +2 |
| #241 | v18 Bug Bash: 13 issues, 5 fix sessions | +3 |
| #253 | Missing community column migration | +4 |
| #262 | Citation network bind length mismatch | +4 |
The v18 Bug Bash wasn’t planned work.
It was cleanup. Five sessions (A through E) to fix what the integration broke.
“The workflows produced code faster than I could integrate it. I was assembling six sets of IKEA furniture that all shared the same screws.”
The GSD framework had no concept of:
rag.R, mod_settings.R, mod_slides.R, db.R all touched by 3+ milestonesEach agent was a perfectly disciplined soldier executing a flawless plan. But nobody was the general.
And then there’s the unglamorous stuff:
/tmp/ paths/tmp/git worktree removeI have this rule in:
Claude still uses /tmp/.
Instruction adherence degrades with context length.
By the time Claude is deep in a multi-stage pipeline, the guardrails have scrolled off its priority list.
THE LESSONS
After the trainwreck, the two tempting conclusions are both wrong.
Reading the trouble as evidence that structured AI development is doomed.
I’ve been doing this for one month. Calling the sigmoid now is the single most common forecasting error in this field.
Waiting for the next frontier model to dissolve the judgment and coordination problems.
Frontier capability keeps climbing. Frontier prices climb with it. For most users, the next model is either out of budget or wildly overkill for the actual task.
The model is not the bottleneck. The harness is. And so am I.
The harness side: context engineering, hooks, verification, coordination.
The human side: patience, judgment, knowing when not to launch the sixth parallel agent.
Workflows are a floor, not a ceiling.
The uncomfortable truth: the maintenance burden of the workflow system is itself a significant time investment. Every mistake adds a new guardrail. Every guardrail adds context length. Context length degrades guardrail adherence.
That cycle isn’t a verdict — it’s a design problem. And it’s the design problem with the most leverage: of the three bottlenecks, the harness is the only one you can grow.
Vibeslop coding is the 3D printer of software. I’m not printing my house with it.
| Level | Description | Where It Breaks |
|---|---|---|
| 1. Prompting | Ask the AI to write code | Quality of each prompt |
| 2. Templates | Reusable prompt patterns | Doesn’t adapt to context |
| 3. Skills / Workflows | Multi-step pipelines | Semantic errors, overreach |
| 4. Verification loops | Workflows + runtime validation | Maintenance burden |
| 5. Coordinated fleets | Parallel agents with shared state | Not yet — but not generational |
I’m at Level 3–4.
Level 5 requires solving Level 3’s problems first.
Per Scott Alexander’s Lindy argument, AI paradigms turn over on practitioner timescales, not generational ones. Harnesses turn over even faster — this style is two years old. The next level isn’t a decade away.
Which is where the harness investment goes next.
Scott Alexander, “New Paradigms Won’t Save You,” Astral Codex Ten, May 2026.
The Triumph: Workflows made me 5x more productive on a good day.
The Trouble: The agent doesn’t know what it doesn’t know.
The Trainwreck: Six perfect pipelines, one catastrophic merge.
What I’m building into GSD before I run six milestones in parallel again:
/tmp/ keeps coming backThe harness is the only thing I can grow. So I’m growing it.
Workflows are not all you need.
Neither is the next model.
The model is locked. The operator is a ceiling. The harness is the only thing you can grow.
So grow it.
With apologies to Scott Alexander, whose “X Won’t Save You” pieces named the rhetorical move I just spent an hour borrowing.
Sean Thimons
github.com/seanthimons
Triumph, Trouble, Trainwreck | Sean Thimons