Skip to main content

Troubleshooting

Issues that come up operating Quint on macOS, ordered roughly by how often they bite.

NE extension not running

Symptoms: /debug/flows shows 0 intercepted flows despite traffic to known LLM hosts. ps aux | grep QuintNetworkExtension returns empty. Check:
Common causes:
  1. Container app not running. The extension only launches when QuintAgent.app is alive and has activated the tunnel. Bounce it:
  2. Extension was killed by macOS resource watchdog. Pre-v1.0.3 builds had a CPU hot-loop on EAGAIN that got SIGKILL’d every ~90s. Check the fix is installed:
    If missing, upgrade.
  3. Code signature invalid. The extension needs a valid code signature. If codeSigningID is empty in a crash report, launchd will SIGKILL the extension on startup. Always build via xcodebuild -configuration Release, never swift build + ad-hoc codesign --force --sign -.

Stale extension bundles stacking up

Symptoms: systemextensionsctl list shows 5+ entries all marked [terminated waiting to uninstall on reboot]. Multiple activated enabled entries with different TeamIDs. Why: macOS doesn’t actually uninstall extensions until reboot. Development cycles that rebuild + reinstall the .app stack up bundles on disk under /Library/SystemExtensions/<UUID>/. Fix:
After reboot, confirm you have exactly one active per type:

Two extensions active with different TeamIDs

Symptoms:
The - TeamID means ad-hoc signed (no real code signing identity). macOS treats it as a different extension from the signed one and allows both to activate simultaneously. Both receive kernel events and both emit to the daemon — you’ll see duplicate events. Fix: never use swift build + codesign --force --sign - for extension installs. Only use xcodebuild -configuration Release clean build. Then reboot to clear the ad-hoc leftover.

Daemon restart killed NE’s connection

Symptoms: After Ctrl-C’ing the daemon and restarting, NE process is still alive but traffic isn’t being intercepted. Daemon log shows no relay: / flow START lines. Why: Before v1.0.3, NE had a tight EAGAIN retry loop — when the daemon socket broke, NE burned CPU until macOS killed it. The CPU fix makes NE survive this cleanly, but the socket still needs to reconnect. Fix: bounce the app to force NE to re-establish:
A future release will make NE reconnect automatically on daemon restart.

Claude Code hangs mid-response

Symptoms: Response starts streaming, displays fully, then spinner hangs (“Philosophising…” or similar). Next turn also stalls. Why (pre-v1.0.3): The MITM pipeline wasn’t emitting chunked framing on SSE responses. On a keep-alive connection, the client had no way to learn the response ended — it just sat waiting. Fix: upgrade to v1.0.3. Verify /debug/flows shows no stuck flows on Bedrock/Anthropic hosts.

Forwarder overflowing to disk

Symptoms: ls -lh ~/.quint/forwarder-overflow.jsonl shows a growing file. Daemon log: forwarder: overflow N events to disk after 5 retries. Why: The cloud API is unreachable. Either QUINT_API_URL is wrong, the deploy token is invalid, or the network is down. Check:
The daemon auto-recovers the overflow file on next successful flush. No action needed beyond restoring reachability.

Audit DB corruption

Symptoms: Daemon startup logs audit db integrity check: …, DB file renamed to quint.db.corrupt-<timestamp>. Why: Unclean shutdown during heavy writes, filesystem errors, or disk full. Fix: the daemon auto-moves the corrupt file aside and creates a fresh DB on next startup. Historical audit data from the corrupt file can be recovered offline with sqlite3 quint.db.corrupt-* .recover | sqlite3 recovered.db if needed.

Finding a specific session

When you know an action happened but can’t find it in the viewer:
The viewer hides sessions that haven’t captured any events (opacity-dimmed). Ended sessions appear with (ended) tag sorted by most-recent activity — scroll up, they’re at the top.

Ring buffer logs

For anything not captured above, the daemon keeps a 1000-entry ring buffer of its most recent log lines:
And live flow state:
Both require the dashboard token from ~/.quint/dashboard-token (or /var/lib/quint/dashboard-token when installed as root).