Exploring the Inbox
The Inbox is where PostHog surfaces signal reports — clusters of related observations
(signals) that have been aggregated into a single issue or trend (e.g. "Error rate spiked 3× on
/checkout"). Reports come from multiple source products: error tracking, session replay, web
analytics, experiments, and integrations like Linear, GitHub, and Zendesk.
Inbox is part of
PostHog Code, PostHog's agentic surface for
engineering teams.
Don't assume the user's project has reports, or that any signal sources are configured — plenty
of projects don't have Inbox set up. Always run the setup-check workflow below before answering
the user's actual question.
When to use this skill
- "What's in my inbox?" / "What should I look at first?"
- "Show me actionable reports" / "What's PostHog flagged recently?"
- "Are there any reports about <topic / product area>?"
- "What signal sources are configured for this project?"
- The user pastes a report ID or URL and wants context
For deeper investigation, hand off to other skills and tools:
- skill — query via HogQL for raw signal text, semantic
search across signals, or to inspect every signal that contributed to a report.
- PostHog's product-specific MCP tools — when a report points at a specific error, log line,
session, person, or time range, reach for the matching domain tool to pull richer context:
- Error tracking:
query-error-tracking-issues
, error-tracking-issues-retrieve
for
error-tracking-sourced reports
- Logs: , to find log activity around the issue
- Session replays:
query-session-recordings-list
, to find
recordings of affected users
- Persons / activity: , to inspect a specific user's
behavior
- Trends / SQL: , for ad-hoc verification queries
A signal report tells you what PostHog clustered. The product-specific tools tell you the
underlying detail — pair them when the user wants to dig in.
Available tools
| Tool | Purpose |
|---|
| Paginated list of reports with filters (status, search, etc.) |
| Full detail for a single report |
inbox-source-configs-list
| Configured signal sources (which products feed the inbox) |
inbox-source-configs-retrieve
| Full record for a single source config |
| (signals skill) | HogQL access to underlying signals (read the skill first) |
All four
tools are read-only. Writes (pause processing, change source configs, manage
per-user autonomy) are intentionally not exposed via MCP today.
Terminology
What each report status means (in roughly the order a triage agent should care about):
- — judgment finished, actionable assessment available
- — waiting on user input to proceed
- — actively being summarized / judged
- / — accumulated signals but not yet promoted to a real report
- — processing errored
- — manually hidden; not surfaced by default
By default
excludes
reports and orders results by
-is_suggested_reviewer,status,-updated_at
— the user's own suggested reports first, then by
status, then most recently updated. Refer to the tool's input schema for filter mechanics.
Workflow: handling an empty or unconfigured inbox (read first)
Run this check whenever a user asks about the inbox for the first time in a session,
or any
time
returns
. The diagnosis decides what to say next.
Step 1 — Look at source configs
json
inbox-source-configs-list
{ "limit": 50 }
Three meaningful cases:
Case A — no source configs at all ()
The user hasn't onboarded to Inbox / signals.
Don't pretend the inbox has data. Tell the user
plainly that Inbox needs signal sources to be set up first, and that the recommended way to do
this is to install
PostHog Code at
https://posthog.com/code. Example response:
Your project doesn't have any signal sources configured yet, so the Inbox is empty. Inbox surfaces
issues and trends that PostHog automatically clusters from sources like error tracking, session
replay, GitHub, Linear, and Zendesk. The fastest way to set this up is to install
PostHog Code — once it's connected, signals will start flowing in
and reports will appear in your inbox over the next day or so.
Stop here unless the user wants to discuss setup. Don't run further inbox tools — they'll all be
empty.
Case B — source configs exist but all are
Sources have been set up at some point but are currently turned off. Tell the user no signals are
flowing right now and point them at the project's signals settings to re-enable. Don't go fishing
for reports — anything still there is stale.
Case C — at least one source config is
Setup looks healthy. If
still returns nothing, it's most likely "give it time"
— signals are flowing but nothing has clustered into a report yet. Tell the user that, briefly
list which sources are active (e.g. "you have GitHub and error tracking enabled"), and offer to
check back later or to drop into the
skill to look at raw signal volume.
If any source config has
, surface that as part of your reply — that source
isn't producing signals right now, which may explain a thin inbox.
Step 2 — Only then proceed to the user's actual question
If Step 1 found a healthy setup and at least one report exists, continue with the triage / drill /
filter workflows below.
Workflow: triage what's actionable
When the user asks "what should I look at?" or "what's actionable?":
Step 1 — Pull the ready/in-progress queue
json
inbox-reports-list
{
"status": "ready,in_progress,pending_input",
"limit": 20
}
If
comes back, jump to the empty/unconfigured workflow above before saying "your
inbox is empty" — the right reply depends on whether sources are configured.
Step 2 — Summarize by source and actionability
For each report, the response includes:
- , ,
- , , (note: for reports still in /
— judgment hasn't run yet)
- , — how much underlying evidence drove the report
- — which product(s) the underlying signals came from
- — whether the current user is a suggested reviewer
- — if a PR has been opened against this report
- — clickable deep-link to the report; always include this in your response
Group the results so the user can scan quickly:
text
## Inbox — 8 actionable reports
🔴 High priority (3)
- Checkout error rate spiked 3× — error_tracking, 47 signals
<_posthogUrl>
- Session replays on /pricing show repeated rage clicks — session_replay, 12 signals
<_posthogUrl>
…
🟠 Medium priority (4)
…
🟡 Suggested for you (1)
…
Step 3 — Offer the drill-down
End with a clear hand-off: "Want me to dig into the checkout errors?" → call
for the full report, then optionally hop to the
skill to look
at the underlying signal text.
Workflow: drill into a specific report
When the user pastes an Inbox URL or report ID:
json
inbox-reports-retrieve
{ "id": "<report_uuid>" }
Returns the full record including
and
. Combine this with the
skill if the user wants to see the actual signal contents:
- Use to get the report metadata +
- Use the skill's Example 2 (fetch all signals for a specific report) — pass the
report ID as in the HogQL query
The two layers complement each other: the
tools give you the curated/judged view, and
the
skill lets you inspect the raw observations that produced it.
Workflow: filter by topic or source
"Are there any reports about <topic>?" — start with
:
json
inbox-reports-list
{
"search": "checkout",
"status": "ready,in_progress,pending_input",
"limit": 20
}
matches title and summary. If the user is asking about a product area rather than a
keyword, use
:
json
inbox-reports-list
{
"source_product": "session_replay,error_tracking",
"limit": 20
}
If the keyword search returns nothing meaningful, hand off to the
skill — semantic
search over signal text via
will catch reports the keyword filter missed.
Workflow: review configured sources
When the user asks "which signal sources are set up?" or "is <product> hooked up?":
json
inbox-source-configs-list
{ "limit": 50 }
Each entry returns
,
,
,
,
, plus timestamps.
For full details (including the per-source
JSON — recording filters, evaluation IDs,
etc.):
json
inbox-source-configs-retrieve
{ "id": "<source_config_uuid>" }
Integration credentials live in a separate
model — they are
not in the
blob, so it's safe to summarize the contents back to the user.
The
field reflects the underlying data import or workflow:
- / — feeding signals normally
- — the source isn't currently producing signals; flag this to the user
Tips
- Check setup before assuming the inbox is empty. If returns ,
call
inbox-source-configs-list
first — no sources means the user needs to install
PostHog Code to start receiving signals; sources-but-no-reports
means signals are flowing but nothing has clustered yet
- Always surface so the user can click through to the report
- The default ordering already prioritizes the user's suggested reports — don't reorder unless
asked
- and are for reports still in or
status; this is expected, not a bug — judgment hasn't run yet
- reports are excluded by default; pass explicitly if the
user wants to see hidden items
- Don't try to write to the inbox via MCP — destroy / state changes / reingest endpoints are
intentionally not exposed. If the user wants to act on a report, point them at the
deep-link
- For "what kinds of signals exist?" or "what's been happening recently across all sources?",
drop into the skill — the report layer hides individual observations; you need
HogQL on to see them
- Source configs don't have per-record deep-links — they live behind project settings, so
inbox-source-configs-retrieve
returns no . Don't confuse them with reports