Skip to content

Disabling and Uninstalling LumenFlow

LumenFlow is designed to be easy to remove. Adoption trust depends on a credible opt-out. Two first-class commands handle it:

  • pnpm lumenflow:disable / pnpm lumenflow:enable — reversible enforcement opt-out
  • pnpm lumenflow:uninstall — destructive eject with dry-run default

Use lumenflow:disable when you want to temporarily turn certification off without removing your own hook or CI content. It publishes one micro-worktree commit that first makes workspace.yaml non-certifying, then removes only LumenFlow-owned blocks from the generic pre-commit, pre-push, and CI delegators and removes their integrity manifest. A failed write or push leaves the main checkout unchanged.

  1. Disable

    pnpm lumenflow:disable
  2. Re-enable later

    pnpm lumenflow:enable

    This atomically restores the generic delegators, digest-bound manifest, and the required .gitignore exceptions, then enables certification last. It preserves bytes outside LumenFlow markers. If the LumenFlow CI path contains marker-free content, repair stops rather than adopting or overwriting that project-owned file.

Both commands are idempotent after the requested state is already published. lumenflow:enable is also the remediation for missing, stale, or tampered lifecycle evidence reported by lumenflow:doctor.

lumenflow:uninstall removes LumenFlow-generated files from your project. It defaults to dry-run — you must pass --confirm to actually delete.

pnpm lumenflow:uninstall

Prints the planned deletions without modifying disk. Run this first to inspect scope.

FlagEffect
--confirmActually delete (without this, dry-run).
--keep-historyPreserve docs/operations/tasks/wu/ and .lumenflow/state/packs/software-delivery/stamps/.
--keep-configPreserve workspace.yaml and .lumenflow/constraints.md.
--client <name>Deprecated compatibility tombstone; no longer narrows scope and does not enable host-specific behavior.
--jsonEmit machine-readable JSON output.

LumenFlow classifies files into these categories, and uninstall acts accordingly:

CategoryExampleAction
hook.husky/pre-commitDelete
ci.github/workflows/lumenflow-ci.ymlDelete
state.lumenflow/state/packs/software-delivery/ (and legacy .lumenflow/state/)Delete
stamp.lumenflow/state/packs/software-delivery/stamps/ (and legacy .lumenflow/stamps/)Delete (unless --keep-history)
configworkspace.yaml, .lumenflow/constraints.mdDelete (unless --keep-config)
docsdocs/operations/tasks/wu/Delete (unless --keep-history)

Uninstall does not touch node_modules or package.json dependencies. Remove the packages separately:

pnpm remove @hellmai/lumenflow-cli
# or, if other @hellmai/lumenflow-* packages are direct deps:
pnpm remove $(pnpm ls --depth=0 --json | jq -r '.[0].dependencies | keys[] | select(startswith("@hellmai/lumenflow-"))')

Because all deletions happen in your working tree, git is the restore path:

git checkout -- <paths>      # restore files still in the last commit
git revert <uninstall-commit> # if you already committed the uninstall

If you ran uninstall in a throwaway branch, simply discard the branch.