Golang Pro
antoniopaya22/go-rest-template
Implements concurrent Go patterns using goroutines and channels, designs and builds microservices with gRPC or REST, optimizes Go application performance with pprof, and enforces idiomatic Go with…
A skill your agent uses when decomposing a monolith, designing inter-service communication, implementing circuit breakers or sagas, reasoning about data ownership across services, or setting up an…
$ npx skills add kid-sid/claude-spellbook --skill microservices -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kid-sid/claude-spellbook microservices --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/microservices .claude/skills/microservices && 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 "microservices" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/microservices into .claude/skills/microservices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "microservices", 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/microservicesType 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 microservices -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kid-sid/claude-spellbook microservices --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/microservices .agents/skills/microservices && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "microservices" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/microservices into .agents/skills/microservices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "microservices", 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 microservices -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kid-sid/claude-spellbook microservices --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/microservices .cursor/skills/microservices && 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 "microservices" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/microservices into .cursor/skills/microservices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "microservices", 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/microservices--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 microservices -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kid-sid/claude-spellbook microservices --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/microservices .gemini/skills/microservices && 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 "microservices" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/microservices into .gemini/skills/microservices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "microservices", 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 microservicesInstalls 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 microservices -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/microservices .github/skills/microservices && 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 "microservices" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/microservices into .github/skills/microservices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "microservices", 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 microservices -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 microservices --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/microservices .opencode/skills/microservices && 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 "microservices" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/microservices into .opencode/skills/microservices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "microservices", 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.
microservicesA skill your agent uses when decomposing a monolith, designing inter-service communication, implementing circuit breakers or sagas, reasoning about data ownership across services, or setting up an…
Microservices is an agent skill from kid-sid/claude-spellbook. Use when decomposing a monolith, designing inter-service communication, implementing circuit breakers or sagas, reasoning about data ownership across services, or setting up an API gateway for a distributed system.
Its SKILL.md is about 3.5k 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 Backend & APIs, covering Microservices. It works with gRPC. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python, typescript, go, proto and yaml).
From 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.
Microservices loads about 3.5k tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 700 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). 700 words, ~3,526 tokens.
.claude/skills/microservices/SKILL.md (or your agent's skills folder).Design and implementation patterns for decomposing monoliths and building reliable distributed backend systems.
| Strategy | Approach | Best For |
|---|---|---|
| By domain (DDD) | Align services to bounded contexts | Greenfield, domain-rich systems |
| By subdomain | Core / supporting / generic subdomains | Prioritising build-vs-buy |
| Strangler fig | Incrementally replace monolith routes | Existing monoliths |
| By volatility | Isolate frequently-changing logic | High-churn business rules |
# BAD: Shared User model across services
OrderService → reads User.loyaltyPoints
PaymentService → reads User.billingAddress
EmailService → reads User.email
# GOOD: Each service owns what it needs
OrderService → owns OrderCustomer { id, name, loyaltyPoints }
PaymentService → owns PaymentProfile { userId, billingAddress, paymentMethods }
EmailService → owns ContactRecord { userId, email, preferences }Each service owns its data. No direct cross-service DB queries.
1. Route all traffic through a facade (nginx / API gateway)
2. Identify one vertical slice (e.g., /api/payments/*)
3. Implement that slice as a new service
4. Re-route the facade to the new service
5. Delete the monolith code for that slice
6. Repeat — monolith shrinks, services grow| Factor | Sync (REST / gRPC) | Async (Queue / Events) |
|---|---|---|
| Latency requirement | Low — caller needs immediate response | Can tolerate delay |
| Coupling | Temporal coupling (both must be up) | Decoupled — producer/consumer independent |
| Use case | Queries, user-facing reads | Commands, workflows, notifications |
| Error handling | Propagates to caller immediately | Dead-letter queue, retry policies |
| Throughput | Limited by slowest service | Buffered; consumer scales independently |
# Python — requests with retry and timeout
import httpx
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=1, max=10))
def get_user(user_id: str) -> dict:
response = httpx.get(
f"http://user-service/users/{user_id}",
timeout=2.0, # always set a timeout
)
response.raise_for_status()
return response.json()["data"]// TypeScript — fetch with timeout and retry
async function getUser(userId: string): Promise<User> {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 2000);
try {
const res = await fetch(`http://user-service/users/${userId}`, {
signal: controller.signal,
});
if (!res.ok) throw new Error(`upstream error: ${res.status}`);
return (await res.json()).data;
} finally {
clearTimeout(timeout);
}
}// Go — http client with timeout
func (c *UserClient) GetUser(ctx context.Context, userID string) (*User, error) {
ctx, cancel := context.WithTimeout(ctx, 2*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, http.MethodGet,
fmt.Sprintf("http://user-service/users/%s", userID), nil)
resp, err := c.http.Do(req)
if err != nil {
return nil, fmt.Errorf("user-service: %w", err)
}
defer resp.Body.Close()
// decode...
}// order.proto
service OrderService {
rpc GetOrder (GetOrderRequest) returns (Order);
rpc CreateOrder (CreateOrderRequest) returns (Order);
rpc ListOrders (ListOrdersRequest) returns (stream Order); // server streaming
}
message GetOrderRequest { string order_id = 1; }
message Order {
string id = 1;
string customer_id = 2;
OrderStatus status = 3;
repeated OrderItem items = 4;
}# Python — publishing an event (Kafka)
from confluent_kafka import Producer
import json
producer = Producer({"bootstrap.servers": "kafka:9092"})
def publish_order_placed(order: Order):
event = {
"event_type": "order.placed",
"order_id": order.id,
"customer_id": order.customer_id,
"total": str(order.total),
"occurred_at": order.created_at.isoformat(),
}
producer.produce(
topic="orders",
key=order.id,
value=json.dumps(event).encode(),
)
producer.flush()// TypeScript — consuming events (Kafka / KafkaJS)
const consumer = kafka.consumer({ groupId: "notification-service" });
await consumer.subscribe({ topic: "orders", fromBeginning: false });
await consumer.run({
eachMessage: async ({ message }) => {
const event = JSON.parse(message.value!.toString());
if (event.event_type === "order.placed") {
await notifyCustomer(event.customer_id, event.order_id);
}
},
});# Python — using pybreaker
import pybreaker
breaker = pybreaker.CircuitBreaker(fail_max=5, reset_timeout=30)
@breaker
def call_inventory_service(product_id: str) -> int:
return inventory_client.get_stock(product_id)
# States: CLOSED (normal) → OPEN (failing, fast-fail) → HALF-OPEN (probing)// Go — using gobreaker
import "github.com/sony/gobreaker"
cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "inventory-service",
MaxRequests: 3, // requests allowed in half-open
Interval: 10 * time.Second, // rolling window
Timeout: 30 * time.Second, // how long to stay OPEN
ReadyToTrip: func(counts gobreaker.Counts) bool {
return counts.ConsecutiveFailures > 5
},
})
stock, err := cb.Execute(func() (interface{}, error) {
return inventoryClient.GetStock(ctx, productID)
})# Isolate thread pools per downstream dependency
from concurrent.futures import ThreadPoolExecutor
_inventory_pool = ThreadPoolExecutor(max_workers=10) # capped per service
_payment_pool = ThreadPoolExecutor(max_workers=5)
def get_stock(product_id: str):
future = _inventory_pool.submit(inventory_client.get_stock, product_id)
return future.result(timeout=2)# GOOD: exponential backoff with jitter
attempt 1: wait 1s ± 0.5s
attempt 2: wait 2s ± 1s
attempt 3: wait 4s ± 2s
→ stop after 3 attempts, raise to caller
# BAD: retry storm
for i in range(10):
try: call_service()
except: continue # hammers a degraded service# BAD: shared database
OrderService → SELECT * FROM payments.transactions WHERE order_id = ?
PaymentService → SELECT * FROM orders.orders WHERE user_id = ?
# GOOD: service-owned databases, expose data via API or events
OrderService → owns orders_db (Postgres)
PaymentService → owns payments_db (Postgres)
InventoryService → owns inventory_db (Redis + Postgres)Two flavours:
| Type | Mechanism | Use When |
|---|---|---|
| Choreography | Each service emits events that trigger the next | Simple flows, low coupling |
| Orchestration | Central saga orchestrator drives the steps | Complex flows, explicit rollback |
# Choreography saga — order placement
# 1. OrderService publishes order.created
# 2. PaymentService listens → charges card → publishes payment.succeeded or payment.failed
# 3. InventoryService listens to payment.succeeded → reserves stock → publishes stock.reserved
# 4. OrderService listens to stock.reserved → marks order CONFIRMED
# 5. On any failure: compensating events roll back upstream steps
# Compensating transaction example
def on_payment_failed(event):
order_service.cancel_order(event["order_id"]) # compensation
notification_service.notify_customer(event["customer_id"], "payment_failed")Write path: POST /orders → OrderCommandHandler → orders_db (normalized)
→ publishes order.placed event
Read path: GET /orders/:id → OrderQueryHandler → orders_read_db (denormalized view)
GET /orders?user=X → OrderQueryHandler → orders_read_db (pre-joined)
Read model updated by: consuming order.placed / order.updated eventsUse CQRS when read and write models have fundamentally different shapes or scale requirements.
Client → API Gateway → [UserService, OrderService, ProductService]
Gateway handles:
- Authentication (JWT verification)
- Rate limiting per client / API key
- Request routing / URL rewriting
- SSL termination
- Logging and distributed trace injection (X-Request-ID, traceparent)
- Response aggregation (optional)Mobile App → Mobile BFF → [fine-grained internal APIs]
Web App → Web BFF → [fine-grained internal APIs]
Partner API → Partner BFF → [fine-grained internal APIs]
# Each BFF is thin: aggregate, reshape, and auth-scope data for its client
# BAD: one general-purpose gateway trying to serve all clients equally| Method | How | Example |
|---|---|---|
| Client-side | Client queries registry, picks instance | Netflix Eureka, Consul |
| Server-side | Load balancer queries registry | AWS ALB, Kubernetes Service |
| DNS-based | Use DNS SRV records | Kubernetes (default), Consul DNS |
| Environment | Inject service URLs at deploy time | Docker Compose, Helm values |
Kubernetes DNS-based (simplest):
# payment-service resolves to:
# http://payment-service.payments-ns.svc.cluster.local:8080
# within the same namespace: http://payment-service:8080Distributed tracing is non-negotiable:
# Propagate trace context across services (OpenTelemetry)
from opentelemetry import trace
from opentelemetry.propagate import inject, extract
tracer = trace.get_tracer("order-service")
def place_order(order_data: dict, headers: dict):
ctx = extract(headers) # pull trace context from incoming request
with tracer.start_as_current_span("place_order", context=ctx) as span:
span.set_attribute("order.customer_id", order_data["customer_id"])
outbound_headers = {}
inject(outbound_headers) # inject into outbound calls
payment_client.charge(order_data, headers=outbound_headers)See also:
observability
order.created without a cancel_order compensation path leaves partial state (charged payment, no order) when any downstream step failsfail_max and reset_timeout values; one-size config causes false trips on critical pathseachMessage — blocking the consumer callback blocks partition consumption; use async handlers and commit offsets only after successful processing to avoid message loss/healthz, /readyz) implemented in every service© 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/microservices of kid-sid/claude-spellbook.
Open the folder on GitHubat commit a7c2ac9
Microservices 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 |
|---|---|---|---|---|---|---|
| Microservices this skillkid-sid/claude-spellbook | 189 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Golang Proantoniopaya22/go-rest-template | 172 | 3 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Pixiu HTTP To Dubboapache/dubbo-go-pixiu | 568 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Kratos Developmentaide-family/moon | 253 | — | ~1.5k | Automated safety check: Pass | None | |
| Pixiu Filter Authorapache/dubbo-go-pixiu | 568 | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| API Design InterviewerPrepLabsAI/InterviewMentor | 112 | — | ~2.6k | Automated safety check: Pass | MIT |
antoniopaya22/go-rest-template
Implements concurrent Go patterns using goroutines and channels, designs and builds microservices with gRPC or REST, optimizes Go application performance with pprof, and enforces idiomatic Go with…
apache/dubbo-go-pixiu
Creates and debugs dubbo-go-pixiu HTTP-to-Dubbo route YAML. An agent skill from apache/dubbo-go-pixiu.
aide-family/moon
Develops Go microservices with Kratos v2 following official design philosophy, DDD/Clean Architecture layout, Protobuf API, error/config/middleware patterns, and observability.
apache/dubbo-go-pixiu
Creates and debugs dubbo-go-pixiu HTTP/Network filters. An agent skill from apache/dubbo-go-pixiu.
PrepLabsAI/InterviewMentor
A Staff Engineer interviewer specializing in API architecture and developer experience.
intrinsic-ai/intrinsic-core
Intrinsic Core microservice authoring, ServiceManifest definitions (realspec vs simspec), RuntimeContext port bindings (gRPC port 1 vs HTTP port 7), SIGTERM lifecycle handling, and .binpb sideloading.
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…
Works with
Categories
A skill your agent uses when decomposing a monolith, designing inter-service communication, implementing circuit breakers or sagas, reasoning about data ownership across services, or setting up an…. Microservices is an agent skill from kid-sid/claude-spellbook. Use when decomposing a monolith, designing inter-service communication, implementing circuit breakers or sagas, reasoning about data ownership across services, or setting up an API gateway for a distributed system.
Microservices fits situations like: decomposing a monolith; designing inter-service communication; implementing circuit breakers; reasoning about data ownership across services.
Run `npx skills add kid-sid/claude-spellbook --skill microservices -a claude-code`. Or copy the skill folder (skills/microservices in kid-sid/claude-spellbook) into .claude/skills/microservices in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kid-sid/claude-spellbook --skill microservices -a codex`. Or copy the skill folder (skills/microservices in kid-sid/claude-spellbook) into .agents/skills/microservices 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 microservices -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/microservices, .gemini/skills/microservices, .github/skills/microservices and .opencode/skills/microservices in your project.
SKILL.md names no scripts, command-line tools or credentials: Microservices is instructions for the agent only. Our summary lists: Python 3; Docker.
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.
Microservices is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k 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 Microservices: Golang Pro (antoniopaya22/go-rest-template, 172 stars), Pixiu HTTP To Dubbo (apache/dubbo-go-pixiu, 568 stars), Kratos Development (aide-family/moon, 253 stars) and Pixiu Filter Author (apache/dubbo-go-pixiu, 568 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.