observability-and-instrumentation
Instruments code so production behavior is visible and diagnosable.
Skill by zademy
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/zademy-observability-and-instrumentation
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/observability-and-instrumentation
What's inside
- Skill name
observability-and-instrumentation- Description
- Instruments code so production behavior is visible and diagnosable. Use when adding logging, metrics, tracing, or alerting. Use when shipping any feature that runs in production and you need evidence it works. Use when production issues are reported but you can't tell what happened from the available data.
- License
- MIT
- Instructions
- 235 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Observability and Instrumentation
## Overview
Code you can't observe is code you can't operate. Observability is the ability to answer "what is the system doing and why?" from the outside, using the telemetry the code emits. Instrumentation is not a post-launch add-on — it's written alongside the feature, the same way tests are. If a feature ships without telemetry, the first user-reported bug becomes archaeology instead of a query.
## When to Use
- Building any feature that will run in production
- Adding a new service, endpoint, background job, or external integration
- A production incident took too long to diagnose ("we couldn't tell what happened")
- Setting up or reviewing alerting rules
- Reviewing a PR that adds I/O, retries, queues, or cross-service calls
**NOT for:**
- Diagnosing a failure happening right now — use the `debugging-and-error-recovery` skill (observability is what makes that skill fast next time)
- Profiling and optimizing measured slowness — use the `performance-optimization` skill
- Launch-day monitoring checklists and rollback triggers — see the `shipping-and-launch` skill; this skill covers the instrumentation that feeds them
## Process
### 1. Define "working" before instrumenting
Telemetry without a question is noise. Before adding any instrumentation, write down 2–4 questions an on-call engineer will ask about this feature:
```
FEATURE: checkout payment retry
QUESTIONS ON-CALL WILL ASK:
1. What fraction of payments succeed on first attempt vs after retry?
2. When a payment fails permanently, why? (provider error? timeout? validation?)
3. Is the payment provider slower than usual?
→ Every signal below must help answer one of these.
```
If you can't name the questions, you're not ready to instrument — you'll log everything and learn nothing.
### 2. Pick the right signal for each question
| Signal | Answers | Cost profile | Example |
|---|---|---|---|
| **Structured log** | "What happened in this specific case?" | Per-event; grows with traffic | `payment_failed` with provider error code |
| **Metric** | "How often / how fast, in aggregate?" | Fixed per series; cheap to query | p99 latency of provider calls |
| **Trace** | "Where did time go across services?" | Per-request; usually sampled | One slow checkout, broken down by hop |
Rule of thumb: metrics tell you **that** something is wrong, traces tell you **where**, logs tell you **why**.
### 3. Structured logging
Log events, not prose. Every log line is a JSON object with a stable event name and machine-readable fields:
```typescript
// BAD: string interpolation — unqueryable, inconsistent
logger.info(`Payment ${id} failed for user ${userId} after ${n} retries`);
// GOOD: stable event name + structured fields
logger.warn({
event: 'payment_failed',
paymentId: id,
provider: 'stripe',
errorCode: err.code,
attempt: n,
}, 'payment failed');
```
**Log levels — use them consistently:**
| Level | Meaning | On-call action |
|---|---|---|
| `error` | Invariant broken; someone may need to act | Investigate |
| `warn` | Degraded but handled (retry succeeded, fallback used) | Watch for trends |
| `info` | Significant business event (order placed, job finished) | None |
| `debug` | Diagnostic detail | Off in production by default |
**Correlation IDs are mandatory.** Generate (or accept) a request ID at the system boundary and attach it to every log line, span, and outbound call. Without it, you cannot reconstruct a single request from interleaved logs:
```typescript
// Express: child logger per request, ID propagated downstream
app.use((req, res, next) => {
req.id = req.headers['x-request-id'] ?? crypto.randomUUID();
req.log = logger.child({ requestId: req.id });
res.setHeader('x-request-id', req.id);
next();
});
```
**When several entry points write to one log, name the entry point.** A correlation ID identifies a run; it does not say which code path started it. The same job reached by a scheduler, by a replay endpoint, and by a manual CLI run produces interchangeable lines in one sink, so attributing a line falls back to elimination — cross-reading the scheduler's history, the process table, a deploy log — and that argument holds only as long as those external records happen to still exist. Stamp the entry point where the run starts, next to the correlation ID, and propagate both the same way:
```typescript
// One helper for every entry point: the run's own logger carries both fields.
// `entryPoint`, not `source` — ECS reserves `source.*` for network fields.
export const runLog = (entryPoint: 'scheduler' | 'replay_endpoint' | 'cli', runId: string) =>
logger.child({ entryPoint, requestId: runId });
// scheduler tick -> runLog('scheduler', crypto.randomUUID())
// POST /jobs/:id/replay -> runLog('replay_endpoint', req.id)
// CLI invocation -> runLog('cli', process.env.RUN_ID ?? crypto.randomUUID())
```
Both fields have to cross the same boundaries as the correlation ID — queue metadata, HTTP headers — or a worker re-derives the entry point and guesses. A field that merely correlates with an entry point is a hint, not an attribution: anything that can invoke the job can reproduce it.
**Never log secrets, tokens, passwords, or full PII.** This is a hard rule from the `security-and-hardening` skill — telemetry pipelines are a classic data-leak path. Allowlist fields; don't log whole request bodies.
### 4. Metrics
For request-driven services, instrument **RED** on every endpoint and every external dependency: **R**ate (requests/sec), **E**rrors (failure rate), **D**uration (latency histogram, not average). For resources (queues, pools, hosts), use **USE**: **U**tilization, **S**aturation, **E**rrors.
As with tracing, the vendor-neutral path is the OpenTelemetry metrics API (same SDK and context as step 5). The example below uses Prometheus' `prom-client` — one common backend choice, not the only one; the RED/USE and cardinality rules are identical either way.
```typescript
import { Histogram } from 'prom-client';
const httpDuration = new Histogram({
name: 'http_request_duration_seconds',
help: 'HTTP request duration',
labelNames: ['method', 'route', 'status_class'], // '2xx', not '200'
buckets: [0.05, 0.1, 0.25, 0.5, 1, 2.5, 5],
});
```From zademy/opencode-context-mode, MIT.
More from zademy/opencode-context-mode
- 0.603score
open-context-mode
zademy
Run code where the data lives — only the answer enters context.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
constraint-driven-development
zademy
Establishes a project's quality bar as a written contract and stops agents quietly lowering it.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
performance-optimization
zademy
Optimizes application performance across frontend, backend, queries, and databases.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
security-and-hardening
zademy
Hardens code against vulnerabilities.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
incremental-implementation
zademy
Delivers changes incrementally in thin, verifiable slices.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
git-workflow-and-versioning
zademy
Structures git workflow practices.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
frontend-ui-engineering
zademy
Builds production-quality, accessible, responsive user-facing UIs.
SkillAFreshness: A★ 2Claude Code +9 - 0.573score
code-review-and-quality
zademy
Conducts multi-axis code review.
SkillAFreshness: A★ 2Claude Code +9 - 0.573score
documentation-and-adrs
zademy
Records decisions and documentation.
SkillAFreshness: A★ 2Claude Code +9 - 0.573score
doubt-driven-development
zademy
Subjects every non-trivial decision to a fresh-context adversarial review before it stands.
SkillAFreshness: A★ 2Claude Code +9 - 0.573score
debugging-and-error-recovery
zademy
Guides systematic root-cause debugging.
SkillAFreshness: A★ 2Claude Code +9 - 0.573score
deprecation-and-migration
zademy
Manages deprecation and migration.
SkillAFreshness: A★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 1
- Last commit (this folder)
- Oct 24, 2026 (4 days ago)
- Last release
- Oct 24, 2026 (4 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/zademy/opencode-context-mode
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
- 0.352score
observability-and-instrumentation
Jero110
Instruments code so production behavior is visible and diagnosable.
SkillAFreshness: A★ 1Claude Code +9 - 0.339score
observability-and-instrumentation
ha4kerspidersks
Instruments code so production behavior is visible and diagnosable.
SkillAFreshness: AClaude Code +9 - 0.336score
observability-and-instrumentation
Zwin-ux
Instruments code so production behavior is visible and diagnosable.
SkillAFreshness: AClaude Code +9 - 0.336score
observability-and-instrumentation
zineyu
Instruments code so production behavior is visible and diagnosable.
SkillAFreshness: AClaude Code +9 - 0.336score
observability-and-instrumentation
FarhanS7
Instruments code so production behavior is visible and diagnosable.
SkillAFreshness: AClaude Code +9 - 0.336score
observability-and-instrumentation
Bhatta2006
Instruments code so production behavior is visible and diagnosable.
SkillAFreshness: AClaude Code +9 - 0.336score
observability-and-instrumentation
raiinman
Instruments code so production behavior is visible and diagnosable.
SkillAFreshness: AClaude Code +9 - 0.315score
observability-and-instrumentation
Partners-in-Biz
Instruments code so production behavior is visible and diagnosable.
SkillBFreshness: BClaude Code +9 - 0.312score
observability-and-instrumentation
vikasvardhanv
Instruments code so production behavior is visible and diagnosable.
SkillBFreshness: BClaude Code +9 - 0.309score
observability-and-instrumentation
publieople
Instruments code so production behavior is visible and diagnosable.
SkillBFreshness: BClaude Code +9 - 0.300score
observability-and-instrumentation
503496348-ops
Instruments code so production behavior is visible and diagnosable.
SkillCFreshness: C★ 2Claude Code +9 - 0.279score
observability-and-instrumentation
CodeCrafterAdi2006
Instruments code so production behavior is visible and diagnosable.
SkillCFreshness: CClaude Code +9
More from zademy
- 0.603score
security-and-hardening
zademy
Hardens code against vulnerabilities.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
performance-optimization
zademy
Optimizes application performance across frontend, backend, queries, and databases.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
open-context-mode
zademy
Run code where the data lives — only the answer enters context.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
constraint-driven-development
zademy
Establishes a project's quality bar as a written contract and stops agents quietly lowering it.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
incremental-implementation
zademy
Delivers changes incrementally in thin, verifiable slices.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
git-workflow-and-versioning
zademy
Structures git workflow practices.
SkillAFreshness: A★ 2Claude Code +9
Cite this page
observability-and-instrumentation skill. Agent Mart. https://agentmart.dev/skills/zademy-observability-and-instrumentation (last updated 2026-10-24)