Go Ultimate Skill
A single, opinionated skill for writing the best Go programs — synthesized from
four general-Go skills, four agent/MCP donors (one donor, eino, contributes two
documents), the Google and Uber style guides, and a repository/production-practice
donor. Opinions represent the synthesized consensus; where the donors disagreed,
this skill resolved the conflict per the precedence ladder below.
When this skill applies
Always, for any Go work: code generation, refactoring, code review,
architecture and style discussions, scaffolding, or any change to .go files.
It overrides generic Go style/lint guidance when they conflict.
Setup — resolving <skill-dir>
Several instructions in this skill reference <skill-dir> — the absolute path to
this installed skill directory. Resolve it once per session.
Primary rule: <skill-dir> is the directory containing this SKILL.md.
That always works, regardless of how the skill was installed. The bundled
detector is at <skill-dir>/scripts/goversion/main.go; the templates are at
<skill-dir>/assets/.
This skill ships a manifest for each supported harness (see the repo root), so it
can be installed as a plugin on all of them. Each harness resolves the plugin
root differently; use the row matching yours:
| Harness |
<skill-dir> resolution |
| Claude Code (plugin) |
${CLAUDE_PLUGIN_ROOT}/skills/go-ultimate — the harness resolves this at runtime; the path includes a version directory, so do not hardcode it. |
| Codex (plugin) |
${PLUGIN_ROOT}/skills/go-ultimate — Codex exposes the plugin root via ${PLUGIN_ROOT} in hook/script contexts. |
| Cursor (plugin) |
the plugin's skills/go-ultimate/ directory; Cursor installs plugins into its cache. Confirm the absolute path via Cursor's plugin UI. |
| Grok Build (plugin) |
the plugin's skills/go-ultimate/ directory; Grok reads Claude-compatible plugin content. |
| GitHub Copilot CLI (plugin) |
the plugin's skills/go-ultimate/ directory. |
| ZCode |
~/.zcode/skills/go-ultimate (or the workspace .zcode/skills/); ZCode also recognizes the .claude-plugin/ manifest. |
| OpenCode |
the directory you copied skills/go-ultimate/ into (manual install — see README). |
| Any harness (manual clone) |
the cloned skills/go-ultimate/ directory. |
The <skill-dir> path matters for this skill. Unlike markdown-only skills,
go-ultimate executes its bundled detector (scripts/goversion/main.go) and
references its assets/ templates by path. If your harness does not expose the
plugin root through a variable (Cursor, Grok, Copilot, OpenCode), locate the
installed skills/go-ultimate/ directory once and use that absolute path. As a
fallback, the detector is a stdlib-only single file — copy main.go into the
target project and run it there if path resolution fails.
How to use this skill
- Detect the project's Go version by running the bundled detector
go run <skill-dir>/scripts/goversion/main.go <project-path> (it prints the
bare version, e.g. 1.24.3, and always exits 0 — falling back to the Go
runtime version if no go.mod or no go directive is found). Use features
up to that version. See references/modern-go.md.
- Identify the project type using the decision tree below, then load the
matching reference.
- Follow the non-negotiable principles below — these always apply.
- On conflicts between references, apply the precedence rules at the end.
Project-type decision tree
Ask "what is the user building?" and route accordingly:
Is the code a single binary that the user runs?
├── Yes → Is it < ~300 lines with no external deps beyond stdlib?
│ ├── Yes → SCRIPT / TINY TOOL
│ │ → references/project-layouts.md § Scripts
│ │ → references/engineering-policy.md
│ └── No → CLI APPLICATION
│ → references/project-layouts.md § CLI
│ → references/engineering-policy.md
│
Is the code meant to be imported by other modules?
├── Yes → LIBRARY / MODULE
│ → references/libraries.md
│ → references/project-layouts.md § Library
│ → references/engineering-policy.md
│
Is the code a long-running server (HTTP/gRPC/messaging)?
├── Yes → BACKEND SERVICE
│ → references/architecture.md (mandatory)
│ → references/production-readiness.md (mandatory)
│ → references/project-layouts.md § Service
│ → references/engineering-policy.md
│
Is the code a server exposing tools/resources/prompts to LLMs over MCP?
├── Yes → MCP SERVER
│ → references/mcp-server.md (mandatory)
│ → references/project-layouts.md § Service or § CLI (stdio server = CLI-shaped)
│ → references/production-readiness.md (if hosted/long-running, not stdio)
│ → references/engineering-policy.md
│
Is the code an LLM-driven agent that calls tools / orchestrates multi-step reasoning?
├── Yes → AI AGENT
│ → references/agents.md (mandatory)
│ → references/project-layouts.md § CLI or § Service (depends on hosting)
│ → references/production-readiness.md (if hosted/long-running)
│ → references/engineering-policy.md
│
Is the code a code generator, linter, or analysis tool?
├── Yes → Treat as CLI APPLICATION or LIBRARY (whichever fits the distribution),
│ then see references/engineering-policy.md § Code generation
│
Otherwise → ask the user to clarify before proposing structure.
Regardless of type: when initializing a repository, adding CI, or reviewing
repository hygiene, also load
references/repo-and-ci.md — required files, ignore
baselines, go tool pinning, workflow shape, release stamping.
Non-negotiable principles (always apply)
These are the consensus backbone. Every Go file this skill touches obeys them.
Modern Go, version-gated. Use every feature up to the project's go.mod
version. any over interface{}. errors.Is/As over ==. slices/maps/
cmp over hand-rolled loops. See references/modern-go.md.
No pkg/ directory. Ever. Library code lives at the module root;
importable apps expose a public port/ package. The pkg/ convention is a
kubernetes-era anti-pattern. See references/project-layouts.md.
internal/ for private code; cmd/<name>/ for multiple binaries; flat for
tiny tools. Start simple; grow deliberately.
Context first, errors explicit. func F(ctx context.Context, ...) (..., error).
Wrap with fmt.Errorf("...: %w", err). Never compare errors with ==.
Thin adapters, fat-free imports. Business-logic packages never import
net/http, os, or transport SDKs. Adapters only translate formats and
protocol shapes.
Concurrency hygiene. Every goroutine has an exit condition (Context or
WaitGroup). Use errgroup for parallel fan-out. Always test with -race.
Accept interfaces, return structs. Interfaces are defined at the point of
use, not the point of implementation. Small, single-method interfaces win.
Comments explain why, not what. Named, idiomatic, exported identifiers do
the rest.
Typed contracts at boundaries. MCP tool args and agent inter-node data
flow are typed structs (generics where the framework supports it), never
map[string]any as the universal contract. See
references/mcp-server.md and
references/agents.md.
Quick reference (top rules, with link to detail)
| Rule |
Detail |
| Detect Go version, use features up to it |
modern-go.md |
| Pick layout by project type |
project-layouts.md |
| Service architecture: bounded-context hexagonal |
architecture.md |
package main: thin, run(ctx, cfg) error pattern, no testable logic in main() |
engineering-policy.md |
| Config: Resolvable Config Struct (not Functional Options) |
engineering-policy.md |
if x := f(); cond only when init is the condition; else separate statement |
engineering-policy.md |
Errors: sentinels via errors.Is, typed via errors.As, wrap with %w, aggregate with errors.Join |
engineering-policy.md |
Tests: vanilla testing, package xxx_test, TestF_suffixCamelCase names |
testing.md |
Mocks: go.uber.org/mock (gomock) default; testify-mocks only if already on testify |
testing.md |
| Review: Critical / Important / Suggestion / Positive buckets, What-Why-How per issue |
code-review.md |
Libraries: README (rationale + honest comparison + payoff-first quick start) vs doc.go (contracts) |
libraries.md |
go.mod: apps latest, libraries latest-1 |
engineering-policy.md |
Lint: golangci-lint + govet + go test -race mandatory in CI |
engineering-policy.md |
Naming: MixedCaps, initialism case (userID, HTTPClient), no Get prefix, no util/common package |
engineering-policy.md |
%w only when the cause is intended as API; %v for a dependency's error crossing a public boundary |
engineering-policy.md |
No mutable globals; no goroutines or I/O in init(); comma-ok on every type assertion |
engineering-policy.md |
Fan-out is bounded (SetLimit/semaphore); channels unbuffered or size 1 |
engineering-policy.md |
Repo must have LICENSE, README.md, AGENTS.md, ignore files, .golangci.yml, CI; tools pinned via go tool |
repo-and-ci.md |
| Services: bounded calls, safe retries, stable error contract, liveness≠readiness, outbox, rolling-safe migrations |
production-readiness.md |
MCP server: official go-sdk, typed tool handlers, two-channel errors, tool design as outcomes-not-operations |
mcp-server.md |
AI agent: ReAct loop w/ bounded iterations, 6 topology archetypes, type-aligned composition (reject map[string]any between nodes) |
agents.md |
Conflict precedence (which reference wins)
When two references seem to disagree:
- Layout / architecture / ports / wiring / modular monolith for services →
architecture.md wins.
- Version-gated syntax (whether a feature exists in this Go version) →
modern-go.md wins.
- Everything else (config, errors, testing, naming, linting, dependencies,
CI) → engineering-policy.md wins.
- Library public-API concerns (semver, deprecation, doc.go split) →
libraries.md wins for library projects.
- Code review output format → code-review.md wins.
- MCP servers in Go (SDK choice, tool-handler design, two-channel errors,
pagination, middleware) → mcp-server.md wins.
- AI agents in Go (ReAct loop, multi-agent topology, typed data flow
between nodes, state externalism) → agents.md wins.
- Runtime behavior of a long-running service (timeout/retry/idempotency
policy, API error contract, liveness vs readiness, metric cardinality,
migration safety, outbox) →
production-readiness.md wins. It
refines rule 3: engineering-policy sets the observability floor, this sets
the service shape.
- Concrete repository and pipeline files (required files, ignore baselines,
workflow YAML,
go tool pinning, build stamping) →
repo-and-ci.md wins. It also refines rule 3:
engineering-policy states which gates are mandatory, this states how they are
written.
The adapter carve-out (mcp-server.md § "Adapter
carve-out") refines rule 5 of the non-negotiable principles for MCP handlers
only: the handler package is an inbound adapter and may import mcp.*.
Project-file precedence (escalation rule)
When a project-level instruction file contradicts this skill, follow this
order, stopping at the first match:
- Explicit user instruction in the current turn — always wins. If the user
says "use Functional Options here," use them, even though the skill mandates
Resolvable Config Struct.
- Project
AGENTS.md / CLAUDE.md at the repo root — wins over this skill
for project-specific conventions. A project that legitimately needs pkg/
(e.g. a kubernetes-style repo) says so there.
- This skill — the default for any Go decision not addressed above.
- Generic Go style/lint guidance — lowest priority; this skill overrides it
on conflicts by design.
If (1) and (2) are silent and the skill's rule feels wrong for the project,
say so out loud before applying it — propose the deviation, name the rule it
contradicts, and let the user decide. Do not silently override the skill, and do
not silently apply it when a project file arguably contradicts it.
Verification
After applying this skill to a Go project, the project should pass:
go vet ./...
go build ./...
go test -race ./...
If any of these fail as a result of changes made under this skill, that is a
skill regression — surface it, do not paper over it. For new projects scaffolded
from assets/, the result should compile and test green before handing control
back to the user.
Evaluating the skill itself
Example prompts and expected behaviors for catching drift live in
evals/. Run them when the skill is updated. The audit
methodology that produced this skill is not shipped with it; the rules above are
the canonical source.
This skill is highly opinionated. Do not relitigate these rules at runtime —
apply them, and note any project-specific deviation in the project's own
AGENTS.md / CLAUDE.md if one exists.
1---2name: go-ultimate3description: The complete Go development skill. REQUIRED for ALL Go work — writing, refactoring, reviewing, generating, scaffolding, or discussing Go code, including any change to .go files. Use whenever the user mentions Go, Golang, go.mod, a Go package, or asks to build a Go backend service, CLI, library, script, MCP server (Model Context Protocol), or AI/LLM agent with tool calling or ReAct-style reasoning. Routes by project type to the right architecture, conventions, and review checklist. Highly opinionated; overrides generic Go style and lint guidance on conflicts.4license: MIT5---67# Go Ultimate Skill89A single, opinionated skill for writing the best Go programs — synthesized from10four general-Go skills, four agent/MCP donors (one donor, eino, contributes two11documents), the Google and Uber style guides, and a repository/production-practice12donor. Opinions represent the synthesized consensus; where the donors disagreed,13this skill resolved the conflict per the precedence ladder below.1415## When this skill applies1617**Always**, for any Go work: code generation, refactoring, code review,18architecture and style discussions, scaffolding, or any change to `.go` files.1920It overrides generic Go style/lint guidance when they conflict.2122## Setup — resolving `<skill-dir>`2324Several instructions in this skill reference `<skill-dir>` — the absolute path to25this installed skill directory. Resolve it once per session.2627**Primary rule:** `<skill-dir>` is the directory containing this `SKILL.md`.28That always works, regardless of how the skill was installed. The bundled29detector is at `<skill-dir>/scripts/goversion/main.go`; the templates are at30`<skill-dir>/assets/`.3132This skill ships a manifest for each supported harness (see the repo root), so it33can be installed as a plugin on all of them. Each harness resolves the plugin34root differently; use the row matching yours:3536| Harness | `<skill-dir>` resolution |37|---|---|38| Claude Code (plugin) | `${CLAUDE_PLUGIN_ROOT}/skills/go-ultimate` — the harness resolves this at runtime; the path includes a version directory, so do not hardcode it. |39| Codex (plugin) | `${PLUGIN_ROOT}/skills/go-ultimate` — Codex exposes the plugin root via `${PLUGIN_ROOT}` in hook/script contexts. |40| Cursor (plugin) | the plugin's `skills/go-ultimate/` directory; Cursor installs plugins into its cache. Confirm the absolute path via Cursor's plugin UI. |41| Grok Build (plugin) | the plugin's `skills/go-ultimate/` directory; Grok reads Claude-compatible plugin content. |42| GitHub Copilot CLI (plugin) | the plugin's `skills/go-ultimate/` directory. |43| ZCode | `~/.zcode/skills/go-ultimate` (or the workspace `.zcode/skills/`); ZCode also recognizes the `.claude-plugin/` manifest. |44| OpenCode | the directory you copied `skills/go-ultimate/` into (manual install — see README). |45| Any harness (manual clone) | the cloned `skills/go-ultimate/` directory. |4647> **The `<skill-dir>` path matters for this skill.** Unlike markdown-only skills,48> go-ultimate executes its bundled detector (`scripts/goversion/main.go`) and49> references its `assets/` templates by path. If your harness does not expose the50> plugin root through a variable (Cursor, Grok, Copilot, OpenCode), locate the51> installed `skills/go-ultimate/` directory once and use that absolute path. As a52> fallback, the detector is a stdlib-only single file — copy `main.go` into the53> target project and run it there if path resolution fails.5455## How to use this skill56571. **Detect the project's Go version** by running the bundled detector58 `go run <skill-dir>/scripts/goversion/main.go <project-path>` (it prints the59 bare version, e.g. `1.24.3`, and always exits 0 — falling back to the Go60 runtime version if no `go.mod` or no `go` directive is found). Use features61 up to that version. See [references/modern-go.md](references/modern-go.md).622. **Identify the project type** using the decision tree below, then load the63 matching reference.643. **Follow the non-negotiable principles** below — these always apply.654. **On conflicts** between references, apply the precedence rules at the end.6667---6869## Project-type decision tree7071Ask "what is the user building?" and route accordingly:7273```74Is the code a single binary that the user runs?75├── Yes → Is it < ~300 lines with no external deps beyond stdlib?76│ ├── Yes → SCRIPT / TINY TOOL77│ │ → references/project-layouts.md § Scripts78│ │ → references/engineering-policy.md79│ └── No → CLI APPLICATION80│ → references/project-layouts.md § CLI81│ → references/engineering-policy.md82│83Is the code meant to be imported by other modules?84├── Yes → LIBRARY / MODULE85│ → references/libraries.md86│ → references/project-layouts.md § Library87│ → references/engineering-policy.md88│89Is the code a long-running server (HTTP/gRPC/messaging)?90├── Yes → BACKEND SERVICE91│ → references/architecture.md (mandatory)92│ → references/production-readiness.md (mandatory)93│ → references/project-layouts.md § Service94│ → references/engineering-policy.md95│96Is the code a server exposing tools/resources/prompts to LLMs over MCP?97├── Yes → MCP SERVER98│ → references/mcp-server.md (mandatory)99│ → references/project-layouts.md § Service or § CLI (stdio server = CLI-shaped)100│ → references/production-readiness.md (if hosted/long-running, not stdio)101│ → references/engineering-policy.md102│103Is the code an LLM-driven agent that calls tools / orchestrates multi-step reasoning?104├── Yes → AI AGENT105│ → references/agents.md (mandatory)106│ → references/project-layouts.md § CLI or § Service (depends on hosting)107│ → references/production-readiness.md (if hosted/long-running)108│ → references/engineering-policy.md109│110Is the code a code generator, linter, or analysis tool?111├── Yes → Treat as CLI APPLICATION or LIBRARY (whichever fits the distribution),112│ then see references/engineering-policy.md § Code generation113│114Otherwise → ask the user to clarify before proposing structure.115```116117**Regardless of type:** when initializing a repository, adding CI, or reviewing118repository hygiene, also load119[references/repo-and-ci.md](references/repo-and-ci.md) — required files, ignore120baselines, `go tool` pinning, workflow shape, release stamping.121122---123124## Non-negotiable principles (always apply)125126These are the consensus backbone. Every Go file this skill touches obeys them.1271281. **Modern Go, version-gated.** Use every feature up to the project's `go.mod`129 version. `any` over `interface{}`. `errors.Is/As` over `==`. `slices`/`maps`/130 `cmp` over hand-rolled loops. See [references/modern-go.md](references/modern-go.md).1311322. **No `pkg/` directory.** Ever. Library code lives at the module root;133 importable apps expose a public `port/` package. The `pkg/` convention is a134 kubernetes-era anti-pattern. See [references/project-layouts.md](references/project-layouts.md).1351363. **`internal/` for private code; `cmd/<name>/` for multiple binaries; flat for137 tiny tools.** Start simple; grow deliberately.1381394. **Context first, errors explicit.** `func F(ctx context.Context, ...) (..., error)`.140 Wrap with `fmt.Errorf("...: %w", err)`. Never compare errors with `==`.1411425. **Thin adapters, fat-free imports.** Business-logic packages never import143 `net/http`, `os`, or transport SDKs. Adapters only translate formats and144 protocol shapes.1451466. **Concurrency hygiene.** Every goroutine has an exit condition (Context or147 WaitGroup). Use `errgroup` for parallel fan-out. Always test with `-race`.1481497. **Accept interfaces, return structs.** Interfaces are defined at the point of150 use, not the point of implementation. Small, single-method interfaces win.1511528. **Comments explain why, not what.** Named, idiomatic, exported identifiers do153 the rest.1541559. **Typed contracts at boundaries.** MCP tool args and agent inter-node data156 flow are typed structs (generics where the framework supports it), never157 `map[string]any` as the universal contract. See158 [references/mcp-server.md](references/mcp-server.md) and159 [references/agents.md](references/agents.md).160161---162163## Quick reference (top rules, with link to detail)164165| Rule | Detail |166|---|---|167| Detect Go version, use features up to it | [modern-go.md](references/modern-go.md) |168| Pick layout by project type | [project-layouts.md](references/project-layouts.md) |169| Service architecture: bounded-context hexagonal | [architecture.md](references/architecture.md) |170| `package main`: thin, `run(ctx, cfg) error` pattern, no testable logic in `main()` | [engineering-policy.md](references/engineering-policy.md) |171| Config: Resolvable Config Struct (not Functional Options) | [engineering-policy.md](references/engineering-policy.md) |172| `if x := f(); cond` only when init is the condition; else separate statement | [engineering-policy.md](references/engineering-policy.md) |173| Errors: sentinels via `errors.Is`, typed via `errors.As`, wrap with `%w`, aggregate with `errors.Join` | [engineering-policy.md](references/engineering-policy.md) |174| Tests: vanilla `testing`, `package xxx_test`, `TestF_suffixCamelCase` names | [testing.md](references/testing.md) |175| Mocks: `go.uber.org/mock` (gomock) default; testify-mocks only if already on testify | [testing.md](references/testing.md) |176| Review: Critical / Important / Suggestion / Positive buckets, What-Why-How per issue | [code-review.md](references/code-review.md) |177| Libraries: README (rationale + honest comparison + payoff-first quick start) vs `doc.go` (contracts) | [libraries.md](references/libraries.md) |178| `go.mod`: apps latest, libraries latest-1 | [engineering-policy.md](references/engineering-policy.md) |179| Lint: `golangci-lint` + `govet` + `go test -race` mandatory in CI | [engineering-policy.md](references/engineering-policy.md) |180| Naming: `MixedCaps`, initialism case (`userID`, `HTTPClient`), no `Get` prefix, no `util`/`common` package | [engineering-policy.md](references/engineering-policy.md) |181| `%w` only when the cause is intended as API; `%v` for a dependency's error crossing a public boundary | [engineering-policy.md](references/engineering-policy.md) |182| No mutable globals; no goroutines or I/O in `init()`; comma-ok on every type assertion | [engineering-policy.md](references/engineering-policy.md) |183| Fan-out is bounded (`SetLimit`/semaphore); channels unbuffered or size 1 | [engineering-policy.md](references/engineering-policy.md) |184| Repo must have `LICENSE`, `README.md`, `AGENTS.md`, ignore files, `.golangci.yml`, CI; tools pinned via `go tool` | [repo-and-ci.md](references/repo-and-ci.md) |185| Services: bounded calls, safe retries, stable error contract, liveness≠readiness, outbox, rolling-safe migrations | [production-readiness.md](references/production-readiness.md) |186| MCP server: official `go-sdk`, typed tool handlers, two-channel errors, tool design as outcomes-not-operations | [mcp-server.md](references/mcp-server.md) |187| AI agent: ReAct loop w/ bounded iterations, 6 topology archetypes, type-aligned composition (reject `map[string]any` between nodes) | [agents.md](references/agents.md) |188189---190191## Conflict precedence (which reference wins)192193When two references seem to disagree:1941951. **Layout / architecture / ports / wiring / modular monolith** for services →196 [architecture.md](references/architecture.md) wins.1972. **Version-gated syntax** (whether a feature exists in this Go version) →198 [modern-go.md](references/modern-go.md) wins.1993. **Everything else** (config, errors, testing, naming, linting, dependencies,200 CI) → [engineering-policy.md](references/engineering-policy.md) wins.2014. **Library public-API concerns** (semver, deprecation, doc.go split) →202 [libraries.md](references/libraries.md) wins for library projects.2035. **Code review output format** → [code-review.md](references/code-review.md) wins.2046. **MCP servers in Go** (SDK choice, tool-handler design, two-channel errors,205 pagination, middleware) → [mcp-server.md](references/mcp-server.md) wins.2067. **AI agents in Go** (ReAct loop, multi-agent topology, typed data flow207 between nodes, state externalism) → [agents.md](references/agents.md) wins.2088. **Runtime behavior of a long-running service** (timeout/retry/idempotency209 policy, API error contract, liveness vs readiness, metric cardinality,210 migration safety, outbox) →211 [production-readiness.md](references/production-readiness.md) wins. It212 refines rule 3: engineering-policy sets the observability *floor*, this sets213 the service shape.2149. **Concrete repository and pipeline files** (required files, ignore baselines,215 workflow YAML, `go tool` pinning, build stamping) →216 [repo-and-ci.md](references/repo-and-ci.md) wins. It also refines rule 3:217 engineering-policy states which gates are mandatory, this states how they are218 written.219220The adapter carve-out ([mcp-server.md](references/mcp-server.md) § "Adapter221carve-out") refines rule 5 of the non-negotiable principles for MCP handlers222only: the handler package is an inbound adapter and may import `mcp.*`.223224## Project-file precedence (escalation rule)225226When a project-level instruction file contradicts this skill, **follow this227order**, stopping at the first match:2282291. **Explicit user instruction in the current turn** — always wins. If the user230 says "use Functional Options here," use them, even though the skill mandates231 Resolvable Config Struct.2322. **Project `AGENTS.md` / `CLAUDE.md` at the repo root** — wins over this skill233 for project-specific conventions. A project that legitimately needs `pkg/`234 (e.g. a kubernetes-style repo) says so there.2353. **This skill** — the default for any Go decision not addressed above.2364. **Generic Go style/lint guidance** — lowest priority; this skill overrides it237 on conflicts by design.238239If (1) and (2) are silent and the skill's rule feels wrong for the project,240**say so out loud before applying it** — propose the deviation, name the rule it241contradicts, and let the user decide. Do not silently override the skill, and do242not silently apply it when a project file arguably contradicts it.243244## Verification245246After applying this skill to a Go project, the project should pass:247248```249go vet ./...250go build ./...251go test -race ./...252```253254If any of these fail as a result of changes made under this skill, that is a255skill regression — surface it, do not paper over it. For new projects scaffolded256from `assets/`, the result should compile and test green before handing control257back to the user.258259## Evaluating the skill itself260261Example prompts and expected behaviors for catching drift live in262[`evals/`](evals/README.md). Run them when the skill is updated. The audit263methodology that produced this skill is not shipped with it; the rules above are264the canonical source.265266This skill is **highly opinionated**. Do not relitigate these rules at runtime —267apply them, and note any project-specific deviation in the project's own268`AGENTS.md` / `CLAUDE.md` if one exists.