Thoughtbox-first Ulysses workflow for surprise-gated debugging. Use this when debugging gets uncertain and you need explicit plan, outcome, and reflection discipline without relying on local shell state.
Ulysses is a Thoughtbox-owned debugging protocol.
The invariants live in thoughtbox_ulysses.
The durable trace lives in Thoughtbox thoughts and knowledge.
Claude Code hooks only enforce the current server state.
Do not use .ulysses/ files or scripts/ulysses.sh as authoritative state.
thoughtbox_gateway { operation: "start_new", args: { task: "<debug task>", aspect: "ulysses-protocol" } }thoughtbox_gateway { operation: "cipher" }thoughtbox_ulysses for every protocol transition.S=2; read-only inspection remains allowed.reflect, but only the coordinator calls thoughtbox_ulysses.initRequired inputs:
Call:
thoughtbox_ulysses {
"operation": "init",
"problem": "<problem>",
"constraints": ["<optional constraint>"]
}
Then record a structured Thoughtbox thought summarizing the debugging context.
planRequired inputs:
irreversibleCall:
thoughtbox_ulysses {
"operation": "plan",
"primary": "<primary action>",
"recovery": "<recovery action>",
"irreversible": false
}
Do not act before plan is recorded.
outcomeRequired inputs:
expected, unexpected-favorable, or unexpected-unfavorableCall:
thoughtbox_ulysses {
"operation": "outcome",
"assessment": "unexpected-unfavorable",
"severity": 1,
"details": "<what happened>"
}
If the returned state reaches S=2, stop mutating work and move to reflect.
reflectRequired inputs:
Call:
thoughtbox_ulysses {
"operation": "reflect",
"hypothesis": "<hypothesis>",
"falsification": "<what would disprove it>"
}
After reflect, you may optionally launch debugger or researcher agents to test competing explanations. They return evidence only. The coordinator records the next plan or outcome.
statusCall:
thoughtbox_ulysses {
"operation": "status"
}
Use the returned server state as the only source of truth.
completeCall:
thoughtbox_ulysses {
"operation": "complete",
"terminalState": "resolved",
"summary": "<transferable learning>"
}
Completion should yield both protocol closure and a reusable knowledge artifact in Thoughtbox.
reflect is mandatory at S=2.Use subagents only after reflect when more evidence would help.
Good uses:
Bad uses:
thoughtbox_ulyssesthoughtbox_ulyssesthoughtbox_gatewaysrc/protocol/ulysses-tool.tsreferences/protocol-spec.md