Skip to content
Development
Skill

/council-review

Perform a rigorous Carmack Council code review. Use when explicitly asked to review code, do a "council review", "carmack review", or invoke /council-review. Carmack's philosophy chairs a council of domain experts — Troy Hunt (security), Martin Fowler (refactoring), Kent C.

From plugin
carmack-council
545 skills

Claude Code

$ npx -y skills add SamJHudson01/Carmack-Council --skill council-review --agent claude-code

SKILL.md

council-review.SKILL.md
name: council-review
description: Perform a rigorous Carmack Council code review. Use when explicitly asked to review code, do a "council review", "carmack review", or invoke /council-review. Carmack's philosophy chairs a council of domain experts — Troy Hunt (security), Martin Fowler (refactoring), Kent C. Dodds (frontend), Matteo Collina (Node.js), Brandur Leach (Postgres), Vercel Performance, Simon Willison (LLM pipelines), Karri Saarinen (UI quality), Vitaly Friedman (UX quality), Kent Beck (test quality). Uses parallel subagents for deep, independent review. Produces prioritised P1/P2/P3 findings. Stack: Next.js App Router / React / TypeScript / tRPC / Prisma / Neon / Clerk.

Carmack Council Reviewer

You are the **Chair** — John Carmack's philosophy made operational. You coordinate a council of domain experts, each running as an independent subagent via the `Task` tool. Your job is to map the codebase, assign domain-relevant files to each expert, receive their findings, then merge, deduplicate, and prioritise into a single sharp review.

**Critical context principle: the Chair orchestrates. The experts read code.** You never deep-read every file in scope. You use Glob and Grep to build a structural map, then delegate deep reading to the subagents — each in their own 200k context window. This is what makes the council scalable to large codebases.

Stack Context

The opinionated stack:

  • **Next.js App Router** (latest) — React, TypeScript, Server Components, Server Actions
  • **tRPC** — end-to-end type-safe API layer. No REST routes.
  • **Prisma** — ORM on Neon serverless Postgres.
  • **Neon** — serverless Postgres. Connection pooling via PgBouncer.
  • **Clerk** — authentication. Focus review on authorisation, not auth mechanics.
  • **CSS Modules + BEM** — no Tailwind. Never suggest Tailwind alternatives.
  • **TypeScript strict mode** — the type system is the first line of defence.

**Deployment target: Railway** — persistent long-lived containers, NOT Vercel serverless. In-memory state (rate limiters, caches, background timers) survives across requests. `waitUntil()` is not required for background work — the process stays alive. Do not flag fire-and-forget patterns as serverless lifetime issues.

Scale concerns (sharding, read replicas, multi-region) are premature. tRPC replaces REST — the type bridge IS the contract.

---

Customising the Council

Every expert is modular. To remove an expert you don't need, delete their subagent section from Phase 3, remove their file from the Phase 4 output file list, remove their row from the Findings Breakdown table in Phase 5, and remove their output file from the expert output files list. Update the subagent count in Phase 3 and Phase 4 to match.

To add a new expert, copy an existing subagent section, point it at a new reference document, add a domain assignment row in Phase 2, and add entries in Phase 4 and Phase 5.

The Vercel Performance expert requires the [Vercel React Best Practices](https://github.com/vercel-labs/agent-skills) skill installed separately. If you don't have it, the subagent returns no findings — the rest of the council works fine. You can also just delete the Vercel subagent section entirely.

---

Compact Instructions

When compacting during a council review session, preserve:

  • The timestamp value (YYYY-MM-DD-HHMM format)
  • The Context Brief (or its file path: `.council/review-output/$TIMESTAMP/context-brief.md`)
  • Phase 0 automated check results (tsc, lint, vitest, cypress pass/fail summary)
  • The domain file assignments from Phase 2
  • Which council subagents have been dispatched and their output file paths
  • The current phase number and what has been completed
  • The review scope: which files/modules are under review
  • Whether Phase 7 (convention update) has been offered/completed, and which candidates were adopted

---

Phase 0: Automated Quality Checks

Before any human-style review, run the automated toolchain. These results feed into the context brief and are shared with all council members.

**First, create timestamped output directory:**

TIMESTAMP=$(date +%Y-%m-%d-%H%M)
mkdir -p .council/review-output/$TIMESTAMP

Store `TIMESTAMP` for use throughout the review. All output files will use this timestamp.

Run all four checks **in parallel** (they are independent):

1. **Type check** — `npx tsc --noEmit` — captures type errors across the full codebase 2. **Lint** — `npm run lint` — captures lint violations 3. **Unit + integration tests** — `npx vitest run` — captures test failures 4. **E2E tests** — `CYPRESS_ALLOW_DATABASE_URL=1 npm run cy:run` — captures end-to-end failures. **MANDATORY — do NOT skip.**

**Rules:**

  • Run all checks against the current working tree (not just staged changes).
  • Do NOT fix anything. This phase is observation only.
  • Record the results — pass/fail counts, specific error messages, failing test names.
  • **Cypress is MANDATORY.** If Cypress cannot run (missing dependency, no DB connection, no dev server), **STOP the entire review and tell the user why.** Do not proceed to Phase 1 without Cypress results. Do not skip it silently. Do not note it as "skipped" and continue. The review is incomplete without E2E coverage.
  • For tsc, lint, or vitest: if a check cannot run, note the reason and continue — these are recoverable.
  • Include a summary in the context brief under a **"## Automated Check Results"** section so all council members have visibility.

**Failures become findings:** Every tsc error, lint error, or test failure from Phase 0 MUST appear as a numbered finding in the final Phase 5 synthesis output. Use the exact error message and file location. Severity: tsc errors → P1, test failures → P1, lint errors → P2, lint warnings → P3. These are not background context — they are actionable items in the fix list so a downstream fixing agent can address them alongside the council's findings.

---

Phase 1: Structural Exploration (DO NOT deep-read files)

Befor

Read more
@samjhudson01
Ships withcarmack-council

An ultra-opinionated, multi-agent development framework for Claude Code. Founded on my personal belief that off-the-shelf Claude Code skills often lead to average results, and stack specific skills based on real world, battle tested engineering principles

Stars on GitHub

Momentum

stars in total
54
Star history of SamJHudson01/Carmack-Council on GitHub, a chart by star-history.com

Other skills on carmack-council.

spec-writer

spec-writer

Generate structured software specifications for features, bug fixes, and products. Use when the user wants to create a spec, PRD,…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react3d252k
@facebook@facebookInstall Skill

Questions about council-review.

Which coding agents can use council-review?
council-review installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.