start and autopilot folded into loop) applies to anyone who used them. Step 8 (stop committing state.json) applies to every project set up before it.
1. Import the project folder
From your project root, import.taskmaster/ into .taskgraph/:
.taskmaster/ is left in place. See Migrating from Task Master for what moves.
TaskGraph doesn’t read .taskmaster/ otherwise. Also update any .taskmaster/ paths you reference in CLAUDE.md, .gitignore, scripts or CI.
2. Rename environment variables
EveryTASK_MASTER_* and TASKMASTER_* variable is now TASKGRAPH_*. The old names are ignored.
Check your shell profile,
.env, .mcp.json and CI configuration.
3. Switch the commands and the MCP server
- The package is
taskgraph-ai, and the commands aretaskgraphandtaskgraph-mcp. Update any scripts or aliases that call the old command name. - Register the MCP server as
taskgraph-aiand remove any oldtask-master-aientry from.mcp.json. See Installation.
4. Removed
taskgraph migrateis gone.taskgraph init --from-taskmasterimports a.taskmaster/folder (see step 1)..taskmasterconfigis no longer read. Configuration lives in.taskgraph/config.json; runtaskgraph models --setupto recreate it.- Every provider other than Claude Code is removed, along with the flags that selected them. Models are
opus,sonnetandhaiku. Provider API keys are ignored; only the optionalCLAUDE_CODE_API_KEYremains. Remove those flags from any scripts. See Authentication. - Support for editors other than Claude Code is removed.
taskgraph init --rulesacceptsclaudeonly.
5. Move slash commands to the plugin
This applies to every project wheretaskgraph init --rules claude ran before this change, whether it was set up with Task Master, with 0.47 to 0.52, or earlier.
init no longer writes slash commands. The Claude Code plugin is the only channel, and it provides the commands as /taskgraph:<name>. Some commands were merged or renamed on the way, so the old names do not all exist (see the table below). The /tm:* files an earlier init wrote into .claude/commands/tm/ stay behind, are never updated, and double the commands you see.
-
Install or refresh the plugin:
-
Remove the stale files. Re-running
taskgraph init --rules claudein the project does it: it deletes the command files TaskGraph wrote into.claude/commands/tm/(current names and names from earlier releases), keeps any file you added yourself, and removes the folder if nothing is left. Re-running is the only trigger; nothing prunes them automatically. (initalso re-adds its other files, such as theCLAUDE.mdimport.) Delete by hand instead if you prefer. Check what is there first, becauserm -ralso removes files you added:Task Master-era installs also have older copies elsewhere. Look for the nested.claude/commands/tm/<category>/folders,.claude/agents/task-orchestrator.md,.claude/agents/task-executor.md,.claude/agents/task-checker.md(the plugin now ships the agents) and.claude/TM_COMMANDS_GUIDE.md, and remove the ones TaskGraph wrote.
Renamed and merged commands
There are no aliases. If you used one of the old names in a script, a note or a prompt, switch to the new form:
Updating the plugin itself leaves nothing behind. Claude Code installs each plugin version into its own directory (
~/.claude/plugins/cache/<marketplace>/<plugin>/<version>) and points the install path at the active one. On a real update of superpowers from 6.4.2 to 7.0.0, the old directory kept a file the new version dropped and got an .orphaned_at marker, while 7.0.0 did not have the file. A plugin with no version field, like this one, is probably keyed by commit SHA instead. Whether the update arrives automatically or needs /plugin marketplace update taskgraph is not verified, so run it.
6. Remove the deferred MCP loading line (optional)
Earliertaskgraph init --rules claude runs appended this to your shell profile (~/.zshrc, ~/.bashrc or similar):
ENABLE_TOOL_SEARCH). init doesn’t add the line any more, and you can delete it.
init also stopped writing .mcp.json unless you pass --mcp. An .mcp.json you already have is left as it is. The Claude Code integration (the CLAUDE.md import) is now on by default, including under --yes; pass --no-claude to skip it.
7. Run agents with loop
taskgraph loop is now the one way to have Claude Code work the plan. start, autopilot and three plugin commands folded into it or were removed:
startis removed. Releases 0.55 to 0.57 kept it as a hidden alias that printed a deprecation notice and ranloop -n 1 --id <id>; nowtaskgraph startfails as an unknown command, so change scripts to theloopcommand in the table.loopruns Claude Code non-interactively (claude -p) instead of opening an interactive session. The first run in a project asks you to allow Claude to work without permission prompts; pass--trustin scripts. To see a task without starting it, usetaskgraph show <id>.autopilotis removed with its 8autopilot_*MCP tools. Thetddpreset runs the same RED, GREEN, COMMIT cycle for each subtask as a prompt, on atask-<id>branch (see tdd). Nothing checks the test results for Claude any more, and there is noresumeorabort: stop with Ctrl-C and run the same command again to continue. The workflow stateautopilotkept in~/.taskgraph/<project>/sessions/is no longer read; you can delete that folder. WithTASKGRAPH_TOOLS=all, the MCP server now loads 40 tools instead of 48.workflowsettings in.taskgraph/config.json(enableAutopilot,branchPattern,maxPhaseAttemptsand the rest) are no longer read. TaskGraph ignores them, and you can delete theworkflowblock.- Plugin: refresh it (
/plugin marketplace update taskgraph) to drop the removed commands and agent.
8. Stop committing state.json and per-machine settings
This applies to every project set up before this change. Earlierinit runs didn’t gitignore .taskgraph/state.json, which holds your current tag, so every taskgraph tags use changed a committed file and two people on different tags got conflicts. .taskgraph/config.json could also hold an absolute claudeCode.pathToClaudeCodeExecutable that only works on one machine.
-
Re-run
taskgraph init --yes. It adds.taskgraph/state.jsonand.taskgraph/config.local.jsonto.gitignore, and movespathToClaudeCodeExecutablefromconfig.jsontoconfig.local.json. TaskGraph also moves it the next time it saves settings, for example ontaskgraph models --set-main. -
Stop tracking
state.json;.gitignorealone doesn’t untrack a committed file.initreminds you when it’s still tracked:
state.json and current tag. Until you upgrade, pathToClaudeCodeExecutable in config.json keeps working. See Shared and per-machine settings.

