Troubleshooting
Start with alc doctor. It reports every agent binary, credential status,
provider profiles with a per-agent compatibility column, the resolved defaults,
and the Codex login state.
'claude' is not installed or not on PATH
alc launches agents that already exist. Install the agent, or point alc at a binary with the override variables.
provider '…' cannot be used with claude; Claude Code needs Anthropic Messages
That profile speaks a protocol Claude Code cannot use. Pick an
Anthropic-compatible endpoint, or use alc --codex claude. Provider compatibility has
the matrix.
provider '…' has no API key
Save one with alc config key <profile>, or set the variable named in the
profile's api_key_env.
Codex credentials were not found
Run codex login, then retry. alc usage shows which logins are
current.
API Error: Request timed out (or 500) with an Ollama profile
The model did not get through Claude Code's 25k–40k-token first request before
it gave up. alc sets API_FORCE_IDLE_TIMEOUT=0 and API_TIMEOUT_MS=1800000
for Ollama profiles so it waits; retries resume from Ollama's prompt cache, so
the session usually starts on the second attempt either way.
To make the first turn quick rather than merely survivable, see Local
models. Check the Ollama section of alc doctor first:
the model must be pulled, able to call tools, and have at least a 64k context.
404 model 'claude-…' not found from Ollama
Claude Code asked the server for one of its own model IDs, usually through the
haiku alias it uses for background work. alc pins every alias to the
profile's model for Ollama profiles; set the profile's small_model to a model
you have actually pulled.
The model list looks out of date
The catalog syncs from your ChatGPT account once a day, and again as soon as Codex is upgraded. Sync it now:
alc models --refresh
alc models says where the list it printed came from. A line reading
fallback: means the account could not be asked and the installed Codex CLI
answered instead — an older Codex is shown fewer models than your account can
actually drive, so that is the line to read first. A model marked as coming
from the catalog alc ships is one the answering source did not report and alc
put back: the models alc bundles are a floor, so a source that answers short
costs freshness and never a model.
the model may not exist or you may not have access to it
Two things cause this.
A GPT model left in Claude Code's settings. The model a session settles on
is saved to ~/.claude/settings.json as your default for new sessions, and a
plain claude afterwards has no adapter in front of it. alc puts that key back
when a bridged session exits, so one you still find is a leftover from a
session that was killed outright or a value set by hand.
alc doctor # names the file and the line when it finds one
alc --codex claude # clears it on exit; alc passes the model itself
A hub still running an older build. A hub outlives terminals by design, so
it also outlives an upgrade, and alc refuses to hand a bridged session to a hub
of another version. alc doctor names one that is behind:
alc hub stop
Your apiKeyHelper script is failing
Claude Code says this when alc claude-credential — the helper named in the
settings file alc wrote — exits without printing a credential. Four things stop
it:
- No Codex login. Run
codex loginand retry. - A key only one shell knew. A profile whose key lives in an environment
variable is readable by the sessions started from that shell and by nothing
else, so a background session started later asks and gets nothing. Save it
with
alc config key <profile>. - The bridge will not start.
alc bridge serveruns it in this terminal and prints why it would not come up. - A route that is gone. The bridge's record of that Codex profile was
removed; one
alc --codex claudewrites it again.
alc doctor reports the login, the saved keys and the bridge in one pass. The
helper never falls back to your Claude login: a session alc set up either
reaches the provider you asked for or says it could not.
A background session cannot connect after the bridge moved
The bridge keeps the port it picked, but it can lose it — another program takes the port while the bridge is down, and the bridge comes back on a new one. Sessions still running against the old port find nothing there. Restart them and they pick the new port up:
claude respawn <id>
claude respawn --all
Sessions I dispatched answer from Anthropic, not Codex
Agent view belongs to the Claude Code you opened it from. Dispatch from a plain
claude agents and you get plain Claude Code sessions on your Anthropic login,
whatever alc is doing in another terminal. Open agent view through alc instead:
alc --codex claude agents
Those sessions carry the settings file alc wrote, and keep it every time Claude Code restarts them. Background sessions has the rest.
Two notices on every Codex run
Every print-mode run on a Codex profile writes two lines to stderr: one saying
CLAUDE_CODE_DISABLE_1M_CONTEXT is set, but the 200K limit isn't enforced for <model>,
and one reading [claude-code:unrecognized_model]. Both are Claude Code telling
you it does not recognise the model id alc gave it, which is the point: the
model is a Codex model. They are diagnostics, not errors; the session is
working.
Two documented cures exist and alc uses neither. A modelOverrides entry would
make Claude Code treat the Codex id as a Claude model for context budgeting,
undoing the real Codex window alc passes it as
CLAUDE_CODE_MAX_CONTEXT_TOKENS. CLAUDE_CODE_AUTO_COMPACT_WINDOW would
silence the first line by pinning the session to 200K, and then the status
line's percentage stops meaning anything.
/model says ANTHROPIC_MODEL overrides my choice
Picking a model in an alc session answers with two lines, the second of them a warning:
Set model to GPT-6-Astra and saved as your default for new sessions
ANTHROPIC_MODEL is set to GPT-5.6-Sol — new sessions use that while it is set
Both are true. Your pick applies to the session you are in, and alc pins the
model for every session it starts, so a later alc --codex claude starts on
alc's model again rather than the one you chose. Change what alc starts on:
alc --codex claude --model gpt-6-astra
alc --codex claude --model gpt-6-astra --save
Watching a background session from a script
claude agents --json --all carries both state and status, and the one
that says whether the work finished is state: working becomes done.
status only goes busy to idle.
A conversation you sent to the background with ← ends at state: "blocked" —
"Needs input" on the card — rather than done, because it is a live session
waiting for your next turn.
alc update cannot find the release archive
An installation from before 1.4.0 looks for a second binary that no longer ships. Run the installer again; it replaces the whole installation.
I cannot find the sharing setting in alc config
It is the third screen — Tab, Shift+Tab or the number key moves between
1 Providers, 2 Agent defaults and 3 Sharing & remote. Share-by-default,
the bind address and the permission ceiling are all there.
Outside the TUI, alc remote auto-share on sets the same thing and alc remote status reports it. A row reading on (inactive) means sharing itself is off:
run alc remote on.
--tmux on Windows finds no tmux, or the wrong one
On Windows, --tmux needs the native Windows port of tmux. Install it, then
open a new terminal so PATH picks it up:
winget install arndawg.tmux-windows
psmux also installs a tmux.exe, but alc cannot drive it — it cannot run the
command sequence alc creates a session with. The two can be installed side by
side; alc looks past psmux on PATH for the native port. MSYS2, Cygwin and WSL
builds of tmux are not used on Windows either. The tmux row of alc doctor
says whether the native port was found. If you would rather not install it,
drop --tmux; remote control works without it.
alc is installed at …, and tmux for Windows cannot start a program whose path is not plain ASCII
The Windows port of tmux passes command lines through the ANSI code page, so it
cannot start alc from a folder whose path is not plain ASCII. alc falls back to
the Windows 8.3 short path when there is one, but this drive has short names
turned off. Install alc under an ASCII path, or drop --tmux.
Only alc's own path is affected: non-ASCII project folders, arguments and
environment values work under --tmux.
Secrets in output
alc --dry-run redacts API keys and auth tokens, alc config show prints only
whether a profile has a key, and alc usage never prints a credential of any
kind.