Status: DECIDED - No External Telemetry Last Updated: 2026-04-27
Symaira Vault does NOT use external error tracking services (Sentry, Datadog, Crashlytics, etc.) for the following reasons:
- Privacy-First: As a password manager, Symaira Vault handles highly sensitive data. External telemetry services create unacceptable data exposure risks.
- Secret Safety: Even with redaction, error reports from a password manager could inadvertently leak sensitive patterns.
- GDPR Compliance: External telemetry would require explicit user consent and data processing agreements.
- User Trust: Password manager users expect minimal network activity and no data exfiltration.
The following audit, diagnostic, and redaction capabilities are already implemented:
Symaira Vault maintains comprehensive audit logs for MCP operations:
| Feature | Implementation | Location |
|---|---|---|
| JSONL audit logs | Per-agent log files | ~/.symvault/audit-<agent>.log |
| Log rotation | By size (100MB) and age (30 days) | Automatic on write |
| Retention policy | Configurable backup count | Default: 5 backups |
| Health monitoring | HealthCheck() function |
internal/audit/audit.go |
| Error retrieval | GetErrors() function |
Returns redacted error entries |
| Thread safety | Mutex-protected writes | Safe for concurrent use |
Configuration via Environment Variables:
| Variable | Default | Description |
|---|---|---|
SYMVAULT_AUDIT_MAX_SIZE_MB |
100 | Max log file size before rotation |
SYMVAULT_AUDIT_MAX_BACKUPS |
5 | Number of rotated backups to retain |
SYMVAULT_AUDIT_MAX_AGE_DAYS |
30 | Max age of rotated files before deletion |
Audit Log Content:
- Only action metadata (agent, action, path, field, transport, success/failure)
- No field values or secrets ever logged
- Duration, timestamp, and error reasons (redacted)
See also:
audit-schema.md— Stable audit event schema and action referenceaudit-retention.md— Retention configuration, key rotation, integrity verificationSECURITY.md§ Audit Logs for privacy detailsinternal/audit/audit.gofor implementation
Field-level redaction is implemented for MCP agent responses:
| Redaction Feature | Implementation | Usage |
|---|---|---|
| Agent field redaction | redactFields config |
~/.symvault/config.yaml |
| Token redaction in config | environment token reference | symvault agent install <agent> --http --config-only |
| Wildcard patterns | * and prefix.* |
Redact all or nested fields |
Example Agent Configuration:
agents:
readonly-agent:
allowedPaths: ["*"]
canWrite: false
redactFields: ["totp.secret", "password"]When totp.secret is redacted, the agent receives [REDACTED] instead of the actual TOTP seed. The generate_totp tool continues to work normally.
See also:
SECURITY.md§ Field Redaction for Sensitive Datainternal/mcp/server.go§redactEntry(),redactValue()
Operational diagnostic capabilities exist:
| Resource | Purpose | Location |
|---|---|---|
| Troubleshooting guide | Common issues and fixes | docs/troubleshooting.md |
| Operational runbook | Incident response, token rotation | docs/runbook.md |
| MCP API docs | Error handling, rate limiting | docs/mcp-api.md |
| Security policy | Privacy, telemetry, audit info | SECURITY.md |
| Basic diagnostics | Version, list, unlock | symvault --version, symvault list, symvault unlock |
| Code | Category | Description |
|---|---|---|
| 0 | Success | Operation completed successfully |
| 1 | General Error | Unclassified error |
| 2 | Vault Error | Vault file corruption, missing identity, etc. |
| 3 | Crypto Error | Encryption/decryption failures, age errors |
| 4 | Config Error | Invalid configuration, missing config file |
| 5 | Keyring Error | OS keyring access failures |
| 6 | Git Error | Git operation failures |
| 7 | Network Error | HTTP/MCP network issues |
| 8 | Permission Error | File/directory permission issues |
| 9 | Validation Error | Input validation failures |
| 10 | MCP Error | MCP server or protocol errors |
| 11 | Audit Error | Audit logging failures |
Error: failed to decrypt entry
Category: crypto_error (exit code 3)
Suggestion: This may indicate vault corruption. Check vault permissions and try listing entries.
MCP errors include sanitized error data:
{
"error": {
"code": "CRYPTO_ERROR",
"message": "decryption failed",
"category": 3,
"suggestion": "Check vault permissions and verify entry files exist"
}
}The following capabilities are NOT YET IMPLEMENTED but identified for future work:
A CLI command to gather diagnostic information for issue reporting:
# Hypothetical future command
symvault diagnostics --bundlePurpose: Collect version info, config (sanitized), audit error summary, and environment details into a shareable bundle.
Gap: Users must currently gather diagnostics manually (see "Manual Diagnostics" below).
A utility to redact sensitive data from arbitrary error outputs:
# Hypothetical future command
symvault diagnostics --redact < raw-output.logPurpose: Apply redaction rules (field values, paths, tokens) to any text intended for sharing.
Gap: Current redaction only applies to:
- MCP
get_entryresponses (viaredactFields) - Token display in
mcp-config --redact
There is no general-purpose error report redaction tool.
A command to export audit logs with filtering/redaction:
# Hypothetical future commands
symvault audit export --since 2026-04-01 --redact-paths
symvault audit errors --limit 50Purpose: Export audit data for analysis while applying redaction rules.
Gap: Audit logs are currently only accessible by reading the JSONL files directly or using the GetErrors() API internally.
Until the above features are implemented, users can gather diagnostics manually:
# Basic diagnostics
symvault --version
symvault list
# Check vault permissions
ls -la ~/.symvault/
ls -la ~/.symvault/entries/
# Check config (review for secrets before sharing)
cat ~/.symvault/config.yaml
# Check audit log health (via health endpoint)
curl -s http://127.0.0.1:8080/healthWhen reporting issues, include:
- Symaira Vault version and Go version
- OS/platform information
- Error message and exit code
- Steps to reproduce
When the error bundle/export features are implemented, they MUST apply these redaction rules:
| Data Type | Redaction Rule |
|---|---|
| Field values | Replaced with [REDACTED] |
| Entry paths | Only parent directories exposed, entry names redacted |
| Field names | Normalized to generic names (e.g., field.0, field.1) |
| Header values | All headers redacted except content-type |
| Tokens/secrets | Always redacted, never exported |
| File contents | Never included in error reports |
| Capability | Status | Reference |
|---|---|---|
| Error category enum | ✅ Implemented | Exit codes table above |
| Exit codes | ✅ Implemented | Exit codes table above |
| MCP error response format | ✅ Implemented | MCP Error Responses section above |
| Audit logging system | ✅ Implemented | internal/audit/, SECURITY.md |
| Log rotation | ✅ Implemented | internal/audit/audit.go |
| Log retention | ✅ Implemented | internal/audit/audit.go |
| Field redaction (MCP) | ✅ Implemented | SECURITY.md, internal/mcp/server.go |
| Token redaction (config) | ✅ Implemented | SECURITY.md |
| Troubleshooting docs | ✅ Implemented | docs/troubleshooting.md, docs/runbook.md |
| Local error bundle command | ❌ Future | Manual diagnostics only |
| Redaction utilities for error reports | ❌ Future | Partial: MCP redaction only |
| Audit log export with redaction | ❌ Future | Read JSONL files directly |
SECURITY.md- Privacy policy, audit log details, redaction configurationdocs/troubleshooting.md- Common issues and diagnostic stepsdocs/runbook.md- Operational procedures, incident responsedocs/mcp-api.md- MCP error handling, rate limitinginternal/audit/audit.go- Audit logging implementation