coding-guidance-go — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited coding-guidance-go (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Portable Go implementation, refactoring, testing, optimization, and review guidance.
Compose with:
thinking for ambiguous decision framing,recursive-thinking for stress-testing, security for threat modeling
backend-guidance for server-side code,backend-systems-guidance for deeper backend architecture/reliability/trust boundaries, project-core-dev for repo-specific completion discovery and reporting when needed, and project-config-and-tests for config contracts and deterministic tests at config or path seams
go-testing-with-testify when the main artifact is testify-basedGo test code, test review, or Go test flake triage
coding-guidance-go-tui when Bubble Tea state,Bubbles components, Lip Gloss layout, or an interactive terminal screen is the main concern
coding-guidance-go-tui
tester-mindset
go-testing-with-testify
security and compose this skill only forGo-specific implementation details
policy, linter config, or domain overlays
Load references only when the task needs that depth:
for context, goroutine ownership, shared state, pipelines, backpressure, logging, REST/gRPC/CLI/worker boundaries, and transport error mapping
standard Go tests, comparison choices, helpers, fuzzing, benchmarks, race checks, integration-test gating, and validation command selection
for package/module layout, go.mod/go.sum, go.work, vendoring, generated code, release metadata, dependency pressure, profiling, and hot-path allocation guidance
naming, declarations, exported-contract stability, interface placement, generics, nil and collection semantics, and other detailed language rules
Use the narrowest mode that fits the task:
rule sections and validation commands.
concrete findings.
unless the task explicitly changes them.
ownership, goroutine lifecycle, shared state, backpressure, race validation, and shutdown.
transport, and handler mechanics; add backend-guidance or backend-systems-guidance for architecture, repositories, transactions, queues, or cross-service design.
pprof, trace, or allocation evidence before performance-driven rewrites.
go.mod, go.sum, build tags,generated or vendored boundaries, and nearby docs before editing.
service boundary style such as REST, gRPC, CLI, or worker, and existing assertion, logging, DI, config, or framework conventions.
partially specified. Ask only when multiple plausible Go designs would change semantics.
context ownership, resource lifetime, and concurrency behavior explicit.
idiomatic error handling, useful zero values, externalized configuration, and goroutine ownership that can be tested.
tags, CLI flags, and exported identifiers stable unless the task explicitly changes that contract.
only when cases share the same setup and assertion path.
gofmt, goimports, go test, go vet, race,lint, module, benchmark, profile, and security commands the repo supports.
Use this instead of the default implementation workflow when the task is primarily cleanup or restructuring:
values, context flow, goroutine ownership, shared state, and import graph.
after each slice.
error handling, and unclear interface seams one step at a time.
incidental cleanup.
clearer without making abstractions larger than the code they protect.
When reviewing, skip the implementation workflow and use this instead:
module changes, build tags, and obvious compile/test breakage.
Critical > Important >Suggestion.
resource leaks, error wrapping or sentinel mismatches, nil pointer or nil map hazards, interface overreach, package-cycle pressure, security risks, performance mistakes with real impact, and missing tests.
gofmt, goimports, or the repo'slinter will settle unless they hide a real readability or behavior issue.
Do not edit code or require findings to be fixed unless the user also asks for remediation.
gofmt; run goimports when the repo uses or provides it andimports changed.
_ unless thecall cannot fail meaningfully or a comment explains why it is safe to ignore.
error for an operation's failure result and avoid typed-nil errors.A constructor whose purpose is to create an error value may return a concrete type; distinguish that API from an operation reporting success or failure.
machine-checkable causes with %w when callers should use errors.Is or errors.As; avoid leaking internals across process, API, or trust boundaries.
context.Context as the first parameter through request-scopedblocking work. Do not store contexts in structs or use them for optional parameters.
context.WithCancel,WithTimeout, or WithDeadline when the current scope owns them.
tickers when cancellation or shutdown requires it. Follow the target Go version's timer semantics. Check close errors that can affect persisted data.
propagation path, and testable shutdown behavior.
values containing sync.Mutex, sync.WaitGroup, bytes.Buffer, or similar pointer-owned state after first use.
crypto/rand for keys, tokens, and security-sensitive randomness. Neveruse math/rand for secrets.
packages. Parse env, flags, and config files at process boundaries, validate once, and pass typed configuration inward.
panic, log.Fatal, and os.Exit out of libraries and non-main code.Return errors for ordinary failures; panic only for programmer errors, impossible states, or startup failures where recovery is not expected.
Detailed naming, declaration, interface, compatibility, collection, and generics guidance lives in go-api-and-language-rules.md. Load it when those choices are material; do not spend routine task context on a full style catalog.
stuttering to make sense, split responsibilities or rename the package.
it may be a mock seam rather than a design seam.
code first unless the generic API is already part of the public contract.
prefer a config struct or explicit parameters; if they are public, extensible, and mostly defaulted, prefer functional options.
stable with sentinels, typed errors, or predicates before adding more string checks.
or queues, pass context unless the repo has a narrower convention.
for it, and who observes its error, do not start it yet.
accumulating business rules, split transport decoding from domain behavior before adding more branches.
assertions, split it; table tests should reduce duplication, not hide logic.
bottleneck, the benchmark/profile used, and the before/after signal, treat it as speculative cleanup rather than optimization.
supply-chain risk, or transitive surface, justify it against standard library or repo-local alternatives.
problem. When narrowness conflicts with correctness, resource safety, or race safety, prefer correctness.
for the requested change's correctness, resource safety, or race safety; report them separately.
For implementation, a change is done when:
gofmt or the repo's formatter has run on touched Go filesgoimports or the repo's import formatter has run when imports changedconcrete reason
go vet, staticcheck, golangci-lint, or the repo's static analysis pathreports no new findings when available
go test -race is run for touched packages when concurrency, shared state,or goroutine lifetime changed
pprof, traces, or allocation profiles back performance-drivenchanges
the repo's established commands
gosec, whenavailable
For review, completion means Critical and Important findings are reported with concrete evidence, likely consequence, and any validation gap. Unfixed findings do not make the review incomplete.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.