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 enforcement off without removing any files. It only flips the enforcement flags to false in workspace.yaml via config:set — since WU-3543, LumenFlow no longer generates or mutates hooks at all; .claude/ (and other vendor config) is fully user-owned, so any consumer-owned hook layer must read the flipped workspace.yaml flags itself. Prior enforcement state is saved to .lumenflow/state/enforcement-prior.json.

  1. Disable

    pnpm lumenflow:disable

    Scope to one client:

    pnpm lumenflow:disable --client claude-code
  2. Re-enable later

    pnpm lumenflow:enable

    Prior flag values are restored. If no prior state exists, all enforcement flags default to true (safe default).

lumenflow:disable is idempotent — running it twice produces no diff.

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.

| Flag | Effect | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | --confirm | Actually delete (without this, dry-run). | | --keep-history | Preserve docs/operations/tasks/wu/ and .lumenflow/state/packs/software-delivery/stamps/. | | --keep-config | Preserve workspace.yaml and .lumenflow/constraints.md. | | --client <name> | Accepted for backward compatibility only — no longer narrows scope (WU-3543 retired the last client-specific manifest entries, so every entry now applies regardless of --client). | | --json | Emit machine-readable JSON output. |

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

| Category | Example | Action | | -------- | ------------------------------------------------------------------------------------ | -------------------------------- | | hook | .husky/pre-commit | Delete | | ci | .github/workflows/lumenflow-ci.yml | Delete | | 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) | | config | workspace.yaml, .lumenflow/constraints.md | Delete (unless --keep-config) | | docs | docs/operations/tasks/wu/ | Delete (unless --keep-history) |

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

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