Files
coder/docs/ai-coder/agents/platform-controls/chat-debug-logging.md
T
Matt VollmerandNick Vigilante 75e0790cd7 docs: remove beta references from Coder Agents docs and manifest (#27939)
Removes all references to "beta" from the Coder Agents documentation
under `docs/ai-coder/agents/` and the corresponding `"state": ["beta"]`
entries in `docs/manifest.json`. Also updates screenshots, video, and
hero image, and regenerates the auto-generated feature-stages table.

**Beta reference removal:**
- `getting-started.md`: Removed "Coder Agents is in Beta" from the top
note, "is in beta" from the Chats API note, and "during Beta" from the
feedback section. Removed the version/stability note pinning 2.33.1.
- `index.md`: Removed the "Product status" section that stated Coder
Agents is in Beta.
- `manifest.json`: Removed `"state": ["beta"]` from 17 entries for pages
under `docs/ai-coder/agents/`. Preserved all `premium` and `early
access` states.
- `feature-stages.md`: Regenerated the auto-generated beta features
table, which no longer lists Coder Agents.

**Asset updates:**
- `coder-agents-ui.mp4`: Updated demo video on the agents landing page.
- `llm-providers.png`: Updated LLM provider support screenshot.
- `models-list.png`: Updated models list screenshot.
- `models-add-model.png`: Updated add model form screenshot.
- `agents-hero-image.png`: Updated hero image on the `docs/ai-coder`
landing page.

Two references in `models.md` (`v1beta` in the Google Gemini API URL and
`anthropic-beta` in the Anthropic header name) were left unchanged as
they are provider API identifiers, not product status labels.

PR generated with Coder Agents

---------

Co-authored-by: Nick Vigilante <nickvigilante@users.noreply.github.com>
2026-08-11 08:57:57 -04:00

4.2 KiB

Chat debug logging

Records a detailed trace of each chat turn for troubleshooting: the normalized request sent to the LLM provider, the full response, token usage, retry attempts, and errors.

Off by default. Three layers control whether it runs for a given chat:

  1. Deployment override. Setting CODER_CHAT_DEBUG_LOGGING_ENABLED=true (or --chat-debug-logging-enabled at server start) forces debug logging on for every chat. The runtime admin and user toggles become read-only.
  2. Runtime admin gate. With the deployment override unset, the Let users record chat debug logs toggle decides whether users can opt in. Configure it under AI Settings > Lifecycle, or at GET/PUT /api/v2/chats/config/debug-logging.
  3. Per-user toggle. Users with the admin gate enabled can turn debug logging on for their own chats from Agents > Settings > General under Record debug logs for my chats. The endpoint PUT /api/v2/chats/config/user-debug-logging returns 409 Conflict if the deployment override is active and 403 Forbidden if the admin has not enabled user opt-in.

Important

Debug logs may contain sensitive content from prompts, responses, tool calls, and errors. Treat them with the same care as conversation history. Only the chat owner (or a user with read access to the chat) can fetch a chat's debug runs through the API. Administrators do not get blanket access to all users' debug data.

When debug logging is active for a chat, a Debug tab appears in the right panel of the Agents page (alongside Git, Terminal, and Desktop) for that chat's owner. The tab lists recent debug runs and lets you expand a run into its per-step request, response, token usage, retry attempts, errors, and policy metadata.

Export debug logs

You can export the same captured debug data from the UI:

  1. Navigate to Agents.
  2. Open a chat with debug logging enabled.
  3. Open the Debug tab in the right panel.
  4. Click Export debug logs to download the chat's recent debug runs as JSON, or expand a run and click Export this run to download one run.

The chat-level export includes the full run detail for the runs returned by the debug run list endpoint. The current list endpoint returns up to 100 of the newest runs.

API access

The same data is available through the API:

  • GET /api/v2/chats/{chat}/debug/runs lists the most recent runs for a chat (up to 100, newest first).
  • GET /api/v2/chats/{chat}/debug/runs/{debugRun} returns a single run with all of its steps, including normalized request and response bodies.

Fetch a single run and save it as JSON:

export CODER_URL="https://coder.example.com"
export CODER_SESSION_TOKEN="$(coder login token)"
export CHAT_ID="00000000-0000-0000-0000-000000000000"
export RUN_ID="11111111-1111-1111-1111-111111111111"

curl -fsS \
  -H "Coder-Session-Token: $CODER_SESSION_TOKEN" \
  "$CODER_URL/api/v2/chats/$CHAT_ID/debug/runs/$RUN_ID" \
  | jq . > "coder-agents-debug-run-$RUN_ID.json"

Fetch every run returned by the list endpoint and save a chat-level export. Using the same CODER_URL, CODER_SESSION_TOKEN, and CHAT_ID variables from above:

RUN_IDS=$(curl -fsS \
  -H "Coder-Session-Token: $CODER_SESSION_TOKEN" \
  "$CODER_URL/api/v2/chats/$CHAT_ID/debug/runs" \
  | jq -r '.[].id') || {
  echo "Failed to list debug runs" >&2
  exit 1
}

RUN_EXPORTS=$(mktemp)
trap 'rm -f "$RUN_EXPORTS"' EXIT

for RUN_ID in $RUN_IDS; do
  curl -fsS \
    -H "Coder-Session-Token: $CODER_SESSION_TOKEN" \
    "$CODER_URL/api/v2/chats/$CHAT_ID/debug/runs/$RUN_ID" \
    >> "$RUN_EXPORTS" || {
      echo "Failed to fetch debug run $RUN_ID" >&2
      exit 1
    }
  echo >> "$RUN_EXPORTS"
done

jq -s \
  --arg chat_id "$CHAT_ID" \
  --arg exported_at "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
  '{
    version: 1,
    scope: "chat",
    exported_at: $exported_at,
    chat_id: $chat_id,
    run_count: length,
    limited_to_most_recent: 100,
    runs: .
  }' "$RUN_EXPORTS" > "coder-agents-debug-chat-$CHAT_ID.json"

Debug runs are stored alongside the chat and are removed when the parent conversation is deleted (manually, by retention, or by chat purge). See Data Retention for the conversation retention controls.