Files
cassady/docs/troubleshooting.md
T
owen b37bc677bd
CI / Build (push) Waiting to run
CI / Test (push) Waiting to run
Add ChatGPT Codex provider
2026-06-25 18:21:03 -05:00

8.2 KiB

Troubleshooting

Use cass check first for configuration problems. It validates files, provider/model references, and authentication availability.

Missing active API key

Symptom: cass check reports that an environment variable is not set, or chat startup says the API key is not available.

Likely cause: the active provider's api_key is an env reference such as "$OPENAI_API_KEY", but that variable is not set in the current shell.

Fix on macOS/Linux:

export OPENAI_API_KEY=...
cass check
cass

Fix in PowerShell:

$env:OPENAI_API_KEY = "..."
cass check
cass

Missing or expired ChatGPT Codex auth

Symptom: cass check reports Codex auth errors, or chat startup says provider authentication is not available for chatgpt-codex.

Likely cause: ChatGPT Codex is active but $CODEX_HOME/auth.json or ~/.codex/auth.json is missing, unreadable, lacks tokens.access_token, or contains an expired token.

Fix:

codex login
cass check
cass

You can also sign in with the Codex app if that is how your local Codex auth is managed. Cassady does not refresh or store ChatGPT/Codex tokens; it reads local Codex auth at check/request time and redacts secret values.

Invalid API key reference

Symptom: the key is not resolved the way you expect.

Likely cause: Cassady only treats strings that start with $ as environment references. It does not expand partial strings or ${NAME} syntax.

Fix:

{ "api_key": "$OPENAI_API_KEY" }

Provider URL unreachable

Symptom: setup model discovery fails or a turn reports a provider error.

Likely causes:

  • wrong base_url;
  • network or proxy problem;
  • provider outage;
  • provider requires a different OpenAI-compatible path;
  • for ChatGPT Codex, the private ChatGPT backend endpoint changed or the selected model is unavailable.

Fix: verify the base URL in providers.json, retry setup, or enter the model id manually if only /models discovery is failing. For ChatGPT Codex, verify that base_url is https://chatgpt.com/backend-api/codex/responses, rerun codex login, and try a current Codex model id.

/models discovery fails

Symptom: setup cannot fetch models.

Likely cause: some providers do not expose GET /models, require extra permissions, or return a non-standard shape.

Fix: choose retry if the failure is temporary; otherwise enter the model id manually. Then run cass check.

Unsupported or invalid model id

Symptom: chat starts but the provider rejects the model.

Likely cause: the model id in models.json or config.json is not valid for the provider.

Fix: update the model id with cass setup, edit models.json, or launch with:

cass --model MODEL_ID

Then verify with a small prompt.

Rate limit or authentication errors

Symptom: the assistant says the provider returned an error.

Likely cause: provider-side authentication, quota, billing, or rate limit. For ChatGPT Codex, this can also mean your ChatGPT subscription/account does not have the requested Codex model available or the local Codex token needs to be refreshed by Codex.

Fix: confirm the API key, provider account status, selected model, and provider dashboard. For ChatGPT Codex, rerun codex login or open Codex to refresh local auth. Cassady forwards provider failures into the chat but cannot resolve account-level issues.

Invalid JSON or unknown config fields

Symptom: cass check reports a parsing or schema error for config.json, providers.json, or models.json.

Likely cause: invalid JSON, comments, trailing commas, misspelled fields, or a field in the wrong file.

Fix: remove comments/trailing commas, compare against Configuration, and run:

cass check

Workspace access denied

Symptom: tool output says a path escapes allowed roots or workspace-edit root.

Likely cause: the active mode is read-only or workspace-edit, and the path resolves outside the launch cwd or bundled docs.

Fix: start from the intended project directory, pass --cwd PATH, or intentionally use --full-access when broad filesystem access is needed.

Shell unavailable or waiting for approval

Symptom: shell is denied or Cassady asks for approval.

Rules:

  • read-only: shell is unavailable.
  • workspace-edit: shell requires approval.
  • full-access: shell is allowed by policy.

Fix: switch mode with Shift-Tab while idle or launch with the desired access flag.

Shell command failed or timed out

Symptom: shell result includes stderr, non-zero exit code, or timeout.

Likely cause: the command itself failed, the working directory is wrong, dependencies are missing, or the timeout was too short.

Fix: inspect stdout/stderr, verify cwd in /status, and ask Cassady to rerun the smallest relevant command.

Exact-text edit failed

Symptom: edit reports old_text not found, old_text is not unique, or overlapping edits.

Likely cause: the file changed, whitespace differs, line endings differ, or the replacement text is too broad.

Fix: ask Cassady to re-read the file and retry with a smaller unique old_text. For repeated blocks, include nearby unique context.

Binary, large, or unsupported files

Symptom: read/edit output is confusing or fails.

Likely cause: the file is binary, too large for useful display, or not valid UTF-8 for text edits.

Fix: ask Cassady to list metadata or use project-specific tools through approved shell commands. Avoid direct text edits on binary files.

CRLF or line-ending confusion

Symptom: exact-text edits fail even when the text appears to match.

Likely cause: Windows CRLF line endings or invisible whitespace differences.

Fix: re-read the exact target region and preserve the line endings in old_text, or use a smaller unique snippet.

Branch/restore file conflicts

Symptom: branch-plus-file restore reports conflicts or skips paths.

Likely cause: the file changed outside Cassady after the tracked write/edit, the file is unsupported for snapshots, or the change came from a shell command or manual editor rather than a Cassady file tool.

Fix: review the restore preview, inspect conflicted files manually, and rerun the menu with conversation-only branching if you only need to revisit the chat. Cassady will not overwrite unknown current content by default. Open the branch/restore menu again with double Esc or /branch to switch back to the original branch.

Update command problems

Symptom: cass update cannot complete.

Likely causes and fixes:

  • Network or GitHub API failure: retry later or verify proxy/firewall settings.
  • No matching prebuilt archive: use cass update --source if you have Rust installed, or download the release archive manually for a supported target.
  • SHA-256 mismatch: do not install the archive. Retry the update; if it repeats, check the GitHub release page before proceeding.
  • Missing Rust toolchain in source mode: install Rust/Cargo yourself, then rerun cass update --source. Cassady does not install Rust automatically.
  • Non-writable install directory: update through the original install method, move Cassady to a directory you own, or manually replace the binaries. Cassady does not run sudo for you.
  • PATH conflict: cass update updates the current executable directory. Run which cass / which cassady on macOS/Linux or Get-Command cass in PowerShell to confirm which binary your shell starts.
  • Windows replacement limitation: if Cassady reports that automatic replacement is unavailable, use the staged file paths it prints and copy them after the running process exits.

Useful checks:

cass update --check
cass update --dry-run
cass --version
cassady --version

Terminal rendering problems

Symptom: the UI appears garbled or keys do not behave as expected.

Likely cause: unsupported terminal features, redirected stdin/stdout, or platform-specific terminal behavior.

Fix: run Cassady in an interactive terminal. Use cass check for non-interactive validation. Windows runtime polish is planned for a later release.

Setup says it is interactive

Symptom: cass setup fails with setup is interactive; run cass setup in a terminal.

Likely cause: stdin is not a terminal.

Fix: run setup directly in a terminal, not through a non-interactive script or redirected input.