Quality
This path keeps the project consistent: code does not change without a task in progress, the registry does not contradict itself, and sub-agents do not write just anywhere. You come to it before a commit, after a long session, or to install the safeguards.
What you ask the agent
« Is there any drift? I think I changed code without a task. »
effortless_drift_check« Install the hook that stops me from committing code without a task in progress. »
effortless_drift_hook_install« Check the registry's consistency: epics, stories, tasks. »
effortless_validate_project« What would you repair if we ran the repair? Don't touch anything yet. »
« Confine the sub-agents: they must not write directly into the project. »
effortless_confinement_hook_install« Regenerate the registry of the code's focal points. »
effortless_foyer_registryWhat the agent does
Detect drift
effortless_drift_check reads the git state of the project and of each stack that has its own repository. There is drift when code is modified while no task is In progress. Files in .effortless/ and blueprints/ do not count as code. The response also says whether the anti-drift hook is installed on every repository. The verb only reads.
Install the anti-drift hook
effortless_drift_hook_install installs a git pre-commit hook on the project's repository and on each stack that has its own repository. When code is staged with no task in progress, it refuses the commit. When a task is in progress, it shows which one will carry the commit. It never replaces a pre-commit hook that is not Effortless's.
Validate the registry
effortless_validate_project audits epics, stories and tasks and returns the anomalies ranked by severity: blocking, wrong, probably forgotten, inherited from before a rule. It only reads.
Repair
effortless_health_repair makes the same diagnosis and announces what it would repair. Without apply, nothing is modified. With apply: true, it applies only the repairs that need no decision: closing a story whose tasks are all done, closing an epic whose stories are all closed. The rest stays in the anomalies. The agent announces first, then applies only after your agreement.
Confine sub-agents
effortless_confinement_hook_install installs a hook that refuses a sub-agent the right to write directly into the project (file-writing tools). It works in a worktree, and its work enters the repository only at reintegration, when the bar is green (see Code and stacks). The script is placed in .claude/hooks/ and declared in .claude/settings.json, which the verb completes without ever replacing it. The hook does not cover shell commands and does not confine the main agent.
Maintain the registry of focal points
effortless_foyer_registry scans the production code for marked focal points ("foyers"), and also returns its blind spot: files without a marker, public functions outside any focal point. By default (write_page absent or true), it writes the sealed page into the pages folder declared by the user documentation. With write_page: false, it returns the content without writing anything. The scan reads Rust files.
What you get
- A drift verdict and a list of files, the same as the Drift screen: the agent and you see the same thing.
- A
pre-commithook in the.git/hooks/of each tracked repository. - An anomaly report and, after agreement, closed epics and stories.
- For confinement:
.claude/hooks/confine-subagents.cjsand its entry in.claude/settings.json. - For focal points: a derived documentation page, or its content in the response.
When the agent is refused
| Situation | What the refusal says | What to do |
|---|---|---|
| No Effortless project found from the working folder | mcp:racineProjetIntrouvable | Set EFFORTLESS_PROJECT if the project exists elsewhere, otherwise effortless_init. |
pre-commit hook already present and not Effortless's | drift:foreignHook | Remove or rename that hook, then run effortless_drift_hook_install again. |
| A repository to equip is not a git repository | drift:notAGitRepo | Run git init in that folder, or remove git: true from the stack. |
| Confinement hook file that is not ours | confinement:hookForeign | Remove or rename that file, then run effortless_confinement_hook_install again. |
.claude/settings.json is not a JSON object | confinement:settingsNotAnObject | Fix that file, then retry. |
| Folder that is not a valid Effortless project | "Pas un projet Effortless valide." | Check effortless.json. |
| Focal-point registry: binary older than the repository's code | foyer:binairePerime | Rebuild (cargo build --bin app), then retry. This safeguard mostly concerns Effortless's own development repository. |
| Focal-point registry: no user documentation declared | userDoc:usage ("aucune stack ne porte de userdoc.json") | Declare a stack's user documentation (see Documentation), or ask for the content alone with write_page: false. |