Cheatsheet
One page. Daily use. Bookmark it.
Install / update
# Fresh install
curl -fsSL https://raw.githubusercontent.com/kostiantyn-matsebora/ginee/main/install.sh | bash -s -- --adapter claude
.\install.ps1 -Adapter claude # PowerShell
# Pin version
./install.sh --ref v0.1.0 --adapter claude
$env:GINEE_REF='v0.1.0'; iwr ... | iex
# Update (preserves local/) — installer is NOT co-located (D27); use /ginee-update or the bootstrap one-liner:
GINEE_UPDATE_ONLY=1 GINEE_ADAPTER=claude bash -c "$(curl -fsSL https://raw.githubusercontent.com/kostiantyn-matsebora/ginee/main/install.sh)"
$env:GINEE_UPDATE_ONLY='1'; $env:GINEE_ADAPTER='claude'; iwr -useb https://raw.githubusercontent.com/kostiantyn-matsebora/ginee/main/install.ps1 | iex
Adapters: claude · copilot-cli · agents-md · generic.
First-day workflow
Run initial discovery # ginee-discovery skill
Then:
@<role> <task> # dispatch a specialist
auto: <task> # elide per-phase gates (D12)
branch: <task> # force feature-branch + PR mode (D17)
wt: <task> # working-tree only — no commits
commit: <task> # commit-no-push
auto: branch: <task> # combine — auto mode + branch+PR
Framework skills (tier-1: Claude Code, Copilot CLI)
Slash commands /ginee-<skill> [args]. Natural-language phrasings also match. Tier-2/3 fallback: act as team-lead and ….
/ginee-discovery # initial onboarding (Step 2 of install)
/ginee-rediscover # full re-discovery + re-extraction
/ginee-file-bug <title> # opens issue in primary repo (current)
/ginee-file-feature <title>
/ginee-file-framework-bug <title> # opens issue in ginee upstream repo
/ginee-file-framework-feature <title>
/ginee-pick-up #<N> # GitHub issue (primary repo)
/ginee-pick-up <todo-ref> # TODO line (path:line / "TODO about X")
/ginee-pick-up <freeform-description> # direct instruction
/ginee-triage # list ready issues + TODOs
/ginee-triage framework # list ready framework upstream issues
/ginee-promote-discussion #<N> # discussion → draft issue
/ginee-reindex # reconcile index with current repo state (whole repo)
/ginee-reindex <file|class> # scoped reconciliation
/ginee-update # update framework to latest release (preserves local/)
/ginee-update <tag|branch|sha> # update to a named ref
/ginee-address-review #<PR> # ingest review comments on an open PR (D24)
/ginee-iterate # relay review-cycle reply to warm cardinal — auto-engages on warm registry + in-flight reply; also "iterate on @<role>" / "forward to the warm cardinal"
Compliance — Bash hook (T3)
adapters/claude/hooks/pre-tool-use-bash.{ps1,sh} blocks 4 shell-command patterns at the tool-call layer:
| Pattern | Block |
|---|---|
git commit --no-verify / -n |
Bypasses pre-commit gate |
git push --force on main / master |
Always (rewrites trunk history) |
git reset --hard |
Unless SKIP_GINEE_COMPLIANCE=1 |
gh pr create without --body / --draft |
Per ginee PR conventions |
Opt out: local/framework.config.yaml § compliance.disabled: [pretooluse-bash-hook]. Full spec: migrations/pretooluse-bash-hook.md.
Freeform requests (any tier)
Use ginee to <task description> # team self-dispatches; no skill needed
Compliance statusline (T4)
adapters/claude/statusline.{ps1,sh} emits a single line (≤ 100 chars) to Claude Code’s status row showing [ginee] #<N> · phase: ? · warm: ? · trailer: <ok|needed> · cap: <N>%. Trailer / cap fields are locally-derived; phase + warm are placeholders pending D43 plumbing.
Wire via .claude/settings.json § statusLine. Opt out: local/framework.config.yaml § compliance.disabled: [compliance-statusline]. Full spec: migrations/compliance-statusline.md.
Phase lifecycle
| Phase | Goal | Gate |
|---|---|---|
| 1. Analysis | Bound scope | ≤ 1 unresolved scope question |
| 2. Design | Lock contracts | Contract surfaces fixed |
| 3. Design review | User approval of Phase 2 | Explicit user OK (elided in auto mode if no UX impact) |
| 4. Implementation | Working code | Compiles + engineer self-verify per core/protocols/engineer-self-verify.md (strict gate — every change-scoped suite available to the role green / n/a / stale cited) |
| 5. Testing | QA backstop — independent re-execution + AC compliance + manual smoke + defect-reproducer test per #184 (every defect routed to Phase 6 carries a committed failing test OR testable: false + rationale) |
QA-rerun touched-surface oracles green; engineer’s green log is paper trail only; defects table populated per phase-report.md |
| 6. Bug fixing | Resolve Phase 5 defects with reproducer-test fix-oracle (engineer-fix loop: run test → confirm fails → fix → re-run → confirm passes → signal back) | No regressions; reproducer test passes locally when carried |
| 7. SA governance review (conditional, #182) | Architecture compliance — fires only on (a) task introduced architectural changes OR (b) Phase-1 post-implementation-governance: yes |
APPROVE or RETURN-TO-engineer; skipped when neither trigger fires |
| 8. User approval | Delivery accept | TODO ☐ → ☒; issue closed; PR per mode |
Compliance — cardinal tools whitelist
Each pointer subagent ships with a scoped tools: list — solution-architect has no Edit / Write (Class A hard gate); ai-engineer has no Bash. Other cardinals retain full tool sets; path / command scope enforced by T2 / T3 PreToolUse hooks (parent: #135).
# local/framework.config.yaml — opt out per tactic
compliance:
disabled:
- subagent-tools-whitelist # restore unscoped tools on all cardinals
Full spec: migrations/cardinal-tools-whitelist.md.
GitHub label scheme
| Label | Meaning |
|---|---|
ginee:ready |
Pickup candidate (☐ equivalent) |
ginee:in-progress |
PM has dispatched; phases 1–7 in flight |
ginee:blocked |
Stoppable intermediate state; awaiting user / external |
value:high|medium|low |
Triage scoring — reporter-defined business impact (D23) |
complexity:high|medium|low |
Triage scoring — reporter or SA auto-estimate (D23) |
ginee:role:<cardinal> |
D39 — sub-issue dispatch — identifies cardinal owning the dispatch |
ginee:phase:<N> |
D39 — sub-issue dispatch — current lifecycle phase (1–8) |
ginee:track:off |
D39 — set on parent to opt out of sub-issue tracking for that issue |
| (closed issue) | Done — implicit, no label change needed |
Compliance — PreToolUse Edit/Write hook (T2)
Cross-platform hook at adapters/claude/hooks/pre-tool-use-edit.{ps1,sh} blocks Edit / Write / MultiEdit on:
| Violation | Source |
|---|---|
| Hot-spec frontmatter missing post-edit | D47 |
cap-bytes exceeded without Optimized-By: ai-engineer trailer |
D44 + D47 |
Bare D<N> token introduced on core/** |
D42 |
always / never / binding / mandatory as rule modifier |
D48 |
| Always-loaded surface bloat (> 50 lines) without trailer | D21 |
Wire into .claude/settings.json per adapters/claude/install.md § Compliance hooks. Bypass per call: SKIP_GINEE_COMPLIANCE=1. Opt out: local/framework.config.yaml § compliance.disabled: [pretooluse-edit-hook]. Full spec: migrations/pretooluse-edit-hook.md.
Compliance — Tier 2 hooks (T5 / T6 / T7 / T8)
Four further hooks layer prompt-time / action-time / turn-time enforcement (parent: #135). All wire automatically via /ginee-update.
| Tactic | Event · matcher | What it does |
|---|---|---|
| T5 | UserPromptSubmit | Detects task keywords (pick up #N · auto: · branch: · triage · @<role>…); prepends [ginee:context:<label>] spec excerpts via hookSpecificOutput.additionalContext. Patterns in adapters/claude/hooks/keyword-triggers.yaml. |
| T6 | PostToolUse · Edit\|Write\|MultiEdit |
On core/** edits, injects ≤ 6-line self-check (frontmatter · cap-bytes · D-free · lossless · always-loaded). Coexists with the structural context-economy gate. |
| T7 | Stop | Refuses turn-end on missing self-lint marker · gh pr create without acceptance · open ginee:in-progress issue on <N>- branch with no Phase-8 close. Anti-loop guard on stop_hook_active. |
| T8 | PreToolUse · SendMessage |
Blocks warm-cardinal continuations missing the [carry-forward] Remember: <rule> leading anchor. Per-cardinal rules in adapters/claude/hooks/carry-forward-rules.yaml. Excludes first dispatches (Agent). |
Opt-out tactic-ids: user-prompt-submit-hook · posttooluse-edit-hook · stop-hook · pretooluse-send-message-hook. Full specs: migrations/user-prompt-submit-hook.md · migrations/posttooluse-edit-hook.md · migrations/stop-hook.md · migrations/carry-forward-injection.md.
Compliance — Tier 3 closeout (T9 / T10 / T11 / T12 / T13)
Last batch of the maximum-force Claude playbook (parent: #135).
| Tactic | What lands | Where |
|---|---|---|
| T9 — bookending | 5 hard constraints at the top AND bottom of CLAUDE.md + adapter pointer |
adapters/claude/CLAUDE-pointer.md; framework-self CLAUDE.md |
| T10 — slash commands | /ginee-dispatch · /ginee-phase-report · /ginee-self-lint · /ginee-commit · /ginee-pr · /ginee-issue-pickup |
.claude/commands/ginee-*.md |
| T11 — main-thread lockdown + dispatch-cap | permissions.deny blocks framework-side Edit / Write / destructive Bash; warm-reuse.dispatch-cap: 15 triggers forced-fresh + ## Carry-forward summary |
.claude/settings.json; local/framework.config.yaml |
| T12 — SessionStart resume | [ginee:resume] block with branch + open ginee:in-progress issues |
.claude/settings.json § hooks.SessionStart |
| T13 — Optimized-By attestation (ask-mode, push-time) | When git push would push a range carrying Optimized-By: ai-engineer trailer AND no Agent(subagent_type=ai-engineer) dispatch in transcript → Claude Code permission prompt; user allows (cross-session work · manual pass · WIP) or denies (cancel + dispatch first). Path-agnostic. |
.claude/settings.json § hooks.PreToolUse (matcher: Bash) |
# local/framework.config.yaml — Tier 3 per-tactic opt-outs
compliance:
disabled:
- slash-commands
- main-thread-permissions
- session-start-hook
- optimized-by-attestation
# Warm registry soft cap — over-cap forces fresh + summary handoff per warm-cardinal-default.md
warm-reuse:
dispatch-cap: 15
Slash commands install via install.{ps1,sh} (re-run via /ginee-update). All five tactics fail-open on error. Full specs: migrations/claude-md-bookending.md · migrations/slash-commands-suite.md · migrations/warm-cardinal-default.md · migrations/session-start-hook.md · migrations/optimized-by-attestation.md.
Sub-issue dispatch (D39)
On issue-sourced tasks, team-lead creates one GitHub sub-issue per cardinal dispatch under the parent — labelled by role + phase, threading progress comments + cumulative time, closed on phase-report return. Cross-session resume reads parent + open sub-issues; no transcript replay.
notrack: <task> # opt out of sub-issue tracking for this task
Per-issue opt-out — apply ginee:track:off label on the parent issue.
Repo-wide opt-out — local/framework.config.yaml:
dispatch:
tracking: in-context # sub-issues (default on github.repo) | in-context
time-tracking: false # turn off the time-tracking surface
Assignee precedence — non-empty human assignee on a sub-issue overrules the ginee:role:<cardinal> label; cardinal dispatch suspended until cleared. Reassign to empty to resume.
Progress-comment shape (cardinal-authored on the sub-issue):
Started: <sub-task>. time: 0m. cumulative: 12m.
Done: <sub-task>. <commit-link>. time: 18m. cumulative: 30m.
Phase-report return doubles as the closing comment; mandatory ## Time spent: <H>h <M>m perceived effort; <N> progress comments on sub-issue #<M>.
Triage scoring (D23)
score = value / complexity # H=3, M=2, L=1 (ATAM H/M/L)
| value \ complexity | H | M | L |
|---|---|---|---|
| H | 1.00 | 1.50 | 3.00 (quick-win) |
| M | 0.67 | 1.00 | 2.00 |
| L | 0.33 | 0.50 | 1.00 |
/ginee-triage sort key: Score DESC, Age DESC. Unscored grouped at bottom. TODO marker ☐ [v:H c:L] Description (case-insensitive). Sticky <!-- ginee:score v=1 --> comment per issue; refresh via @team-lead recompute score #<N>. Override formula: local/framework.config.yaml § triage.scoring-formula.
Classical-architect SA model (D25, refined #182)
SA has three activities, all OUTSIDE the implementation phases (Phase 4 / 5 / 6):
| Activity | When | What |
|---|---|---|
| Design | Phase 1 elicit + Phase 2 architecture | Authors local/requirements.md (FR/NFR/Constraints) + local/asr-utility-tree.md (ASRs via ATAM) + architecture doc + ADRs. Phase-1 output: post-implementation-governance: yes/no. |
| Review | Out-of-process — periodic / accumulated drift / explicit user request | Verdict on architecture-of-record; never on engineer mid-flight proposals. |
| Governance | Phase 7 only, sporadic | Fires only when (a) task introduced architectural changes OR (b) Phase-1 post-implementation-governance: yes. Default = skip. |
Phase 4 / 5 / 6 — categorical refusal. SA is NOT dispatched during implementation phases. Engineer-surfaced architectural-delta needs route through team-lead’s gate → user picks defer to next design cycle OR stop + re-enter Phase 1–2.
D25 doc-ownership map (per core/protocols/doc-roles.md):
| Doc class | Owner |
|---|---|
| Architecture doc · ADRs · requirements register · ASR utility tree · diagrams | solution-architect |
| CRs · project-instruction file · work-breakdown | team-lead |
| CI/CD guide · infra runbooks | devops-engineer |
| Backend READMEs · API docs · service docs | backend-engineer |
| Frontend READMEs · component docs · style guides | frontend-engineer |
| Test plans · scenario docs · QA reports | qa-engineer |
| Mockup | mockup-owning role (default frontend-engineer) |
Implementation rendering — forbidden in every SA artefact (#182): adopter function / member identifiers · line-numbered citations into the working tree · commit SHAs · handler-body snippets · “how to wire it” prescriptions. ADRs cite mechanisms + rationale, not code sites. SA’s ## Verification log carries SA-artefact content self-lint: PASS / <N findings> per touched artefact.
Engineer-proposed architectural change (delta to contract / topology / stack / NFR-affecting): flag in ## Open issues + ## Next dispatch needed: team-lead · architectural-delta gate · <reason>. Team-lead surfaces user gate. SA dispatched at Phase 1–2 only if user picks stop + re-enter. Local bug fixes (no architectural delta) route engineer → engineer.
Greenfield vs delta — discovery detects “no architecture doc” → greenfield: true in local/project-profile.md → SA enters greenfield design on first non-trivial task. Delta mode produces ADR + ASR amendments; never rewrites the architecture doc wholesale.
Migration on upgrade: @team-lead rediscover runs Step 8c re-attribution sweep per migrations/classical-architect.md.
Change governance (D45)
Pre-authorship gate on CR / ADR drafting. Adopter-controlled via local/framework.config.yaml § change-governance.
change-governance:
cr:
enabled: true # set false → skip CR authorship
skip-when-issue-source: true # issue IS the requirement record
adr:
enabled: true # set false → skip ADR authorship
require-architectural-delta: true # no delta heuristic → skip ADR
prompt-before-create: non-trivial # always | never | non-trivial
| Prefix | Effect |
|---|---|
cr: |
Force CR authorship (overrides config) |
nocr: |
Skip CR authorship (overrides config) |
adr: |
Force ADR authorship (overrides config) |
noadr: |
Skip ADR authorship (overrides config) |
Combine with auto: · branch: · wt: · commit: · model:<tier> · notrack:.
Architectural-delta triggers (ADR gate) — component boundaries · wire contracts · NFR-bearing claims · architecture invariants · stack / topology / infrastructure.
Non-trivial heuristic — ≥ 2 delta triggers OR local/requirements.md register-diff non-empty.
Skip-reason enum — config-disabled · issue-source-skip (CR) · no-architectural-delta (ADR) · prefix-override · user-declined. Logged under ## Decisions made in the phase-report.
Full spec: migrations/change-governance-opt-out.md.
Address review on a PR (D24)
/ginee-address-review #<PR> # ingest review comments + reviews
@team-lead address-review #<PR> # command equivalent (every adapter)
Procedure: fetch pulls/{N}/comments + /reviews → dedup by thread-id (skip resolved + already-marked) → route each remark per local/bindings.md § Source-of-truth ownership → surface plan table for approval (forced-interactive, even in auto:) → dispatch specialists in parallel → squash fixes into one cycle commit + push → post per-thread replies + one sticky cycle summary. Lossless coverage (every remark → fix OR reply). Markers <!-- ginee:review-reply r=<id> --> (per-thread) + <!-- ginee:review-cycle n=<N> --> (sticky).
Subagent-return schema (D29)
Every cardinal-dispatch return is schema-bound per core/templates/phase-report.md. Dispatch payloads · sticky ginee:score · audit comments · sub-issue bodies · review-cycle comments follow sister sidecars under core/protocols/*-schema.md (D49).
Status: Done | In-progress | Blocked | Hand-off
## Estimate # table — sub-task · estimate (min) (required iff dispatch carried ## Scope size ∈ {15-60m, >60m}; placed BEFORE ## Files touched; #168)
## Files touched # table — path · Δ lines · purpose (required; (none) if empty)
## Decisions made # bullets — imperative + cite (≤ 80 ch) (required; (none) if empty)
## Verification log # table — command · outcome (required)
## Open issues # bullets — issue + owner (≤ 80 ch) (required; (none) if empty)
## Next dispatch needed # one-liner — role · surface · reason (required; (none) if empty)
## Source reads (this dispatch) # table — path · justification · index entry (required; (none) if empty)
## Hand-off # core/templates/hand-off-note.md (forced-handoff only)
## Stop-state # Done / In-progress / Not-started (Status: In-progress only)
## Notes # free prose · ≤ 200 words (optional escape hatch)
8 mandatory checks before report-as-done — 6 from D22 / D26 / D48 (D48 added RFC 2119 binding-strength signal) + no narrative preamble + ## Estimate present iff dispatch carried ## Scope size ∈ {15-60m, >60m} (#168). Forbidden — narrative preamble · restated dispatch context · code snippets outside the Notes carve-out · verbose rationale outside ## Notes · parenthetical comma-soup. Target reduction vs free-form returns: ~70%.
Scope-size classifier (#168). Team-lead emits ≤15m · 15-60m · >60m + one-line signal before every cardinal dispatch — written into the dispatch-prompt’s ## Scope size section and the sub-issue’s **Scope size:** field. 15-60m / >60m load iteration-protocol + require the cardinal’s ## Estimate return. ≤15m skips both — class is recorded explicitly. lite: prefix auto-classifies as ≤15m. Full spec — migrations/estimation-gate-fires.md.
Index-first read order — cardinals consult local/index/ summaries first; raw source reads are fallback + require a one-line justification in ## Source reads. Orchestrator’s single format-only re-dispatch carve-out fires when raw source appears in ## Files touched AND ## Source reads is missing / (none). Bedrock: core/protocols/index-protocol.md § Read order.
Hot-spec frontmatter (D47)
Every core/ hot-spec file (process.md · process/*.md · protocols/*.md · roles/*.md · roles/*.details.md) carries a YAML header declaring its load contract:
---
audience: <role | all-cardinals | team-lead-only>
load: always | on-demand
triggers: [keyword1, keyword2] # required when load == on-demand
cap-bytes: <N> # per-file byte budget
reads-before-applying: [path1, path2] # [] if none
---
Excluded — core/templates/*.md · core/skills/ginee-*/SKILL.md · local/roles/*.md. Validator — scripts/context-economy-check.ps1 fails CI on missing frontmatter; Optimized-By: ai-engineer trailer bypasses. Failure codes — missing · malformed · missing-key · invalid-load · empty-triggers · invalid-cap-bytes.
Full spec: core/protocols/hot-spec-format.md.
Release-surface authoring (D40)
Three surfaces, three voices, three caps — applies only to maintainers drafting release artefacts.
| Surface | Voice | Bullet cap |
|---|---|---|
migrations/D<N>-*.md |
Framework-dev (precise jargon OK) | None — structured tables / lists |
docs/CHANGELOG.md |
Framework-dev in sub-bullets; lead-in ≤ 25 words | Lead-in ≤ 25 words + sub-bullets |
.github/release-notes/v*.md |
User-value — adopter benefit at line start | ≤ 20 words per bullet + (D<N>) tag |
Sidecar self-lint — 5 checks before publish: word cap · user-value voice · (D<N>) tag · no implementation boilerplate · migration link in footer.
Pattern — lead with adopter verb (/ginee-update works again not Step 1 no longer requires installer scripts inside .agents/ginee/). Full spec: core/protocols/changelog-protocol.md.
Blueprint-diff gate (D41)
Phase 4 entry precondition — every dispatch touching local/framework.config.yaml § visual-source-of-truth.path diffs vs blueprint-ref first, classifies deltas, surfaces to team-lead before edits.
# local/framework.config.yaml — defaults derive from `mockup:` when block absent
visual-source-of-truth:
type: html-mockup # html-mockup | figma | image | video | other
path: docs/mockup.html
blueprint-ref: origin/main # or v1.2.0, snapshot path, Figma version URL
scope-discriminator: block-glob
enabled: true
| Delta class | Outcome |
|---|---|
| Expected (inside issue scope) | Edits proceed |
| Pre-existing | Edits proceed |
| Unexpected (outside issue scope) | Forced-interactive gate — auto-mode does NOT elide |
4 mandatory checks before edits begin — config resolved · diff computed · classification complete · ## Verification log row written. Inapplicable case (no edit on configured path) — cite "visual-SoT untouched — protocol n/a" and skip.
Full spec: core/protocols/blueprint-diff-protocol.md.
Option-list shape (D30)
Every Phase 2 design proposal + every iteration-protocol Propose step (Phase 4–7 > 15-min sub-tasks with a live adopt-vs-build axis) MUST surface ≥ 1 adopt candidate OR an explicit (none viable — <reason>) cite.
Options:
- adopt — <name> v<version> — <license> — <source link>
— fit: <one-line concrete rationale, citing constraint / NFR / stack>
- adopt — <name> v<version> — <license> — <source link>
— fit: <one-line>
- build — <scope> — rationale: <why surveyed adopts rejected>
# OR if research empty:
- (none viable — <one-line reason>)
- build — <scope> — see ADR draft.
5 mandatory checks before surfacing — adopt floor present · citations complete (name · version · source · license · fit) · tagging explicit (adopt / build / hybrid — no silent mixing) · empty research documented · fit rationale concrete (not hand-waved). Self-lint runs in-thread; no external linter. License gating — framework expresses no opinion; adopters wire policy in local/. Inapplicable sub-tasks cite *“axis n/a —
Full spec: core/protocols/options-protocol.md. Example: core/protocols/doc-authoring-examples.md § 11.
Model tier (D31)
Three tiers (vendor-neutral); per-task prefix combinable with auto: / branch: / wt: / commit::
reasoning ← team-lead · solution-architect (Claude default: claude-opus-4-7)
standard ← ai-engineer · 4 engineer cardinals (Claude default: claude-sonnet-4-6)
fast ← opt-in for mechanical work (Claude default: claude-haiku-4-5-20251001)
Per-task prefix examples:
model:reasoning Add the new ASR utility-tree leaves for the latency NFR.
auto: model:fast Re-label stale issues with ginee:blocked.
branch: model:reasoning Pick up #N
Resolution order (stop at first match) — (1) model:<tier> prefix · (2) Phase-3 user answer · (3) local/framework.config.yaml § model-tier.per-role.<role> · (4) core/roles/<role>.md default-tier:.
Adapter override. Edit local/framework.config.yaml § model-tier (per-role tier + per-adapter tier→model map); re-run installer to apply.
Full spec: migrations/model-tier.md.
Source-of-truth pattern
local/index/* ← default read every dispatch
docs/* (raw) ← on demand only (verbatim wording matters)
local/bindings.md ← governance + tie-breakers
local/project-profile.md ← discovered project context
local/framework.config.yaml ← concept → path mappings
Strict-domain rule (forbidden role-crossings)
Per local/bindings.md § Project role boundaries. Each row is a hard stop.
| Role | Must NOT edit |
|---|---|
solution-architect |
mockup, server source, client source, IaC, Dockerfiles, CI workflows. (D25) CRs · project-instruction · work-breakdown → team-lead; per-tier docs → tier engineers. SA reviews these for architectural coherence; does not edit. |
frontend-engineer |
server source (incl. SQL in API endpoints), IaC, Dockerfiles, CI workflows |
backend-engineer |
client source, mockup, IaC, Dockerfiles, CI workflows |
devops-engineer |
application code, schema migrations, application config content |
qa-engineer |
mockup, production server / client code (owns test code only) |
ai-engineer |
rules / invariants / requirements (semantics → the doc’s authoring role per D25, not SA-only); production / test / IaC code |
team-lead |
everything except local/* written during discovery + (D25) CRs · project-instruction · work-breakdown which team-lead authors |
Cross-domain need surfaced mid-task → propose hand-off in final report. Never patch across. Engineer-proposed architectural changes (D25) route to solution-architect § Review (APPROVE / REJECT / REQUEST-CHANGES).
Index file Load-when tiers
Per cardinal role kernel ## Source of truth:
- always — foundational; loaded every dispatch (single-digit KB combined).
- scope-loaded — trigger phrase (e.g.
wire/endpoint touch,infra work,dep bump,test authoring). Loaded only when the task description matches.
Specialist reports loaded set in first response.
Iteration protocol (work > 15 min)
- Estimation-first dispatch — task decomposition + per-task minutes before edits.
- User approves the batch.
- 3–5 min iterations, each stoppable.
- Stop anywhere → resume next session with zero rework.
Delivery modes (D17)
| Prefix | Mode | Phase 8 |
|---|---|---|
branch: |
feature branch + PR | gh pr create with Closes #<N> |
wt: |
working-tree only | PM surfaces git diff; user commits / discards |
commit: |
commit-no-push | PM surfaces git log; user pushes |
Framework defaults: branch for issue / TODO-sourced; wt for freeform. Auto-mode default: wt.
Common pitfalls
| Symptom | Likely cause | Fix |
|---|---|---|
| Specialist refuses to edit a file | Forbidden role-crossing | Dispatch the owning role |
| Index is dormant (“no consumer”) | Novel class extracted but no kernel cites it | Wire via local/bindings.md § Project-specific index citations or remove the class |
local/index/ > 30% of docs/ size |
Recipe over-extracting | Run /ginee-reindex against the worst class; check compression target ≤ 0.5 |
| Discovery flagged staleness on a doc | SHA-256 drift | /ginee-reindex <source> (scoped) or /ginee-reindex (whole-repo — also catches net-new files) or /ginee-rediscover |
New doc / config landed but isn’t in local/index/ |
Net-new file within existing class | /ginee-reindex reconciles; /ginee-rediscover only needed for novel classes (new directory / new tool) |
| PR didn’t auto-close issue on merge | Stacked PR merged into non-default branch first | Manual gh issue close <N> --comment "..." |
| Trivial task loads full 64 KB baseline | Role kernel Load when not honoured |
Specialist should report loaded set; if it doesn’t, your kernel may be stale — /ginee-update to refresh |
| Framework feels out of date / missing a recent feature | Local install behind upstream | /ginee-update (latest release) or /ginee-update <tag> (named ref); never auto-updates — adopter approves the plan |
| Triage shows everything “Unscored” | No value:* / complexity:* labels yet |
Reporter sets value at file-time; SA auto-estimates complexity on pickup; or @team-lead recompute score #<N> after gh issue edit |
| Review comments piling up on a PR | No invocation yet | /ginee-address-review #<PR> — plan-table approval is forced-interactive even in auto: |
| Adopter doc PR fails markdown lint | D22 doc-authoring protocol — discovered linter ran | Apply default-shape map (tables / bullets / definitions) per core/protocols/doc-authoring-protocol.md; verify with ${commands.lint.docs} |
| ginee-filed issue / framework-authored comment has dense parenthetical-soup prose | D26 scope extension — self-lint missed it | Restructure per default-shape map (tables for inventories · bullets for multi-rule · no parenthetical comma-lists in sentences); covers every section, including Summary |
Where things live
.agents/ginee/
├── core/ # upstream — process spec + role kernels + templates
│ ├── process.md # common — principles · doc style · reporting · index (D35)
│ ├── process/ # D35 — phase + dispatch files, load-on-demand per role
│ │ ├── phase-{1..8}-*.md # one file per lifecycle phase
│ │ └── dispatch.md # orchestration — skill-runner · parallelism · auto mode
│ ├── protocols/ # load-on-demand protocol specs (D46 — all named workflows here)
│ │ ├── automatic-mode.md # D12 auto-mode
│ │ ├── delivery-modes.md # D17 branch / wt / commit
│ │ ├── ci-watch.md # D20 post-PR CI watch
│ │ ├── triage-scoring.md # D23 value × complexity
│ │ ├── doc-authoring-protocol.md # D22 / D26 / D29 enforcement
│ │ ├── doc-authoring-examples.md # paired bad/good examples
│ │ ├── doc-roles.md # D25 all-roles authorship
│ │ ├── doc-size-caps.md # D44 per-class size caps
│ │ ├── index-protocol.md # local/index/ extraction + load triggers
│ │ ├── index-syntax.md # .idx DSL grammar
│ │ ├── iteration-protocol.md # estimation-first dispatch
│ │ ├── options-protocol.md # D30 adopt-vs-build shape
│ │ ├── blueprint-diff-protocol.md # D41 visual-SoT diff gate
│ │ ├── changelog-protocol.md # D40 release-surface authoring
│ │ ├── github-integration.md # issue / PR / label flow
│ │ ├── cross-agent-handoff.md # structured hand-off
│ │ ├── cross-domain-bugs.md # propose → implement → verify
│ │ └── post-task-check-in.md # after every completed request
│ ├── roles/ # 7 cardinal role kernels (each declares phase-participation:)
│ └── templates/ # bindings, PR description, hand-off note,
│ # requirements-register (D25), asr-utility-tree (D25)
├── adapters/<client>/ # upstream — per-client renderings (pointer files)
├── extras/roles/ # upstream — opt-in specialists
└── local/ # YOU OWN THIS — survives every update
├── project-profile.md
├── bindings.md
├── framework.config.yaml
├── requirements.md # D25 — FRs / NFRs / Constraints (SA-authored)
├── asr-utility-tree.md # D25 — ASRs derived via ATAM (SA-authored)
├── index/ # extracted summaries
└── roles/ # your custom roles