YugabyteDB ASH Instrumentation
yugabyte/yugabyte-db
Procedure for adding or changing YugabyteDB Active Session History wait states in TServer and DocDB C++ code, including the macro to use for sync and async paths.
A skill your agent uses when writing or debugging non-trivial Go — error handling patterns, goroutine/channel design, interface composition, generics, context propagation, or Go-specific idioms like…
$ npx skills add kid-sid/claude-spellbook --skill go -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kid-sid/claude-spellbook 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/kid-sid/claude-spellbook.git skills-src && mkdir -p .claude/skills && cp -r skills-src/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/kid-sid/claude-spellbook/tree/main/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/kid-sid/claude-spellbook/tree/main/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 kid-sid/claude-spellbook --skill go -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kid-sid/claude-spellbook go --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .agents/skills && cp -r skills-src/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/kid-sid/claude-spellbook/tree/main/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 kid-sid/claude-spellbook --skill go -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kid-sid/claude-spellbook go --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/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/kid-sid/claude-spellbook/tree/main/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/kid-sid/claude-spellbook.git --path 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 kid-sid/claude-spellbook --skill go -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kid-sid/claude-spellbook go --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/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/kid-sid/claude-spellbook/tree/main/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 kid-sid/claude-spellbook 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 kid-sid/claude-spellbook --skill go -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .github/skills && cp -r skills-src/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/kid-sid/claude-spellbook/tree/main/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 kid-sid/claude-spellbook --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 kid-sid/claude-spellbook go --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/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/kid-sid/claude-spellbook/tree/main/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.
goA skill your agent uses when writing or debugging non-trivial Go — error handling patterns, goroutine/channel design, interface composition, generics, context propagation, or Go-specific idioms like…
Go is an agent skill from kid-sid/claude-spellbook. Use when writing or debugging non-trivial Go — error handling patterns, goroutine/channel design, interface composition, generics, context propagation, or Go-specific idioms like table-driven tests and functional options.
Its SKILL.md is about 4.3k 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 Async programming. The repository describes itself as: A curated collection of skills, prompts, and workflows that extend Claude's capabilities — your personal grimoire for AI-powered development. The licence is MIT.
Read from SKILL.md and the folder at commit a7c2ac9. 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.
No URLs in SKILL.md.
From 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 4.3k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 586 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 kid-sid/claude-spellbook at commit a7c2ac9, republished under its MIT licence (© kid-sid). 586 words, ~4,342 tokens.
.claude/skills/go/SKILL.md (or your agent's skills folder).Language-level patterns for writing correct, idiomatic, performant Go.
sync primitives correctlycontext.Context for cancellation and deadlinesany, constraints, type parameters) appropriatelyimport "errors"
// Wrap to add context — preserves the original for errors.Is/As
if err != nil {
return fmt.Errorf("fetch user %d: %w", id, err)
}
// Sentinel errors — compare with errors.Is (not ==)
var ErrNotFound = errors.New("not found")
var ErrUnauthorized = errors.New("unauthorized")
if errors.Is(err, ErrNotFound) {
// handle not found
}
// Custom error type — use errors.As to extract
type ValidationError struct {
Field string
Message string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("validation error on %s: %s", e.Field, e.Message)
}
var ve *ValidationError
if errors.As(err, &ve) {
log.Printf("invalid field: %s", ve.Field)
}// BAD: ignoring errors
data, _ := os.ReadFile("config.json")
// GOOD: always handle
data, err := os.ReadFile("config.json")
if err != nil {
return fmt.Errorf("read config: %w", err)
}
// Return early, keep the happy path unindented
func process(id string) (*Result, error) {
user, err := db.GetUser(id)
if err != nil {
return nil, fmt.Errorf("get user: %w", err)
}
orders, err := db.GetOrders(id)
if err != nil {
return nil, fmt.Errorf("get orders: %w", err)
}
return &Result{User: user, Orders: orders}, nil
}// BAD: goroutine leaks — no way to stop it
go func() {
for {
process()
}
}()
// GOOD: context-driven shutdown
func worker(ctx context.Context, jobs <-chan Job) {
for {
select {
case <-ctx.Done():
return
case job, ok := <-jobs:
if !ok {
return // channel closed
}
process(job)
}
}
}func fanOut(ctx context.Context, in <-chan int, workers int) <-chan Result {
out := make(chan Result)
var wg sync.WaitGroup
for i := 0; i < workers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for v := range in {
select {
case out <- compute(v):
case <-ctx.Done():
return
}
}
}()
}
go func() {
wg.Wait()
close(out) // signal downstream that all workers are done
}()
return out
}// Done channel — broadcast shutdown to many goroutines
done := make(chan struct{})
close(done) // unblocks ALL receivers simultaneously
// Buffered channel as semaphore — limit concurrency
sem := make(chan struct{}, 10)
sem <- struct{}{} // acquire
defer func() { <-sem }() // release
// Pipeline stage
func generate(nums ...int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for _, n := range nums {
out <- n
}
}()
return out
}
// Select with default — non-blocking send/receive
select {
case ch <- value:
// sent
default:
// channel full — drop or handle
}sync primitives// Mutex — protect shared state
type SafeCounter struct {
mu sync.Mutex
count map[string]int
}
func (c *SafeCounter) Inc(key string) {
c.mu.Lock()
defer c.mu.Unlock()
c.count[key]++
}
// RWMutex — concurrent reads, exclusive writes
type Cache struct {
mu sync.RWMutex
store map[string]string
}
func (c *Cache) Get(k string) (string, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
v, ok := c.store[k]
return v, ok
}
// sync.Once — initialize exactly once (safe for goroutines)
var instance *DB
var once sync.Once
func GetDB() *DB {
once.Do(func() { instance = connect() })
return instance
}
// sync.WaitGroup — wait for a collection of goroutines
var wg sync.WaitGroup
for _, item := range items {
wg.Add(1)
go func(i Item) {
defer wg.Done()
process(i)
}(item)
}
wg.Wait()// Always accept context as the first parameter in public functions
func FetchUser(ctx context.Context, id string) (*User, error) { ... }
// Propagate — never store context in structs
type Service struct{ db *DB } // GOOD — context passed per call
func (s *Service) Get(ctx context.Context, id string) (*User, error) { ... }
// Deadline / timeout
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel() // always defer cancel — releases resources even on success
// Cancellation
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
cancel() // signal worker to stop
// Value — only for request-scoped data (trace IDs, auth tokens), not config
type ctxKey string
const requestIDKey ctxKey = "requestID"
func WithRequestID(ctx context.Context, id string) context.Context {
return context.WithValue(ctx, requestIDKey, id)
}
func RequestID(ctx context.Context) string {
v, _ := ctx.Value(requestIDKey).(string)
return v
}
// Check cancellation in long loops
for _, item := range largeSlice {
if ctx.Err() != nil {
return ctx.Err()
}
process(item)
}// BAD: fat interface — hard to implement, hard to test
type Storage interface {
Get(id string) (*User, error)
Save(u *User) error
Delete(id string) error
List(filter Filter) ([]*User, error)
Search(q string) ([]*User, error)
Count() (int, error)
}
// GOOD: small, focused interfaces
type UserGetter interface {
GetUser(ctx context.Context, id string) (*User, error)
}
type UserSaver interface {
SaveUser(ctx context.Context, u *User) error
}
// Compose only where needed
type UserStore interface {
UserGetter
UserSaver
}
// Accept interfaces, return structs
func NewService(store UserGetter) *Service { ... } // testable
func NewPostgresStore(db *sql.DB) *PostgresStore { ... } // concrete return// Struct embedding — promotes fields and methods
type Animal struct{ Name string }
func (a Animal) Speak() string { return a.Name }
type Dog struct {
Animal // promoted: dog.Name, dog.Speak()
Breed string
}
// Interface embedding
type ReadWriter interface {
io.Reader
io.Writer
}
// Embedding to extend without inheriting
type LoggedStore struct {
Store // delegates all Store methods
log *slog.Logger
}
func (ls *LoggedStore) GetUser(ctx context.Context, id string) (*User, error) {
u, err := ls.Store.GetUser(ctx, id) // delegate
ls.log.Info("get user", "id", id, "err", err)
return u, err
}Preferred over long constructor signatures or config structs that need zero values to be meaningful.
type Server struct {
host string
port int
timeout time.Duration
logger *slog.Logger
}
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.port = p } }
func WithTimeout(d time.Duration) Option { return func(s *Server) { s.timeout = d } }
func WithLogger(l *slog.Logger) Option { return func(s *Server) { s.logger = l } }
func NewServer(host string, opts ...Option) *Server {
s := &Server{host: host, port: 8080, timeout: 30 * time.Second}
for _, opt := range opts {
opt(s)
}
return s
}
// Usage
srv := NewServer("localhost",
WithPort(9090),
WithTimeout(10*time.Second),
WithLogger(slog.Default()),
)// Type constraint — built-in or custom
type Number interface {
~int | ~int32 | ~int64 | ~float32 | ~float64
}
func Sum[T Number](items []T) T {
var total T
for _, v := range items {
total += v
}
return total
}
// Generic data structures
type Stack[T any] struct {
items []T
}
func (s *Stack[T]) Push(v T) { s.items = append(s.items, v) }
func (s *Stack[T]) Pop() (T, bool) {
var zero T
if len(s.items) == 0 {
return zero, false
}
v := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return v, true
}
// Map / Filter helpers
func Map[T, U any](slice []T, fn func(T) U) []U {
result := make([]U, len(slice))
for i, v := range slice {
result[i] = fn(v)
}
return result
}
func Filter[T any](slice []T, fn func(T) bool) []T {
var result []T
for _, v := range slice {
if fn(v) {
result = append(result, v)
}
}
return result
}// Handler with dependencies — use a method, not a closure
type Handler struct {
svc *UserService
log *slog.Logger
}
func (h *Handler) GetUser(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id") // Go 1.22+ built-in path params
user, err := h.svc.Get(r.Context(), id)
if err != nil {
if errors.Is(err, ErrNotFound) {
http.Error(w, "not found", http.StatusNotFound)
return
}
h.log.Error("get user", "err", err)
http.Error(w, "internal error", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
}
// Routing (Go 1.22+)
mux := http.NewServeMux()
mux.HandleFunc("GET /users/{id}", h.GetUser)
mux.HandleFunc("POST /users", h.CreateUser)
// Middleware chaining
func logging(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
next.ServeHTTP(w, r)
slog.Info("request", "method", r.Method, "path", r.URL.Path, "dur", time.Since(start))
})
}
srv := &http.Server{
Addr: ":8080",
Handler: logging(mux),
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}func TestAdd(t *testing.T) {
cases := []struct {
name string
a, b int
want int
}{
{"positive", 1, 2, 3},
{"negative", -1, -2, -3},
{"zero", 0, 0, 0},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
got := Add(tc.a, tc.b)
if got != tc.want {
t.Errorf("Add(%d, %d) = %d, want %d", tc.a, tc.b, got, tc.want)
}
})
}
}func setupDB(t *testing.T) *sql.DB {
t.Helper() // marks this as a helper — errors show caller's line
db, err := sql.Open("sqlite3", ":memory:")
if err != nil {
t.Fatalf("open db: %v", err)
}
t.Cleanup(func() { db.Close() }) // runs after test, even on failure
return db
}func BenchmarkProcess(b *testing.B) {
data := generateData()
b.ResetTimer() // exclude setup time
for i := 0; i < b.N; i++ {
Process(data)
}
}
// Run: go test -bench=. -benchmem
func FuzzParse(f *testing.F) {
f.Add("valid input") // seed corpus
f.Fuzz(func(t *testing.T, s string) {
_, err := Parse(s)
// must not panic — error is fine
_ = err
})
}
// Run: go test -fuzz=FuzzParse| Pattern | Rule |
|---|---|
| Package names | Short, lowercase, no underscores: store, auth, httputil |
| Exported names | Self-documenting without package prefix: store.User not store.StoreUser |
internal/ | Enforces package privacy — only importable by parent module |
cmd/ | One sub-package per binary entry point |
| Error variables | Prefix with Err: var ErrNotFound = errors.New(...) |
| Interface location | Define interfaces in the consumer package, not the implementer |
init() | Avoid — prefer explicit initialization in main or constructors |
myapp/
├── cmd/
│ └── server/main.go # entry point
├── internal/
│ ├── auth/ # private to this module
│ └── store/
├── pkg/ # reusable, importable by others
│ └── httputil/
└── go.mod// Loop variable capture (Go < 1.22) — goroutine closes over the same variable
for _, v := range items {
go func() { process(v) }() // BAD pre-1.22: all goroutines see the final v
go func(v Item) { process(v) }(v) // GOOD: pass as argument
}
// Go 1.22+: each iteration gets its own copy automatically
// Nil interface != nil pointer
var p *MyType = nil
var i interface{} = p
i == nil // false — interface has type info even if value is nil
// Return a plain nil to get a nil interface:
func getError() error { return nil } // not return (*MyError)(nil)
// Slice append aliasing
a := []int{1, 2, 3}
b := a[:2]
b = append(b, 99) // may overwrite a[2] if cap allows
// Use a[low:high:max] to control capacity and prevent aliasing:
b = a[:2:2] // cap=2, so append always allocates a new backing array
// Map zero value is nil — must initialize before writing
var m map[string]int
m["x"] = 1 // panic: assignment to entry in nil map
m = make(map[string]int)
m["x"] = 1 // ok
// defer in a loop — deferred until function returns, not loop iteration
for _, f := range files {
f, _ := os.Open(f)
defer f.Close() // BAD: all closes happen at function end
}
// GOOD: wrap in a closure or helper function
for _, name := range files {
func() {
f, _ := os.Open(name)
defer f.Close()
process(f)
}()
}| Technique | When to use |
|---|---|
| Pre-allocate slices | make([]T, 0, knownLen) — avoids repeated reallocation |
| Pre-allocate maps | make(map[K]V, knownLen) — reduces rehashing |
strings.Builder | Building strings in a loop — never += in a loop |
sync.Pool | Reuse short-lived allocations (buffers, scratch objects) |
| Avoid interface{} in hot paths | Boxing/unboxing costs allocation; use generics or concrete types |
//go:noescape / unsafe | Only after profiling with pprof |
| Benchmark first | go test -bench=. -benchmem -cpuprofile=cpu.out |
context.Context in a struct — context is request-scoped and must be passed as the first function parameter; storing it bypasses cancellation and makes the struct un-testableerrors.New compared with == — sentinel errors must use errors.Is because wrapping breaks ==; define var ErrX = errors.New(...) and always check with errors.Iserr with := in nested scope — if err := ...; err != nil inside a block creates a new err that shadows the outer one; outer error is silently unchanged(*ConcreteType)(nil) as an error or interface{} produces a non-nil interface; always return untyped nildefer inside a loop — deferred calls run at function return, not loop end; open file handles accumulate; wrap the loop body in a closure or helper functionmakeerror return is either handled or explicitly propagated with fmt.Errorf("...: %w", err)errors.Is / errors.As, never ==context.Context is the first parameter of every function that does I/O or calls other servicescancel() from WithTimeout / WithCancel is deferred immediately after creationsync.WaitGroup.Add() is called before launching the goroutine, not inside itmake before any writeb.ResetTimer() after setup and b.ReportAllocs()t.Helper() is called in every test helper function© kid-sid, MIT. 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 skills/go of kid-sid/claude-spellbook.
Open the folder on GitHubat commit a7c2ac9
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 skillkid-sid/claude-spellbook | 189 | — | ~4.3k | Automated safety check: Pass | MIT | |
| YugabyteDB ASH Instrumentationyugabyte/yugabyte-db | 11k | — | ~4.5k | Automated safety check: Pass | Custom licence | |
| Mirage VFS Adapter Authoringstrukto-ai/mirage | 3.7k | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Golang Patternsantoniopaya22/go-rest-template | 172 | 9 repos | ~3.5k | Automated safety check: Pass | None | |
| Rust Async Patternsdiodeme/Gold-Band | 143 | 10 repos | ~3.1k | Automated safety check: Pass | AGPL-3.0 | |
| Swift Concurrencyhenrypldev/react-native-nitro-mlx | 100 | 3 repos | ~3.1k | Automated safety check: Pass | MIT |
yugabyte/yugabyte-db
Procedure for adding or changing YugabyteDB Active Session History wait states in TServer and DocDB C++ code, including the macro to use for sync and async paths.
strukto-ai/mirage
Builds or extends a custom Mirage virtual filesystem adapter for an API, database, object store or app data, with a working mount configuration and filesystem tests.
antoniopaya22/go-rest-template
Idiomatic Go patterns, best practices, and conventions for building robust, efficient, and maintainable Go applications.
diodeme/Gold-Band
Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns.
henrypldev/react-native-nitro-mlx
Diagnose Swift Concurrency issues, refactor callback-based code to async/await, and guide Swift 6 migration when working with tasks, actors, @MainActor, Sendable, data races, thread safety, or…
farm-fe/farm
Writes, reviews, and debugs idiomatic Rust code with memory safety and zero-cost abstractions.
kid-sid/claude-spellbook
A skill your agent uses when building or reviewing UI components for keyboard and screen reader compatibility, adding ARIA to custom widgets, auditing a page for WCAG AA conformance, or preparing…
kid-sid/claude-spellbook
A skill your agent uses when building, wiring, or debugging an Agentex agent — choosing agent type, configuring acp.py and manifest.yaml, using adk.messages or adk.state, or resolving…
kid-sid/claude-spellbook
A skill your agent uses when building production LLM applications — designing RAG pipelines, choosing vector databases, implementing agent orchestration, optimizing cost, or adding AI safety…
kid-sid/claude-spellbook
A skill your agent uses when building or refactoring Angular applications — choosing between signals, RxJS, and NgRx for state, configuring routing with guards and lazy loading, optimizing change…
kid-sid/claude-spellbook
A skill your agent uses when designing new REST endpoints, reviewing an existing API contract, adding pagination or filtering, planning a versioning strategy, or building a public or partner-facing…
kid-sid/claude-spellbook
A skill your agent uses when implementing login flows, issuing or validating JWTs, setting up OAuth2/OIDC with a provider, designing role-based or attribute-based access control, securing API…
Categories
A skill your agent uses when writing or debugging non-trivial Go — error handling patterns, goroutine/channel design, interface composition, generics, context propagation, or Go-specific idioms like…. Go is an agent skill from kid-sid/claude-spellbook. Use when writing or debugging non-trivial Go — error handling patterns, goroutine/channel design, interface composition, generics, context propagation, or Go-specific idioms like table-driven tests and functional options.
Go fits situations like: debugging non-trivial Go — error handling patterns; goroutine/channel design; interface composition; context propagation.
Run `npx skills add kid-sid/claude-spellbook --skill go -a claude-code`. Or copy the skill folder (skills/go in kid-sid/claude-spellbook) into .claude/skills/go in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kid-sid/claude-spellbook --skill go -a codex`. Or copy the skill folder (skills/go in kid-sid/claude-spellbook) 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 kid-sid/claude-spellbook --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 contains no URLs. Any network use would come from the scripts or tools the agent runs. 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 MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k 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: YugabyteDB ASH Instrumentation (yugabyte/yugabyte-db, 11k stars), Mirage VFS Adapter Authoring (strukto-ai/mirage, 3.7k stars), Golang Patterns (antoniopaya22/go-rest-template, 172 stars) and Rust Async Patterns (diodeme/Gold-Band, 143 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kid-sid (a GitHub user) maintains it in kid-sid/claude-spellbook, which has 189 GitHub stars. The repository holds 52 skills in this directory. The repository was last updated on August 5, 2026.
Source: kid-sid/claude-spellbook on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.