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 saajunaid/caddis-plugin --skill observabilitygit clone --depth 1 https://github.com/saajunaid/caddis-pluginWrote 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/saajunaid/caddis-plugin/observability)<a href="https://agentmods.dev/skills/saajunaid/caddis-plugin/observability"><img src="https://agentmods.dev/badge/skills/saajunaid/caddis-plugin/observability/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/saajunaid/caddis-plugin/observability"><img src="https://agentmods.dev/badge/skills/saajunaid/caddis-plugin/observability.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.00051 | $0.02892 |
| Opus 5.5 | $0.00020 | $0.01157 |
| Sonnet 5.5 | $0.00010 | $0.00578 |
| Haiku 4.5 | $0.00005 | $0.00289 |
Grade A, and why
observability 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 19d 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 — 372 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Observability Skill
Everything needed to understand what your system is doing in production: structured logging, distributed tracing, metrics, and error tracking.
1. Structured Logging
Core Principles
- Emit JSON that machines can parse, not prose that humans must parse
- Every log line:
timestamp,level,message,correlation_id,service - Never log PII — redact before logging
- Use log levels semantically (DEBUG/INFO/WARNING/ERROR — no
print())
Python — structlog or loguru
# structlog (recommended for services)
import structlog
import uuid
logger = structlog.get_logger()
# Configure at app startup
structlog.configure(
processors=[
structlog.contextvars.merge_contextvars,
structlog.processors.add_log_level,
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.JSONRenderer(),
]
)
# Bind context for a request/task
structlog.contextvars.bind_contextvars(
correlation_id=str(uuid.uuid4()),
user_id=user.id, # Safe — internal ID, not PII
service="user-service",
)
logger.info("user.login", method="oauth2", provider="google")
logger.warning("rate.limit.approaching", remaining=5, limit=100)
logger.error("db.query.failed", query="users.find", error=str(e))
# loguru (recommended for simpler scripts/notebooks)
from loguru import logger
import sys
logger.remove() # Remove default stderr handler
logger.add(
sys.stderr,
format="{time:ISO8601} {level} {message}",
serialize=True, # JSON output
level="INFO",
)
logger.add("logs/app.log", rotation="100 MB", retention="7 days", serialize=True)
TypeScript — pino
import pino from 'pino'
export const logger = pino({
level: process.env.LOG_LEVEL ?? 'info',
transport: process.env.NODE_ENV === 'development'
? { target: 'pino-pretty', options: { colorize: true } }
: undefined,
base: { service: 'web-api', env: process.env.NODE_ENV },
})
// Child logger with bound context
export function requestLogger(correlationId: string) {
return logger.child({ correlationId })
}
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.
- 19d ago Changed · -29 tokens per session f45e7756f5f1
- 1mo ago First seen · 372 lines · 80 tokens per session scan A 834d7207f4be
observability is a skill published in the GitHub repository saajunaid/caddis-plugin (0 stars, last pushed 2d ago), licensed MIT. It adds 51 tokens to every session and 2,892 once invoked, about $0.0002 per session on Opus 5.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-09-03.
Other skills, from other repositories
goga-cookbook
Principles for applying DSL specification in cell and CODEMANIFEST design.
goga-review-plan
Verify execution plan completeness and correctness.
goga-define-challenge
Challenge the complete product definition before the PRD is generated.
goga-define-experience
Define the user experience required to achieve the established product goals and solve the identified problem.
goga-define-requirements
Define the product requirements that describe what the product must do to deliver the established user experience and achieve the agreed product goals.
goga-discover
Interview the user relentlessly about a decision until every branch of the design tree is resolved, then record the result as a short ADR.