api-design
REST API design best practices covering versioning, error handling, pagination, and OpenAPI documentation. Use when designing or implementing REST APIs or HTTP…
Structured logging, debugging (pdb/ipdb), profiling (cProfile/line_profiler), and performance monitoring. Use when adding logging, debugging issues, or optimizing performance. TRIGGER when: logging, debug, profiling, performance monitoring, metrics, stack trace. DO NOT TRIGGER
$ npx -y skills add akaszubski/autonomous-dev --skill observability --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/observabilityContext preview
The summary Claude sees to decide when to auto-load this skill.
Structured logging, debugging (pdb/ipdb), profiling (cProfile/line_profiler), and performance monitoring. Use when adding logging, debugging issues, or optimizing performance. TRIGGER when: logging, debug, profiling, performance monitoring, metrics, stack trace. DO NOT TRIGGER
name: observability description: "Structured logging, debugging (pdb/ipdb), profiling (cProfile/line_profiler), and performance monitoring. Use when adding logging, debugging issues, or optimizing performance. TRIGGER when: logging, debug, profiling, performance monitoring, metrics, stack trace. DO NOT TRIGGER when: feature implementation, testing, documentation, config changes." allowed-tools: [Read, Grep, Glob, Bash]
Comprehensive guide to logging, debugging, profiling, and performance monitoring in Python applications.
---
Structured logging with JSON format for machine-readable logs and rich context.
**Why Structured Logging?**
**Key Features**:
**Example**:
import logging
import json
logger = logging.getLogger(__name__)
logger.info("User action", extra={
"user_id": 123,
"action": "login",
"ip": "192.168.1.1"
})**See**: `docs/structured-logging.md` for Python logging setup and patterns
---
Interactive debugging with pdb/ipdb and effective debugging strategies.
**Tools**:
**pdb Commands**:
**Example**:
import pdb; pdb.set_trace() # Debugger starts here
**See**: `docs/debugging.md` for interactive debugging patterns
---
CPU and memory profiling to identify performance bottlenecks.
**Tools**:
**cProfile Example**:
python -m cProfile -s cumulative script.py
**Profile Decorator**:
import cProfile
import pstats
def profile(func):
def wrapper(*args, **kwargs):
profiler = cProfile.Profile()
profiler.enable()
result = func(*args, **kwargs)
profiler.disable()
stats = pstats.Stats(profiler)
stats.sort_stats('cumulative')
stats.print_stats(10) # Top 10 functions
return result
return wrapper
@profile
def slow_function():
# Your code here
pass**See**: `docs/profiling.md` for comprehensive profiling techniques
---
Performance monitoring, timing decorators, and simple metrics.
**Timing Patterns**:
**Simple Metrics**:
**Example**:
import time
from functools import wraps
def timer(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
duration = time.time() - start
print(f"{func.__name__} took {duration:.2f}s")
return result
return wrapper
@timer
def process_data():
# Your code here
pass**See**: `docs/monitoring-metrics.md` for stack traces, timers, and metrics
---
Debugging strategies and logging anti-patterns to avoid.
**Debugging Best Practices**: 1. **Binary Search Debugging** - Narrow down the problem area 2. **Rubber Duck Debugging** - Explain the problem to someone (or something) 3. **Add Assertions** - Catch bugs early 4. **Simplify and Isolate** - Reproduce with minimal code
**Logging Anti-Patterns to Avoid**:
**See**: `docs/best-practices-antipatterns.md` for detailed strategies
---
| Tool | Use Case | Details | |------|----------|---------| | Structured Logging | Production logs | `docs/structured-logging.md` | | pdb/ipdb | Interactive debugging | `docs/debugging.md` | | cProfile | CPU profiling | `docs/profiling.md` | | line_profiler | Line-by-line profiling | `docs/profiling.md` | | memory_profiler | Memory analysis | `docs/profiling.md` | | Timer decorator | Function timing | `docs/monitoring-metrics.md` | | Context timer | Code block timing | `docs/monitoring-metrics.md` |
---
import logging
# Setup
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# Usage
logger.debug("Debug message") # Detailed diagnostic
logger.info("Info message") # General information
logger.warning("Warning message") # Warning (recoverable)
logger.error("Error message") # Error (handled)
logger.critical("Critical message") # Critical (unrecoverable)
# With context
logger.info("User action", extra={"user_id": 123, "action": "login"})---
# pdb
import pdb; pdb.set_trace()
# ipdb (enhanced)
import ipdb; ipdb.set_trace()
# Post-mortem (debug after crash)
import pdb, sys
try:
# Your code
pass
except ExcA harness that wraps Claude Code with enforcement, specialist agents, and alignment gates to deliver consistent, production-grade software engineering outcomes.
Repo: akaszubski/autonomous-dev
REST API design best practices covering versioning, error handling, pagination, and OpenAPI documentation. Use when designing or implementing REST APIs or HTTP…
Subprocess safety, GitHub CLI integration, retry logic, authentication, rate limiting, and timeout handling. Use when integrating external APIs or CLI tools.…
File-by-file architecture planning with ADR format, dependency ordering, and testability gates. Use when designing system architecture or creating ADRs.…
10-point code review checklist covering correctness, tests, error handling, type hints, naming, security, and performance. Use when reviewing PRs or evaluating…
One topic, one home. Routes content to its canonical store (CLAUDE.md, PROJECT.md, MEMORY.md, docs/, memory/) and audits for duplication. TRIGGER when:…
Systematic debugging methodology — reproduce, isolate, bisect, fix, verify. Use when diagnosing failures, tracing errors, or investigating unexpected behavior.…