Env-first debug · session hygiene · 30-min time-box · pre-exit checklist · the 7 lessons. Keep the estate calm.
Paste the output of the diagnostic snippet to see what's alive on your machine. Orphans flag amber/red. Baseline = your real Chrome + 1 set of MCP servers (no more, no less).
Every task is either a BUILD (bounded scope, clear deliverable) or an ENV (something worked yesterday, broke today). Different protocols. Pick one before you start.
When something worked yesterday and breaks today, walk these three questions before patching code.
Before closing Claude Code, tick these. Stops MCP leaks across sessions.
Five rules · the durable layer. Survives sessions. Every build / debug / cleanup reads these first.
When something worked yesterday and breaks today, verify the environment is the same BEFORE patching code. Three checks: (a) same processes running? (b) same MCP servers connected? (c) same files on disk? If yes, then patch. If no, restore environment first.
Before stopping any process, name what it provides. "node agent.mjs --server holds up: cockpit at :1618 + tool MCP for parent LLM." If you can't name it, ask. Don't kill.
If an agent (si-didy, sub-agent, etc.) starts inventing new file names instead of using the existing verb, that's the signal it lost context. Stop. Force the verb. Don't let it improvise harder.
Build problems are bounded. Environment debugging is unbounded. After 30 min, switch to the manual path (paste yourself · post yourself · ship via UI). Come back to the fix when the work is done.
Always /exit Claude Code · never close the window. Once daily, scan Task Manager for orphan node.exe with MCP names in command line when no Claude Code is running.
The lived debt behind the rules above. Read when you forget why the protocol exists.
Four hours patching the verb · all the while the load-bearing agent.mjs --server was dead. Yesterday's environment had it running. Today's didn't. Should have noticed in minute 5.
I killed processes without naming what they provided. Killed the pipe. Then improvised harder. Three rounds of this.
When si-didy started writing post-b5-2-linkedin.mjs, linkedin-post-b5-2.mjs · that was the loss-of-context signal. Should have force-stopped and routed back to the existing verb.
I ran long polls inline (150s blocking loops). Simon sent stop messages I couldn't see until each bash finished. Bad UX. Background-fire all long ops · cap inline loops at 30s.
FallFence: 7 min inline · live. B5.2: 4 hrs · still not posted. Builds are bounded. Env-debugging is unbounded · easy to chase symptoms forever. Time-box hard.
Closing Claude Code without /exit leaves child MCP processes alive. Over days = sidebar clog. Use /exit always.
Build-agents refuse woo-coded briefs (rightly). Include a verified anchor: URL that returns 200, file path on disk, commit SHA. Saves a hallucination and a wasted turn.
Persistent across reloads (IndexedDB). Builds a record of build-vs-env-vs-cleanup ratios over time.