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…
Take-home. Your team has the workbench surfaces as loose scripts, a shared document and some memory. Package them into one directory that a new repository can install with one command, and defend what you leave out. Bring the layout, the installer, the versioning rule and the
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: ship-a-workbench-pack title: Package the workbench so one command installs it anywhere card: agents kind: take-home level: 3 roles: [agentic-ai-engineer, ai-developer-relations-engineer, forward-deployed-ai-engineer] rounds: [take-home, design-review] tags: [workbench-pack, installer, versioning, schemas, idempotent] minutes: 45 lessons: [phases/14-agent-engineering/42-agent-workbench-capstone] manuals: [] practice: [] cheatsheet: [agent-workbench-ops, agent-harness] related: [agents/seven-surfaces-one-symptom-each, agents/rules-the-workbench-can-check] updated: 2026-11-03
Take-home. Your team has the workbench surfaces as loose scripts, a shared document and some memory. Package them into one directory that a new repository can install with one command, and defend what you leave out. Bring the layout, the installer, the versioning rule and the uninstall rule. We grade the second install as much as the first.
Ship a versioned directory with four parts: the docs that carry the rules and the rubric, the schemas that are the contract, the scripts that are the runtime, and a short installer. The installer refuses to install over an existing pack without a force flag, copies the pack, connects CI if a workflows directory exists, and prints the next steps. Running it twice gives the same result. Project tasks, vendor SDK calls and onboarding prose stay out, because the pack is the recipe and each install is a serving.
agent-workbench-pack/ AGENTS.md docs/ agent-rules.md reliability-policy.md handoff-protocol.md reviewer-rubric.md schemas/ agent_state.schema.json task_board.schema.json scope_contract.schema.json scripts/ init_agent.py run_with_feedback.py verify_agent.py generate_handoff.py bin/ install.sh README.md VERSION
In: the schemas, because they are the contract; the four scripts, because they are the runtime; the four docs, because they are the rules and the rubric.
Out: project-specific tasks, which belong on the target repository's board; vendor SDK calls, because the pack is framework-agnostic; onboarding prose, because the pack lives next to the team's onboarding and not inside it.
1. Refuse to install over an existing pack unless `--force` is passed. 2. Copy the pack into the target repository. 3. Connect CI if `.github/workflows/` exists. 4. Print the next steps: fill the board, set the acceptance commands, run the init script.
The installer also writes the pack version into the target repository, and emits symlinks so that every coding agent product reads the same root file. Forking the pack for one product is a failure mode.
`VERSION` is the contract. A schema change or a script change that needs a migration bumps the major. A docs-only change bumps the patch. The target's state file records which pack version it was initialized against, and a lint refuses to ship when the target's recorded version disagrees with the pack's. This is how package managers survive a decade of churn, and nothing about agents changes the rule.
The uninstaller removes the schemas, the scripts, the docs and the root file, and refuses to run when the state files have uncommitted changes. It never deletes the state file, the board or the outputs directory. State belongs to the user. The pack does not own it.
The [workbench capstone](../../../phases/14-agent-engineering/42-agent-workbench-capstone/) assembles the pack, the installer and the version rule.
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…