Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add codeready-toolchain/tarsy --skill golang-error-handlinggit clone --depth 1 https://github.com/codeready-toolchain/tarsyWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/codeready-toolchain/tarsy/golang-error-handling)<a href="https://agentmods.dev/skills/codeready-toolchain/tarsy/golang-error-handling"><img src="https://agentmods.dev/badge/skills/codeready-toolchain/tarsy/golang-error-handling/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/codeready-toolchain/tarsy/golang-error-handling"><img src="https://agentmods.dev/badge/skills/codeready-toolchain/tarsy/golang-error-handling.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00043 | $0.02832 |
| Opus 5 | $0.00022 | $0.01416 |
| Sonnet 5 | $0.00009 | $0.00566 |
| Haiku 4.5 | $0.00004 | $0.00283 |
Grade A, and why
golang-error-handling scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 491 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Go Error Handling
Modern error handling patterns for Go following 2025-2026 best practices.
Basic Error Handling
Always check errors:
result, err := doSomething()
if err != nil {
return fmt.Errorf("operation failed: %w", err)
}
Never ignore errors (unless explicitly documented):
// Bad
doSomething()
// Good - explicit discard when safe
_ = file.Close()
// Good - handle in defer with function
defer func() {
if err := file.Close(); err != nil {
log.Printf("failed to close file: %v", err)
}
}()
Error Wrapping
Use %w to wrap errors:
func GetUser(id string) (*User, error) {
user, err := db.Query(id)
if err != nil {
return nil, fmt.Errorf("failed to get user %s: %w", id, err)
}
return user, nil
}
Unwrap errors with errors.Is() and errors.As():
err := GetUser("123")
if errors.Is(err, sql.ErrNoRows) {
// Handle not found
}
var validationErr *ValidationError
if errors.As(err, &validationErr) {
// Handle validation error
fmt.Printf("field: %s, message: %s", validationErr.Field, validationErr.Message)
}
Sentinel Errors
Define package-level error values:
package services
import "errors"
var (
ErrNotFound = errors.New("resource not found")
ErrAlreadyExists = errors.New("resource already exists")
ErrInvalidInput = errors.New("invalid input")
ErrConflict = errors.New("resource conflict")
ErrUnauthorized = errors.New("unauthorized")
)
Check with errors.Is():
session, err := service.GetSession(ctx, id)
if errors.Is(err, services.ErrNotFound) {
return http.StatusNotFound, "session not found"
}
if err != nil {
return http.StatusInternalServerError, "internal error"
}
Custom Error Types
For errors needing additional context:
type ValidationError struct {
Field string
Message string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("validation error: %s %s", e.Field, e.Message)
}
func NewValidationError(field, message string) error {
return &ValidationError{Field: field, Message: message}
}
// Usage
if req.SessionID == "" {
return nil, NewValidationError("session_id", "required")
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 491 lines · 43 tokens per session scan A 37a19a37092e
golang-error-handling is a skill published in the GitHub repository codeready-toolchain/tarsy (10 stars, last pushed today), licensed Apache-2.0. It adds 43 tokens to every session and 2,832 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
vigilante-issue-implementation-on-go
Implement a GitHub issue end-to-end when Vigilante dispatches work for a Go repository with idiomatic tooling and security guidance.
performant-go
Strategies for high-performance Go systems (Goroutines, Channels, Pprof, Memory Alignment).
python-package-management
Guide for managing packages in the Agent Framework Python monorepo, including creating new connector packages, versioning, and the lazy-loading pattern. Use this when adding, modifying, or releasing packages.
temporal-python-testing
Test Temporal workflows with pytest, time-skipping, and mocking strategies. Covers unit testing, integration testing, replay testing, and local development setup. Use when implementing Temporal workflow tests or debugging test failures.
build-and-test
How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.
python-feature-lifecycle
Guidance for package and feature lifecycle in the Agent Framework Python codebase, including stage meanings, feature-stage decorators, feature enums, and how to move APIs from one stage to the next.