agentleFS
stoa-platformstoa-platform/stoa/.claude/skills/council/SKILL.md

council

Skill9 starsChanged 7 months agoApache-2.0View on GitHub

Run 8-persona Council validation on a feature/ADR, then auto-create a Linear ticket if score >= 8/10.

  • Commits and pushes

153 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use agent-payment-x402, motion-advanced and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • TironFoxSkill

    agent-payment-x402

    Add x402 payment execution to AI agents — per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents need to pay for APIs, services, or other agents.

    Also in 5 projects that use this

  • renepfSkill

    motion-advanced

    Advanced motion patterns for React / Next.js — drag & drop, gestures, text animations, SVG path drawing, custom hooks, imperative sequences (useAnimate), loaders, and the full API decision tree. Requires motion-foundations.

    Also in 4 projects that use this

  • RojiosSkill

    defi-amm-security

    Security checklist for Solidity AMM contracts, liquidity pools, and swap flows. Covers reentrancy, CEI ordering, donation or inflation attacks, oracle manipulation, slippage, admin controls, and integer math.

    Also in 6 projects that use this

  • scottwaterSkill

    modernize

    Rebase an aging PR onto its current base and decide whether it should be modernized, reworked, or closed. Use when asked to rebase, update, or modernize an old PR.

    Also in 7 projects that use this

  • RojiosSkill

    dart-flutter-patterns

    Production-ready Dart and Flutter patterns covering null safety, immutable state, async composition, widget architecture, popular state management frameworks (BLoC, Riverpod, Provider), GoRouter navigation, Dio networking, Freezed code generation, and clean architecture.

    Also in 5 projects that use this

  • scottwaterSkill

    leaving-pr-comments

    Format comments an agent posts on GitHub on the user's behalf. Use whenever leaving a PR comment, review comment, or reply.

    Also in 6 projects that use this

  • +1 more from scottwater
  • +1 more from Rojios

The file

Show its rules and text

We split this skill into the rules it gives an agent

18 rules. 0 are common, 10 are distinctive, and 8 are very specific to this project.

  • 0

    Common

    Most of the 136 edited versions we read keep these.

  • 10

    Distinctive

    This author's own choices. Worth a look.

  • 8

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Do NOT add, remove, or rename personas here without first updating HEG-PAT-003 (canonical-first ordering).

    line 11
  2. Very specific:

    Read and understand the feature/ADR/change description.

    line 29
  3. Distinctive:

    Run the Context Compiler to get the blast radius before scoring:

    line 36
  4. Very specific:

    If a ticket ID is available: add --ticket "CAB-XXXX"

    line 40
  5. Very specific:

    Read the generated context pack in docs/context-packs/

    line 41
  6. Distinctive:

    If CRITICAL (>= 31): flag it explicitly in the Council report header

    line 44
  7. Very specific:

    If build-context.sh or stoa-impact.db is not available, skip this step with a warning and proceed without impact scoring.

    line 46
  8. Distinctive:

    If Step 1b was skipped (no DB), Impact Modifier = 0.

    line 171
  9. Distinctive:

    After scoring, apply the appropriate Stage 1 label to the Linear ticket (if one exists or is being created):

    line 183
  10. Very specific:

    If the ticket already has a council:ticket-* label, replace it (remove old, add new).

    line 193
  11. Distinctive:

    If Council passes (Go or Fix-then-confirmed), create the ticket using Linear MCP:

    line 197
  12. Distinctive:

    After ticket creation and before implementation begins, run Stage 2 to validate the implementation plan.

    line 270
  13. Distinctive:

    Do error responses leak internal info?

    line 292
  14. Distinctive:

    Do error messages enumerate users / disclose internals?

    line 302
  15. Distinctive:

    Test strategy adequate? Statefulness explicit?

    line 315
  16. Distinctive:

    No secrets hardcoded in the plan?

    line 318
  17. Very specific:

    After ticket creation, append to the appropriate section in plan.md:

    line 353
  18. Very specific:

    When S3 returns REWORK, address the per-axis blockers/warnings and re-run.

    line 390

“Common” is measured: kept by at least 6 in 10 of the 136 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md
<!-- Persona definitions are CANONICAL in `hegemon/patterns/validation/HEG-PAT-003-team-coca-adversarial-validation.md`. This skill is the runtime invocation surface for that canonical pattern. The 8 personas (Chucky, N3m0, Gh0st, Pr1nc3ss, OSS Killer, Archi 50x50, Better Call Saul, Gekk0) are mandatory for all formal Council validations. Do NOT add, remove, or rename personas here without first updating HEG-PAT-003 (canonical-first ordering). See ADR-061 (stoa-docs) for the architectural decision record. -->

Council Validation — $ARGUMENTS

Three-Stage Council

This skill drives Stage 1 (ticket pertinence) and Stage 2 (plan validation) — both prose-based, 8-persona scoring per the canonical Team Coca jury (HEG-PAT-003).

Stage 3 (code review) runs after implementation on the actual diff, via scripts/council-review.sh (4-axis: conformance, debt, attack_surface, contract_impact). It is not invoked by this skill — it is wired to the pre-push hook (CAB-2048) and council-gate.yml CI workflow (CAB-2049). See .claude/docs/council-s3.md for full docs.

S1 (this skill, prose)  →  S2 (this skill, plan)  →  implementation  →  S3 (council-review.sh, diff)  →  merge

Step 1: Gather Context

Read and understand the feature/ADR/change description. Gather context from:

  • memory.md — current sprint, related work
  • plan.md — where this fits in priorities
  • Relevant code files if technical

Step 1b: Context Compiler — Impact Score

Run the Context Compiler to get the blast radius before scoring:

  1. Determine the primary component from $ARGUMENTS (or from the ticket description if CAB-XXXX is provided)
  2. Run: docs/scripts/build-context.sh --component <component> --intent "$ARGUMENTS"
    • If a ticket ID is available: add --ticket "CAB-XXXX"
  3. Read the generated context pack in docs/context-packs/
  4. Extract the Impact Score and level (LOW/MEDIUM/HIGH/CRITICAL)
  5. Include the Impact Score in each persona's evaluation context
  6. If CRITICAL (>= 31): flag it explicitly in the Council report header

If build-context.sh or stoa-impact.db is not available, skip this step with a warning and proceed without impact scoring.

Step 2: Run the Council — 8 Personas

Evaluate $ARGUMENTS through each of the 8 canonical personas. All 8 are mandatory — no subset selection, no quick mode. The canonical roster is defined in hegemon/patterns/validation/HEG-PAT-003-team-coca-adversarial-validation.md.

Domain N/A baseline (calibration rule from CAB-2054 Phase 4): when a ticket does not touch a persona's domain (e.g., a backend infra ticket has no webapp surface for N3m0), score the persona at 8/10 (neutral-positive: "no concern detected"), not 6-7. Lower scores must be backed by an actual identified concern. This rule keeps the 8-persona average stable vs the historical 4-persona baseline (calibration drift < ±0.3 on 4/5 historic tickets).

1. Chucky (Devil's Advocate) — Score /10

  • Challenges assumptions and finds weaknesses
  • Questions: Is this really needed? What could go wrong? What's the hidden complexity? How would I break this?
  • Red flags: scope creep, over-engineering, unclear requirements, missing failure modes
  • Focus: risk assessment, edge cases, failure modes, penetration testing mindset

2. N3m0 (Webapp Security) — Score /10

  • Evaluates frontend exposure, UX, accessibility, developer experience
  • Questions: What UI surfaces are exposed? Is the keyboard flow valid? Are there a11y blockers? Do error messages leak info? Is the DX of the change reasonable?
  • Red flags: missing ARIA, keyboard traps, info-leak in error responses, UI surface that bypasses backend auth, fragile selectors
  • Focus: web application security, accessibility (WCAG), UX safety, frontend attack surface

3. Gh0st (Supply Chain) — Score /10

  • Evaluates dependencies, SBOM, lockfile integrity, transitive trust
  • Questions: What new deps does this pull? Are they pinned? Lockfile drift? Any transitive CVEs? Is the source repo trustworthy?
  • Red flags: unpinned versions, dep from unknown publisher, lockfile not updated, vendored binary blobs, npm/pip postinstall scripts
  • Focus: supply chain security, dependency trust, SBOM hygiene

4. Pr1nc3ss (Social Engineering) — Score /10

  • Evaluates human factors, trust boundaries, phishing surface
  • Questions: How would someone trick a user into bypassing this? What does the failure path teach an attacker? Are error messages too informative? Trust prompts clear?
  • Red flags: error messages that enumerate users / disclose internals, ambiguous consent UI, trust dialogs that habituate clicks, copy-paste-prone secret flows
  • Focus: human factor in security, trust boundary design, anti-phishing posture

5. OSS Killer (VC Skeptique) — Score /10

  • Evaluates market viability, competitive moat, user value
  • Questions: Does this differentiate STOA? Would a user pay for this? Is this a feature or a product? What's the ROI?
  • Red flags: me-too features, no measurable impact, building for nobody, parity work without margin uplift
  • Focus: competitive advantage, adoption potential, ROI, business viability

6. Archi 50x50 (Architecte Veteran) — Score /10

  • Evaluates architectural quality, technical debt, scalability
  • Questions: Does this follow existing patterns? Is the complexity justified? Will this age well? Does it work at enterprise scale?
  • Red flags: wrong abstraction level, coupling, breaking existing contracts, hidden statefulness
  • Focus: technical excellence, maintainability, performance, long-horizon evolution

7. Better Call Saul (Legal/IP) — Score /10

  • Evaluates legal risks, compliance, IP protection, content safety
  • Questions: Any license issues? GDPR/DORA compliance? Competitive claims risks? Customer data exposure?
  • Red flags: hardcoded secrets, unverified competitive claims, missing disclaimers, GPL contamination, PII leakage
  • Focus: legal safety, regulatory alignment, IP protection, compliance posture

8. Gekk0 (Monétisation / GTM) — Score /10

  • Evaluates revenue alignment, pricing tier fit, time-to-revenue, GTM messaging
  • Named after Gordon Gekko ("Wall Street") — ruthless monetization lens. Internal alias.
  • Questions: Can we charge for this? Which pricing tier (Open Source / Enterprise / Managed)? Does it shorten the sales cycle? Can sales explain the value prop in 30 seconds?
  • Red flags: cool feature with no revenue path, cannibalizes higher-tier offering, sales team can't explain it, misaligned with commercial positioning
  • Focus: revenue alignment, pricing tier fit, time-to-revenue, sales enablement, GTM messaging

Present each persona's evaluation:

## Council Validation

### Chucky (Devil's Advocate) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences: key concerns or approval>
**Adjustments**: <specific changes required, or "None">

### N3m0 (Webapp Security) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">

### Gh0st (Supply Chain) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">

### Pr1nc3ss (Social Engineering) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">

### OSS Killer (VC Skeptique) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">

### Archi 50x50 (Architecte Veteran) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">

### Better Call Saul (Legal/IP) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">

### Gekk0 (Monétisation / GTM) — X/10
**Verdict**: Go | Fix | Redo
<2-3 sentences>
**Adjustments**: <specific changes required, or "None">

---
**Persona Average**: X.XX/10 (averaged over 8 personas)
**Impact Score**: N (LEVEL) | Modifier: -Y.Y
**Final Score**: X.XX/10
**Global Verdict**: Go | Fix | Redo
**Adjustments to apply**: <numbered list of all adjustments from all 8 personas>

Step 3: Decision Gate

Impact Score Modifier

The Impact Score from Step 1b applies a risk modifier to the persona average:

Impact LevelScore RangeModifierRationale
LOW0-50Isolated change, no risk adjustment
MEDIUM6-150Manageable blast radius
HIGH16-30-0.5Significant cross-component risk
CRITICAL31+-1.0Major blast radius, forces careful review

Final Score = Persona Average + Impact Modifier

If Step 1b was skipped (no DB), Impact Modifier = 0.

Verdict Thresholds (applied to Final Score)

Final ScoreAction
>= 8.0Go — Auto-create Linear ticket (Step 4)
6.0 - 7.9Fix — List adjustments, ask user to confirm, then create ticket
< 6.0Redo — Fundamental issues, do NOT create ticket. Propose alternatives.

Step 3b: Apply Stage 1 Label on Linear

After scoring, apply the appropriate Stage 1 label to the Linear ticket (if one exists or is being created):

Score RangeLabelColor
>= 8.0council:ticket-gogreen (#0e8a16)
6.0 - 7.9council:ticket-fixamber (#e4b400)
< 6.0council:ticket-redored (#d73a49)

Apply via: linear.update_issue(id, labels: [existing_labels..., "council:ticket-go|fix|redo"])

If the ticket already has a council:ticket-* label, replace it (remove old, add new).

Step 4: Auto-Create Linear Ticket

If Council passes (Go or Fix-then-confirmed), create the ticket using Linear MCP:

linear.create_issue(
  title: "<type>(scope): <short description>",
  description: <see template below>,
  team: "<LINEAR_TEAM_ID>",
  project: "<LINEAR_PROJECT_ID>",
  assignee: "<LINEAR_ASSIGNEE_ID>",
  estimate: <fibonacci points>,
  priority: <1=Urgent, 2=High, 3=Normal, 4=Low>,
  labels: [<type label>, <priority label>, "hlfh:validated", "council:ticket-go|fix", "instance:<detected-instance>"],
  state: "Todo"
)

Issue Description Template

## Context
<1-2 paragraphs: what and why>

## Council Validation — X.XX/10 {Go|Fix} | Impact: N (LEVEL, modifier -Y.Y)

| Persona | Score | Verdict |
|---------|-------|---------|
| Chucky (Devil's Advocate) | X/10 | Go |
| N3m0 (Webapp Security) | X/10 | Go |
| Gh0st (Supply Chain) | X/10 | Go |
| Pr1nc3ss (Social Engineering) | X/10 | Go |
| OSS Killer (VC Skeptique) | X/10 | Go |
| Archi 50x50 (Architecte Veteran) | X/10 | Go |
| Better Call Saul (Legal/IP) | X/10 | Go |
| Gekk0 (Monétisation / GTM) | X/10 | Go |

### Adjustments Applied
1. <adjustment 1>
2. <adjustment 2>

## Scope
<Bullet list of what's in/out of scope>

## Implementation Phases
<Numbered list of phases with estimated LOC>

## DoD
- [ ] <acceptance criteria 1>
- [ ] <acceptance criteria 2>
- [ ] State files updated (memory.md, plan.md)
- [ ] CI green

Estimate Guide

ComplexityPointsExamples
Trivial1-2Config change, docs update, single-file fix
Small3-5Single component, <150 LOC, clear scope
Medium8-13Multi-component, <300 LOC, needs design
Large21-34Cross-cutting, >300 LOC, multiple PRs
Epic55+Multi-sprint, architectural change

Priority Mapping

SignalPriorityLinear Label
Demo blocker, production down1 (Urgent)P0-Urgent
This week, user-facing2 (High)P1-High
This sprint3 (Normal)P2-Medium
Backlog, nice-to-have4 (Low)P3-Low

Step 4b: Stage 2 — Plan Validation

After ticket creation and before implementation begins, run Stage 2 to validate the implementation plan.

When Stage 2 Runs

LevelStage 2?Trigger
L1 Issue-to-PRYes/go triggers Stage 2, /go-plan triggers implement
L3 Linear DispatchYes/go triggers Stage 2, /go-plan triggers implement
L3.5 AutopilotNo (batch, Stage 1 only)Unchanged
L5 Multi-AgentNo (batch, Stage 1 only)Unchanged
/council localYes/council plan "..." triggers Stage 2

Stage 2 Rubric (same 8 personas as Stage 1, plan-focused questions)

1. Chucky (Devil's Advocate) — Score /10

  • Risks documented? Edge cases covered by tests?
  • Failure modes identified? Rollback plan?
  • Hidden dependencies that could block?

2. N3m0 (Webapp Security) — Score /10

  • Does the UI plan address a11y (keyboard, screen reader, ARIA roles)?
  • Are exposed UI surfaces (new routes, public endpoints) enumerated?
  • Do error responses leak internal info? Are user-input boundaries validated?
  • Is the DX of the change reasonable for downstream consumers?

3. Gh0st (Supply Chain) — Score /10

  • Are new deps pinned with integrity hashes? Lockfile updated?
  • Any dep from an untrusted publisher? Transitive CVE check?
  • Vendored binaries? Postinstall scripts?
  • SBOM regeneration documented?

4. Pr1nc3ss (Social Engineering) — Score /10

  • Do error messages enumerate users / disclose internals?
  • Trust prompts / consent UI clear and unambiguous?
  • Any copy-paste-prone secret flows? Habituated trust dialogs?
  • Anti-phishing posture preserved?

5. OSS Killer (VC Skeptique) — Score /10

  • LOC justified? Delivers the announced value?
  • ROI of dev effort vs. user impact?
  • Could this be done simpler? Faster alternative explored?

6. Archi 50x50 (Architecte Veteran) — Score /10

  • Right level of abstraction? Existing patterns respected?
  • Breaking changes documented? Migration path clear?
  • Test strategy adequate? Statefulness explicit?

7. Better Call Saul (Legal/IP) — Score /10

  • No secrets hardcoded in the plan? GDPR/DORA impacts noted?
  • License implications of new dependencies (incl. transitive)?
  • Content safety of any new user-facing text?
  • Customer data exposure path?

8. Gekk0 (Monétisation / GTM) — Score /10

  • Does the plan preserve the monetization hook? Pricing tier boundary intact?
  • Breaking change to commercial offering? Cannibalization risk?
  • Post-merge marketing comms needed? Sales team enabled?
  • Time-to-revenue acceleration or regression?

Stage 2 Labels

Score RangeLabelColor
>= 8.0council:plan-goteal (#006b75)
6.0 - 7.9council:plan-fixdark amber (#b45309)
< 6.0council:plan-redodark red (#8b0000)

Apply via: linear.update_issue(id, labels: [existing_labels..., "council:plan-go|fix|redo"])

Stage 2 Flow

Stage 1 passes (council:ticket-go)
  ↓ /go
Claude writes implementation plan (posted as issue comment)
  ↓ plan posted
Stage 2 validates the plan (4 personas, plan-focused rubric)
  ↓ council:plan-go applied to Linear
Comment `/go-plan` to approve and start implementation

Step 5: Update plan.md

After ticket creation, append to the appropriate section in plan.md:

- [ ] CAB-XXXX: <title> (<points> pts) — Council X.XX/10

Step 6: Report to User

Council: X.XX/10 — Go
Ticket: CAB-XXXX (<points> pts)
Linear: <URL>
plan.md: updated
Next: say "go" to start implementation, or "adjust <feedback>" to revise

Step 4c: Stage 3 — Automated Code Review (post-implementation)

Stage 3 is not run by this skill. It runs automatically against the diff once implementation is complete, via scripts/council-review.sh. Shape:

AxisRole
conformanceRepo conventions, style, naming, structure
debtShortcuts, TODOs, test gaps, premature abstractions
attack_surfaceInput validation, authn/z, secrets, SSRF, PII, CORS, deps
contract_impactCross-component contracts (skipped when docs/stoa-impact.db is stale)

Exit codes: 0 APPROVED (avg >= 8.0), 1 REWORK, 2 technical failure.

Trigger points (when wired):

LevelTriggerHow
Local pre-pushgit pushPre-push hook extension (CAB-2048)
CIPR opened.github/workflows/council-gate.yml feature-flagged via vars.COUNCIL_S3_ENABLED (CAB-2049)
ManualAny diffscripts/council-review.sh --ticket CAB-XXXX --diff <range>

When S3 returns REWORK, address the per-axis blockers/warnings and re-run. Full documentation: .claude/docs/council-s3.md.

Rules

  • Never skip the Council for features >= 5 pts
  • Always include DoD in the Linear ticket
  • Adjustments are mandatory — if a persona says Fix, the adjustment must be in the DoD
  • One ticket per feature — don't create sub-tasks (those come during implementation)
  • Score honestly — don't inflate scores to pass the gate
  • For ADRs: use /create-adr skill after Council passes (ADR lives in stoa-docs)
  • For mega-tickets (>= 30 pts): add mega-ticket label automatically
  • Stage 1 labels (council:ticket-*) are applied after every Council scoring (Step 3b)
  • Stage 2 labels (council:plan-*) are applied after plan validation (Step 4b)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.