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:
-
Container app not running. The extension only launches when
QuintAgent.appis alive and has activated the tunnel. Bounce it: -
Extension was killed by macOS resource watchdog. Pre-v1.0.3 builds had a CPU hot-loop on
EAGAINthat got SIGKILL’d every ~90s. Check the fix is installed:If missing, upgrade. -
Code signature invalid. The extension needs a valid code signature. If
codeSigningIDis empty in a crash report,launchdwill SIGKILL the extension on startup. Always build viaxcodebuild -configuration Release, neverswift build+ ad-hoccodesign --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:
Two extensions active with different TeamIDs
Symptoms:- 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: AfterCtrl-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:
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:
Audit DB corruption
Symptoms: Daemon startup logsaudit 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:(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:~/.quint/dashboard-token (or /var/lib/quint/dashboard-token when installed as root).