The single owner of agent-platform drift. Upgrades the installed coding-agent CLIs (Claude Code, Codex, Gemini, and any others) each via its REAL install channel, then re-stamps the kit's MANIFEST baseline and re-verifies the capability facts the kit depends on - proposing the MANIFEST diff, never auto-applying it. Use when the user says "update/upgrade my agents/tools", on a new Claude Code/Codex/Gemini release, on a periodic tooling refresh, or to re-verify the baseline without upgrading (check-only).
Install
npx skillscat add mgallo-code/dotfiles/coding-mastermind-update Install via the SkillsCat registry.
coding-mastermind-update
Overview
Agent platforms drift: a CLI ships a new version, a hook event is renamed, a sandbox
flag changes default, a primitive the kit relies on is removed (output-styles were
removed in Claude Code v2.1.91). When that happens silently, the kit's assumptions rot -
the system-level version of pattern #2/#6. This is the named owner of that drift. It does
two jobs in one pass: (1) UPGRADE the agent binaries to latest, each through the channel
it was actually installed with; (2) RE-STAMP the MANIFEST.md baseline and RE-VERIFY the
capability facts the kit's design rests on. The upgrade is the explicit action; the
MANIFEST edit is PROPOSED, never auto-applied (a human owns the change to the system).
(This folds in the old update-coding-agents actor: one command now upgrades and records,
because they were always run back to back.)
When to Use
- "Update / upgrade my agents", "update claude / codex / gemini", "update my coding tools".
- A new Claude Code / Codex / Gemini release, or you suspect the baseline is stale.
- A periodic tooling refresh.
- Check-only: to re-stamp + re-verify the baseline WITHOUT upgrading (versions moved
out of band, or you just want to confirm the capability facts still hold). Skip step 3.
When NOT to use: routine per-repo feature work (this updates the SYSTEM, not a
feature); mid-critical-session if you depend on the current Claude Code build (an upgrade
takes effect on the NEXT launch, so finish first); when a tool is deliberately pinned
(bump the pin, do not float to latest).
Process
- Inventory + detect channel for each agent. Record the current version and HOW it is
installed - the upgrade command depends on it, and npm-installing a Homebrew tool (or
vice versa) leaves two copies onPATHand the wrong one wins:- npm global:
npm ls -g --depth=0 <pkg>resolves ->npm install -g <pkg>@latest. - Homebrew cask:
which <bin>resolves into…/Caskroom/<name>/…->brew upgrade --cask <name>(a cask is NOT a formula:brew upgrade <name>misses it). - Homebrew formula: resolves into
…/Cellar/<name>/…->brew upgrade <name>. - Native self-updater (Claude Code's native install exposes
claude update) -> use it.
- npm global:
- Show the plan BEFORE installing. Print
current -> latestper tool
(npm view <pkg> version;brew outdated --cask). Do not upgrade silently: a bump is
exactly when a capability fact moves under you (step 5). - Upgrade each via its detected channel (skip a tool already at latest; report it as a
no-op, not a failure). Known agents (verified 2026-06-17; re-detect, do not trust blindly):Agent Channel Upgrade command Claude Code ( @anthropic-ai/claude-code)npm global npm install -g @anthropic-ai/claude-code@latestGemini CLI ( @google/gemini-cli)npm global npm install -g @google/gemini-cli@latestCodex ( @openai/codex)npm global, PINNED npm install -g @openai/codex@<MANIFEST pin>(NOT@latest)All three are npm now: Codex moved off the macOS-only Homebrew cask 2026-06-21 so one channel manages it on macOS AND WSL. Codex is PINNED to the MANIFEST version, not floated - its config.tomlMCP-server schema is version-volatile (a newer Codex writes atransportfield an older one rejects, which deadlocked sync's codex mcpre-wiring on WSL). To bumpCodex, change the MANIFEST pin deliberately, then install that exact version. After any Codex install, confirm which -a codexresolves to the npm bin (no leftover cask).Check-only mode: skip this step. - Verify after. Re-run each
--version; emit abefore -> aftertable. - Re-stamp the MANIFEST + re-verify the load-bearing facts. Open
coding-mastermind/MANIFEST.md. Update the version table and the re-stamp date. Then
RE-VERIFY each fact the kit's design rests on (a bump can flip one silently):- codex exec sandbox default is VERSION-VOLATILE - confirm empirically via the
codex execsession header (it wasworkspace-writeon 0.139.0,read-onlyon
0.140.0). The cross-check skill passes-s read-onlyregardless, so the fix on a flip
is the MANIFEST/skill NOTE, not the command. gemini --approval-mode planstill means read-only (gemini --helpdocuments it).- The cross-check's vendor isolation (INV-25): after upgrading Codex or Gemini, run
python3 ~/.dotfiles/scripts/ci/check-vendor-isolation.py --machine --live(offline
against decoys, plus one real Codex call) and--machine --revert-test. A FAIL is a
changed capability fact: fix the cross-check snippet before re-stamping.syncalso runs
it on its own after a version change. - PreToolUse exit-2 reliable for Bash only; Stop/SubagentStop
additionalContext+ the
8-block cap;.claude/skillsauto-load; no removed primitive the kit uses.
Read the changelogs between baseline and now, not just the version strings. Output a
proposed changes list (each tied to a kit file + edit) + the re-stamped MANIFEST. Present
for approval; do NOT auto-apply the MANIFEST edit. (The binary upgrade in step 3 already
happened; only the kit-file edits are propose-only.)
- codex exec sandbox default is VERSION-VOLATILE - confirm empirically via the
Common Rationalizations
| Rationalization | Reality |
|---|---|
"Just npm install -g everything." |
Right channel still matters: cross-installing (npm a brew tool, or vice-versa) leaves two copies on PATH and the wrong one shadows. All three agents are npm now, but Codex was a Homebrew cask until 2026-06-21 - after migrating, confirm which -a codex resolves to the npm bin, not a leftover cask. |
"Float Codex to @latest like the others." |
Codex is PINNED on purpose: its config.toml MCP schema is version-volatile and floating reintroduced the drift that broke WSL. Bump the MANIFEST pin deliberately, then install that version. |
| "Upgrade silently, latest is latest." | Show current -> latest first; a bump is exactly when a sandbox flag / approval mode / hook event changes (step 5). |
| "Just bump the version numbers in the MANIFEST." | A version bump without diffing behavior misses the deprecation that breaks the kit. Diff the capability, not the string. |
| "Apply the MANIFEST edits since I'm here." | Propose. The human owns the change to the system, exactly as with any architecture decision. |
| "The fact is probably still true." | Re-verify the load-bearing ones; a silently-flipped capability is how the kit rots. |
Red Flags
- A leftover Homebrew cask
codexshadowing the npm copy on PATH after the 2026-06-21 migration (which -a codexmust resolve to the npm bin; runbrew uninstall --cask codexif a cask lingers). - Floating Codex to
@latestinstead of the MANIFEST pin (its config schema is version-volatile). - npm/brew cross-contamination (two copies on PATH).
- An upgrade run that does not record the
before -> afterdelta. - A capability change (sandbox default, approval mode, hook rename) noticed but not folded
into the MANIFEST. - Auto-applying edits to kit files or the MANIFEST (the binary upgrade is the only auto action).
Verification
- Each agent reports a version >= its pre-run version (or "already latest"); none half-upgraded.
- Every tool upgraded via its DETECTED channel (no npm/brew cross-contamination).
- MANIFEST re-stamped to the new versions + date.
- Each load-bearing capability fact re-checked and marked still-true or changed (with the codex sandbox default re-confirmed empirically).
- The MANIFEST diff was PROPOSED, not auto-applied.
Related
- The baseline it diffs and re-stamps:
coding-mastermind/MANIFEST.md. - The Wiki's
refreshskill refreshes the KNOWLEDGE (wiki pages); this refreshes the TOOLING baseline. coding-mastermind-cross-check- depends on the codex/gemini sandbox + approval-mode facts this skill re-verifies.