Code Quality
piomin/claude-ai-spring-boot
Comprehensive code review for Java - clean code principles, API contracts, null safety, exception handling, and performance.
Idiomatic Go - package and interface design, error wrapping, table-driven tests, generics, the modern standard library (slices/maps/cmp/errors.Join), current syntax, and logging discipline.
$ npx skills add inference-gateway/inference-gateway --skill go -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install inference-gateway/inference-gateway go --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/inference-gateway/inference-gateway.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/go .claude/skills/go && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "go" agent skill from https://github.com/inference-gateway/inference-gateway/tree/main/.agents/skills/go into .claude/skills/go/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "go", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/inference-gateway/inference-gateway/tree/main/.agents/skills/goType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add inference-gateway/inference-gateway --skill go -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install inference-gateway/inference-gateway go --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inference-gateway/inference-gateway.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/go .agents/skills/go && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "go" agent skill from https://github.com/inference-gateway/inference-gateway/tree/main/.agents/skills/go into .agents/skills/go/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "go", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add inference-gateway/inference-gateway --skill go -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install inference-gateway/inference-gateway go --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inference-gateway/inference-gateway.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/go .cursor/skills/go && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "go" agent skill from https://github.com/inference-gateway/inference-gateway/tree/main/.agents/skills/go into .cursor/skills/go/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "go", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/inference-gateway/inference-gateway.git --path .agents/skills/go--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add inference-gateway/inference-gateway --skill go -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install inference-gateway/inference-gateway go --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inference-gateway/inference-gateway.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/go .gemini/skills/go && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "go" agent skill from https://github.com/inference-gateway/inference-gateway/tree/main/.agents/skills/go into .gemini/skills/go/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "go", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install inference-gateway/inference-gateway goInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add inference-gateway/inference-gateway --skill go -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/inference-gateway/inference-gateway.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/go .github/skills/go && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "go" agent skill from https://github.com/inference-gateway/inference-gateway/tree/main/.agents/skills/go into .github/skills/go/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "go", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add inference-gateway/inference-gateway --skill go -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install inference-gateway/inference-gateway go --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inference-gateway/inference-gateway.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/go .opencode/skills/go && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "go" agent skill from https://github.com/inference-gateway/inference-gateway/tree/main/.agents/skills/go into .opencode/skills/go/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "go", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
goIdiomatic Go - package and interface design, error wrapping, table-driven tests, generics, the modern standard library (slices/maps/cmp/errors.Join), current syntax, and logging discipline.
Go is an agent skill from inference-gateway/inference-gateway. Idiomatic Go - package and interface design, error wrapping, table-driven tests, generics, the modern standard library (slices/maps/cmp/errors.Join), current syntax, and logging discipline. Use when writing, reviewing, or refactoring any Go code, especially code drifting toward Java/Spring shapes (deep layer trees, generic repositories, heavy frameworks) - even if the user never says "idiomatic". Distilled from spf13/go-skills and adapted to this repo.
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering API design and Refactoring. It works with Java, DeepSeek, Model Context Protocol and OpenAI. The repository describes itself as: An open-source, cloud-native, high-performance gateway unifying multiple LLM providers, from local solutions like Ollama to major cloud providers such as OpenAI, Groq, Cohere… The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 49d1f12. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
goFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Go loads about 2.4k tokens when it runs. Until then it costs about 115 tokens; SKILL.md has 913 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from inference-gateway/inference-gateway at commit 49d1f12, republished under its Apache-2.0 licence (© inference-gateway). 913 words, ~2,442 tokens.
.claude/skills/go/SKILL.md (or your agent's skills folder).Write Go that is boring in the best way - direct, predictable, obvious on the first read. Clear is better than clever. The common failure mode (and the LLM default) is importing Java/Spring habits - deep layer trees, generic repositories, heavy frameworks, manual worker pools - into a language built for flat, simple, discoverable APIs. When in doubt, delete the abstraction.
Clear is better than clever. If a function's control flow takes three reads to
follow, rewrite it. Keep the happy path un-indented: handle errors and edge cases
first and return.
func GetUser(id string) (*User, error) {
user, err := db.FindUser(id)
if err != nil {
return nil, fmt.Errorf("finding user %s: %w", id, err)
}
return user, nil // happy path stays at the left margin
}Make the zero value useful. Design types so the zero value works without a
constructor - sync.Mutex and bytes.Buffer are the gold standard.
type Counter struct {
mu sync.Mutex // usable at the zero value - no New() needed
count int
}
func (c *Counter) Inc() { c.mu.Lock(); c.count++; c.mu.Unlock() }Start flat; add a package only when a domain earns a namespace. Name packages by
what they do (auth, billing, jobs), never by what layer they are
(service, repository, controller) - layer-named packages breed circular
imports and interface bloat and add zero clarity in Go. No utils/, helpers/,
or common/ junk drawers; they signal unclear ownership. Packages don't import
each other sideways - cycles mean wrong boundaries; the composition root wires them.
In this repo: code lives under
internal/in a deliberate domain (pure interfaces) / infra (adapters) / services (business logic) split, wired by a DI container (internal/container/container.go). That is this project's structure - follow it; don't "flatteninternal/." spf13's transferable rules still hold: name by purpose, no junk-drawer packages, wire at the composition root (here, the container).
Write concrete types first. Introduce an interface only when a consumer genuinely
needs to swap implementations, and define it in the consuming package, kept
small (io.Reader, not *os.File). Accept interfaces, return structs -
callers get the narrow dependency they need without type-asserting to reach real
fields.
// the consumer declares exactly what it needs; the concrete store needn't know
type UserFetcher interface {
GetUser(id string) (*User, error)
}
type Processor struct{ fetcher UserFetcher }In this repo: domain contracts are centralized in
internal/domain/interfaces.goso counterfeiter can generate fakes from one place - that's the established seam. Still prefer small interfaces; just declare new ones there when they need a generated mock.
Check them explicitly; they aren't exceptions. Wrap with %w to add context while
preserving the chain for errors.Is / errors.As. Combine siblings with
errors.Join (Go 1.20) - no multierr needed.
data, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("loading config %s: %w", path, err)
}When a type has many optional settings, avoid telescoping constructors:
type Option func(*Server)
func WithTimeout(d time.Duration) Option { return func(s *Server) { s.timeout = d } }
func NewServer(addr string, opts ...Option) *Server {
s := &Server{addr: addr, timeout: 30 * time.Second} // sane defaults
for _, opt := range opts {
opt(s)
}
return s
}Go testing is just Go programming - reach for the stdlib testing package, not a
BDD framework.
t.Run subtests are the standard.t.Helper() in assertion helpers so failures point at the case, not
the helper.testdata/ (the tool ignores it); diff large output against
golden files.github.com/google/go-cmp/cmp, not reflect.DeepEqual.afero and inject afero.NewMemMapFs() in tests.func TestParse(t *testing.T) {
tests := []struct {
name string
in string
wantErr bool
}{
{"valid", "port=8080", false},
{"bad", "port=abc", true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, err := Parse(tt.in)
if (err != nil) != tt.wantErr {
t.Fatalf("Parse(%q) err = %v, wantErr %v", tt.in, err, tt.wantErr)
}
})
}
}In this repo: fakes for domain interfaces are counterfeiter-generated under
tests/mocks/, not hand-written. Regenerate withtask mocks:generate(pre-commit runs it wheninternal/domain/interfaces.gochanges); for a new domain interface, add acounterfeiterline undermocks:generateinTaskfile.yml. Use the generated fakes - don't hand-roll rivals. Table tests,testdata, andgo-cmpstill apply.
This repo targets Go 1.26 - reach for the modern stdlib before any third-party helper or hand-rolled loop:
| Instead of | Use |
|---|---|
sort.Slice(s, ...) | slices.Sort(s), slices.SortFunc, slices.Contains/Index |
| manual key/value loops | maps.Keys/Values/Clone/Copy/Equal |
if x == 0 { x = def } | cmp.Or(x, def); min/max built-ins |
| ad-hoc multi-error joins | errors.Join(err1, err2) |
atomic.AddInt64(&n, 1) | typed atomic.Int64/Bool/Pointer[T] (n.Add(1)) |
| gorilla/mux for basic routing | net/http: mux.HandleFunc("GET /u/{id}", ...) + r.PathValue("id") |
for i := 0; i < n; i++ | for i := range n |
interface{} | any |
// +build tags | //go:build |
To keep a request's values but drop its cancellation for work that outlives it,
use context.WithoutCancel(ctx) (Go 1.21).
Use a generic when the same algorithm runs over many concrete types.
func Map[S, T any](s []S, f func(S) T) []T {
out := make([]T, len(s))
for i, v := range s {
out[i] = f(v)
}
return out
}Do not write generic "repositories", services, or base types - that's Java in
Go syntax. Use comparable for map keys/equality and cmp.Ordered for </>.
Start concrete; generify only once the same logic repeats across 3+ types.
logger.Debug("cache miss", "key", key) // high-volume internal state
logger.Info("server started", "addr", addr) // lifecycle events
logger.Warn("retrying", "attempt", n) // recoverable problems
logger.Error("request failed", "err", err) // needs attentionmain.In this repo: logging is
go.uber.org/zap(*zap.Logger, from the container'sLogger()), notslog. The discipline above is identical.
func FetchAll(ctx context.Context, urls []string, max int) error {
sem := make(chan struct{}, max)
g, ctx := errgroup.WithContext(ctx)
for _, u := range urls {
sem <- struct{}{} // blocks at the limit
g.Go(func() error {
defer func() { <-sem }()
return fetch(ctx, u)
})
}
return g.Wait()
}go func()
needs a ctx/closed-channel exit, or it leaks.For channel patterns in depth - done-channel, fan-out/fan-in, pipeline, or-done,
context propagation, worker semaphore - see the go-concurrency skill, and
verify with go test -race.
go build/test/run are deterministic and the build cache is keyed by source -
don't suspect them or reach for go clean -cache. When an error survives your
edit, it's almost always one of these, in order:
Re-read the (accurate) error, confirm the file is actually compiled
(go list -f '{{.GoFiles}}' .), and add a t.Log/print at the exact site.
Adapted from spf13/go-skills (MIT, by Steve Francia), trimmed and reconciled with this repo's conventions. Pairs with go-concurrency, cobra-viper, and go-spec-reviewer.
© inference-gateway, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/go of inference-gateway/inference-gateway.
Open the folder on GitHubat commit 49d1f12
Go next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Go this skillinference-gateway/inference-gateway | 214 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Code Qualitypiomin/claude-ai-spring-boot | 1.3k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Bootui Java Developmentjdubois/boot-ui | 311 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Azsdk Common Generate SDK LocallyAzure/azure-sdk-for-android | 121 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Idea MCPdtprj/dongting | 208 | — | ~698 | Automated safety check: Pass | Apache-2.0 | |
| Edt MCP ArchitectureDitriXNew/EDT-MCP | 295 | — | ~1.2k | Automated safety check: Pass | AGPL-3.0 |
piomin/claude-ai-spring-boot
Comprehensive code review for Java - clean code principles, API contracts, null safety, exception handling, and performance.
jdubois/boot-ui
A skill your agent uses when implementing, debugging, refactoring, or testing existing BootUI Java code, including framework-neutral engine logic, Spring MVC and WebFlux adapters, Quarkus runtime…
Azure/azure-sdk-for-android
Generate, build, and test Azure SDKs locally from TypeSpec with automatic customization.
dtprj/dongting
IntelliJ IDEA MCP for Java code analysis, testing, refactoring, and project navigation.
DitriXNew/EDT-MCP
Map of the EDT-MCP plugin's target architecture — where the shared helpers live, the layering rules, and the canonical way to do project/metadata/code resolution.
grafana/skills
Instrument any app with OpenTelemetry and ship metrics / logs / traces to Grafana Cloud or self-hosted Mimir / Loki / Tempo / Pyroscope.
inference-gateway/inference-gateway
Idiomatic Go concurrency - sync primitives, channel semantics, the select statement, and the standard channel patterns (cancellation/done-channel, fan-out/fan-in, pipeline, or-done, context…
inference-gateway/inference-gateway
Review a Go design spec before implementation begins - dispatch a subagent that checks a design doc for completeness, consistency, and idiomatic Go (simplicity, small consumer-defined interfaces…
Categories
Idiomatic Go - package and interface design, error wrapping, table-driven tests, generics, the modern standard library (slices/maps/cmp/errors.Join), current syntax, and logging discipline. Go is an agent skill from inference-gateway/inference-gateway.Join), current syntax, and logging discipline.
Go fits situations like: refactoring any Go code; especially code drifting toward Java/Spring shapes (deep layer trees; generic repositories; heavy frameworks) - even if the user never says idiomatic.
Run `npx skills add inference-gateway/inference-gateway --skill go -a claude-code`. Or copy the skill folder (.agents/skills/go in inference-gateway/inference-gateway) into .claude/skills/go in your project. Claude Code loads it when a task matches its description.
Run `npx skills add inference-gateway/inference-gateway --skill go -a codex`. Or copy the skill folder (.agents/skills/go in inference-gateway/inference-gateway) into .agents/skills/go in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add inference-gateway/inference-gateway --skill go -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/go, .gemini/skills/go, .github/skills/go and .opencode/skills/go in your project.
Going by SKILL.md and its folder, Go needs the command-line tools its instructions call (go).
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Go is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Go: Code Quality (piomin/claude-ai-spring-boot, 1.3k stars), Bootui Java Development (jdubois/boot-ui, 311 stars), Azsdk Common Generate SDK Locally (Azure/azure-sdk-for-android, 121 stars) and Idea MCP (dtprj/dongting, 208 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
inference-gateway (a GitHub organization) maintains it in inference-gateway/inference-gateway, which has 214 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.
Source: inference-gateway/inference-gateway on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.