npx skills add ...
npx skills add posthog/ai-plugin --skill exploring-endpoint-execution-logs
Explore and diagnose a PostHog endpoint's execution logs — error messages, failed runs, cache misses, slow runs, or unexpected row counts during endpoint invocations. Use when the user says "my endpoint is failing", "show me the logs for endpoint X", "what error did endpoint Y produce", "why did endpoint Z return no rows", "is this endpoint hitting cache", or "check the last N runs". Focused on a single named endpoint's runtime log entries, not project-wide auditing or query performance profiling.
npx skills add posthog/ai-plugin --skill exploring-endpoint-execution-logs
Every endpoint run emits one execution log entry to PostHog's log_entries store. This skill
reads those entries for a specific endpoint to answer "what happened when it ran?". It is the
log-level counterpart to diagnosing-endpoint-performance (which reasons about cache/materialisation
strategy from config and query_log).
If the question is "this endpoint is slow, what should I change?", use
diagnosing-endpoint-performance. If it's project-wide ("what can I clean up?"), use
auditing-endpoints.
Each run produces exactly one entry. The level is INFO on success and ERROR on failure, and the
message carries the extra data as searchable key=value tokens:
Token meanings:
| Token | Values | Meaning |
|---|---|---|
path | materialized / inline / ducklake / ducklake_fallback | Which execution path ran |
cache | hit / miss | Whether the query result cache was used (omitted for ducklake) |
duration_ms | integer | Wall-clock execution time |
rows | integer | Number of result rows returned |
version | integer | Which endpoint version ran |
error | e.g. ResolutionError, HogVMException | Error class / HogQL code name (failures only) |
Each run gets a distinct instance_id, so logs group one-per-execution in the viewer.
| Tool | Purpose |
|---|---|
endpoint-logs | Primary. Execution log entries for one endpoint by name. Filter by level, search, time range, instance_id; limit up to 500. |
endpoint-get | Endpoint config for context (current version, materialisation, query kind) |
execute-sql | Fallback / aggregation directly against log_entries (log_source='endpoints') |
endpoint-logs exposes the standard log filters:
ERROR to see only failed runs, or INFO,ERROR for all.key=value tokens, you can search cache=miss, path=inline, error=ResolutionError, or a
specific version=3.Identify the endpoint by name. If given a URL, parse it from
/api/projects/{team_id}/endpoints/{name}/run.
Start broad: endpoint-logs for the endpoint with a recent time range. Skim levels and tokens.
Narrow to the symptom:
level=ERROR; read the error= token and path= to see where it broke.search=cache=miss to see how often runs miss cache.rows= across runs, and version= to spot a regression after a
version bump.For counts/trends across many runs (e.g. error rate over a week), drop to execute-sql against
log_entries:
Get the endpoint UUID from endpoint-get (the log_source_id is the endpoint id, not its name).
Summarize: what's failing, since when, on which version/path, and whether it's a config issue
(hand off to diagnosing-endpoint-performance) or a query bug.
log_source_id is the endpoint UUID, not the name. For execute-sql, fetch it via
endpoint-get first.log_entries TTL). Older runs won't appear.endpoint-logs tells you what happened and why a run
failed; for "should I materialise / bump cache TTL?" use diagnosing-endpoint-performance, which
reasons over config and query_log cost metrics.