Upgrading
- Each 3.x slash command is now a lead workflow with an
at-prefix:/setupbecame/at-setup,/shipbecame/at-ship, and so on for the whole set ($agent-triforge:at-setup,$agent-triforge:at-shipin a Codex prompt). The plugin no longer ships acommands/directory. The command map below pairs each one with its new name, and the Lead workflows reference describes every workflow. - Triforge 4 ships no
CLAUDE.md. The project's instruction file is its rootAGENTS.md, which Claude Code reads from 2.1.277, and only while noCLAUDE.md,.claude/CLAUDE.mdorCLAUDE.local.mdsits in the project or above it (under the defaultinstructionFilesmode,claude-md-or-agents-md; a user-tier setting changes this). If your project kept aCLAUDE.mdfrom the 3.x template, add an import line to it (@AGENTS.mdin a rootCLAUDE.md,@../AGENTS.mdin.claude/CLAUDE.md), or replace its Triforge content with the pointer block fromtemplates/AGENTS.md. Session start prints a warning naming the exact line on every session until you do; it never edits the file. - The
test-driven-developmentandsystematic-debuggingskills are gone. Their rules now sit inline inat-test,at-quick,at-debugand the Codextest_writeranddebuggeragents. - If your project's
.codex/hooks.jsonis still the unchanged 3.x copy, the first 4.0 session replaces it with the empty 4.0 template and prints a notice naming the file. The 3.x hook appended a line toops/CHANGELOG.mdfrom every Codex session, lease workers included; attribution now comes from the lease ledger. Session start leaves a copy you edited alone. - The 19 agents are now personas: prompt files in
personas/with no frontmatter. Their tools, model tier and turn budget live inpersonas/manifest.toml. The plugin ships noagents/directory, so Claude Code's agent list no longer shows them. The workflows run them throughdispatch_personaunder either lead. PR comment resolution now runs as a lease and lands as one reviewed commit on the PR branch. - On resume,
lease_heartbeat_checknow collects the builders that finished while no lead was watching and adopts the ones still running; builders run detached in 4.0 and outlive the lead's turn. In 3.x it printedrun: lease_collect <task>and left the collect to you. - Triforge now sets up the project in the repository's top directory, the nearest one above that holds
.git, wherever the session starts. A project that 3.x bootstrapped in a subdirectory of a larger repository keeps its<subdir>/ops/, and the first 4.0 session creates a new skeleton at the top. The lease ledger and the[lead]table already live in the top-levelops/, so move your otherops/files there and delete the subdirectory copy. Until you move it, session start andat-setupwarn about the subdirectory'sops/roster.tomleach time they run from that subdirectory or below it, and on the run that creates the top-level skeleton.
Command map
A 3.x command also ran in its namespaced form, /agent-triforge:<name>. From a shell, put the Codex form in single quotes so the shell leaves the $ alone: codex exec '$agent-triforge:at-ship <goal>'.
| 3.x command | 4.0 under Claude Code | 4.0 in a Codex prompt |
|---|---|---|
/analyze |
/at-analyze |
$agent-triforge:at-analyze |
/build |
/at-build |
$agent-triforge:at-build |
/compound |
/at-compound |
$agent-triforge:at-compound |
/coordinate |
/at-coordinate |
$agent-triforge:at-coordinate |
/debug |
/at-debug |
$agent-triforge:at-debug |
/deep-research |
/at-deep-research |
$agent-triforge:at-deep-research |
/pause |
/at-pause |
$agent-triforge:at-pause |
/plan |
/at-plan |
$agent-triforge:at-plan |
/quick |
/at-quick |
$agent-triforge:at-quick |
/resolve-pr |
/at-resolve-pr |
$agent-triforge:at-resolve-pr |
/resume |
/at-resume |
$agent-triforge:at-resume |
/review |
/at-review |
$agent-triforge:at-review |
/setup |
/at-setup |
$agent-triforge:at-setup |
/ship |
/at-ship |
$agent-triforge:at-ship |
/status |
/at-status |
$agent-triforge:at-status |
/test |
/at-test |
$agent-triforge:at-test |
/wrap |
/at-wrap |
$agent-triforge:at-wrap |
Rolling back to 3.3.3
Settle every open lease while 4.0 is still installed. A 4.0 builder runs detached, and 3.3.3's heartbeat check can't match the start time 4.0 records for it, so 3.3.3 would take a builder that is still running for dead and remove its worktree. Run lease_wait until it prints no still building: line (lease_stop <task> stops a builder you don't want to wait for), then merge each lease or reclaim it with lease_reclaim. 3.3.3 can't merge a lease whose pinned reviewer is Devin or Grok Build, and it doesn't read the approvals recorded with lease_approve.
Then reinstall 3.3.3 from a checkout of its tag:
git clone --branch v3.3.3 https://github.com/Ninety2UA/agent-triforge.git agent-triforge-3.3.3
claude plugin uninstall agent-triforge@agent-triforge
claude plugin marketplace remove agent-triforge
claude plugin marketplace add ./agent-triforge-3.3.3
claude plugin install agent-triforge@agent-triforge
If you installed at project scope, pass the same --scope to uninstall and install. 3.3.3 has no Codex lead, so also remove a Codex install with codex plugin remove agent-triforge@agent-triforge. To return to the current release later, remove the local marketplace and add the GitHub URL again.
Last, check what 4.0 left in each project:
ops/roster.toml: 3.3.3 ignores the[lead]table and always leads from Claude Code. It rejects[members.devin]and[members.grok]as unknown members, and that error stops every role from resolving, so delete both tables and takedevinandgrokout of every role and fallback chain.- The instruction file: 3.3.3's session start looks only for
CLAUDE.mdand.claude/CLAUDE.md. When it finds neither, it prints acpline for itstemplates/CLAUDE.md, and once that file exists Claude Code stops readingAGENTS.md. The pointer block in yourAGENTS.mdnames the 4.0at-workflows, which 3.3.3 doesn't have. Restore the project's 3.xCLAUDE.mdfrom git history or run the printed copy line, and move anything you still need fromAGENTS.mdinto it. personas/: nothing to undo. Personas live in the plugin, not in your project, and 3.3.3 brings back its 19 subagents inagents/..codex/hooks.json: if 4.0 replaced it with the empty template, 3.3.3 keeps the empty file, because it copies its template only where none exists. Delete the file and the next session restores the 3.x hook, which logs every Codex session toops/CHANGELOG.md..agents/skills/: nothing to do. 3.3.3's session start sees the version change, addstest-driven-developmentandsystematic-debuggingback, and replaces only the copies that still match their recorded digest.ops/itself: 3.3.3 sets up the project in the directory where the session starts, so start Claude Code in the repository's top directory, where 4.0 keepsops/.