Skills
A skill is a set of instructions the model loads when a request fits it. You type commands; the model calls skills. The Power layer covers the full skill surface and how Guild Stack maintains and evolves its own skills safely. The Architect layer covers extending Guild Stack yourself.
Try it. You never call a skill by name. Type a command, and Guild Stack loads the
skill that owns it. This one loads using-guild, the gateway skill:
/guild:guild add a --version flag to src/index.js
The skill surface
The host's skill catalog in v3 holds
17 skills. Each one is an assembler: one indexed entry that loads only
the chapter (a file under its references/ folder) the request needs.
The other skill files still ship in the package (76 in total). They are off the
host index, so the host never lists them. Specialist starter recipes live under
skills/specialists/, and the dashboard launcher lives under
skills/playbooks/dashboard/.
One of those off-index skills is guild-dashboard. It is an on-demand
playbook, not a host-indexed skill. /guild:status dashboard launches the local
benchmark web dashboard over this project's runs and knowledge. The old
/guild:dashboard alias only prints that new spelling.
On Codex, the package exposes the skills under .agents/skills/guild/**.
The 17 skills
| Skill | Owns | Chapters it loads |
|---|---|---|
using-guild | The gateway. Decides when Guild Stack fits a task and carries the five operating principles. Bare /guild:guild, /guild:status, and /guild:config dispatch here. | none |
init | The Init phase: wiki, brownfield cheap-scan map, architecture-map stub. | none |
guild-brainstorm | The Ideation phase: a Socratic question flow that ends in an approved spec. | loop-clarify, product-explore |
guild-plan | The per-specialist lane plan at .guild/plan/<slug>.md. | loop-plan-review, product-define, product-template |
guild-team-compose | The team proposal and the team decision gate. | none |
guild-execute-plan | Lane dispatch: context bundle, tier score, backend, handoff receipts. | context-assemble, dispatching-parallel-agents, finish-branch, loop-implement, tdd, worktrees |
guild-quality | The QA phase: check selection, checks under sandbox and budget, the computed release gate. | verify-done |
guild-operations | The Ops phase: five runbook classes and four safety rails. | ops-release, ops-monitoring, ops-incident, ops-rollback, ops-maintenance |
guild-learn | The learn pipeline behind /guild:learn and /guild:init --learn. | learn-map, learn-graph, learn-knowledge, learn-onboard, learn-diff, learn-explain, learn-harvest |
guild-wiki | Every read and write of .guild/wiki/, including decision capture. | wiki-query, wiki-ingest, wiki-lint, decisions |
guild-initiative | All eight /guild:initiative sub-verbs. | none |
guild-review | Two-stage review of handoff receipts: spec compliance, then quality. | codex-review, review-broker |
guild-diagnose | Diagnosis of Guild Stack run failures. Asks before it applies any edit. | systematic-debug, root-cause-tracing, defense-in-depth, condition-based-waiting |
guild-evolve | Every /guild:maintain sub-verb, and the evolve pipeline behind a promotion gate. | evolve-targets, rollback-skill, audit, wiki-revert |
guild-create-skill | Gated mint of a new skill. | writing-skills |
guild-create-specialist | Gated mint of a new specialist. | none |
guild-reflect | Post-task reflection into .guild/reflections/<run-id>.md. Never writes the wiki. | learning-checkpoint |
What this means for you
- A v2 skill name may now be a chapter. For example,
verify-doneis a chapter ofguild-quality, andcontext-assembleis a chapter ofguild-execute-plan. Ask for the behavior; the assembler loads the chapter. - Most work starts from a command. Each phase command dispatches to exactly one assembler (see the command reference).
- The gates stay in the skills. Spec approval, the team decision, the QA release gate, and every wiki write sit inside the assembler that owns them.
Deeper: the chapter list per assembler is the references/ folder of that
skill in the plugin repo at tag v3.0.0.
Maintain and evolve
/guild:maintain is self-maintenance. It has one entry and one assembler.
Every sub-verb goes to the same skill, which routes the first token to its own
chapter. An unknown sub-verb prints usage and stops.
Try it
/guild:maintain audit
/guild:maintain evolve <id> --target=skill
/guild:maintain rollback <skill> [n]Sub-verbs
| Sub-verb | What it does |
|---|---|
evolve <id> [--target=<type>] [--auto] | Propose and gate a change to one target. |
rollback <skill> [n] | Restore the recorded inverse span, n entries back. |
audit | Static audit of plugin scripts and MCP servers. |
fix [run-id|symptom] | Systematic debugging: find the root cause before any fix. |
gc | Durable-state sweep and scratch janitor. |
wiki revert | Undo one harvest write. |
In the v3.0.0 skill, gc has no chapter yet. The assembler reports that and stops.
The eleven evolve targets
Every evolve names one target from a sealed set of eleven. The target decides
the home, and the home decides what is written. A twelfth target is a code
change, not a config key. If you omit --target, the assembler infers it.
| Home | Targets | What a run produces |
|---|---|---|
| Project | skill, playbook, profile, glossary | A span replace under this repo's own .guild/ |
| Plugin | assembler, command, agent | A candidate under the plugin's .guild/evolve/candidates/ |
| Plugin, human-only | hook, adapter, learn_script, domain_ts | The same candidate, plus compile, D5 and adapter-matrix tests before a human commits it |
Project targets write only this repo. They never touch the plugin install
directory, and they refuse paths outside the repo root, including ../ and
symlinks. Plugin targets write a candidate and stop. Nothing reaches
src/, hooks/, skills/, commands/, agents/ or templates/. The result
reports the candidate path and next_need: operator.
Two rules override the target you name:
- A delta that changes what is allowed (permissions, approval, allowed-tools) is
proposal-only on every target, with or without
--auto. The live file is unchanged. This is a heuristic, not a parser. - The writer handles prose only. A
.ts,.js,.shor.jsonfile is treated as machinery and becomes a candidate whatever target you named.
--auto
--auto runs unattended and is the cheap curator only: lint and a hash check,
no model. It carries playbook and skill. Every other target fails closed with
next_need: operator, before any candidate is queued. The replacement comes
from a deterministic template, not from a model rewriting the file.
The pipeline and promotion gate
For a skill, evolve runs ten steps: snapshot, load evals, run the current skill (A) against the proposed one (B), write assertions, grade, build a flip report, replay history in shadow mode, apply the promotion gate, then promote or archive. The flip report and shadow report must come from the scripts, never by hand. A skill is never edited without passing the gate.
The gate promotes B if any one holds:
- Zero regressions and at least one fix.
- No flip change and total tokens down by at least 10%.
- Regressions exist and you approve explicitly.
- A doc-only edit, with your recorded approval.
The result is written to .guild/evolve/<run-id>/gate.json. Rejected attempts
go to .guild/evolve/<run-id>/archived/. They are never deleted.
Each applied change is a guild.evolve_delta.v1: a replace, add or remove
of a named heading span. It must carry a before_hash. A mismatch, a missing
span, or an add onto an existing heading is refused.
Rollback
Every applied change records its inverse span and both hashes in compact
history. rollback <skill> [n] restores them, newest first, default n is 1.
Without --apply it only shows what it would restore.
| Verdict | Meaning |
|---|---|
restored | The span still matched, so the inverse was applied. |
blocked_confirm | The span drifted, or the anchor or file is gone. Guild Stack stops and asks. |
noop | No history, or n was 0. |
Rollback restores the span, not the whole file, so later edits elsewhere are
kept. A blocked step blocks everything older. After a restore, Guild Stack re-runs the
target's eval suite and reports passed, drift_suspected or failed_unrelated.
Audit
audit is static. It reads hook scripts, tooling scripts and MCP servers
(guild-memory, guild-telemetry) and runs none of them. For each it records a
SHA-256, line count, declared allowed-tools, network evidence, and writes
outside .guild/. That puts what a script declares next to what its source
does. It also lists any specialist other than researcher that declares
WebFetch or WebSearch. The report is .guild/audit/<YYYY-MM-DD>.md, and
hash changes since the previous audit are shown as drift.
Fix, gc and wiki revert
fix loads the systematic-debug discipline.
wiki revert <harvest_id> replays the harvest journal's inverse for one harvest
write. It restores the decision page (a page that did not exist is deleted), the
playbook span, and the search index. It never touches git. Use
wiki-revert.js --list --run <run-id> to find the id. It does not undo a skill
change or a page you wrote by hand.
Extension points
You can extend Guild Stack. The rules an extension is judged by are verified for v3.0.0. A catalogue of extension hooks is not yet verified.
Conformance rule for extensions
"Passed or explicitly refused" is the only conformant outcome for an extension scenario.
Renamed commands
v3 has 13 active commands. Eleven print-only alias files remain for the old spellings. Each prints its new spelling and exits. They are scheduled for deletion after one stable cut. If your scripts call an old spelling, move them to the new one before that cut.
Version surface
One command keeps the whole version surface in step. Edit .claude-plugin/plugin.json, then run npm run sync:claude-install. The stale-surface gate names that command when files drift.