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

SkillOwnsChapters it loads
using-guildThe 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
initThe Init phase: wiki, brownfield cheap-scan map, architecture-map stub.none
guild-brainstormThe Ideation phase: a Socratic question flow that ends in an approved spec.loop-clarify, product-explore
guild-planThe per-specialist lane plan at .guild/plan/<slug>.md.loop-plan-review, product-define, product-template
guild-team-composeThe team proposal and the team decision gate.none
guild-execute-planLane dispatch: context bundle, tier score, backend, handoff receipts.context-assemble, dispatching-parallel-agents, finish-branch, loop-implement, tdd, worktrees
guild-qualityThe QA phase: check selection, checks under sandbox and budget, the computed release gate.verify-done
guild-operationsThe Ops phase: five runbook classes and four safety rails.ops-release, ops-monitoring, ops-incident, ops-rollback, ops-maintenance
guild-learnThe learn pipeline behind /guild:learn and /guild:init --learn.learn-map, learn-graph, learn-knowledge, learn-onboard, learn-diff, learn-explain, learn-harvest
guild-wikiEvery read and write of .guild/wiki/, including decision capture.wiki-query, wiki-ingest, wiki-lint, decisions
guild-initiativeAll eight /guild:initiative sub-verbs.none
guild-reviewTwo-stage review of handoff receipts: spec compliance, then quality.codex-review, review-broker
guild-diagnoseDiagnosis of Guild Stack run failures. Asks before it applies any edit.systematic-debug, root-cause-tracing, defense-in-depth, condition-based-waiting
guild-evolveEvery /guild:maintain sub-verb, and the evolve pipeline behind a promotion gate.evolve-targets, rollback-skill, audit, wiki-revert
guild-create-skillGated mint of a new skill.writing-skills
guild-create-specialistGated mint of a new specialist.none
guild-reflectPost-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-done is a chapter of guild-quality, and context-assemble is a chapter of guild-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.

The evolve loop: snapshot, load evals, paired A and B runs, grade, flip report, shadow mode, promotion gate, then promote with a recorded inverse span or archive the attempt.
Open full size
Self-evolution loop: a run reflects, a gate promotes, the next run benefits.
Open full size

Try it

/guild:maintain audit
/guild:maintain evolve <id> --target=skill
/guild:maintain rollback <skill> [n]

Sub-verbs

Sub-verbWhat 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.
auditStatic audit of plugin scripts and MCP servers.
fix [run-id|symptom]Systematic debugging: find the root cause before any fix.
gcDurable-state sweep and scratch janitor.
wiki revertUndo 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.

HomeTargetsWhat a run produces
Projectskill, playbook, profile, glossaryA span replace under this repo's own .guild/
Pluginassembler, command, agentA candidate under the plugin's .guild/evolve/candidates/
Plugin, human-onlyhook, adapter, learn_script, domain_tsThe 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, .sh or .json file 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:

  1. Zero regressions and at least one fix.
  2. No flip change and total tokens down by at least 10%.
  3. Regressions exist and you approve explicitly.
  4. 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.

VerdictMeaning
restoredThe span still matched, so the inverse was applied.
blocked_confirmThe span drifted, or the anchor or file is gone. Guild Stack stops and asks.
noopNo 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.