README.md

August 18, 2026 Β· View on GitHub

go-agent-skills β€” curated Go skills for AI coding agents

skills spec ci license

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

SkillWhat it doesTriggersDescSKILL.mdTree
go-code-reviewStructured review process with severity classification"review this code", "check this PR"1031,6131,613
go-coding-standardsStyle conventions, naming, imports, struct init, formatting"check Go style", "fix formatting"1272,1282,128
go-context πŸ“šContext propagation, cancellation, timeouts, values"context usage", "timeout", "context cancellation"1081,7982,868
go-data-structuresSlices, maps, sets, aliasing, preallocation, nil vs empty"nil slice", "map iteration", "slice aliasing"1351,4981,498
go-documentationGodoc conventions, testable examples, deprecation notices"add godoc", "document this package"1041,4201,420
go-error-handlingError wrapping, sentinels, custom types, errors.Is/As"handle errors", "error wrapping"1311,5751,575
go-modernize πŸ“šGenerics, slog, errors.Join, slices/maps, range-over-func"modernize", "use generics", "update Go"1272,2624,458

Architecture & Design

SkillWhat it doesTriggersDescSKILL.mdTree
go-api-designREST/gRPC handlers, middleware, graceful shutdown, pagination"design API", "HTTP handler"1461,9641,964
go-architecture-reviewPackage layout, dependency direction, layering, internal/"review architecture", "project layout"1302,1162,116
go-cliFlags, subcommands, exit codes, signals, Cobra decision point"build a CLI", "handle Ctrl+C", "exit codes"1121,3651,365
go-dependency-injectionConstructor injection, composition root, wire/fx trade-offs"dependency injection", "remove global state"1151,5261,526
go-design-patterns πŸ“šFunctional options, factory, strategy, middleware/decorator"design pattern", "functional options"1181,5533,456
go-graphqlgqlgen schema-first, resolvers, dataloaders, complexity limits, field auth"GraphQL", "gqlgen", "N+1 queries", "dataloader"1552,2132,213
go-grpcProto design, status codes, interceptors, deadlines, streaming"gRPC service", "interceptor", "proto design"1141,7051,705
go-interface-designConsumer-side interfaces, composition, compliance checks"design interface", "accept interfaces"1431,9681,968
go-openapiSpec-first REST with oapi-codegen, validation middleware, oasdiff, contract tests"OpenAPI", "oapi-codegen", "generate a client from the spec"1742,0512,051
go-project-layoutScaffolding new projects: cmd/internal, module naming, thin main"new Go project", "scaffold a service"1141,5331,533

Data

SkillWhat it doesTriggersDescSKILL.mdTree
go-database πŸ“šConnection pools, transactions, sqlc, migrations, repository pattern"database access", "SQL query", "transactions"1131,3902,877

Safety & Performance

SkillWhat it doesTriggersDescSKILL.mdTree
go-concurrency-review πŸ“šGoroutine lifecycle, channels, mutexes, race detection"check thread safety", "goroutine leak"1401,6682,380
go-defensive-coding πŸ“šTyped-nil interfaces, slice aliasing, integer overflow, defensive copying"nil pointer panic", "integer overflow", "defensive copy"1862,5765,207
go-observability πŸ“šStructured logging (slog), tracing, metrics, OpenTelemetry"add logging", "tracing", "metrics"1091,4223,033
go-performance-reviewAllocations, benchmarking, pprof, hot path optimization"check performance", "reduce allocations"1331,9801,980
go-security-audit πŸ“šOWASP, SQL injection, auth, secrets, input validation"security review", "check vulnerabilities"1361,8073,110
go-troubleshootingPanics, deadlocks, memory/goroutine leaks, pprof diffing, delve"debug this panic", "memory leak", "deadlock"1271,6331,633

Testing

SkillWhat it doesTriggersDescSKILL.mdTree
go-test-quality πŸ“šTest philosophy, subtests, httptest, golden files, fuzz, testcontainers"add tests", "improve coverage"1862,6284,624
go-test-table-driven πŸ“šDeep dive on table-driven tests: when to use, struct design, refactoring"table-driven test", "test matrix"1621,6114,245

Workflow

SkillWhat it doesTriggersDescSKILL.mdTree
git-commitConventional Commits, atomic commits, pre-commit verification"commit changes", "commit message"1091,4331,433
go-binary-sizeLinker flags, inlining, CGO, build tags, embedded assets, image size"binary is too big", "shrink the binary", "reduce image size"1531,8991,899
go-ciGitHub Actions, golangci-lint, coverage gates, Makefile parity"set up CI", "add lint to pipeline"1271,3971,397
go-dependency-auditModule hygiene, govulncheck, dep evaluation, go.mod review"check dependencies", "audit deps"1361,5381,538
go-refactoringBehavior-preserving steps, extract package, strangler migrations"refactor this", "break circular dependency"1421,4551,455
go-semantic-toolsgopls navigation, go list dependency graphs, semantic rename"find all callers", "who implements this"1391,2901,290
go-skills-routerRoutes 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"1662,1152,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. Every Bash(...) grant is scoped to one binary.
  • No skill fetches remote content or runs downloaded code. The only external hosts referenced anywhere in skills/ are github.com and localhost.
  • scripts/validate.sh rejects unscoped Bash, and rejects any skill that declares itself read-only while asking for Write.
  • 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/*.mdWhatever depth needs, loaded on demand
Full treeUnder ~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

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.

πŸ“ License

MIT Β© Eduardo Spinelli de Lima