Privacy Policy
May 10, 2026 ยท View on GitHub
Last updated: May 10, 2026
Overview
Epoch is a local-first time estimation tool. All estimation data, feedback records, and configuration are stored on your machine in the ~/.epoch/ directory. Epoch does not phone home by default, and no data leaves your machine unless you explicitly opt in to anonymous telemetry.
Data Controller
Kyanite Labs is the data controller only for telemetry data submitted to a Kyanite Labs-operated telemetry endpoint. If you self-host or configure a third-party endpoint, that endpoint operator controls its own receiver-side handling.
Local Data Storage
All data is stored locally in ~/.epoch/ and never leaves your machine unless you take an explicit action to share it.
Files stored locally
| File | Purpose | Contains |
|---|---|---|
estimates.jsonl | Estimate records | Estimated hours, task type, complexity, tool used, estimate ID, source, notes, team ID |
feedback.jsonl | Actual hours recorded | Estimate ID, actual hours, timestamp, notes |
telemetry.jsonl | Anonymized telemetry payloads | Task type, complexity, tool name, estimated/actual hours, ratio, date (YYYY-MM-DD). Inputs are hashed before storage. |
config.json | User settings | Telemetry opt-in status, installation ID, endpoint URL |
Local data retention
Local data is retained indefinitely until you delete it. You can remove all local data at any time:
rm -rf ~/.epoch/
Individual data types can be cleared via CLI commands (see User Rights below).
Telemetry
Opt-in by default: OFF
Telemetry is disabled by default. No data is collected or transmitted unless you explicitly run:
epoch telemetry enable
The enable command displays an informed consent prompt showing exactly what data will be shared before asking for confirmation. You can preview the data at any time without enabling:
epoch telemetry preview
What is collected (when enabled)
When telemetry is enabled, the following anonymized fields are extracted from your local estimate/actual pairs:
| Field | Type | Example | Purpose |
|---|---|---|---|
task_type | string | "feature" | Category of work for statistical grouping |
complexity | number or null | 3 | Complexity rating (1-5), nullable |
tool | string | "pert_estimate" | Which Epoch tool generated the estimate |
estimated_hours | number | 8.5 | The original estimated hours |
actual_hours | number | 12.0 | The actual hours recorded |
ratio | number | 1.41 | actual_hours / estimated_hours |
date | string | "2026-05-01" | Date in YYYY-MM-DD format only (no time-of-day) |
What is NEVER collected
The following data is never collected, transmitted, or stored server-side:
- Project names
- Source code or code snippets
- Task descriptions or notes
- Team IDs
- Email addresses or names
- Company or organization information
- IP addresses (not logged server-side)
- Timestamps with time-of-day (only YYYY-MM-DD dates)
- File paths
- Any free-text field
Installation ID
A random UUID (installation_id) is generated when Epoch is first installed. This UUID:
- Cannot identify a person, company, or device
- Is used solely for deduplication (preventing the same record from being counted multiple times)
- Is stored locally in
~/.epoch/config.json - Can be regenerated by deleting the config file
Data transmission
When telemetry is enabled, data is:
- Extracted from local JSONL files
- Anonymized (all identifying fields stripped)
- Batched (max 100 records per submission, max 1 submission per hour)
- Signed with HMAC-SHA256 (proves data came from a real Epoch instance)
- Sent via HTTPS POST to an explicitly configured endpoint
Epoch does not ship with a built-in default telemetry receiver URL. Configure an endpoint with epoch telemetry set-endpoint, epoch telemetry enable --endpoint ..., epoch telemetry submit --endpoint ..., or EPOCH_TELEMETRY_ENDPOINT. You may use a Kyanite Labs-operated endpoint if one is provided, or self-host the telemetry receiver.
Server-side handling
When telemetry is submitted to a Kyanite Labs-operated endpoint, Kyanite Labs commits to the following server-side practices:
- No IP logging -- IP addresses are not recorded or stored
- No cross-correlation -- Telemetry data is not correlated with any other data source
- Aggregation after 90 days -- Raw telemetry records are aggregated into statistical summaries after 90 days
- Self-hostable -- The telemetry endpoint is a simple API; you can run your own
Self-hosted or third-party endpoints are governed by the operator of that endpoint.
HMAC signing
Each telemetry submission is signed with HMAC-SHA256 using the installation_id as the key. This allows the server to verify that data came from a real Epoch instance without revealing any identity information.
Community Data Contribution
Community data contribution is a manual process separate from telemetry. Users who want to contribute anonymized data to the public reference database can:
- Export their data via
epoch telemetry export - Submit a Pull Request to the Epoch GitHub repository
This process is documented in detail in CONTRIBUTING-data.md. All community data submissions are reviewed for PII before merging.
Legal Basis
| Data activity | Legal basis |
|---|---|
| Local data storage | Legitimate interest (tool functionality) |
| Telemetry transmission | Explicit opt-in consent |
| Community data contribution | Explicit consent (voluntary PR submission) |
User Rights
| Right | How to exercise it |
|---|---|
| Access -- Get a copy of your data | epoch telemetry export writes all anonymized data to a JSON file |
| Deletion -- Remove your data | epoch telemetry delete-data provides instructions. You may also rm -rf ~/.epoch/ to remove all local data. |
| Objection -- Stop data sharing | epoch telemetry disable opts out of all telemetry transmission |
| Preview -- See what would be shared | epoch telemetry preview shows exactly what would be sent, without sending it |
| Status -- Check current settings | epoch telemetry status shows whether telemetry is enabled and when data was last submitted |
Environment variable override
You can also disable telemetry via environment variable without modifying the config file:
EPOCH_TELEMETRY=0 # Disable telemetry regardless of config file setting
EPOCH_TELEMETRY=1 # Enable telemetry (still requires initial consent via CLI)
Third-Party Services
Epoch does not use any third-party analytics services, tracking pixels, advertising networks, or external data collection tools. No Google Analytics, no Mixpanel, no Segment, no Sentry error tracking with user data.
Data Retention Summary
| Data type | Retention | Location |
|---|---|---|
| Local estimate/feedback data | Until user deletes | ~/.epoch/ (local filesystem) |
| Anonymized telemetry records | 90 days raw, then aggregated for Kyanite Labs-operated endpoints; self-hosted retention is operator-defined | Explicitly configured endpoint |
| Aggregated statistics | Published publicly in open-source project | GitHub repository |
| Community-contributed data | Indefinite (open-source) | GitHub repository (anonymized) |
Contact
For privacy-related questions, concerns, or data requests:
- GitHub Issues: https://github.com/KyaniteLabs/Epoch/issues
- Repository: https://github.com/KyaniteLabs/Epoch
License
This project is licensed under the MIT License. See LICENSE for full terms.