When to invoke
Invoke when the user says "I decided X", "let's go with Y", "the answer is Z", "go ahead with", "approved", or otherwise resolves a parked card. The Andon-cord lowering action — pull-card raises the gate; this skill is the human's one-action handoff so pull-card can resume.
Decide a card
The Andon-cord loop: Skill(pull-card) raises human_gate
(none → decision / session) when it hits a question only a human
can answer; this skill lowers the gate back to none in one cheap
action. Status stays open, so the next pull-card claims and
implements per the recorded decision. Humans resolve the cause;
agents wield the wrench — and an agent that can cite the project
rubric MAY decide on its own behalf (lazy Andon, below).
Edge cases live in reference.md — a sibling file in this
skill's directory. Read the named section only when the situation
actually applies:
| Situation |
reference.md section |
| Presenting labeled options via AskUserQuestion |
Mirroring labeled options |
| The decision reverses / re-scopes a stated verdict |
Re-scope reconciliation |
| An agent recorded a decision it shouldn't have |
Rewinding an agent decision |
| Why the cord must be cheap to lower |
Rationale |
What this skill does to the card
Body. Replaces the ## Decision required section (or appends
a fresh ## Decision section) with:
## Decision
*Resolved YYYY-MM-DD:* <one-line decision>
*Reasoning:* <one-line why>
log.md. Appends up to two entries, timeline-ordered: first an
archive of the prior ## Decision required content (the options
and trade-offs the README rewrite would otherwise lose), then the
resolution (<decision> — <reason>. Gate <prior> → none.).
Frontmatter. Flips human_gate: decision (or session) →
none. Status is unchanged (open stays open).
Refuses if the gate is already none or the title doesn't
exist.
Workflow
Read the card body (goc show <title>). Confirm the decision
actually answers the parked question: if ## Decision required
enumerates options A/B/C, the user's free-text decision should map
onto one (or explicitly reject all and propose D). When eliciting
the pick with AskUserQuestion, mirror the body's option labels and
order verbatim — do not reorder or rephrase (reference.md
§ Mirroring labeled options).
Then check advanced_by for unclosed prerequisites, and read any
you find before recording. An advances edge does not record
whether it is strict, so the only way to learn that a prerequisite
reframes this card is to open it. Lowering the gate is what makes
the card autonomously pullable, so a decision taken over an unread
prerequisite is one an unattended worker may act on before any human
sees the card again. goc decide prints the same advisory
(non-blocking — it names the prerequisites and lowers the gate
anyway), but it prints it as the decision lands, which is too late
to inform it.
Run the CLI.
goc decide <title> \
--decision "<one-line what>" \
--because "<one-line why>"
Commit follows repo policy. goc decide honors
.game-of-cards/config.yaml workflow.auto_commit (default
true), committing body + log + gate flip as
decide: <title> — <decision>. Override per invocation with
--no-commit / --commit.
If the decision reverses or re-scopes a verdict the card already
states, goc decide only writes the ## Decision block — every
other surface still asserting the old verdict is now stale. Reconcile
by hand: the summary: frontmatter, any > ⚠ body banner, DoD
wording, and mentions in neighbor cards. The CLI prints a reminder on
re-scope language and goc validate flags
DECISION_CONTRADICTS_VERDICT. For a true re-scope, prefer
supersede + create over an in-place rewrite. Full checklist:
reference.md § Re-scope reconciliation.
When an agent invokes this skill (lazy Andon)
An agent may decide on its own only after consulting the consuming
repo's project-specific rubric:
!cat .game-of-cards/hooks/decide-card.md 2>/dev/null || true
- Cite the rubric.
--because MUST start with a clause naming
the rubric consulted and what it returned (citation form per the
hook above).
- Cite the primary source when the answer rests on literature:
DOI/PMID, textbook chapter, or project-doc section.
- No agent-decide for human-judgement questions — resource
allocation, scope splits, deadlines, stakeholder alignment, taste
calls. Raise the gate instead.
- Default to human when ambiguous. If the rubric doesn't give a
clean answer, raise the gate; don't guess.
A decision recorded in violation of this contract can be rewound —
reference.md § Rewinding an agent decision.
When NOT to use this skill
- Card needs implementation, not a decision. If you're ready to
do the work yourself, just do the work.
- Decision changes scope. "Scope this differently / split /
reframe" is not a resolution — use
Skill(advance-card) <title> superseded +
Skill(create-card) for the replacement.
- Gate is
session and the session never happened. Capturing a
real session's outcome is valid; shortcutting a session that
never took place is not — schedule the session instead.
What this skill does NOT do
- Does NOT implement the card (that's
pull-card's next round).
- Does NOT close the card (that's
Skill(finish-card)'s DoD-gated
contract).
- Does NOT mutate
status — the card stays open.
Cross-references
reference.md (this skill's directory) — edge cases routed above.
Skill(scan-deck) — surfaces parked cards; its "decisions to make"
Q&A calls this skill per card.
Skill(advance-card) — status machine + waiting_on overlay; gate
≠ status.
Skill(card-schema) — human_gate enum and the ## Decision required body convention.
1---2name: decide-card-23description: Record a decision (what + why) on a parked card and lower the human gate from decision or session to none. AUTO-INVOKE on "I decided X", "let's go with Y", "approved", or any resolution of a parked card — the human's one-action handoff so pull-card can resume.4---56## When to invoke78Invoke when the user says "I decided X", "let's go with Y", "the answer is Z", "go ahead with", "approved", or otherwise resolves a parked card. The Andon-cord lowering action — pull-card raises the gate; this skill is the human's one-action handoff so pull-card can resume.910# Decide a card1112The Andon-cord loop: `Skill(pull-card)` raises `human_gate`13(`none → decision` / `session`) when it hits a question only a human14can answer; this skill lowers the gate back to `none` in one cheap15action. Status stays `open`, so the next `pull-card` claims and16implements per the recorded decision. Humans resolve the cause;17agents wield the wrench — and an agent that can cite the project18rubric MAY decide on its own behalf (lazy Andon, below).1920**Edge cases live in `reference.md`** — a sibling file in this21skill's directory. Read the named section only when the situation22actually applies:2324| Situation | `reference.md` section |25|---|---|26| Presenting labeled options via AskUserQuestion | Mirroring labeled options |27| The decision reverses / re-scopes a stated verdict | Re-scope reconciliation |28| An agent recorded a decision it shouldn't have | Rewinding an agent decision |29| Why the cord must be cheap to lower | Rationale |3031## What this skill does to the card32331. **Body.** Replaces the `## Decision required` section (or appends34 a fresh `## Decision` section) with:3536 ```37 ## Decision3839 *Resolved YYYY-MM-DD:* <one-line decision>4041 *Reasoning:* <one-line why>42 ```43442. **log.md.** Appends up to two entries, timeline-ordered: first an45 archive of the prior `## Decision required` content (the options46 and trade-offs the README rewrite would otherwise lose), then the47 resolution (`<decision> — <reason>. Gate <prior> → none.`).48493. **Frontmatter.** Flips `human_gate: decision` (or `session`) →50 `none`. Status is unchanged (`open` stays `open`).51524. **Refuses** if the gate is already `none` or the title doesn't53 exist.5455## Workflow56571. **Read the card body** (`goc show <title>`). Confirm the decision58 actually answers the parked question: if `## Decision required`59 enumerates options A/B/C, the user's free-text decision should map60 onto one (or explicitly reject all and propose D). When eliciting61 the pick with AskUserQuestion, mirror the body's option labels and62 order verbatim — do not reorder or rephrase (`reference.md`63 § Mirroring labeled options).6465 **Then check `advanced_by` for unclosed prerequisites, and read any66 you find before recording.** An `advances` edge does not record67 whether it is strict, so the only way to learn that a prerequisite68 *reframes* this card is to open it. Lowering the gate is what makes69 the card autonomously pullable, so a decision taken over an unread70 prerequisite is one an unattended worker may act on before any human71 sees the card again. `goc decide` prints the same advisory72 (non-blocking — it names the prerequisites and lowers the gate73 anyway), but it prints it as the decision lands, which is too late74 to inform it.75762. **Run the CLI.**7778 ```bash79 goc decide <title> \80 --decision "<one-line what>" \81 --because "<one-line why>"82 ```83843. **Commit follows repo policy.** `goc decide` honors85 `.game-of-cards/config.yaml` `workflow.auto_commit` (default86 `true`), committing body + log + gate flip as87 `decide: <title> — <decision>`. Override per invocation with88 `--no-commit` / `--commit`.8990If the decision **reverses or re-scopes a verdict the card already91states**, `goc decide` only writes the `## Decision` block — every92other surface still asserting the old verdict is now stale. Reconcile93by hand: the `summary:` frontmatter, any `> ⚠` body banner, DoD94wording, and mentions in neighbor cards. The CLI prints a reminder on95re-scope language and `goc validate` flags96`DECISION_CONTRADICTS_VERDICT`. For a true re-scope, prefer97supersede + create over an in-place rewrite. Full checklist:98`reference.md` § Re-scope reconciliation.99100## When an agent invokes this skill (lazy Andon)101102An agent may decide *on its own* only after consulting the consuming103repo's project-specific rubric:104105!`cat .game-of-cards/hooks/decide-card.md 2>/dev/null || true`1061071. **Cite the rubric.** `--because` MUST start with a clause naming108 the rubric consulted and what it returned (citation form per the109 hook above).1102. **Cite the primary source** when the answer rests on literature:111 DOI/PMID, textbook chapter, or project-doc section.1123. **No agent-decide for human-judgement questions** — resource113 allocation, scope splits, deadlines, stakeholder alignment, taste114 calls. Raise the gate instead.1154. **Default to human when ambiguous.** If the rubric doesn't give a116 clean answer, raise the gate; don't guess.117118A decision recorded in violation of this contract can be rewound —119`reference.md` § Rewinding an agent decision.120121## When NOT to use this skill122123- **Card needs implementation, not a decision.** If you're ready to124 do the work yourself, just do the work.125- **Decision changes scope.** "Scope this differently / split /126 reframe" is not a resolution — use127 `Skill(advance-card) <title> superseded` +128 `Skill(create-card)` for the replacement.129- **Gate is `session` and the session never happened.** Capturing a130 real session's outcome is valid; shortcutting a session that131 never took place is not — schedule the session instead.132133## What this skill does NOT do134135- Does NOT implement the card (that's `pull-card`'s next round).136- Does NOT close the card (that's `Skill(finish-card)`'s DoD-gated137 contract).138- Does NOT mutate `status` — the card stays `open`.139140## Cross-references141142- `reference.md` (this skill's directory) — edge cases routed above.143- `Skill(scan-deck)` — surfaces parked cards; its "decisions to make"144 Q&A calls this skill per card.145- `Skill(advance-card)` — status machine + `waiting_on` overlay; gate146 ≠ status.147- `Skill(card-schema)` — `human_gate` enum and the `## Decision148 required` body convention.