Skip to content
v0.3

Reference

Everything below is generated from the kernel’s command registry. It is not a description of the API — it is the API, projected: the same registry produces the HTTP routes, the CLI table, the MCP tool list and the SDK’s types, so a page here cannot disagree with the thing it documents.

  • 189 commands across 26 domains — every mutation in Forge is one of them, and 11 of them are platform commands on the control face.
  • 32 public reads — the anonymous face a storefront calls.
  • 10 bulk reads — the same published answers, many ids at once, behind a tenant credential and a budget of its own (/v1/read/bulk/*).
  • 6 customer reads — the shopper’s own account face, scoped to the session’s identity.
  • 70 operator reads — the internal face, gated by scope.
  • 10 control reads — the platform face.

A command’s name is its address everywhere:

Terminal window
POST /v1/commands/catalog.product.create # API
forge catalog.product.create --input '{…}' # CLI
catalog.product.create # MCP tool
client.call('catalog.product.create', {…}) # SDK

There is no translation table, because there is no translation.

What the name does not fix is the PREFIX. /v1/commands/* is the tenant face; a public command is served by an anonymous face under its own prefix and a platform command by the control face. Every page says which, on its Reachable from line, derived from the same declaration the routes are generated from — so that is the one place to look, per command, and there is no rule to remember.

Each command page carries its scope, whether it is a platform command, where it is reachable from — the exact route, or a plain statement that no request may reach it and why — the events it emits (or the reason it emits none), its input schema and its result schema. Each read page carries its face, its params and its result. The errors are the same six on every command; the scopes are the names a credential can carry.