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

FilePurposeContains
estimates.jsonlEstimate recordsEstimated hours, task type, complexity, tool used, estimate ID, source, notes, team ID
feedback.jsonlActual hours recordedEstimate ID, actual hours, timestamp, notes
telemetry.jsonlAnonymized telemetry payloadsTask type, complexity, tool name, estimated/actual hours, ratio, date (YYYY-MM-DD). Inputs are hashed before storage.
config.jsonUser settingsTelemetry 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:

FieldTypeExamplePurpose
task_typestring"feature"Category of work for statistical grouping
complexitynumber or null3Complexity rating (1-5), nullable
toolstring"pert_estimate"Which Epoch tool generated the estimate
estimated_hoursnumber8.5The original estimated hours
actual_hoursnumber12.0The actual hours recorded
rationumber1.41actual_hours / estimated_hours
datestring"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:

  1. Extracted from local JSONL files
  2. Anonymized (all identifying fields stripped)
  3. Batched (max 100 records per submission, max 1 submission per hour)
  4. Signed with HMAC-SHA256 (proves data came from a real Epoch instance)
  5. 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:

  1. Export their data via epoch telemetry export
  2. 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.

Data activityLegal basis
Local data storageLegitimate interest (tool functionality)
Telemetry transmissionExplicit opt-in consent
Community data contributionExplicit consent (voluntary PR submission)

User Rights

RightHow to exercise it
Access -- Get a copy of your dataepoch telemetry export writes all anonymized data to a JSON file
Deletion -- Remove your dataepoch telemetry delete-data provides instructions. You may also rm -rf ~/.epoch/ to remove all local data.
Objection -- Stop data sharingepoch telemetry disable opts out of all telemetry transmission
Preview -- See what would be sharedepoch telemetry preview shows exactly what would be sent, without sending it
Status -- Check current settingsepoch 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 typeRetentionLocation
Local estimate/feedback dataUntil user deletes~/.epoch/ (local filesystem)
Anonymized telemetry records90 days raw, then aggregated for Kyanite Labs-operated endpoints; self-hosted retention is operator-definedExplicitly configured endpoint
Aggregated statisticsPublished publicly in open-source projectGitHub repository
Community-contributed dataIndefinite (open-source)GitHub repository (anonymized)

Contact

For privacy-related questions, concerns, or data requests:

License

This project is licensed under the MIT License. See LICENSE for full terms.