Installer
claude-dev-workflow, or dw, is the global binary from Homebrew or npm. npx claude-dev-workflow@latest is the same installer with nothing installed. It always installs into the project, and a project commits what it installs.
$ dw help init the wizard: which tracker, which states, which branch pattern update express — refresh the files to this binary's version, keep every value you answered; refuses to downgrade a project unless --force update --reconfigure change config — refresh, then the wizard, current values as defaults update --print show what would change, write nothing version this binary's version help this messageThe flags --update, --update --reconfigure, --dir <path>, --print and --force spell the same commands, and every line reads as npx claude-dev-workflow@latest <the same flags>.
What it writes
Section titled “What it writes”Exactly three roots, and one shared file it merges into:
_dev-workflow/withlib/,scripts/,hooks/and_config/manifest.json, a sha256 per installed file.claude/skills/dev-*/.claude/agents/dev-*.md.claude/settings.json, merged: your hooks survive, ours are matched by command string
A planned write outside those roots is a hard error. It never touches .gitignore, and it never writes to your issue tracker: a GitHub label it needs is printed as the gh label create command.
_dev-workflow/artifacts/ is the project’s own generated data, written by ingest, reorg and docs. The installer never plans, hashes or deletes it.
The wizard, in order:
- Which tracker. GitHub Issues is proposed when
originpoints at github.com. - What that tracker needs, verified before anything is written: an instance URL and token for YouTrack, a repository
ghcan write to for GitHub. - The rest from the tracker itself: YouTrack’s real State, Type and Priority values, or the labels the GitHub repository carries, mapped onto the ladder.
- A scan of the tree for repos, package managers, test and lint scripts, commitlint types and scopes, runtime pins and remotes.
- Where issue IDs go in a commit subject, inferred from the last 50 commits.
- Write
.dev-workflow.jsonand install the payload.
On a project that already has an install it triages first: express update, keep, or replace.
dw init --dir ../other-project # target somewhere elsedw init --print # show the config, write nothingdw init --force # overwrite files you have editedupdate
Section titled “update”Express. Refreshes the payload to the binary’s version and touches nothing you answered. It asks one kind of question only: a setting this version has that your config lacks. With no terminal it writes the default and prints which key it added. A complete config comes out byte-identical.
Files are compared against the manifest: untouched ones are replaced, edited ones reported and left alone, ones no longer shipped removed. --force overrides that.
It refuses to move a project backwards when the binary is older than the installed copy, and names the upgrade command for the binary. It asks the npm registry whether the binary itself is current and says “up to date” only on the registry’s word.
update --reconfigure does the same refresh, then runs the whole wizard with current values as defaults.
Always @latest
Section titled “Always @latest”npx caches by the literal spec string, so a bare npx claude-dev-workflow re-runs whatever version it cached first, forever. latest is a dist-tag and is re-resolved. The github: form has no version to compare: bust it by changing the spec, #v2.1.0 or a sha, not by clearing the cache.
npx github:ayhid/claude-dev-workflow installs from main, one release ahead of npm.
From inside a project
Section titled “From inside a project”node _dev-workflow/scripts/dev.mjs version # installed vs latest, and files you editednode _dev-workflow/scripts/dev.mjs version --upgrade # runs the installer for you--upgrade uses the global binary only when it already reports the latest release, and falls back to npx …@latest otherwise. It refuses while _dev-workflow/, .claude/skills/ or .claude/agents/ has uncommitted changes.