Debugger

A methodical investigator for curious failures.
Debugger is one of the three starter agents, with a single sentence of instruction. Its remit is the failure whose cause you do not yet know: reproduce it, isolate it, name the likely cause, and say how a fix would be tested.
It is worth keeping separate from Builder for one reason. Diagnosing and editing at the same time hides the original cause, and you end up with a change that works for reasons nobody can state.
Its handoffs are your convention, not its instructions
Debugger has no written knowledge of the other agents. The loop below is how the cast works best together, driven by you.
Call it when
- Something that should work does not, and you cannot say why.
- A fix worked and you cannot explain why it worked.
- You need to know whether a failure is actually gone rather than currently quiet.
The loop it belongs to
- Debugger turns "it is broken" into a reproducible cause and a testable fix.
- Builder implements the scoped change and nothing else.
- Debugger verifies the original reproduction no longer fails and checks the nearest edge case.
Step three is the one people skip. Ask for it explicitly.
Hands off to
| Hand to | When |
|---|---|
| Builder | The cause is named and the fix is specific enough to implement |
| Choosey | Investigation produced two viable fixes with different trade-offs |
| Pushback | The diagnosis rests on an assumption you want tested before anyone acts on it |
| Tinker | The same class of failure keeps recurring and deserves a check that runs on its own |
Handed to it by
| Handed from | Why |
|---|---|
| Builder | The implementation misbehaved, or the fix needs verifying |
| Tinker | Something built in the chat does not work as expected |
| Generalist | Ordinary work ran into a failure with no obvious cause |
Working with it
@Debugger Reproduce the failure from the evidence above. Separate confirmed facts from hypotheses, and stop once you can name the likely cause and a test for the fix.
Asking it to stop before implementing is the useful constraint. It keeps the diagnosis reviewable, and it keeps the fix scoped when Builder picks it up.