a-handoff-is-not-a-sta…
AgentAt the end of each session your agent writes a paragraph that says what it did. The next session still spends its first half hour…
A team ran a frontier model on a small repo task. The result had plausible code, two red tests, one edit in a file that had nothing to do with the task, and no note of what the model assumed or what remains. The team wants to buy a bigger model. What do you tell them?
Claude Code
$ npx -y skills add rohitg00/ai-engineering-from-scratch --agent claude-code
Cursor
Cursor also loads subagents from .claude/agents, so copy this file there to use it in Cursor.
id: seven-surfaces-one-symptom-each title: Seven surfaces, and the symptom when each is missing card: agents kind: concept level: 1 roles: [agentic-ai-engineer, ai-developer-relations-engineer, forward-deployed-ai-engineer] rounds: [screen, ml-breadth] tags: [workbench, surfaces, harness, definition-of-done, system-of-record] minutes: 6 lessons: [phases/14-agent-engineering/31-agent-workbench-why-models-fail] manuals: [] practice: [] cheatsheet: [agent-harness, agent-workbench-ops] related: [agents/a-login-fix-touched-five-files] updated: 2026-11-03
A team ran a frontier model on a small repo task. The result had plausible code, two red tests, one edit in a file that had nothing to do with the task, and no note of what the model assumed or what remains. The team wants to buy a bigger model. What do you tell them?
The model was right about the language and wrong about the work, and a bigger model does not fix that. Reliable agents need a workbench with seven surfaces around the model: instructions, state, scope, feedback, verification, review and handoff. Each symptom in the run maps to one missing surface. You can swap the model and keep the surfaces, but you cannot drop the surfaces and keep the reliability.
| Surface | What it carries | Failure when it is missing | |---|---|---| | Instructions | Startup rules, forbidden actions, the definition of done | The agent guesses what done means | | State | Current task, touched files, blockers, next action | Every session starts from zero | | Scope | Allowed files, forbidden files, acceptance criteria | Edits spread into unrelated code | | Feedback | Real command output captured into the loop | The agent declares success on an error | | Verification | Tests, lint, smoke run, scope check | "Looks good" reaches the main branch | | Review | A second pass with a different role | The builder grades its own work | | Handoff | What changed, why, what is left | The next session finds everything again |
The loop closes on the state file, not on the chat history. Chat is volatile. The repo is the system of record. The lesson collects the receipts: one coding agent moved from outside the top 30 to rank five on a terminal benchmark with the same model and a changed harness, and one team deleted 80 percent of its agent's tools and saw the success rate go from 80 percent to 100 percent. The load today is carried by the engineering around the model.
It is not prompt engineering, which tells the model what you want this turn. It is not the framework, which gives you a runtime. The workbench is the place the agent works in, across turns and across sessions, inside whatever runtime you chose.
The [why capable models still fail lesson](../../../phases/14-agent-engineering/31-agent-workbench-why-models-fail/) names the seven surfaces and runs the same task with and without them.
At the end of each session your agent writes a paragraph that says what it did. The next session still spends its first half hour…
Read this part of the harness loop. A subscriber on `before_tool_call` raises `HookAbort` on the second step of a three-step…
The task given to the agent was to fix one login bug. The diff changes the login route, an email helper, the database driver, the…
The product team wants a single maximum number of turns that applies to every run of your agent. The agent handles one-line…
Read this run method from the toy agent loop. A caller shows the returned string to the user as the answer. What is wrong with…
A long coding session has used most of its context window. The runtime offers to summarize the older turns and keep going. Your…
Reviews the repository's shared Claude Code configuration (.claude/settings.json, CLAUDE.md, .claude/rules/, .mcp.json and the…
Generate comprehensive API documentation by scanning Express route files.
Advisor to a busy principal. Optimizes for the user's time, attention, and decision quality. One of the starter-kit council…