Upgrade the Chief to a specific version. Uses upgrade.sh as the primary method, falls back to manual if script fails. Use when the user wants to upgrade the framework (e.g. "/chief-upgrade" or "/chief-upgrade canary").
Scanned 9/20/2026
Install to Claude Code
npx -y skills add thaitype/chief --skill chief-upgrade --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Chief Upgrade?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/thaitype-chief-upgrade)More formats (shields.io, HTML) on the badges page.
---
name: chief-upgrade
description: Upgrade the Chief to a specific version. Uses upgrade.sh as the primary method, falls back to manual if script fails. Use when the user wants to upgrade the framework (e.g. "/chief-upgrade" or "/chief-upgrade canary").
---
Upgrade the Chief to the version specified in the arguments.
## Arguments
The first argument is the target version (branch or tag). Optional.
- No argument → upgrade to the latest stable release (highest semver tag). Find it by running `git ls-remote --tags https://github.com/thaitype/chief.git`, strip `refs/tags/`, ignore `^{}` entries, and pick the highest semver version.
- `canary` → latest canary branch (active development, unreleased)
- `v1.0.0`, `v2.0.0`, etc. → specific tagged version
## Steps
### 0. Detect coding agent and install mode
Detect which coding agent the user has set up:
1. `.claude/agents/` exists → suggest **claude-code**
2. `.github/agents/` exists → suggest **copilot**
3. Only `.agents/` exists → suggest **opencode**
Detect install mode:
1. Any file in the agent-specific directory is a symlink → **link**
2. Files are regular files → **copy**
3. No agent-specific directory → suggest **link**
Ask the user to confirm agent and mode.
### 1. Clone target version
```bash
git clone --depth 1 --branch <version> https://github.com/thaitype/chief.git .chief-agent-tmp
```
### 2. Run upgrade.sh --plan and diff AGENTS.md
Run the upgrade script plan:
```bash
bash .chief-agent-tmp/scripts/upgrade.sh --plan --agent <agent> --mode <mode>
```
Then separately diff AGENTS.md (the script does not handle this file):
```bash
diff AGENTS.md .chief-agent-tmp/template/AGENTS.md
```
Show both outputs to the user. For AGENTS.md, explain:
- The **Project Rules** section at the top is user-owned — NEVER overwrite it.
- Everything below (Rules Hierarchy, Chief, etc.) is framework content that may need updating.
### 3. Wait for user approval
Ask the user to review. They may:
- Approve all
- Cancel
- Ask for more detail on a specific file
### 4. Run upgrade.sh (apply) and merge AGENTS.md
```bash
bash .chief-agent-tmp/scripts/upgrade.sh --agent <agent> --mode <mode>
```
Then merge AGENTS.md manually. Use this priority order:
1. **If the user's `AGENTS.md` contains `<!-- chief-framework:begin -->` and `<!-- chief-framework:end -->` markers** (new lazy-install convention):
- Replace everything between the markers with the contents of `.chief-agent-tmp/template/AGENTS.md`.
- Keep everything outside the markers exactly as-is.
2. **Else if the user's `AGENTS.md` has a `## Project Rules` section** (legacy v4 layout):
- Treat everything from `## Project Rules` to the next `---` as user-owned.
- Replace everything below that section with the new framework content from template.
- Keep the user's Project Rules section exactly as-is.
3. **Else** (no markers, no Project Rules section):
- Treat the entire file as framework content and overwrite from template.
Show the user the merged result and get confirmation before writing.
`.chief/` (project.md, milestones, rules) is **never** touched by upgrade — it is user state, even when empty.
If upgrade.sh **succeeds**, skip to step 6.
If upgrade.sh **fails**, proceed to step 5.
### 5. Manual fallback (if upgrade.sh fails)
Perform the upgrade manually, same as chief-install fallback pattern:
1. **Overwrite agent files** — For each `.chief-agent-tmp/template/.agents/agents/*.md`:
- Extract current `model:` value from the local file
- Copy template file over local file
- Replace `${thinking_model}` and `${coding_model}` with extracted model value
- For new agent files (no local equivalent): copy and handle model placeholders
2. **Update integration files** based on agent and mode:
**claude-code link:**
```bash
for f in .agents/agents/*.md; do ln -sf "../../$f" ".claude/agents/$(basename "$f")"; done
```
**claude-code copy:**
```bash
cp .agents/agents/*.md .claude/agents/
```
**copilot link:**
```bash
for f in .agents/agents/*.md; do ln -sf "../../$f" ".github/agents/$(basename "$f")"; done
```
**copilot copy:**
```bash
cp .agents/agents/*.md .github/agents/
```
**Other agents** — no integration files needed.
3. **Model placeholders** — If any file still has `${thinking_model}` or `${coding_model}`:
- claude-code: replace with `opus`/`sonnet`
- Others: ask user for model names, replace
### 6. Verify
Check that all expected files exist and symlinks resolve (if link mode). Fix any issues found.
### 7. Clean up
```bash
rm -rf .chief-agent-tmp
```
### 8. Summary
Report what was changed, what was skipped, and any manual steps remaining.
## Important rules
- ALL temporary files MUST be inside `.chief-agent-tmp/`. NEVER write to `/tmp`, session dirs, home dirs, or any other location outside the repo.
- NEVER apply changes without user approval
- NEVER overwrite user content in `.chief/` milestones (goals, contracts, plans, reports)
- NEVER remove local-only files — upgrade only updates and adds, never deletes
- NEVER summarize diffs from memory — always use actual diff output (from upgrade.sh or manual commands)
- Always clean up `.chief-agent-tmp` even if the upgrade is cancelled
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!