RationaleDocumentationTroubleshooting

Documentation

Troubleshooting

Diagnose provider coverage, MCP silence, stale links, and review state without guessing.

health says the provider is unavailable

Check that codebase-memory-mcp is installed and on PATH. Rationale still works, but symbol resolution and automatic bindings have lower coverage. Read the warning in the packet instead of treating unavailable as complete.

serve looks silent

That is expected when started manually: stdio waits for JSON-RPC traffic and keeps stdout clean. Send JSON messages per line. Do not add a banner, logging, or Chestie output to stdout.

A constraint is missing

Run rationale health, then inspect the Record’s severity, approval, bindings, and linkage. medium is visible; zero bindings is reported as unresolved. Use rationale doctor --check to find legacy Records with missing paths, invalid severity, dangling Subjects, or no approval.

The agent wants to simplify odd code

Ask it to call explain_target first. A strange branch may be a Chesterton fence whose reason is stored in an approved Record.

A proposal was captured twice

Do not delete one by hand. Review the pending proposals, compare their evidence and bindings, and reject or correct the duplicate through the interactive review path.

A GUI client reports the MCP server as unavailable

Cursor or a desktop app launched from the Dock reports rationale as unavailable, while Codex and a terminal Claude Code work fine.

The MCP configuration deliberately declares the logical command rationale rather than a personal absolute path, so the file can be committed and shared. That command only resolves if the client can see the directory holding the binary. On macOS, an application launched from the Dock inherits the launchd environment, not your shell’s, so ~/.local/bin — where the installer places the binary — is invisible to it.

install-agent warns about this and prints the remedy. Either launch the client from a terminal, or expose the binary where GUI applications can see it:

sudo ln -sf ~/.local/bin/rationale /usr/local/bin/rationale

Nothing in the project configuration needs to change.