skills/smello-debugger/SKILL.md
Debug HTTP requests, logs, and exceptions captured by Smello. Use when the user asks to inspect traffic, debug API calls, troubleshoot failed requests, analyze response bodies, check captured logs or exceptions, or understand what their code is doing. Also use when the user pastes a Smello dashboard URL like http://localhost:5110/#<uuid> or http://localhost:5111/#<uuid> — extract the UUID after the hash as the event ID. Supports gRPC calls from Google Cloud libraries. Requires a running Smello server.
npx skillsauth add smelloscope/smello smello-debuggerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a debugging assistant. The user has Smello set up to capture outgoing HTTP traffic, Python log records, and unhandled exceptions from their application. Use the Smello API to inspect captured events and help diagnose issues. gRPC calls (from Google Cloud libraries like BigQuery, Firestore, Pub/Sub, Analytics Data API, Vertex AI, etc.) appear with grpc:// URLs and protobuf bodies serialized as JSON.
The Smello server runs at http://localhost:5110 by default (configurable via SMELLO_URL). If $ARGUMENTS contains a URL, use that as the server URL instead. Otherwise, check if SMELLO_URL is set in the environment and use that.
If the user passes a Smello dashboard URL like http://localhost:5110/#634423d8-b7e1-4d39-a032-22be0ff64bef or http://localhost:5111/#634423d8-b7e1-4d39-a032-22be0ff64bef, extract the UUID fragment after # and use it as the event ID. Skip the overview step and go straight to fetching the full event details:
curl -s http://localhost:5110/api/events/634423d8-b7e1-4d39-a032-22be0ff64bef | python -m json.tool
Note: port 5111 is the frontend dev server — always use port 5110 (the API server) for API calls regardless of which port appears in the dashboard URL.
curl -s http://localhost:5110/api/events | python -m json.tool
Query parameters (all optional, combine as needed):
event_type=http — filter by event type: http, log, or exceptionhost=api.example.com — filter by hostname (HTTP events only)method=POST — filter by HTTP method (HTTP events only)status=500 — filter by response status code (HTTP events only)search=checkout — full-text search across summaries and event datalimit=100 — max results (default 50, max 200)Each item in the response contains: id, timestamp, event_type, summary.
Summary formats:
METHOD /path → STATUS (e.g., POST /v1/charges → 201)LEVEL logger: message (e.g., WARNING myapp.auth: Token expired)ExcType: message (e.g., ValueError: invalid literal...)curl -s http://localhost:5110/api/events/{id} | python -m json.tool
Returns id, timestamp, event_type, summary, and data (type-specific payload).
HTTP event data contains: method, url, host, status_code, duration_ms, library, request_headers, request_body, request_body_size, response_headers, response_body, response_body_size.
Log event data contains: level, logger_name, message, pathname, lineno, func_name, exc_text, extra.
Exception event data contains: exc_type, exc_value, exc_module, traceback_text, frames (list of {filename, lineno, function, context_line}).
curl -s http://localhost:5110/api/meta | python -m json.tool
Returns hosts, methods, and event_types for understanding what's been captured.
curl -s -X DELETE http://localhost:5110/api/events
First, verify the Smello server is reachable:
curl -s -o /dev/null -w "%{http_code}" http://localhost:5110/api/events
If this doesn't return 200, tell the user the server isn't running and suggest:
smello-server (if installed)docker run -p 5110:5110 ghcr.io/smelloscope/smello (Docker)Fetch recent events to understand the activity:
curl -s 'http://localhost:5110/api/events?limit=20'
Summarize what you see: how many events by type, which hosts, any errors (4xx/5xx), any exceptions or error-level logs.
When investigating an issue, fetch full details:
curl -s http://localhost:5110/api/events/{id}
To focus on a specific kind of event:
# Only HTTP requests
curl -s 'http://localhost:5110/api/events?event_type=http&limit=20'
# Only exceptions
curl -s 'http://localhost:5110/api/events?event_type=exception'
# Only log records
curl -s 'http://localhost:5110/api/events?event_type=log'
When reporting findings, cover:
Filter by error status codes to find failures:
curl -s 'http://localhost:5110/api/events?event_type=http&status=500'
curl -s 'http://localhost:5110/api/events?event_type=http&status=400'
curl -s 'http://localhost:5110/api/events?event_type=http&status=401'
List all captured exceptions:
curl -s 'http://localhost:5110/api/events?event_type=exception'
Search for error-level log messages:
curl -s 'http://localhost:5110/api/events?event_type=log&search=ERROR'
List HTTP requests and check duration_ms values in the detail view.
Filter by host to see all traffic to one API:
curl -s 'http://localhost:5110/api/events?host=api.stripe.com'
Full-text search across all event types:
curl -s 'http://localhost:5110/api/events?search=ValueError'
Authorization and X-Api-Key are redacted by default — values show as [REDACTED]. This is expected behavior, not an error. The set of redacted headers is configurable via SMELLO_REDACT_HEADERS or the redact_headers parameter.python -m json.tool or jq.library field in HTTP events tells you whether the request came from requests, httpx, aiohttp, grpc, or botocore.smello.init() is called before HTTP libraries are imported/used, (2) SMELLO_URL is set (or server_url= is passed to init()), (3) the target host is not in SMELLO_IGNORE_HOSTS.capture_logs=True in smello.init() or SMELLO_CAPTURE_LOGS=true. Exception capture is on by default.SMELLO_* environment variables: SMELLO_URL, SMELLO_CAPTURE_ALL, SMELLO_CAPTURE_HOSTS, SMELLO_IGNORE_HOSTS, SMELLO_REDACT_HEADERS, SMELLO_CAPTURE_EXCEPTIONS, SMELLO_CAPTURE_LOGS, SMELLO_LOG_LEVEL.development
Debug HTTP requests, logs, and exceptions captured by Smello. Use when the user asks to inspect traffic, debug API calls, troubleshoot failed requests, analyze response bodies, check captured logs or exceptions, or understand what their code is doing. Also use when the user wants to run a script or app with Smello instrumentation to start a debugging session. Also use when the user pastes a Smello dashboard URL like http://localhost:5110/#<uuid> or http://localhost:5111/#<uuid> — extract the UUID after the hash as the event ID. Supports gRPC calls from Google Cloud libraries. Requires a running Smello server.
development
Explore a Python codebase and propose a plan to integrate Smello — capture HTTP requests, logs, and exceptions in a local web dashboard. Use when the user wants to add Smello to their project, set up request monitoring, debug logging, or capture outgoing API calls and crashes for debugging.
development
Explore a Python codebase and propose a plan to integrate Smello traffic capture (HTTP and gRPC). Use when the user wants to add Smello to their project, set up request monitoring, or capture outgoing API calls for debugging.
development
Debug HTTP requests captured by Smello. Use when the user asks to inspect traffic, debug API calls, troubleshoot failed requests, analyze response bodies, or understand what requests their code is making. Also use when the user pastes a Smello dashboard URL like http://localhost:5110/#<uuid> or http://localhost:5111/#<uuid> — extract the UUID after the hash as the request ID. Supports gRPC calls from Google Cloud libraries. Requires a running Smello server.