Troubleshooting

Start with the visible symptom, then use the relevant check. AXLR prints startup errors to stderr; the console also prints its private diagnostics path on launch.

SymptomCheckNext action
axlr-tui rejects startupRun /tmp/axlr-tui --help and check OPENROUTER_API_KEY, --root, --lang and local_models in settings.jsonSupply a key through the host environment or configure a local model, use an existing workspace and en or es
No model is selectedOpen /model or pass --model provider/modelChoose a tool-capable text model available to the OpenRouter account
Model catalog failsInspect the error and use its Retry actionCheck connectivity, account access and key; --model can bypass catalog lookup for a known model
/plugin cannot add a sourceCheck that it is an absolute local path or an HTTPS Git URL containing a supported marketplace or package manifestFix the source and retry; AXLR stores packages in its own data directory
A server is unavailable in /mcpInspect its manifest path, executable or URL and the configured environmentRepair the server, then press R to refresh; a built-in catalogue entry alone does not connect it
MCP configuration is rejectedCheck that mcp.json is regular, private (0600), valid version 1 JSON and under 64 KiBCorrect the file and restart the console
An MCP call asks for approvalInspect the target, arguments and server policyApprove once, or deliberately set that persisted server to auto in /mcp
Local write/edit is refusedCheck the active mode/review refuses changes; writer/research permit documents only. Change to /normal between turns if the task requires it
Exec asks despite autonomy, or stdin is refusedReview/writer/research require a decision for every process and reject nonempty stdinPut reviewable arguments in the command; do not bypass the mode through another tool
/debug or /delivery cannot startVerify exact made ID, work grant and matching 2.0 definition digestFollow MADE preparation; 1.0 skill definitions do not satisfy the driver
Workflow completed but memory says not recordedInspect the connected kmp engine and exact session scopePreserve MADE evidence, repair KMP and explicitly record the outcome if needed
The agent's axlr_request_repair is refusedRead the reason in the tool result: project failure, arguments, permission, provider, isolated error, duplicate, attempts or a repair sessionResolve external causes directly; retry the operation once so the failure recurs; a merged repair for this build needs an updated console, not another request
A self-repair shows interrupted or blocked on /repairRead the record: step, pull request, clone, MADE instance and KMP reportr recovers an interrupted repair from what MADE and the forge recorded; a blocked one keeps its clone and pull request for a hand-made follow-up
/improve cannot startRead the error: a workspace that is not an improvement clone, or axlr_improve 1.0 not published in MADEStart it with axlr-tui --improve "<brief or #issue>"; after updating AXLR, publish the new definition with /mcp → P
The agent's axlr_request_improvement is refusedRead the reason in the tool result: fewer than two cited calls, a plugin, denied or cancelled call, an external cause, one already requested by this session, three already started by this build, a duplicate, another repair or improvement running, or a repair, improvement, plan or task sessionTell the user what would improve; the person can always start one with axlr-tui --improve "<brief>"
An improvement's brief keeps coming backThe console ran the check before any change and it exited zeroGive a check that fails until the criteria are met, or send feasible=false with the reason when the improvement already exists
A self-repair merged but the same failure continuesCheck the build in the footer note and in axlr_repair_statusThe running console does not contain the fix: press i on the /repair panel to install the repaired build (or run the candidate the panel names), or update AXLR, then restart
KMP returns unrelated context or no guideCheck the selected store and matching guide assetsFollow KMP verification before writing
A restored session is interruptedConfirm the workspace matches the saved sessionPress Ctrl+R to continue; AXLR does not run pending tools merely by loading it
Session is lockedAnother console may have the same session openClose the other writer or choose another session; do not delete the lock while it is active
No transcript text appears while waitingWatch the footer: it names the phase (waiting for the model, reasoning, preparing tools, running a tool) with its secondsReasoning, tool preparation and network waits have separate indicators; traces separate these timings
Active model context still exceeds its budgetCheck prompt, arguments and discovery schema sizes after automatic result compactionUse smaller source pages and a new scoped turn; full history remains saved
HTTP service is live but not readyInspect both adapter endpoints, TLS identities and discoveryUse service operations; readiness does not make a model completion
API revision or idempotency conflictReload the current resource and compare the original requestA changed decision needs a new key and the current revision; reconnecting SSE does not require a new turn
Worker exits 2Protocol JSON was malformed, oversized or contained unknown fieldsCompare the request with the worker contract
Worker exits 0 but tool failedInspect response status and error.codeA valid protocol request can produce failed, rejected or timed_out

Local models🔗

SymptomCheckNext action
no model provider: run axlr-tui setup, set OPENROUTER_API_KEY … or configure local_models in … at launchNeither an OpenRouter key (variable or credentials.json) nor a local model is configuredRun axlr-tui setup in a terminal, export OPENROUTER_API_KEY (keys at https://openrouter.ai/keys), or add local_models to the settings file the message names
…/credentials.json holds a key and must be a regular file readable only by youThe saved OpenRouter key's file is readable by other accountschmod 600 the file the message names, or delete it and run axlr-tui setup
/mcp lists no kmp or madeThe engines were never installed or the assistant's step was skippedRun /update in the console or axlr-tui setup, then restart; on other platforms follow the KMP and MADE runbooks
local model …: … API key is required (set NAME)The URL is not a loopback addressExport the variable named by api_key_env, or point url at 127.0.0.1
model endpoint must use https unless it is a loopback addressA non-loopback url uses httpServe it over TLS, or reach it through a loopback tunnel
model … is not a configured local model and OPENROUTER_API_KEY is not setThe session's model is an OpenRouter idExport the key or save one with axlr-tui setup, or choose a local model in /model
model endpoint HOST invalid_request (HTTP 400): MESSAGEThe server refused the request, often because its template does not declare tools; MESSAGE is what the server said, at most 300 characters with anything that looks like a key redacted, and the app log has it tooRun the smoke test below
OpenRouter invalid_request (HTTP 400): … is not a valid model IDThe session's model id is not one OpenRouter servesChoose another with /model
The model answers in text, or repeats the same callThe server's tool-call parser does not match the model's templateFix the server's parser or template; AXLR receives only what the server returns
The answer ends with raw markup such as `<tool_call>call:local_write{…}`The server's streaming parser leaked a tool call as text
… stream inactivity timeoutA cold prefill took longer than stream_idle_secondsRaise stream_idle_seconds or lower context_tokens
A long session is refused by the server for its context lengthcontext_tokens is larger than the server's windowSet context_tokens at or below the server's -c or --max-model-len

Smoke test for a server, which must return tool_calls with valid JSON, not text:

curl -s http://127.0.0.1:8080/v1/chat/completions -H 'content-type: application/json' -d '{"model":"MODEL","messages":[{"role":"user","content":"Read README.md"}],"tools":[{"type":"function","function":{"name":"local_read","description":"Read a workspace file.","parameters":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]}}}]}'

Jev🔗

SymptomCheckNext action
jev: TYPESAFE_API_KEY is required for Jevjev.tool or jev.final_check is onExport the key, or turn both switches off
axlr_judge returns TypeSafe rejected the API key (HTTP 401)The key in the console's environmentReplace the key; nothing else changes
An [AXLR · Jev] message appears after an answer that was completeJev doubted it below final_thresholdThe model can say why the answer is complete; lower final_threshold or turn final_check off if it happens often
The model asks axlr_judge an "A or B" question and gets only yesIt omitted optionsThe tool's description asks for options; a model that ignores it is a model limit, not a Jev one

Plans🔗

SymptomCheckNext action
/plan cannot startWhether MADE lacks axlr_plan, axlr_task or axlr_sync 1.0, as a store prepared before they were pinned doesPress P in /mcp again; it publishes axlr_plan, axlr_task and axlr_sync 1.0
The plan comes back with defects three times and ends BLOCKEDRead the defects on the plan's last hand-backGive a narrower brief, or let a larger model plan (plan.model)
A task ends BLOCKED with "the model did not use its tools"The worker's transcript (the task's session id is on the plans panel)Usually the server's tool-call parser: try "stream": false on the local model
A task ends BLOCKED asking for the person's approvalThe worker called a tool the approval policy keeps under a cardWorkers run without the person; allow that tool, or change the plan
A plan shows interruptedThe console stopped while it ranOpen /plan and press r; finished tasks are not run again

Inspect the right diagnostics🔗

The console's JSONL trace reports timing and failure classes without prompt content. Request and response bodies are saved only when you ask: launch with --trace-payloads (or set trace_payloads in settings) to reproduce a problem with them; they are redacted but can include conversation content and file contents. Queued messages appear as prompt_queued; steer_applied records one joining the running turn and steer_cancelled a workflow step stopped for one. Do not paste payload files into an issue without reviewing them.

The MCP diagnosis and payload audit are examples from a dated investigation, not current health checks.

For a reproducible code issue, run both module suites from a full checkout:

GOWORK=off go test ./...
GOWORK=off go -C tui test ./...

If a tool call was cancelled, timed out or lost its response, first inspect the target's state before retrying; the effect may have happened.

From docs/troubleshooting.md at 2d95f7e in underpass-ai/AXLR View on GitHub