forge
Clone forge-starter
23 Resource typesdurable state, one store
ForgeEventsa closed catalog, about Resources
App eventsyour open vocabulary, owner-scoped

Events & Resources

the platform's lane · ForgeEvents · closed catalog · about Resourcescapability runbuildResourceBuild res_01J… · statusproducesBuildStartedBuildSucceededtime → {type, resource_type, resource_id, actor, data}recordsyour lane · app events (C3) · open vocabulary · owner-scopedyour appa domain fact happenedPOST /app-eventsevent log · forge_app_events14:07:11 order.placed owner user_01 subject order:ord_7 {total: 42.00}14:07:40 invoice.sent owner user_01 subject order:ord_7 {to: "[email]"}14:09:02 mcp.tool_call owner user_01 subject trace:9f3a… {tool, gate, outcome}any type you choose · queryable by owner, subject, type · GET /app-events
Two kinds of event, never confused. The platform's are enumerated and describe Resources; yours are whatever your domain needs, and the owner is always the query key.
One store for every Resource

All 23 types persist through the same store — a JSON file per resource on disk, or one Postgres table — and read back through GET /resources.

Your audit trail is just events

A consumer records every tool call as an app event keyed by trace id. “What happened to my request?” is one query.