Skip to content

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 ​

CategorySetup doesRollback does
Document skeletonCreates 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 CICreates .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 copiesCopies 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 scriptsAdds, 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 configSets 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.
.gitignoreAdds 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.
ConsentAdds the repository to trusted-repos.json in the user settings directory.Removes it.
ManifestWrites .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.hooksPath
  • merge.dp-jira-mirror.name
  • merge.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 config key 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.hooksPath in 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.