arcane-agents-debugginglisted
Install: claude install-skill thomasrice/arcane-agents
# Debugging Arcane Agents status detection
Use this skill when a worker's map status (working / idle / attention / error) disagrees with what its terminal is actually doing, or when statuses flap.
## How status is decided (30-second model)
Every poll (~2.5s), per worker: `statusMonitor` → `collectSignals` → `decide`.
- `src/server/status/collectSignals.ts` reads the tmux pane (command, pid, output capture) and resolves ONE runtime adapter per worker: definite match first (worker.runtimeId → pane command → wrapped agent process under a shell pane), then output-sniffing as a last resort. The adapter (`src/server/status/runtimes/{claude,codex,openCode,omp,generic}.ts`) owns capture size, freshness/spawn-grace windows, and a single-pass `detect(output) → {prompt, active, activityText}`. `omp` is oh-my-pi, an interpreter-hosted agent CLI with its own TUI (codex-shaped constants).
- Claude panes additionally get a transcript snapshot from `claudeTranscript/` (JSONL tailing; health = ok|absent|error; one transcript file belongs to at most one worker).
- `src/server/status/decide.ts` weighs the evidence. Key invariant since v1.3.0: **for agent runtimes, scrollback text is never working evidence** — only native signals are (adapter `active`, Claude task/progress, transcript-working, live child process). Generic shell workers keep parsed-activity evidence (a running build has nothing else).
The safety net is `src/server/status/statusDecision.integration.test.ts`: pane text + timin