# CLAUDE.md — workflow tool repo (sessions changing wf) This repo = the tool: `shared/CLAUDE.md` (symlinked as `/projects/CLAUDE.md`, loaded by every agent) + `wf.py` / `wf_res.py` / `wflib/`. Reference: `docs/design.md`, `docs/resource-ledger.md`. No personal data here (project names, tasks, paths under home): the workflow's own tasks live in a separate private wf project; publishable as is. Public by default: never put private names in files or commit messages; the denylist hooks (`.githooks`, `scripts/denylist_check.py`; enable: `git config core.hooksPath .githooks`) refuse them. ## Everything here is live Workers run the main tree's `master` the moment it changes. So: - `wf.py`, `wf_res.py`, `wflib/`, `shared/CLAUDE.md`, `templates/` → git worktree `.worktrees/` on a branch, never the main tree. - Release = fast-forward merge to `master`, only after: 1. `python3 -m unittest discover -s tests` green in the worktree; 2. `wf check` run with the new code in every project of `wf projects` gives the same result as the old code (or only the intended differences); 3. a line on top of `CHANGES.md`: date, what changed, what a project must do (if anything). - The user sees each release. Push only to remote `home` (private), never elsewhere. ## Compatibility - Commands and options are only added. Rename/remove → old spelling works one more release and prints a one-line notice. - TASKS.md format change → raise `FORMAT` (`wflib/config.py`) + `wf migrate` step; older projects keep read commands, write commands refuse until migrated. - `shared/CLAUDE.md` reaches a worker at its next session start: a rule change must not make files written under the old rule invalid. Keep it short; project needs go to the project. ## Code rules - Python ≥ 3.11 stdlib only. `wflib/` pure (text in, text out); files and printing in `wf.py` / `wf_res.py`. - TDD; oracles = hand-written literals; see each new test fail first. - Expected failures: one `wf: …` line on stderr, exit 1; usage errors exit 2; no tracebacks.