Skip to content

Logs and diagnostics

The /logs page (System health in the app) merges container and host-side service logs into one stream, with a health bar above them, and lets you package that detail for a bug report.

Already know what is wrong? Go to Troubleshooting first. Come here for raw logs or a bundle to attach.

  1. Open /logs. The status bar shows an overall status (healthy or degraded) plus a colored dot and label for vm, containers, ide_bridge, and mcp_os.
  2. Click the overall status to expand a details row: each container’s name and status, plus the IDEs Speedwave detected with their ports.
  3. If Speedwave found an IDE you have not selected yet, the ide_bridge cell shows a connect → link into Integrations. See IDE Bridge for what the bridge does.
  4. Click refresh to force an update between the automatic 5-second ticks.
  1. Below the bar, the log view live-tails a merged stream, the last 500 lines by default. It re-fetches every 5 seconds and sticks to the bottom while scrolled.
  2. Use the level chips (all, debug, info, warn, error) to narrow what you see.
  3. Use the source dropdown to isolate one source, each listed with its line count.
  4. Hover a timestamp to see its raw value; the displayed time is your local timezone.

Speedwave logs at trace level, with no toggle, so a diagnostics export always carries the fullest context and you never need to reproduce a problem at higher verbosity first. A few noisy third-party libraries are capped at warn to keep the stream readable.

On desktop, these logs also live on disk: ~/Library/Logs/pl.speedwave.desktop on macOS, %LOCALAPPDATA%/pl.speedwave.desktop/logs on Windows. Files rotate at 50 MB, keeping the last 10 segments.

Set ANTHROPIC_LOG=debug to see raw Claude Code SDK traffic, and Speedwave collapses each verbose request or response into a one or two line summary tagged with a [log_ID], instead of dumping the raw multi-line output:

-> POST /v1/messages (model=claude-opus-4, max_tokens=4096, stream=true, messages=12) [a1b2c3]
<- 200 /v1/messages (content-type=text/event-stream, from api.anthropic.com, in 842ms) [a1b2c3]

The SDK emits each response in three fragments; Speedwave merges them into that one line. Anything it doesn’t recognize still passes through untouched.

The export diagnostics button packages app logs, container logs, and system info into a sanitized ZIP, no tokens or secrets included. It is disabled during an export and when no project is open.

  1. On /logs, click export diagnostics. The label changes to “exporting…” while Speedwave builds the archive.
  2. On success, a modal titled Diagnostics archive saved shows the ZIP’s path.
  3. Click copy path to copy it, then close.
  4. Share the bundle yourself, with support or attached to your bug report. Nothing uploads automatically.

The ZIP lands in your Downloads directory (falling back to your home directory), named speedwave-diagnostics-<unix-timestamp>.zip.

  • Directoryspeedwave-diagnostics-<timestamp>.zip
    • Directorylogs/
      • *.log app log files
    • Directorycontainers/
      • compose.log container and compose logs
      • compose.yml the project compose file
    • Directorymcp-os/
      • mcp-os.log if present
    • Directoryclaude/
      • claude-session.log if present
    • Directorylima/
      • serial.log Lima serial log, macOS only
    • system-info.txt OS, arch, app version, claude_pinned (pinned Claude Code version)

The single-file sources (mcp-os log, Claude session log, Lima serial.log macOS only) appear only when they exist.

Speedwave’s log sanitizer rewrites anything sensitive as ***REDACTED*** before writing the ZIP:

CategoryExamples
API keysAnthropic (sk-ant-...), Google (AIza...), generic sk-*
Git hosting tokensGitHub (ghp_, ghs_, gho_, ghu_, github_pat_), GitLab (glpat-), Atlassian Cloud
Chat tokensSlack (xoxb, xoxp, xoxa, xoxr, xoxs, xoxe)
Auth dataAuthorization/Bearer headers, Set-Cookie/Cookie, JWTs, URL userinfo credentials
OtherPEM private keys, home-directory usernames, password/secret/api_key/token params, X-Redmine-API-Key, OTEL exporter headers

A crash payload the sanitizer can’t parse as text collapses to unknown panic payload rather than risk leaking it. The tokens directory is never included in the ZIP. The exception is system-info.txt, written raw with OS, architecture, app version, and the pinned Claude Code version.

For a version mismatch, check claude_pinned in system-info.txt first. Speedwave pins this version itself, so a mismatch usually means your claude container needs a rebuild; see Troubleshooting for the fix.