forge
Clone forge-starter
Ask firstthe skill reads what forge recorded
Four reads, every forge has theminspect · events · app-events · logs
Then explaina failed Resource becomes an Analysis

“I asked it to email Dana and nothing happened.”

One question drives everything: a user contacts support — show me everything that happened to them. Nothing here needs a dashboard; it needs the log forge already keeps.

Ask your agent forge → app-events

you
A user (dana-reporter@…) says they asked for an email to Dana and nothing happened. What happened?
claude
forge → app-events · owner forge → app-events · trace 9f3a…77
At 14:03:40 their AI called draft_email; the policy engine answered needs-approval (an external send is high-risk), so the draft was staged as approval apr_01J…. No approve followed. The approval notice was created but could not be pushed — no push subscription — so the only place they saw it was the AI's reply. Nothing was sent, by design. Fixes: they say “approve it”, or enable push. Want me to replay it?

From the terminal

$ ./forge inspect app-events --app hello --owner user_4fae… --json \
    | jq '.[] | select(.type=="mcp.tool_call") | {at, tool:.data.tool, gate:.data.gate, trace:.data.trace_id}'
{ "at": "14:03:40Z", "tool": "draft_email", "gate": "pending", "trace": "9f3a…77" }
$ curl -s "$FORGE_EVENTS_URL/app-events?app=hello&owner=user_4fae…&subject=trace:9f3a…77"   # every hop of that one request
$ ./forge explain --resource res_01J…                                                     # if a Resource failed
a reportan email addressowner idyour app resolves itevents by ownerGET /app-events?owner=one trace?subject=trace:9f3a…the hop it stopped ata decision, or a Resourceexplain-failureResource → Analysisno email ever enters a log: the address is resolved to an id by your app, at query timeworks on any self-hosted forge · the agent runs the same four reads
The whole path is two reads and one capability. The trace id is the pivot: every hop of one request shares it, across the sidecar and your app.

Which read answers which question

QuestionAsk your agentOr runReads
What did this user's AI do, and what came back?forge → app-events · ownerforge inspect app-events --ownerGET /app-events?owner=
Did the call arrive, and where did it stop?forge → app-events · tracecurl …/app-events?subject=trace:<id>every hop sharing the trace id
Why did that Resource fail?forge → explain-failureforge explain --resource <id>GET /logs/:id → Analysis
Are scheduled jobs healthy?forge → inspect jobsforge jobs · forge events --appfail_count · JobRan / JobRunFailed
Is the platform healthy, what changed?forge → inspect health · forge → resourcesforge inspect health · forge resources · forge eventsGET /status.json · Deployment · Release
Who did what?forge → eventsforge events --app --limit 50ForgeEvents carry the actor · mcp.tool_call carries the host

If you provisioned monitoring on your own stack with forge provision-monitoring, the same questions map to those boards. This site runs none.

Trace pivot caveat: today a consumer app stamps the trace id on its events; forge's own app events do not yet. Stamping it platform-side is a step-4 item.