Files
cc-ci-orchestrator/memory/orchestrator-backend-switch-gotcha.md

1.8 KiB

name, description, metadata
name description metadata
orchestrator-backend-switch-gotcha How to fully switch the cc-ci agent system between claude/opencode backends without the watchdog reverting it
node_type type originSessionId
memory feedback fc17c9c2-ab6e-4c11-856e-a6a6e160a0ec

Switching the cc-ci agents between claude and opencode backends is NOT just editing the .loop-*/.orch-model files: env overrides files in launch.py/launch-orchestrator.py, and the running watchdog (launch.py watchdog) carries LOOP_BACKEND/LOOP_MODEL/ADV_MODEL in its OWN environment. Its heal_orchestrator() kills any orchestrator whose backend ≠ the watchdog's expected backend and relaunches it — so a half-switch gets auto-reverted within ~30s.

Why: the watchdog is a long-lived process; it read its env at launch and re-applies it every tick.

How to apply (full switch): (1) kill the watchdog session FIRST (tmux kill-session -t cc-ci-watchdog) so it stops healing; (2) rewrite ALL control files coherently — .loop-backend, .orch-model, .loop-model, .loop-model-adv, and any per-phase .loop-model[-adv]-<phase> that held opencode provider/model values (claude crashes on --model openai/gpt-5.4); (3) stop opencode (tmux sessions cc-ci-orchestrator/adv/builder + the opencode serve server on :4096 + orphan attach clients — note the -oc alt-session may be root-owned, needs sudo); (4) start the claude orchestrator via cc-ci-plan/launch-orchestrator.sh start; it runs its startup routine and relaunches loops+watchdog on claude. Gotchas: pkill -f opencode/pkill -f "launch.py watchdog" match your OWN command line and kill your shell — kill by exact PID or tmux kill-session instead. The launch-system-unification rework removes this footgun (config is the sole source of truth).