Three linked improvements the operator asked for after seeing 'error' rows
with no explanation for why Cerebras (and others) were failing:
1. Failure visibility — dispatch log now captures http_status and a 400-char
error_preview on non-2xx generate_new responses. getStats surfaces a
per-agent last_error {ts, outcome, http_status, error_preview} block.
The UI shows this inline under the state pill (truncated + full text on
hover). Previously exit=1 rows had no diagnostic — this was the root
cause of "cerebras just fails, why?" ambiguity.
2. Kill switch — new per-row toggle in the UI writes state[id].enabled to
state.json. pickAgents hides disabled entries from both pick + dispatch,
regardless of state. Use case: Claude Enterprise present but not to be
spent on pool work; or a model that keeps 400-ing on your account.
3. In-UI add-model form — same schema as 'external-agents add-model',
POST /api/add_model writes to ~/.local/state/external-agents/agents.local.yaml
and hot-reloads the registry so the new row appears without restart.
The old "Suggest to GitHub" form is preserved below for provider requests
we should bundle for everyone.
Toggle bugfix: writeState({[id]: {enabled}}) shallow-merged and wiped
state/note/checked; the endpoint now deep-merges to keep probe results
intact.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>