Capture levels
| Category | Minimal | Standard | Full |
|---|---|---|---|
| Tool names | ✓ | ✓ | ✓ |
| Tokens (counts) | ✓ | ✓ | ✓ |
| USD spend | ✓ | ✓ | ✓ |
| Model name | ✓ | ✓ | ✓ |
| Outcome / duration | ✓ | ✓ | ✓ |
| Throughput / charts | ✓ | ✓ | ✓ |
| Bash commands | ✗ | ✓ scrub | ✓ raw |
| File paths | ✗ | ✓ scrub | ✓ raw |
| User prompts | ✗ | ✓ scrub | ✓ raw |
| Agent responses | ✗ | ✓ scrub | ✓ raw |
| Thinking blocks | ✗ | ✓ scrub | ✓ raw |
| Error messages | ✗ | ✓ scrub | ✓ raw |
| Git branch / remote / sha | ✗ | ✓ | ✓ |
| Cwd path | ✗ | ✓ | ✓ |
| API keys / secrets | n/a | ✗ scrubbed | ⚠️ raw |
How the filter runs
resolvePrivacyLevel()readsVOIGHT_PRIVACY(set insettings.jsonor env) and returnsminimal | standard | full. Defaults tofullfor SDK ≤0.3.10 (backwards compat).applyPrivacy(payload, level)transforms the event:full— passthrough; stampsmetadata.privacyLevel: 'full'minimal— rebuild from an allowlist of safe fields (tool name, tokens, outcome, duration); drop everything elsestandard— deep-walk every string and runscrubPii()over each
- Every event ships
metadata.privacyLevelso the dashboard can render a per-event chip — your audit trail that scrubbing happened.
voight-sdk/src/privacy.ts.
Picking your level
The setup wizard prompts you on install:~/.claude/settings.json under env.VOIGHT_PRIVACY.
Per-event audit chips
Each event in the dashboard carries a chip next to its kind tag:MIN— metadata-only captureSTD— full content + PII scrubbing appliedFULL— raw capture
Limitations
By design, the privacy model does not:- Prevent the operator from seeing data once transmitted. Standard mode scrubs PII on your machine, but the operator still receives whatever’s left. If that’s not acceptable, pick Minimal.
- Encrypt event content end-to-end. Transport is TLS; storage is plaintext in Postgres. E2E with user-managed keys is on the v0.2 roadmap (
Umbraintegration). - Enforce server-side quotas. Pricing tier limits are advisory today; enforced server-side starting v1.0 when Stripe billing lands.
Backwards compatibility
SDK ≤0.3.10 defaults to Full (original behaviour). No silent privacy upgrade — switching levels requires re-running setup explicitly. Done deliberately to avoid the trust-eroding “we just scrubbed your API key without telling you” scenario. Existingsettings.json files keep working unchanged. The VOIGHT_PRIVACY field is additive.
Next
- PII patterns — the 12 patterns and Luhn-validated card detection used by Standard
- Data handling — where data lives, who can access it, retention, deletion