What setup changes
npx noomoo setup prints a plan and changes nothing. npx noomoo setup --yes (or init) applies the plan and records it in .noomoo/setup-manifest.json. npx noomoo rollback reads the manifest and reverses what it can prove noomoo did.
Categories
| Category | Setup does | Rollback does |
|---|---|---|
| Document skeleton | Creates docs/ with the document layers, config/pipeline.json, config/tracker.json, AGENTS.md, CLAUDE.md, .gitattributes and .agent/context/, only where the file does not exist. | Removes a created file whose content is unchanged; keeps one that you changed. Removes emptied directories. |
| Hooks and CI | Creates .githooks/ (pre-commit, pre-push, commit-msg) and .github/workflows/noomoo.yml. The hooks, the workflow and the git settings are set up only in a git repository, and .githooks/ is not created when another core.hooksPath is kept. | Removes them under the same rule. |
| Skill copies | Copies no skills: the Claude Code skills come with the plugin. A skill copy an earlier version installed and the package no longer ships is removed when it is unchanged; a changed copy, or one without a recorded hash, stays and setup names it. | Removes copies it created. A copy it overwrote is not restored. |
package.json scripts | Adds, when there is a package.json, eight scripts: validate, task:ready, plan:ready, phase:check, axis:close, axis:reopen, context:status and doctor. A script that already exists is not overwritten. | Removes a script whose value is still the one noomoo wrote; keeps one you edited. |
git config | Sets core.hooksPath to .githooks in the local configuration, unless it already points elsewhere and you did not pass --hooks=replace. | Restores the previous value, or removes the key if it was unset, only while the value is still the one noomoo set. |
.gitignore | Adds the lines for generated files (docs/validation/ artifacts, docs/raw/, .env, node_modules/ and others) that are not yet there. | Removes the lines it added, and the file if nothing else is left in it. |
| Consent | Adds the repository to trusted-repos.json in the user settings directory. | Removes it. |
| Manifest | Writes .noomoo/setup-manifest.json, with the SHA-256 of every file it created. | Removes it, and its directory if empty. |
Files that git ignores and that noomoo generated itself are removed by rollback without --include-modified. Everything else that you changed after setup stays unless you pass --include-modified.
Git keys
Rollback restores only the keys that noomoo itself sets:
core.hooksPathmerge.dp-jira-mirror.namemerge.dp-jira-mirror.driver
The two merge-driver keys register a merge driver for tracker mirror files. The driver is not part of the public package, so setup sets only core.hooksPath there. A manifest that names another key is rejected.
How rollback protects you
Rollback does not trust the manifest. It rejects an entry with a warning, and keeps the file, when:
- the path is empty, not normalised (it has
.,..or empty segments), or outside the root of the repository, - the path is an absolute path,
- the path is inside .git,
- a symbolic link lies on the path or is the file itself, or the nearest existing parent leads outside the root through a link,
- the
git configkey is one that is not set by noomoo, or the manifest asks to restore a prior value of a merge key, which noomoo only ever sets on an unset key, - the previous value of
core.hooksPathin the manifest is not a relative path inside the repository.
A file whose content was changed after setup is not rejected: it is kept and listed as changed after setup, because its SHA-256 differs from the one recorded when it was created. --include-modified removes it. Rollback also removes the heading lines that setup wrote into .gitignore and collapses empty lines there.
Rollback calls only git config and git check-ignore from git. With --yes it requires your consent for the repository (see Trust model).
docs/validation/events.jsonl is written by every command, including setup, and is not in the manifest. After a rollback it stays, and because the .gitignore line for it is removed, git shows it as a new file. Delete it if you do not want it.
Check the plan before applying it: npx noomoo rollback prints every file to be removed, every file kept and the reason.