What Metrics Are Collected?
Crush collects pseudonymous usage metadata to help maintainers understand how the tool is used and prioritize development efforts. This data is tied to a device-specific hash, not your personal identity.What IS Collected
Crush collects usage events such as:- Application lifecycle: When Crush starts and exits, session duration
- Feature usage: Sessions created, sessions deleted, sessions switched
- Prompt activity: When prompts are sent and received (timing and counts only)
- Token usage: Number of tokens consumed (for understanding usage patterns)
- System information: OS, architecture, terminal type, Crush version
- Error events: Error types and messages (to identify bugs)
What is NOT Collected
Crush never collects:- Prompt content: Your actual prompts or questions
- LLM responses: Any text generated by the AI
- Code content: Source code from your projects
- File names or paths: Specific files you’re working with
- API keys: Your provider credentials
- Personal information: Email, username, or identifying details
- Project details: Repository names, URLs, or business logic
Metrics are strictly usage metadata. Your code, prompts, and AI conversations remain completely private.
How Metrics Work
Device Identifier
Crush generates a pseudonymous device identifier using:- Machine ID (preferred): A stable, hashed identifier based on your machine
- MAC address hash (fallback): A hashed network adapter address
- Unknown (fallback): If neither can be determined
- Cannot be traced back to you personally
- Helps understand usage across multiple sessions
- Is stored locally and never transmitted with personal information
Data Transmission
Metrics are sent to Charm’s PostHog instance:- Endpoint:
https://data.charm.land - Protocol: HTTPS (encrypted)
- Frequency: Events are sent as they occur and batched when possible
- Timeout: Short timeout to avoid impacting performance
Viewing Collected Metrics
You can see exactly what Crush collects by reviewing the source code:- Event definitions:
internal/event/all.go - Event implementation:
internal/event/event.go - Agent events:
internal/llm/agent/event.go
How to Opt Out
You can disable metrics collection using any of these methods:Environment Variable: CRUSH_DISABLE_METRICS
Set theCRUSH_DISABLE_METRICS environment variable:
Environment Variable: DO_NOT_TRACK
Crush respects the DO_NOT_TRACK convention:Configuration File
Add thedisable_metrics option to your crush.json:
- Project-level:
.crush.jsonorcrush.jsonin your project root - User-level:
~/.config/crush/crush.json(Unix) or%LOCALAPPDATA%\crush\crush.json(Windows)
Verification
To verify metrics are disabled:- Enable debug logging:
crush --debug - Check the logs:
crush logs - Look for absence of “PostHog” or “metrics” entries
shouldEnableMetrics function in internal/cmd/root.go to see the exact logic.
Privacy Considerations
Local-First
Crush is designed with privacy in mind:- All your data (sessions, messages, files) stays on your local machine
- The SQLite database (
./.crush/crush.db) never leaves your device - Logs (
./.crush/logs/crush.log) are stored locally - Metrics are the only data sent to external servers
Provider Privacy
Your prompts and responses are sent to your configured LLM provider (OpenAI, Anthropic, etc.) according to their privacy policies. Crush itself does not intercept or store this data beyond your local session database. Review your provider’s privacy policy:Network Requests
Crush makes network requests to:- LLM providers: Your configured providers (OpenAI, Anthropic, etc.)
- Metrics endpoint:
https://data.charm.land(if metrics are enabled) - Provider updates: Checks for updated provider/model lists from Catwalk
Why Metrics Matter
Metrics help the Crush maintainers:- Understand usage patterns: Which features are most used?
- Identify bugs: What errors occur most frequently?
- Prioritize development: Where should we focus our efforts?
- Measure impact: How many people benefit from new features?
- Support decisions: Which platforms and configurations to prioritize?
Open Source Transparency
Crush is fully open source, which means:- You can audit the metrics code yourself
- You can verify no sensitive data is collected
- You can contribute improvements to privacy and metrics
- You can fork and modify the metrics behavior if needed
- Metrics initialization:
internal/event/event.go - Event definitions:
internal/event/all.go - Opt-out logic:
internal/cmd/root.go - Device identifier:
internal/event/identifier.go
Frequently Asked Questions
Does Crush send my code to Charm servers?
No. Your code stays on your machine and is only sent to your configured LLM provider (OpenAI, Anthropic, etc.). Charm does not receive your code.Can I use Crush completely offline?
Yes, with caveats:- You’ll need a local LLM provider (like Ollama or LM Studio)
- Disable metrics (
CRUSH_DISABLE_METRICS=1) - Disable provider auto-updates (
CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1)
What happens if metrics fail to send?
Nothing. Metrics are sent on a best-effort basis. If the network is unavailable or the endpoint is down, Crush continues working normally without any errors or delays.Can I see what metrics were sent?
Yes, enable debug logging:Does opting out affect functionality?
No. Disabling metrics has zero impact on Crush functionality. All features work exactly the same whether metrics are enabled or disabled.How long is metrics data retained?
Metrics are stored in Charm’s PostHog instance according to their data retention policy. Contact Charm for specific retention details.Summary
- Metrics are pseudonymous usage metadata only
- Your code and prompts are never collected
- You can opt out easily via environment variables or configuration
- Metrics help improve Crush for everyone
- Crush is open source so you can verify privacy claims