privacy contract / product + website
Your code stays yours.
WaitDojo needs lifecycle timing, not your work. In stable builds, local drills work without an account and remote product sync is off until explicitly enabled. Beta builds require GitHub sign-in and keep allowlisted usage telemetry on.
Product data stays local by default.
WaitDojo stores activity progress, timestamp-and-event lifecycle rows, configuration, backups, a local telemetry queue, and support bundles below ~/.codex/waitdojo/ by default. In stable builds, local telemetry can be disabled with:
waitdojo config set telemetry_mode off
Local telemetry never includes prompt text, quiz answers, coding-agent output, tmux pane text, file paths, usernames, environment variables, tokens, or file contents.
Hooks are passive lifecycle signals.
Codex and Claude Code invoke WaitDojo for configured events such as prompt submission, tool use, permission requests, stop, and session end. The hook command records only the configured event name and current timestamp. It does not parse or persist hook stdin.
WaitDojo never approves, denies, mutates, or rewrites coding-agent actions.
Chess puzzles download only when you ask.
The one practice-content fetch in the product is waitdojo chess download: a single ranged HTTPS request to the public, CC0-licensed Lichess puzzle database. It runs only when you type that command — never on install, launch, play, or a timer — and carries no account, token, or local data. Offline play always works from the bundled starter pack or your local cache.
Codebase teachback is unaffected: your repository's questions and evidence never leave your machine.
The website keeps aggregate counts, not visitors.
The site increments daily totals for a strict event vocabulary: page viewed, demo viewed or completed, installer requested or copied, selected agent, install section viewed, and beta email submitted. Rows may include only selected agent, coarse platform, and coarse campaign bucket.
The funnel endpoint does not accept or store a visitor ID, session ID, IP address, user agent, page URL, repository, referrer, prompt, code, or arbitrary properties. Browser Do Not Track is honored. In-page once-only guards reduce duplicate page, demo, and installer-intent events without persistent identifiers.
The copied installer command receives only the same fixed campaign bucket already used by this page. When Do Not Track is enabled—or JavaScript cannot safely determine a bucket—it receives unknown. The product saves that coarse label locally with installation metadata; it is eligible to leave the device only after the user explicitly enables remote product sync.
Email is optional and separate.
The beta updates form stores only a normalized email address and fixed signup source. It does not store the page, referrer, UTM parameters, prompt data, or repository data. Unsubscribe from any release email.
Remote progress sync is opt-in on stable builds.
In stable builds, Supabase sync remains off until a user signs in and enables it. When enabled, only sanitized completed-activity metrics and allowlisted product events are eligible to upload. Turn it off at any time:
waitdojo config set supabase_mode off
Beta builds sign in and share usage telemetry.
Closed-beta builds (versions containing -beta) require a GitHub sign-in before drills start and keep the allowlisted usage telemetry above enabled for the duration of the beta, tied to the signed-in account. The first sign-in also uploads the five stored once-per-install funnel milestones with their original timestamps. The same sanitizers apply: event names, timings, and coarse buckets only — never prompts, code, diffs, paths, or terminal contents. The beta build discloses this at first run and on its sign-in screen; uninstalling is the opt-out, and stable builds return to the opt-in behavior above.
Questions about this contract can be sent to Nishant Bhargava.