> ## Documentation Index
> Fetch the complete documentation index at: https://taskgraph-ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upgrading

> What to change when moving an existing project to a newer TaskGraph, from Task Master or from any earlier release

TaskGraph 0.47 renamed the project from Task Master to TaskGraph and removed the legacy support that went with the old name. Projects created with Task Master or with a release before 0.47 need steps 1 to 4. Step 5 (slash commands now come from the plugin) applies to every existing project, including those set up with 0.47 to 0.52. Step 7 (`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/`:

```bash theme={null}
taskgraph init --from-taskmaster --yes
```

It copies every tag of tasks, the docs, reports and templates, and the settings that still apply, and drops provider and API-key settings. `.taskmaster/` is left in place. See [Migrating from Task Master](https://taskgraph-ai.com/migrating-from-taskmaster.md) 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

Every `TASK_MASTER_*` and `TASKMASTER_*` variable is now `TASKGRAPH_*`. The old names are ignored.

| Before | Now |
| - | - |
| `TASK_MASTER_TOOLS` / `TASKMASTER_TOOLS` | `TASKGRAPH_TOOLS` |
| `TASK_MASTER_PROJECT_ROOT` | `TASKGRAPH_PROJECT_ROOT` |
| `TASK_MASTER_*` / `TASKMASTER_*` (any other) | `TASKGRAPH_*` |

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 are `taskgraph` and `taskgraph-mcp`. Update any scripts or aliases that call the old command name.
* Register the MCP server as `taskgraph-ai` and remove any old `task-master-ai` entry from `.mcp.json`. See [Installation](https://taskgraph-ai.com/getting-started/quick-start/installation.md).

## 4. Removed

* `taskgraph migrate` is gone. `taskgraph init --from-taskmaster` imports a `.taskmaster/` folder (see step 1).
* `.taskmasterconfig` is no longer read. Configuration lives in `.taskgraph/config.json`; run `taskgraph models --setup` to recreate it.
* Every provider other than Claude Code is removed, along with the flags that selected them. Models are `opus`, `sonnet` and `haiku`. Provider API keys are ignored; only the optional `CLAUDE_CODE_API_KEY` remains. Remove those flags from any scripts. See [Authentication](https://taskgraph-ai.com/getting-started/api-keys.md).
* Support for editors other than Claude Code is removed. `taskgraph init --rules` accepts `claude` only.

## 5. Move slash commands to the plugin

This applies to every project where `taskgraph 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.

1. Install or refresh the plugin:

   ```txt theme={null}
   /plugin marketplace add stephennmiller/taskgraph-ai
   /plugin install taskgraph@taskgraph
   /plugin marketplace update taskgraph
   ```

2. Remove the stale files. Re-running `taskgraph init --rules claude` in 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. (`init` also re-adds its other files, such as the `CLAUDE.md` import.)

   Delete by hand instead if you prefer. Check what is there first, because `rm -r` also removes files you added:

   ```bash theme={null}
   ls -R .claude/commands/tm
   ```

   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:

| Old command | New command |
| - | - |
| `list-tasks-by-status` | `list-tasks <status>` |
| `list-tasks-with-subtasks` | `list-tasks --subtasks` |
| `init-project-quick` | `init-project --quick` |
| `quick-install-taskgraph` | `install-taskgraph --quick` |
| `update-single-task` | `update-task` (it now edits one task only: use `update-tasks-from-id` for bulk edits and `set-status` for status) |
| `to-pending`, `to-review`, `to-deferred`, `to-cancelled` | `set-status <id> <status>` (`to-done` and `to-in-progress` stay) |
| `remove-subtasks` | `clear-subtasks <id>` |
| `remove-all-subtasks` | `clear-subtasks --all` |
| `learn` | `help` |
| `analyze-project` | `project-status` (progress, work in hand and bottlenecks, from `taskgraph list` and `taskgraph graph`) |

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)

Earlier `taskgraph init --rules claude` runs appended this to your shell profile (`~/.zshrc`, `~/.bashrc` or similar):

```bash theme={null}
# Claude Code deferred MCP loading (added by TaskGraph)
export ENABLE_EXPERIMENTAL_MCP_CLI='true'
```

Claude Code no longer reads that variable: it defers MCP tool definitions by default (MCP tool search, set with `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:

| Before | Now |
| - | - |
| `taskgraph start <id>` | `taskgraph loop -n 1 --id <id>` |
| `taskgraph start` (no ID) | `taskgraph loop -n 1` |
| `taskgraph autopilot start <id>` and the other `autopilot` subcommands | `taskgraph loop --id <id> --prompt tdd` |
| MCP tools `autopilot_start`, `autopilot_resume`, `autopilot_next`, `autopilot_status`, `autopilot_complete`, `autopilot_commit`, `autopilot_finalize`, `autopilot_abort` | `taskgraph loop --prompt tdd` in a terminal |
| `/taskgraph:auto-implement-tasks`, `/taskgraph:smart-workflow`, `/taskgraph:command-pipeline` | `taskgraph loop` (add `--prompt tdd` or `--parallel <n>`) |
| `task-orchestrator` agent | `taskgraph loop --parallel <n>`, or the `task-executor` agent for one task |

* **`start`** is removed. Releases 0.55 to 0.57 kept it as a hidden alias that printed a deprecation notice and ran `loop -n 1 --id <id>`; now `taskgraph start` fails as an unknown command, so change scripts to the `loop` command in the table. `loop` runs 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 `--trust` in scripts. To see a task without starting it, use `taskgraph show <id>`.
* **`autopilot`** is removed with its 8 `autopilot_*` MCP tools. The `tdd` preset runs the same RED, GREEN, COMMIT cycle for each subtask as a prompt, on a `task-<id>` branch (see [tdd](https://taskgraph-ai.com/capabilities/loop-presets.md#tdd)). Nothing checks the test results for Claude any more, and there is no `resume` or `abort`: stop with Ctrl-C and run the same command again to continue. The workflow state `autopilot` kept in `~/.taskgraph/<project>/sessions/` is no longer read; you can delete that folder. With `TASKGRAPH_TOOLS=all`, the MCP server now loads 40 tools instead of 48.
* **`workflow` settings** in `.taskgraph/config.json` (`enableAutopilot`, `branchPattern`, `maxPhaseAttempts` and the rest) are no longer read. TaskGraph ignores them, and you can delete the `workflow` block.
* **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. Earlier `init` 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.

1. Re-run `taskgraph init --yes`. It adds `.taskgraph/state.json` and `.taskgraph/config.local.json` to `.gitignore`, and moves `pathToClaudeCodeExecutable` from `config.json` to `config.local.json`. TaskGraph also moves it the next time it saves settings, for example on `taskgraph models --set-main`.
2. Stop tracking `state.json`; `.gitignore` alone doesn't untrack a committed file. `init` reminds you when it's still tracked:

   ```bash theme={null}
   git rm --cached .taskgraph/state.json
   git commit -m "chore: stop tracking TaskGraph state.json"
   ```

Each person keeps their own `state.json` and current tag. Until you upgrade, `pathToClaudeCodeExecutable` in `config.json` keeps working. See [Shared and per-machine settings](https://taskgraph-ai.com/configuration.md#shared-and-per-machine-settings).

## Credit

TaskGraph is based on [Task Master](https://github.com/eyaltoledano/claude-task-master) by Eyal Toledano and Ralph Khreish, and keeps the original license and copyright notices. See [Licensing](https://taskgraph-ai.com/licensing).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.