Quartermaster
Quartermaster is a non-destructive lifecycle manager for coding-agent skills.
It moves skills along a tiered ladder based on real usage and never removes
anything from disk without explicit human approval.
Use the bundled qm CLI for all operations. It uses runtime adapters for
Claude Code, Codex, Copilot CLI, VS Code, and generic command agents; logs every
change to a reversible audit trail; and prints the token-saved number.
The state ladder
| State |
In context? |
Auto-loadable? |
User can invoke? |
On disk? |
Frontmatter |
| active |
yes (indexed) |
yes |
yes |
yes |
(no flags) |
| demoted |
yes (indexed) |
no |
yes (manual) |
yes |
disable-model-invocation: true |
| hidden |
no |
no |
no |
yes |
+ user-invocable: false |
| archived |
no |
no |
no |
yes, outside active roots |
archive manifest |
| deleted |
no |
— |
— |
no |
(file removed — human-gated only) |
Demote, hide, and archive are safe and reversible. Delete is the only
destructive action and requires explicit --yes confirmation.
Running the CLI
python3 "${CLAUDE_PLUGIN_ROOT}/bin/qm" <command>
# or, if bin/ is on PATH:
qm <command>
Commands
qm runtimes — list supported runtime adapters.
qm runtime-setup [runtime] [--all] — write workspace-local setup files for
Claude, Codex, Copilot CLI, VS Code, or generic command agents.
qm status [--layers] [--all] — table of every skill, state, last-used date,
token cost, optional metadata layer/priority, and optional archived skills.
qm compile "<project intent>" — propose an active loadout matched to the
project. Shows layered keep/demote/block decisions, guardrails, conflicts,
and a loadout manifest path when applied.
qm review — show proposed demotions/promotions/hides/archives/restores and
approve them in one batch.
qm restore <skill> / qm activate <skill> — bring a skill back to active,
including from archive.
qm demote <skill> — take a skill out of auto-selection (manual-only).
qm hide <skill> — remove a skill from context entirely.
qm archive <skill> --yes — move a skill out of active roots into reversible
archive storage.
qm delete <skill> --yes — permanently remove a (hidden) skill. Destructive.
qm revert [-n N] [--skill X] — undo the last N automatic changes (one-click
revert). Skips deletions/admissions, which stay human-gated.
qm history <skill> — inspect historical usage, selection, state, and
metadata for a skill.
qm conflicts — report explicit and inferred skill conflicts.
qm sources — list curated external public skill sources to consider.
qm intake <local_repo> --dry-run — scan a local external skill repo without
executing code; --yes imports only accepted high-value candidates.
qm log — print the audit trail of every transition.
Authoring arm (the capability-gap loop)
qm gap "<what you needed>" — record a capability gap: a need with no
matching skill. When the same gap recurs and nothing on the shelf covers it,
Quartermaster recommends authoring a new skill.
qm gaps — show clustered gaps and which ones warrant a new skill.
qm author <name> [--desc ...] [--brief ...] — scaffold a new skill and admit
it as active, probationary (on trial). This writes a stub only.
qm graduate <skill> — end a skill's probation once it has proven useful.
Feedback (plain-language complaints)
qm feedback "<what's off>" — route a natural-language complaint to the right
lever. A style miss is appended to the always-on style file; a capability
miss is recorded as a gap (feeding the authoring arm); "stop suggesting X" /
"I keep using X" become demote/promote suggestions for a named skill. Only the
local style note and gap log are written automatically — skill moves are
suggested unless you pass --apply.
Probation
A newly authored skill is admitted probationary: it is active and usable
immediately, but on trial. qm review proposes graduating it if it gets used,
or demoting it if it sits unused past the probation window. qm status marks
probationary skills with ◉ prob.
How to behave when using this skill
- Default to non-destructive verbs. Reach for
demote, hide, compile,
archive, and review. These are always safe.
- Never run
qm delete on your own initiative. Only delete when the user
explicitly asks to permanently remove a specific skill, and surface that it
is irreversible before doing so. Pass --yes only after the user confirms.
- Show the numbers. After a lifecycle change, run
qm status so the user
sees the updated loadout and token savings.
- Apply in batches with approval. For
compile and review, present the
proposed plan first; apply only after the user agrees (or pass --yes when
they've already said go).
- Reassure on reversibility. Every non-delete change is undone with
qm restore <skill>; mention this when you demote, hide, or archive
something.
- Author through skill-creator. When
qm gaps recommends a new skill (or
the user asks for one), run qm author <name> to create the probationary
stub, then invoke the skill-creator skill to write the actual
instructions into the generated SKILL.md. qm author only scaffolds — it
never writes the skill's content itself. Leave the skill probationary until
the user confirms it works, then qm graduate <name>.
- Turn complaints into action. When the user gripes in plain language
("this isn't matching my style", "I keep needing X", "stop suggesting Y"),
run
qm feedback "<their words>". Apply the style note / gap automatically,
but confirm before moving a skill (or pass --apply once they agree).
- Undo is one command. Any automatic change can be reversed with
qm revert (last change) or qm restore <skill>. Offer it freely.
- Respect guardrails. If
qm compile reports a blocked risky skill or a
guardrail conflict, do not force the action. Explain the missing guardrail or
conflict and ask the user how to resolve it.
- Treat external repos as untrusted. Use
qm sources to suggest candidate
repos, ask the user to clone one, run qm intake <path> --dry-run, and only
import with --yes after accepted candidates are reviewed.
Notes
- Telemetry is local-only (under
~/.quartermaster/, or $QM_HOME). Nothing is
sent over the network.
- To manage a specific skills directory, pass
--skills-dir <path> or set
QM_SKILLS_DIR.
- To select an agent runtime, pass
--runtime claude|codex|copilot|vscode|generic
or set QM_RUNTIME. Claude remains the default adapter.
- To prepare workspace-local runtime files, run
qm runtime-setup <runtime> or
qm runtime-setup --all.
1---2name: quartermaster3description: Manage the lifecycle of installed coding-agent skills — list their state, compile layered safety-first loadouts, demote/hide/archive unused skills to save context, restore them, inspect history/conflicts, author skills for recurring gaps, and (only with explicit approval) delete. Use when the user wants to curate active skills, reduce context cost, manage guardrails, or restore archived capabilities.4---56# Quartermaster78Quartermaster is a **non-destructive** lifecycle manager for coding-agent skills.9It moves skills along a tiered ladder based on real usage and **never removes10anything from disk without explicit human approval**.1112Use the bundled `qm` CLI for all operations. It uses runtime adapters for13Claude Code, Codex, Copilot CLI, VS Code, and generic command agents; logs every14change to a reversible audit trail; and prints the token-saved number.1516## The state ladder1718| State | In context? | Auto-loadable? | User can invoke? | On disk? | Frontmatter |19|---|---|---|---|---|---|20| **active** | yes (indexed) | yes | yes | yes | (no flags) |21| **demoted** | yes (indexed) | no | yes (manual) | yes | `disable-model-invocation: true` |22| **hidden** | no | no | no | yes | `+ user-invocable: false` |23| **archived** | no | no | no | yes, outside active roots | archive manifest |24| **deleted** | no | — | — | **no** | (file removed — human-gated only) |2526Demote, hide, and archive are safe and reversible. **Delete is the only27destructive action and requires explicit `--yes` confirmation.**2829## Running the CLI3031```bash32python3 "${CLAUDE_PLUGIN_ROOT}/bin/qm" <command>33# or, if bin/ is on PATH:34qm <command>35```3637## Commands3839- `qm runtimes` — list supported runtime adapters.40- `qm runtime-setup [runtime] [--all]` — write workspace-local setup files for41 Claude, Codex, Copilot CLI, VS Code, or generic command agents.42- `qm status [--layers] [--all]` — table of every skill, state, last-used date,43 token cost, optional metadata layer/priority, and optional archived skills.44- `qm compile "<project intent>"` — propose an active loadout matched to the45 project. Shows layered keep/demote/block decisions, guardrails, conflicts,46 and a loadout manifest path when applied.47- `qm review` — show proposed demotions/promotions/hides/archives/restores and48 approve them in one batch.49- `qm restore <skill>` / `qm activate <skill>` — bring a skill back to active,50 including from archive.51- `qm demote <skill>` — take a skill out of auto-selection (manual-only).52- `qm hide <skill>` — remove a skill from context entirely.53- `qm archive <skill> --yes` — move a skill out of active roots into reversible54 archive storage.55- `qm delete <skill> --yes` — permanently remove a (hidden) skill. **Destructive.**56- `qm revert [-n N] [--skill X]` — undo the last N automatic changes (one-click57 revert). Skips deletions/admissions, which stay human-gated.58- `qm history <skill>` — inspect historical usage, selection, state, and59 metadata for a skill.60- `qm conflicts` — report explicit and inferred skill conflicts.61- `qm sources` — list curated external public skill sources to consider.62- `qm intake <local_repo> --dry-run` — scan a local external skill repo without63 executing code; `--yes` imports only accepted high-value candidates.64- `qm log` — print the audit trail of every transition.6566### Authoring arm (the capability-gap loop)6768- `qm gap "<what you needed>"` — record a capability gap: a need with no69 matching skill. When the same gap recurs and nothing on the shelf covers it,70 Quartermaster recommends authoring a new skill.71- `qm gaps` — show clustered gaps and which ones warrant a new skill.72- `qm author <name> [--desc ...] [--brief ...]` — scaffold a new skill and admit73 it as **active, probationary** (on trial). This writes a stub only.74- `qm graduate <skill>` — end a skill's probation once it has proven useful.7576### Feedback (plain-language complaints)7778- `qm feedback "<what's off>"` — route a natural-language complaint to the right79 lever. A *style* miss is appended to the always-on style file; a *capability*80 miss is recorded as a gap (feeding the authoring arm); "stop suggesting X" /81 "I keep using X" become demote/promote suggestions for a named skill. Only the82 local style note and gap log are written automatically — skill moves are83 suggested unless you pass `--apply`.8485## Probation8687A newly authored skill is admitted **probationary**: it is `active` and usable88immediately, but on trial. `qm review` proposes graduating it if it gets used,89or demoting it if it sits unused past the probation window. `qm status` marks90probationary skills with `◉ prob`.9192## How to behave when using this skill93941. **Default to non-destructive verbs.** Reach for `demote`, `hide`, `compile`,95 `archive`, and `review`. These are always safe.962. **Never run `qm delete` on your own initiative.** Only delete when the user97 explicitly asks to permanently remove a specific skill, and surface that it98 is irreversible before doing so. Pass `--yes` only after the user confirms.993. **Show the numbers.** After a lifecycle change, run `qm status` so the user100 sees the updated loadout and token savings.1014. **Apply in batches with approval.** For `compile` and `review`, present the102 proposed plan first; apply only after the user agrees (or pass `--yes` when103 they've already said go).1045. **Reassure on reversibility.** Every non-delete change is undone with105 `qm restore <skill>`; mention this when you demote, hide, or archive106 something.1076. **Author through skill-creator.** When `qm gaps` recommends a new skill (or108 the user asks for one), run `qm author <name>` to create the probationary109 stub, then invoke the **`skill-creator`** skill to write the actual110 instructions into the generated `SKILL.md`. `qm author` only scaffolds — it111 never writes the skill's content itself. Leave the skill probationary until112 the user confirms it works, then `qm graduate <name>`.1137. **Turn complaints into action.** When the user gripes in plain language114 ("this isn't matching my style", "I keep needing X", "stop suggesting Y"),115 run `qm feedback "<their words>"`. Apply the style note / gap automatically,116 but confirm before moving a skill (or pass `--apply` once they agree).1178. **Undo is one command.** Any automatic change can be reversed with118 `qm revert` (last change) or `qm restore <skill>`. Offer it freely.1199. **Respect guardrails.** If `qm compile` reports a blocked risky skill or a120 guardrail conflict, do not force the action. Explain the missing guardrail or121 conflict and ask the user how to resolve it.12210. **Treat external repos as untrusted.** Use `qm sources` to suggest candidate123 repos, ask the user to clone one, run `qm intake <path> --dry-run`, and only124 import with `--yes` after accepted candidates are reviewed.125126## Notes127128- Telemetry is local-only (under `~/.quartermaster/`, or `$QM_HOME`). Nothing is129 sent over the network.130- To manage a specific skills directory, pass `--skills-dir <path>` or set131 `QM_SKILLS_DIR`.132- To select an agent runtime, pass `--runtime claude|codex|copilot|vscode|generic`133 or set `QM_RUNTIME`. Claude remains the default adapter.134- To prepare workspace-local runtime files, run `qm runtime-setup <runtime>` or135 `qm runtime-setup --all`.