◊

FallHarmony

operational cockpit · ◊·κ=1 · prime 601

Env-first debug · session hygiene · 30-min time-box · pre-exit checklist · the 7 lessons. Keep the estate calm.

R0 ● NOW · what's running

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).

PowerShell · paste, run, paste the JSON output back: @{ agentServers = @(Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Where-Object {$_.CommandLine -match 'agent\.mjs'} | Select-Object @{N='pid';E={$_.ProcessId}}, @{N='cmd';E={$_.CommandLine}}) mcpServers = @(Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Where-Object {$_.CommandLine -match 'onlybrains-mcp|fallcore-mcp|claude'} | Select-Object @{N='pid';E={$_.ProcessId}}, @{N='cmd';E={$_.CommandLine}}) playwright = @(Get-CimInstance Win32_Process -Filter "Name='chrome.exe'" | Where-Object {$_.ExecutablePath -match 'ms-playwright'} | Select-Object @{N='pid';E={$_.ProcessId}}) realChrome = (Get-Process chrome -ErrorAction SilentlyContinue | Where-Object {$_.MainWindowTitle -ne ''} | Measure-Object).Count port1618 = ((netstat -ano | Select-String ':1618.*LISTENING') | Measure-Object).Count zombieDirs = (Get-ChildItem "$env:LOCALAPPDATA\Temp\claude" -Directory -ErrorAction SilentlyContinue | Where-Object {$_.Name -like 'playwright_chromium*'} | Measure-Object).Count } | ConvertTo-Json -Depth 5 -Compress

R1 〜 CLASSIFY · before you start

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.

ENV time-box · do NOT exceed

30:00
When this hits 0, switch to the manual path. Come back to the fix later. Don't bonfire the budget.

R5 ◐ ENV-FIRST DIAGNOSTIC · is the environment really the same?

When something worked yesterday and breaks today, walk these three questions before patching code.

R6 ◯ PRE-EXIT CHECKLIST

Before closing Claude Code, tick these. Stops MCP leaks across sessions.

0 / 5 ticked · keep going

Ω OPERATIONAL PROTOCOL · the codified rules

Five rules · the durable layer. Survives sessions. Every build / debug / cleanup reads these first.

OP1 · ENV-FIRST DEBUG

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.

OP2 · NAME-BEFORE-KILL

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.

OP3 · IMPROVISATION = STOP-THE-LINE

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.

OP4 · 30-MIN TIME-BOX ON ENV DEBUGGING

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.

OP5 · SESSION HYGIENE

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.

R3 ♡ THE SEVEN LESSONS · from the 2026-06-02 forensic

The lived debt behind the rules above. Read when you forget why the protocol exists.

1 · Env-question comes BEFORE code-question B5.2 trap

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.

2 · Cleanup that breaks working state my-side

I killed processes without naming what they provided. Killed the pipe. Then improvised harder. Three rounds of this.

3 · Improvised scripts = lost context si-didy

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.

4 · Inline batching = unstoppable UX

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.

5 · Build vs env are different beasts classification

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.

6 · MCP server leak across sessions hygiene

Closing Claude Code without /exit leaves child MCP processes alive. Over days = sidebar clog. Use /exit always.

7 · Brief like a colleague who walked in cold briefing

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.

R4 △ SESSION LOG · what you classified today

Persistent across reloads (IndexedDB). Builds a record of build-vs-env-vs-cleanup ratios over time.

No classified tasks yet · pick a classification above to log