Cw debug
Skill pilot617/awesome-claude-code-plugins/plugins/cw-debug/skills/cw-debug
A curated marketplace of high-quality Claude Code plugins for developers who ship production software.From the repository description
npx -y skills add pilot617/awesome-claude-code-plugins --skill cw-debugAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.4 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
/cw-debug — CloudWatch Log Investigation Skill
You are investigating a production issue using CloudWatch Logs Insights. Follow the structured methodology below, adapting queries based on what you discover in each phase.
Arguments
The user will invoke this skill as:
/cw-debug <log_group> <filter_pattern> <hours_back> <region> "<issue_description>"
log_group: The CloudWatch log group path (e.g.,/aws/ecs/my-service)filter_pattern: Any string to filter logs — a user ID, request ID, service name, error code, or any identifier relevant to the investigationhours_back: How many hours of logs to search (e.g.,24,168for 7 days)region: AWS region (e.g.,us-east-1)issue_description: Free-text description of the problem being investigated (bug, performance issue, unexpected behavior, etc.)
Setup
- Always use
.venv/bin/pythonto run scripts - The skill has its own self-contained CloudWatch utility at
${CLAUDE_PLUGIN_ROOT}/skills/cw-debug/scripts/cw.py - Do NOT import from
cloudwatch_utils.py— use the skill's own module instead - To use in inline scripts, add the scripts dir to
sys.paththen import:import sys, os sys.path.insert(0, os.path.expanduser("${CLAUDE_PLUGIN_ROOT}/skills/cw-debug/scripts")) from cw import CWClient cw = CWClient(region="{region}") results = cw.query("{query}", hours_back={hours_back}, log_group="{log_group}") cw.print_table(results) - Or use the CLI directly:
.venv/bin/python ${CLAUDE_PLUGIN_ROOT}/skills/cw-debug/scripts/cw.py \ --region {region} --log-group "{log_group}" --hours {hours_back} \ --query "fields @timestamp, @message | limit 25" - Available
CWClientmethods:cw.query(query_string, hours_back, log_group)— single log group querycw.query_multi(query_string, hours_back, log_groups)— query multiple log groups, merge results with_log_grouptagCWClient.summarize_stats(results, value_field, group_field=None)— compute count/avg/min/p50/p90/p95/p99/max from fetched resultsCWClient.time_bucket_counts(results, timestamp_field, bucket_minutes)— group into time buckets for spike detectionCWClient.print_table(results)— ASCII table outputCWClient.print_json(results)— JSON outputcw.save(results, name)— save toinvestigations/<name>.csv
- Refer to
${CLAUDE_PLUGIN_ROOT}/skills/cw-debug/query_library.mdfor pre-built query templates
Rules
- Analyze before querying: After every query result, analyze the data and explain what you found before running the next query. Never chain queries blindly.
- Adapt parse patterns: Phase 1 reveals the actual log format. Use those discovered patterns (field names, delimiters, JSON structure) in all subsequent phases. Do NOT assume a log format before seeing real logs.
- Do not write files unless user explicitly asks. Print findings to stdout. Only save CSVs or reports when the user requests it.
- Read the local codebase to correlate log findings with source code when investigating bugs. Use Grep and Read to find relevant code paths that correspond to log patterns.
- Be iterative: If a phase reveals something unexpected, adjust the investigation plan. Skip strategies that don't apply; repeat queries with refined parameters if needed.
Phase 1 — Reconnaissance (always runs)
Goal: Understand what's in the logs before writing targeted queries.
- Sample raw logs — Fetch 20-30 raw log entries to see the actual format:
fields @timestamp, @message | filter @message like /{filter_pattern}/ | sort @timestamp desc | limit 25 - Read the raw logs carefully. Identify:
- Log format (JSON, key-value, plain text?)
- Available field names and delimiters
- What
parsepatterns will work
- Get message type distribution — Count unique message types:
(Adaptfields @timestamp, @message | filter @message like /{filter_pattern}/ | stats count(*) by msgmsgto whatever field holds the message type in the actual logs) - Check log volume over time to spot anomalies:
filter @message like /{filter_pattern}/ | stats count(*) as cnt by bin(1h) | sort bin asc - Classify the issue type based on logs and the issue description. Determine which category best fits:
- Error/Bug — exceptions, failures, unexpected responses
- Performance — slow responses, timeouts, high latency
- Data/Behavioral — unexpected data, wrong outputs, logic issues
- Unknown — insufficient signal, needs broader exploration
Summarize reconnaissance findings before moving on: log format, key fields, volume patterns, and issue classification.
Phase 2 — Adaptive Investigation
Goal: Based on Phase 1 findings and the issue classification, select 2-4 strategies from the table below. Explain why each strategy was chosen before executing it.
| Strategy | When to use | What it does |
|---|---|---|
| Error Analysis | Errors or exceptions found in logs, or issue describes a bug | Count errors by type, examine temporal distribution, extract stack traces |
| Performance Analysis | Slow responses, timeouts, or latency mentioned in issue | Parse response times, compute percentiles, find slowest operations |
| Deep Trace | Need to understand the full lifecycle of a specific request or event | Trace a request/correlation ID through its complete lifecycle |
| Code Correlation | Bug or unexpected behavior, need to find root cause in source | Read local codebase to find code paths matching log patterns, identify potential root cause |
| Entity Tracking | Need to understand a specific user, session, or entity's experience | Trace all activity for a given identifier over time |
| Cross-Service | Evidence suggests the issue spans multiple services | Fan out to other log groups using query_multi, correlate timestamps |
Error Analysis
- Filter for error-level logs, exceptions, HTTP 4xx/5xx, or failure keywords
- Count errors by type/message and bin by time intervals (5m or 15m) to find spikes
- Extract representative stack traces or error messages for the most frequent errors
Performance Analysis
- Parse response times or duration fields from logs (adapt parse pattern to Phase 1 findings)
- Compute stats: count, avg, p50, p90, p95, p99, max using
CWClient.summarize_stats() - Identify the slowest operations and correlate with the reported issue timeline
Deep Trace
- Pick 3-5 request or correlation IDs from prior findings (slowest, most errors, etc.)
- Query full lifecycle for each ID:
fields @timestamp, @message | filter @message like /{request_id}/ | sort @timestamp asc | limit 200 - Build a timeline of each request: identify where time was spent and what failed
Code Correlation
- Use Grep to search the local codebase for function names, error messages, or log strings found in logs
- Read the matching source files to understand the code paths involved
- Identify potential root causes: missing error handling, race conditions, incorrect logic
Entity Tracking
- Use the filter pattern or a discovered entity ID to trace all activity over the time window
- Build a chronological timeline of events for that entity
- Identify patterns: repeated retries, long gaps, error sequences, state transitions
Cross-Service
- Identify related log groups from log content (references to other services, queue names, etc.)
- Use
cw.query_multi()to query the same time windows or correlation IDs across multiple log groups - Correlate timestamps to determine where the issue originates and how it propagates
Phase 3 — Summary
Goal: Synthesize findings into a clear investigation summary.
Print to stdout:
- Root Cause / Hypotheses — ranked by strength of evidence. If the root cause is clear, state it directly. If inconclusive, list top hypotheses with confidence levels.
- Supporting Evidence — key log entries, patterns, and data points that support each hypothesis.
- Actionable Recommendations — concrete next steps to fix, mitigate, or further investigate.
Output
Print a concise investigation summary to stdout. If the user asks for a written report, use the RCA template at ${CLAUDE_PLUGIN_ROOT}/skills/cw-debug/rca_template.md.
What ships with it: 3 files
17.7 KB alongside SKILL.md, 1 of them executable
scripts/
- cw.pyruns12.2 KB
- query_library.md4.5 KB
- rca_template.md997 B