Skip to content
Back to skills

Brief Spec

ASecurity

Use when the user wants to capture a feature as a brief or spec before planning it -- "arma un brief para esto", "necesito un spec antes de planear", "definamos el alcance de la feature", "write a brief for this", "spec this out before we plan it".

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentsrustgobashapidatabase

Works with

  • terminal
  • cli
  • api

Security analysis

A100/100

Scanned September 25, 2026

npx -y skills add metraton/gaia --skill brief-spec --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Brief Spec?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Brief Spec
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/metraton-brief-spec/badge)](https://www.skillsdirectory.com/skills/metraton-brief-spec)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: brief-spec
description: Use when the user wants to capture a feature as a brief or spec before planning it -- "arma un brief para esto", "necesito un spec antes de planear", "definamos el alcance de la feature", "write a brief for this", "spec this out before we plan it".
---

# Brief Spec

Brief Spec is how the orchestrator turns what it agreed with the user into a
brief: an objective, observable acceptance criteria, the decisions taken, and
the boundaries, ready for gaia-planner. The brief is the contract the plan is
audited against, so the orchestrator owns its content and owns checking the
plan that comes back.

## The database is the brief

A brief is a row in `briefs` plus its child rows (`acceptance_criteria`,
`brief_decisions`, `milestones`), written and read only through `gaia brief`.
What `gaia brief show` prints is a rendering of those rows: nothing on disk is
authoritative and there is no file to write. Code or docs that still describe
`.claude/project-context/briefs/` are legacy -- flag them in
`cross_layer_impacts` instead of editing them as a side effect.

**Execution follows authority.** The orchestrator co-creates the brief and may
use its trusted Gaia CLI lane for bounded reads and user-confirmed
`new`/headless `edit`/`set-status`/AC/decision writes. `gaia-operator` remains
the alternative for batching or operational separation. Destructive deletion is
outside the direct lane. The orchestrator owns the questions, confirmation,
and content whichever executor carries the command.

## Cuando llegas aquí

El orquestador cargó esta skill porque la conversación entró en Cerrar: el
usuario y él acordaron varias cosas y es momento de materializarlas. No estás
aquí porque la petición superó un umbral de tamaño, sino porque hay acuerdos
que capturar.

1. Resumir los acuerdos que ya emergieron -- no re-descubrirlos desde cero.
2. Preguntar sólo lo que falte para que cada AC sea observable, o dejarlo
   marcado como pendiente de aclarar.
3. Materializar el brief con `gaia brief new --headless` y presentarlo al
   usuario para validar.

## Process

1. **Ask only for the gaps**, one question per round via AskUserQuestion:
   surface type (ui, api, job, cli); the problem it solves; the constraints that
   matter; for each AC, what the user would see when it holds and what symptom
   would show it failing silently; what is explicitly out of scope. Stop when
   every AC is observable or explicitly marked unresolved (step 4).

2. **Create the brief:**

   ```bash
   gaia brief new --headless --title="<human title>" --status=draft \
     --surface-type=<ui|api|job|cli> --objective="<1-3 sentences>" \
     --context="<project constraints>" --approach="<high-level strategy>" \
     --out-of-scope="<explicit non-goals>"
   ```

   The slug is derived from the title. `draft` is the review window; move it
   to `open` only when the user is ready to plan against it.

3. **Add each acceptance criterion as an observation:**

   ```bash
   gaia brief ac add <slug> --id=AC-1 --description="<what the user observes>"
   ```

   An AC says what is true and visible when the work is done, precisely enough
   to disagree with ("p95 under 200ms on /search", not "fast"). It does not
   prescribe the proof: which test, command or rubric shows it is the planner's
   proposal, authored as gates. Fixing a mechanism here, before anyone has read
   the code, turns a guess into a requirement. Set `--evidence-type` /
   `--evidence-shape` only when the user asked to see the result a particular
   way ("a screenshot of the dashboard"). Evidence itself is recorded during
   execution with `gaia evidence add`, never as a path declared in advance.

4. **Mark what is not settled.** Where the user has not decided something the
   plan depends on, write `FALTA ACLARAR: <question>` into the field it affects
   (the AC description, the objective, the approach). The planner does not plan
   past such a mark: it returns `NEEDS_INPUT` with the list, and planning
   resumes once the answer replaces the mark (`gaia brief ac edit` or
   `gaia brief edit --headless`). `gaia brief verify` reports every field
   and AC still carrying the mark (`unresolved_clarification`, advisory like
   its other checks); it matches the literal text, so spell it exactly.

5. **Record decisions in their own field:**

   ```bash
   gaia brief decision add <slug> --text="<the decision>" --rationale="<why>" \
     [--supersedes=<id>]
   ```

   A decision that changes an earlier one names it with `--supersedes`, so
   `gaia brief show` lists the current answer apart from the one it replaced.
   Appending a new paragraph to `approach` instead leaves two answers to the
   same question with nothing saying which one holds.

6. **Confirm.** Run `gaia brief show <slug>`, read it back, ask "Does this
   capture what you want?", and when confirmed dispatch gaia-planner.

## Maintaining a brief

| Need | Command |
|------|---------|
| Patch one field | `gaia brief edit <name> --headless --field=<objective\|context\|approach\|out_of_scope\|description\|title\|surface_type> --content="..."` |
| Edit an AC in place | `gaia brief ac edit <name> --id=AC-1 --description="..."` |
| Change status | `gaia brief set-status <name> <status>` (`draft -> {open, closed, archived}` -- the last two are the shortcut for a brief small enough to skip planning -- then `open -> in-progress -> closed -> {archived, open}`; `archived` is terminal; illegal transitions are refused) |
| Read | `gaia brief list`, `gaia brief show <name> [--json]`, `gaia brief search <query>`, `gaia brief decision list <name>` |
| Delete | dispatch gaia-operator for `gaia brief delete <name> --yes` (cascades to ACs, plan, tasks; no undo) -- prefer `archived` |

The interactive `gaia brief edit <name>` opens `$EDITOR` and needs a human at a
terminal; dispatch only the headless form. Editing an AC's description marks
stale the gate verdicts of the tasks that cover it: they stop counting until a
verifier confirms them again.

## Evidence

The `evidence` table accepts exactly five types (`gaia evidence add --type`):
`text`, `file`, `command_output`, `url`, `screenshot`. Evidence is positive by
default; `--negative` records a refutation and never accepts an AC; `--gate
<id>` ties it to the gate that produced it. An AC is done only when every task
covering it is done and it has at least one positive evidence row
(`gaia/briefs/store.py::derive_brief_state`), which is why an AC with no
reachable observation cannot close.

## After the brief -- you own the plan

The brief settles *whether* the work is worth doing; the planner does not
re-open that. It owes you what you need to audit its plan: feasibility
findings, assumptions, risks, the 3-5 decisions that shape the plan with their
alternatives and the AC motivating each, the ordering rationale, each task's
gates, and the checklist of what depends on third parties. Require those in the
dispatch -- a plan you cannot audit is one you cannot own. Escalate to the user
only what is genuinely new or blocking; never re-ask what the brief settled.

**Judge that each gate proves its task's intent.** Well-formedness is checked
for you (`gaia brief verify`: a task without gates, an empty shape, an AC no
task covers). What no check can judge is fit: a `command` gate on a design
judgment, a `semantic` rubric on something a test could decide, a code gate
with no failing run before the change. Flag a mismatch back to the planner
rather than accept it.

**Before dispatching, run `gaia brief verify <slug>`.** It is the cheap
coverage check: an `uncovered_ac` means some AC has no task that could ever
make it done.

**Approve by activating.** After the audit and the user checkpoint, run
`gaia plan set-status <slug> active`: `active` is what approved means. Dispatch
only tasks of an active, unpaused plan; until then send corrections back to the
planner, who edits the draft directly.

**Changing an approved plan goes through the planner.** Request it with the
justification (`gaia plan change request <slug> --reason="..."`); the planner
proposes which tasks the change touches and why; review the proposal
(`gaia plan change list <slug>`) and approve it (`gaia plan change approve`),
taking it to the user first when it changes *what* is delivered. Verified tasks
the change does not touch stay as they are. To stop dispatch without changing
the plan, `gaia plan pause <slug> --reason="..."`, then `gaia plan resume`.

## Anti-Patterns

- **Prescribing the proof in the AC** -- the brief is written before anyone
  reads the code; a mechanism fixed there binds the plan to a guess. State the
  observation and let the planner propose the gate.
- **Planning past a `FALTA ACLARAR` mark** -- the plan inherits the guess and
  every task built on it. Resolve it with the user first.
- **Burying a changed decision in `approach`** -- the old and new answers both
  survive with nothing saying which holds. Use `brief decision add
  --supersedes`.
- **Skipping `--status=draft`** -- creating directly in `open` bypasses the
  window where the user confirms the ACs.
- **Accepting a plan you cannot audit, or a gate that misses its task's
  intent** -- you own the result either way; require the audit inputs and
  send mismatches back.
- **Re-asking what the brief settled** -- escalate only what the plan surfaced
  as new or blocking.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…