README.md
August 18, 2026 Β· View on GitHub
Curated Go skills for AI coding agents. One command, works everywhere.
npx skills add eduardo-sl/go-agent-skills
Important
An agent is only as good as the context you hand it. Without Go-specific
guidance it writes Java-flavoured Go: naked err returns, producer-side
interfaces, goroutines nobody stops, interface{} where generics belong.
These 33 skills encode how experienced Go engineers actually work β grounded in the Uber Go Style Guide, Effective Go, and Go Code Review Comments β and they load on demand, so they cost nothing until they are relevant.
π Install
Works with Claude Code, Cursor, Codex, GitHub Copilot, Windsurf,
OpenCode, Cline, and 37+ more agents
via the npx skills CLI.
# Everything, interactive β picks up the agents you have installed
npx skills add eduardo-sl/go-agent-skills
# Look before you leap
npx skills add eduardo-sl/go-agent-skills --list
# Just the ones you want
npx skills add eduardo-sl/go-agent-skills --skill go-code-review --skill go-defensive-coding
# Globally, for every project
npx skills add eduardo-sl/go-agent-skills -g
# Non-interactive, for CI
npx skills add eduardo-sl/go-agent-skills --all -y
Claude Code β plugin marketplace
/plugin marketplace add eduardo-sl/go-agent-skills
/plugin install go-agent-skills@eduardo-sl
Or drop them straight in: npx skills add eduardo-sl/go-agent-skills -a claude-code
Cursor
npx skills add eduardo-sl/go-agent-skills -a cursor
Cursor auto-discovers skills from .cursor/skills/ and .agents/skills/.
GitHub Copilot
npx skills add eduardo-sl/go-agent-skills -a copilot
Copilot auto-discovers skills from .github/skills/.
Codex (OpenAI)
npx skills add eduardo-sl/go-agent-skills -a codex
Codex auto-discovers skills from ~/.agents/skills/ and .agents/skills/.
Windsurf Β· OpenCode Β· Cline
npx skills add eduardo-sl/go-agent-skills -a windsurf
npx skills add eduardo-sl/go-agent-skills -a opencode
npx skills add eduardo-sl/go-agent-skills -a cline
Shell installer β no Node required
git clone https://github.com/eduardo-sl/go-agent-skills.git
./go-agent-skills/scripts/install.sh /path/to/your-go-project --agent claude
# See what it would do first
./go-agent-skills/scripts/install.sh /path/to/project --agent claude --dry-run
# Symlink instead of copy, to stay in sync with the repo
./go-agent-skills/scripts/install.sh /path/to/project --agent claude --symlink
Manual copy
mkdir -p .claude/skills && cp -r go-agent-skills/skills/*/* .claude/skills/ # Claude Code
mkdir -p .cursor/skills && cp -r go-agent-skills/skills/*/* .cursor/skills/ # Cursor
mkdir -p .github/skills && cp -r go-agent-skills/skills/*/* .github/skills/ # Copilot
mkdir -p .agents/skills && cp -r go-agent-skills/skills/*/* .agents/skills/ # Codex / OpenCode
Managing what you installed
npx skills check # anything out of date?
npx skills update # bring them current
npx skills list # what is installed
npx skills remove go-performance-review
πΊ The map
βββββββββββββββββββββββββββββ
β go-skills-router β β "which skill is this?"
βββββββββββββββ¬ββββββββββββββ
β
ββββββββββββββββ¬βββββββββββββββ¬βββββββββ΄ββββββ¬βββββββββββββββ¬βββββββββββββββ
βΌ βΌ βΌ βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βCode QualityββArchitectureββ Data ββSafety&Perf ββ Testing ββ Workflow β
ββββββββββββββ€ββββββββββββββ€ββββββββββββββ€ββββββββββββββ€ββββββββββββββ€ββββββββββββββ€
βcoding-stds ββarch-review ββ database ββconcurrency ββtest-qualityββ dep-audit β
βcode-review ββproj-layout ββ ββ -review ββtest-table ββ ci β
βerror-handl ββiface-designββ ββsecurity ββ -driven ββ refactoringβ
βcontext ββapi-design ββ ββ -audit ββ ββ semantic β
βmodernize ββopenapi ββ ββdefensive ββ ββ -tools β
βdata-structsββgraphql ββ ββ -coding ββ ββ binary-sizeβ
βdocs ββgrpc ββ ββperformance ββ ββ skills β
β ββdesign-patt ββ ββ -review ββ ββ -router β
β ββdep-inject ββ ββobservabil. ββ ββ git-commit β
β ββcli ββ ββtroublesh. ββ ββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Unsure which one applies? That is what go-skills-router
is for β it maps a task to the skill that owns it, and draws the boundary when two overlap.
π Catalogue
Skills load automatically from context. You can also invoke one directly:
/go-code-review.
Reading the columns. Desc is the description weight, loaded at startup for
every skill β it is what makes a skill trigger. SKILL.md is what loads when
one fires. Tree includes the references/ files, which load only when the
skill sends the agent to them. π marks a skill with reference files.
All figures are approximate tokens (bytes Γ· 4).
Code Quality
| Skill | What it does | Triggers | Desc | SKILL.md | Tree |
|---|---|---|---|---|---|
go-code-review | Structured review process with severity classification | "review this code", "check this PR" | 103 | 1,613 | 1,613 |
go-coding-standards | Style conventions, naming, imports, struct init, formatting | "check Go style", "fix formatting" | 127 | 2,128 | 2,128 |
go-context π | Context propagation, cancellation, timeouts, values | "context usage", "timeout", "context cancellation" | 108 | 1,798 | 2,868 |
go-data-structures | Slices, maps, sets, aliasing, preallocation, nil vs empty | "nil slice", "map iteration", "slice aliasing" | 135 | 1,498 | 1,498 |
go-documentation | Godoc conventions, testable examples, deprecation notices | "add godoc", "document this package" | 104 | 1,420 | 1,420 |
go-error-handling | Error wrapping, sentinels, custom types, errors.Is/As | "handle errors", "error wrapping" | 131 | 1,575 | 1,575 |
go-modernize π | Generics, slog, errors.Join, slices/maps, range-over-func | "modernize", "use generics", "update Go" | 127 | 2,262 | 4,458 |
Architecture & Design
| Skill | What it does | Triggers | Desc | SKILL.md | Tree |
|---|---|---|---|---|---|
go-api-design | REST/gRPC handlers, middleware, graceful shutdown, pagination | "design API", "HTTP handler" | 146 | 1,964 | 1,964 |
go-architecture-review | Package layout, dependency direction, layering, internal/ | "review architecture", "project layout" | 130 | 2,116 | 2,116 |
go-cli | Flags, subcommands, exit codes, signals, Cobra decision point | "build a CLI", "handle Ctrl+C", "exit codes" | 112 | 1,365 | 1,365 |
go-dependency-injection | Constructor injection, composition root, wire/fx trade-offs | "dependency injection", "remove global state" | 115 | 1,526 | 1,526 |
go-design-patterns π | Functional options, factory, strategy, middleware/decorator | "design pattern", "functional options" | 118 | 1,553 | 3,456 |
go-graphql | gqlgen schema-first, resolvers, dataloaders, complexity limits, field auth | "GraphQL", "gqlgen", "N+1 queries", "dataloader" | 155 | 2,213 | 2,213 |
go-grpc | Proto design, status codes, interceptors, deadlines, streaming | "gRPC service", "interceptor", "proto design" | 114 | 1,705 | 1,705 |
go-interface-design | Consumer-side interfaces, composition, compliance checks | "design interface", "accept interfaces" | 143 | 1,968 | 1,968 |
go-openapi | Spec-first REST with oapi-codegen, validation middleware, oasdiff, contract tests | "OpenAPI", "oapi-codegen", "generate a client from the spec" | 174 | 2,051 | 2,051 |
go-project-layout | Scaffolding new projects: cmd/internal, module naming, thin main | "new Go project", "scaffold a service" | 114 | 1,533 | 1,533 |
Data
| Skill | What it does | Triggers | Desc | SKILL.md | Tree |
|---|---|---|---|---|---|
go-database π | Connection pools, transactions, sqlc, migrations, repository pattern | "database access", "SQL query", "transactions" | 113 | 1,390 | 2,877 |
Safety & Performance
| Skill | What it does | Triggers | Desc | SKILL.md | Tree |
|---|---|---|---|---|---|
go-concurrency-review π | Goroutine lifecycle, channels, mutexes, race detection | "check thread safety", "goroutine leak" | 140 | 1,668 | 2,380 |
go-defensive-coding π | Typed-nil interfaces, slice aliasing, integer overflow, defensive copying | "nil pointer panic", "integer overflow", "defensive copy" | 186 | 2,576 | 5,207 |
go-observability π | Structured logging (slog), tracing, metrics, OpenTelemetry | "add logging", "tracing", "metrics" | 109 | 1,422 | 3,033 |
go-performance-review | Allocations, benchmarking, pprof, hot path optimization | "check performance", "reduce allocations" | 133 | 1,980 | 1,980 |
go-security-audit π | OWASP, SQL injection, auth, secrets, input validation | "security review", "check vulnerabilities" | 136 | 1,807 | 3,110 |
go-troubleshooting | Panics, deadlocks, memory/goroutine leaks, pprof diffing, delve | "debug this panic", "memory leak", "deadlock" | 127 | 1,633 | 1,633 |
Testing
| Skill | What it does | Triggers | Desc | SKILL.md | Tree |
|---|---|---|---|---|---|
go-test-quality π | Test philosophy, subtests, httptest, golden files, fuzz, testcontainers | "add tests", "improve coverage" | 186 | 2,628 | 4,624 |
go-test-table-driven π | Deep dive on table-driven tests: when to use, struct design, refactoring | "table-driven test", "test matrix" | 162 | 1,611 | 4,245 |
Workflow
| Skill | What it does | Triggers | Desc | SKILL.md | Tree |
|---|---|---|---|---|---|
git-commit | Conventional Commits, atomic commits, pre-commit verification | "commit changes", "commit message" | 109 | 1,433 | 1,433 |
go-binary-size | Linker flags, inlining, CGO, build tags, embedded assets, image size | "binary is too big", "shrink the binary", "reduce image size" | 153 | 1,899 | 1,899 |
go-ci | GitHub Actions, golangci-lint, coverage gates, Makefile parity | "set up CI", "add lint to pipeline" | 127 | 1,397 | 1,397 |
go-dependency-audit | Module hygiene, govulncheck, dep evaluation, go.mod review | "check dependencies", "audit deps" | 136 | 1,538 | 1,538 |
go-refactoring | Behavior-preserving steps, extract package, strangler migrations | "refactor this", "break circular dependency" | 142 | 1,455 | 1,455 |
go-semantic-tools | gopls navigation, go list dependency graphs, semantic rename | "find all callers", "who implements this" | 139 | 1,290 | 1,290 |
go-skills-router | Routes a task to the skill that owns it, plus the secondary skills to load | "which skill should I use", "what Go skills do you have" | 166 | 2,115 | 2,115 |
Budget. All 33 descriptions together are ~4,420 tokens at startup β the only figure paid on every request, Go work or not. A typical session fires 2β4 skills, so ~5,300 tokens of body. The full tree is ~75,700 tokens and is never loaded at once; that gap is the point of progressive disclosure.
π§ͺ Evaluations
A skill that does not change the output is a skill that costs context for
nothing. evals/ is the harness that tells the difference:
scripts/run-evals.py --cmd 'claude -p "{prompt}"' --label with-skills
scripts/run-evals.py --cmd 'claude -p "{prompt}"' --label baseline
Same suite, run in a project with the skills and in one without. The delta is the measurement.
One suite measures something else: go-skills-router asserts which skill a
task should route to. With 33 overlapping triggers, picking the wrong skill
costs more than any description does. Case format and guidance:
evals/README.md.
Note
No scores are published here. They depend on the model, its version, and the day, and a number without those three recorded is decoration. Run the suite against your own agent and judge for yourself.
π Security
Skills are prompts injected into an agent that already holds shell and file-write access. This repo treats them as security-sensitive:
- Every skill declares least-privilege
allowed-tools. Review and audit skills cannot write. EveryBash(...)grant is scoped to one binary. - No skill fetches remote content or runs downloaded code. The only external
hosts referenced anywhere in
skills/aregithub.comandlocalhost. scripts/validate.shrejects unscopedBash, and rejects any skill that declares itself read-only while asking forWrite.- Published skills are scanned by skills.sh (Socket, Snyk, Gen Agent Trust Hub).
Threat model and private disclosure: SECURITY.md.
π§± Repository structure
go-agent-skills/
βββ skills/(category)/skill-name/
β βββ SKILL.md # β€250 lines: procedure, patterns, checklist
β βββ references/ # depth, loaded only when SKILL.md says so
βββ evals/
β βββ README.md # how to measure a skill's worth
β βββ cases/ # prompt + assertion suites
βββ scripts/
β βββ install.sh # shell installer (--dry-run, --symlink)
β βββ run-evals.py # drives any agent CLI
β βββ validate.sh # format, frontmatter, tools, catalogue sync
βββ docs/
β βββ SKILL_GUIDELINES.md # quality bar for authoring
β βββ skill-gap-analysis.md # what exists, what was rejected, and why
β
β # platform discovery β all must list the same skills, and CI checks it
βββ AGENTS.md Β· CLAUDE.md Β· .claude-plugin/marketplace.json
βββ .cursor/rules/ Β· .windsurf/rules/ Β· .clinerules Β· .github/copilot-instructions.md
βββ .opencode/config.json
π― Design principles
Written for agents, not readers. Imperative steps, β /β contrast pairs, and a verification checklist that closes every skill. Agents learn from contrast, not prose.
Negative triggers earn their keep. Every description states what the skill does not cover and names the one that does. Wrong-skill activation is more expensive than no activation.
Verification is executable. Where a tool can prove a rule β go vet,
golangci-lint, govulncheck, go test -race β the skill runs it instead of
asking the agent to judge.
Progressive disclosure. SKILL.md stays under 250 lines β CI warns above it,
fails at 500. Depth lives in references/ and loads only on demand.
Self-contained. No skill requires another to have been loaded. They name
each other as pointers only. go-skills-router is the one index, and it is
optional too.
π Tuning triggers
If a skill fires too often, or never fires when it should, the description
field is the lever β it is the entire triggering mechanism.
Open an issue with the
prompt that misrouted and the skill you expected. Small wording changes move
trigger accuracy a lot.
Adapting to your team's conventions: fork it, edit the SKILL.md files, install
from your fork with npx skills add your-org/go-agent-skills. Common
customisations are the golangci-lint ruleset, import grouping, and preferred
libraries.
βοΈ Contributing
Budget, per skill:
| Target | |
|---|---|
description | ~100β200 tokens. What it does, when to fire, when not to |
SKILL.md | β€250 lines, ~1,000β2,000 tokens. Procedure and patterns, nothing else |
references/*.md | Whatever depth needs, loaded on demand |
| Full tree | Under ~10,000 tokens |
Every PR must pass ./scripts/validate.sh and ship at least one eval case that
fails without the skill. Full guidelines: CONTRIBUTING.md
and docs/SKILL_GUIDELINES.md.
π Standing on
- Uber Go Style Guide β the base for most conventions
- Effective Go β official Go team guidance
- Go Code Review Comments β community review standards
- Agent Skills β the open skill specification
- Vercel Skills CLI β the
npx skillsdistribution ecosystem - Anthropic Skills β patterns for production-grade skills
The Go gopher was designed by RenΓ©e French and is licensed CC BY 3.0. The banner above is an original drawing in that spirit.