honestweek runs on your own machine and reads private data: your AI coding session logs and your git history. This page says what it reads, writes and runs, what counts as a security problem, and how to report one privately.
- It reads session logs from Claude Code (
~/.claude/projects, or$CLAUDE_CONFIG_DIR/projectswhen you set that) and Codex ($CODEX_HOME/sessionsand$CODEX_HOME/archived_sessions, with~/.codexas the default home). Theminecommand can also read Claude desktop's Cowork logs (under%APPDATA%\Claude).waitingreads the Claude desktop app's own session files (in%APPDATA%\Claude\claude-code-sessionson Windows) for three fields only: which log each one names, its sidebar title and whether you archived it. - It runs
gitagainst the repositories you list in your config. A few setup steps look a little further:init, and Setup and Settings (its Find new repositories button) inview, check the folder you run them in and the folders next to it for repositories with your commits, to suggest what to list, anddiscoverand Settings check whether the draft file or the config is tracked in the folder you run them in. Those scans never askgitabout the commits in a repository that holds a folder your config marks display-only, or sits inside one, since git reading it would read that folder's history too. Where that keepsdiscoveror Settings from checking whether the draft or the config is committed, they say so and give the two commands to check by hand. - Its
gitnever fetches and never starts a program a repository's own config names. A repository's.git/configisn't mine to trust, least of all in the folders next to yours that setup looks at, so everygithonestweek runs turns off, on its own command line, every way of reaching another machine, signature checks, hooks and the file-system monitor, and asks git never to fetch a missing object or wait on a prompt. It drops theGIT_variables it inherits, such asGIT_DIR, except the three that say where your own global and system git config files are, so nothing in your environment points it at another repository. Agitthat runs longer than a minute is stopped, and in what honestweek reports, one it can't read, or whose output is too large, counts as unreadable, never as a repository with no commits. A commit id from a session log or a summary reaches git only when it's a commit id (4 to 64 hex digits); anything else counts as not found, sobuildaborts. - It never runs
gitagainst a repository you mark display-only, and it summarizes display-only work generically. A config that would let git read a display-only folder is refused when it loads, wherever it came from: one that lists the same repository as display-only and as one git reads (the same folder twice, or a worktree of it), a display-only folder and a repository git reads that sit one inside the other, or a display-only folder holding a worktree of a repository git reads. - Weekly reports use sessions from your listed repositories. A session anywhere else is private to the report: its text never becomes a report item.
mineworks differently: it looks for solved problems across every session in the logs it reads, because a problem worth writing up can come from any project. It reports what it found and writes a draft only when you run it with--draft. - It writes local files only, and every string passes through its redactor (a pattern-based scrubber for secrets, personal paths and terms you list) before it's written. The exception is your config, which holds the private words you list as you typed them. One of those files is meant to be committed:
minekeeps its findings ledger inhonestweek.findings.jsonon every run, de-identified and redacted, as the record of what you've already accepted or declined. - It makes no network calls. No telemetry, no fetch. Three things you start do send session text to an AI. One is a choice you make on
view's Problems page: with Include /insights turned on, Run /insights starts your ownclaude -p /insightsand Run with Codex starts your owncodex, each only after you confirm. The server refuses both while the switch is off, and each program gets only the environment variables it needs to start and sign in, not your other tokens. Those programs send your sessions to Claude or OpenAI on your own plan, and Codex runs in its read-only sandbox, which still lets it read files you can read. honestweek itself still sends nothing. The second is the weekly summary:/honestweekhas Claude run honestweek in your own Claude Code session, so Claude reads the redacted draft (honestweek.draft.json) to write the summary and sees what each command prints. Run as the skill in Codex, Codex reads the same and sends it to OpenAI, or the endpoint your Codex is set to use, in Claude's place. The third is the find skill: when Claude or Codex runsfind,replay,problems,goalsorwaitingfor you, it reads what they print, redacted the way the page shows it with Show private text off, and in Codex that text goes to OpenAI instead. Where your data goes walks through each. Two commands start a local server, and both bind to127.0.0.1, so only your own machine can reach them:preview, which shows your built output, andview, a page for finding and replaying your sessions. Both refuse a request that names another host.previewhas no key, by design, so any program or account on your machine can read the built report while it runs. The report is redacted, andpreviewstops on its own after 30 minutes with no visits; on a shared machine, stop it sooner when you're done.viewalso refuses any data request that comes from another website (its page files hold no data), and answers data requests only from a page that holds this run's key: each run makes a fresh key, and the address it opens or prints carries a one-time code the page trades for that key. A printed address's code stops working after 15 minutes, and the one it opens your browser with after two. A new tab opened fromview's own pages gets the key from this run's other open tabs. A page your browser says another website opened never asks them, so it gets the key only from a code in its own address. The data stays out of that website's reach either way, since your browser keeps one site from reading another's pages. - You control what
viewkeeps. It reads your logs into memory to answer the page and keeps only what you choose to save. What it does write: Setup writeshonestweek.config.json(andhonestweek.config.example.jsonif it's missing) when you press Save, Settings rewrites the config when you press Save, and the Include /insights switch saves its on or off in the config. Setup also adds the config and honestweek's private working files to that folder's.gitignore, and Settings adds the config there whenever it saves. Run with Codex keeps Codex's answers, redacted again, inhonestweek.codex-judgments/beside your config, a folder that ignores itself and gets a line in that folder's.gitignore. With Save results between runs on in Settings, it keeps the Problems checks' results and, unless you turn it off, each day's history, redacted, inhonestweek.saved/beside your config: owner-only on Linux and macOS, ignoring itself, with a line in that folder's.gitignore, and deleted whole by Forget saved results. To open your browser without putting the one-time code in a command line,viewwrites a small redirect file to your temporary folder and deletes it within two minutes. Its Show private text switch shows names and folders on your own screen, never secrets, and that version is built in memory only when you turn the switch on.view --demowrites a made-up week to a temporary folder and deletes it when you stop; when it starts, it also removes its own leftover demo folders older than a day whose run has stopped. - Its private files stay yours. On Linux and macOS, the private files it creates (its working stores, the session draft, the harvest word list, the config and the saved results in
honestweek.saved/) are readable only by you, and when it rewrites a file (a store, or the config when Settings saves it) it keeps the permissions you've set. Output files you'll publish,mine's post drafts, the example config and a new.gitignoreget your system's usual permissions. - It never publishes anything. You decide what leaves your machine.
Please report privately if you find any way honestweek could:
- send any data off your machine, other than through Run /insights or Run with Codex after you confirm, or through the weekly summary, where Claude reads the redacted draft and what each command prints in your own Claude Code session (or Codex does, in your own Codex session, when you run the skill there), or through the find skill, where Claude or Codex reads what
find,replay,problems,goalsandwaitingprint; - write an unredacted secret, or text it was told to redact, into an output file;
- run
gitagainst a display-only repository, or against a repository outside your list other than the setup checks above; - make its
gitfetch anything, or start a program a repository's config or a session log names; - let the
previewserver answer anyone other than your own machine or a request that names another host, or serve a file outside its output folder; - let the
viewserver answer another website, another host name, or a request without the run's key, hand the key to a page another website opened, show what a local file holds in an error message, show a secret with Show private text on, show a private word with it off, or keep anything on disk you didn't choose to save (today, that's the config, the example config Setup writes if it's missing, the.gitignorelines, Run with Codex's redacted answers and, with Save results between runs on,honestweek.saved/), or leave its redirect file or--demo's made-up week behind past the times given above; - run a command built from text inside a session log, or run
claudeorcodexwithout your confirm or while Include /insights is off.
The redactor's known gaps (short low-entropy passwords, unlisted spellings of a listed term, phone numbers and similar) are documented in the README under "What the scrubber catches, and what it doesn't". Improvements there are welcome as ordinary issues or pull requests.
Please don't open a public issue for a security problem. Use GitHub's private vulnerability reporting instead: open the repository's Security tab and choose Report a vulnerability. Include what you ran, what you expected, and what happened. If that option isn't there, open an issue titled "Security report" with no details in it, and I'll contact you to take it private.
Please don't attach real session logs: a synthetic log line with the same shape is enough to reproduce most problems, and keeps your own data private.
I'll acknowledge a report as soon as I can, and I'll credit you in the fix unless you'd rather I didn't.
honestweek's npm package is honestweek, starting with version 0.2.0. It has no dependencies, so npm install and npx fetch honestweek's own files and no one else's code. I publish each version myself from main, and npm publish runs the whole test suite before it uploads anything. CHANGELOG.md lists what changed in each version, and each version is tagged here as v plus its number.
If a version on npm doesn't match its tag in this repository, or a package with a similar name claims to be honestweek, please report it privately as described above.
Security fixes land on main and go into the next npm release. Only the latest version gets fixes, so please check you're on it before you report: that's npx honestweek@latest or npm install -g honestweek@latest. There's no long-term support for older versions yet.