The agent gateway

A namespace shaped for a caller that cannot click anything

Everything here is a shape over the delivery API and the console services — never a parallel semantic. What makes it a gateway rather than a second API is that it answers the questions a browser never has to ask: what can you do, what is here, and what did I just get wrong.

The manifest answers first, and answers honestlyP2

A capability that has not shipped is reported false rather than omitted, because an absent flag sends a caller probing — which is the exact cost the manifest exists to remove. And where a capability genuinely lives somewhere else, an elsewhere map names the command instead: reporting false for a screenshot reads as not possible, when the truth is possible, from the CLI.

the cheapest read on the surface
GET /api/v2/agent/manifest?include=features,limits

# 298 tokens. The full document is 2343, and the difference
# is the reason this projection exists.

One call for the model, the sitemap and the conventionsP2

The context pack is the discovery session collapsed into a response, and it carries a digest. Session N+1 sends the digest back and is told nothing changed — which turns re-reading the context from a decision an agent has to make into a free default. Ask for the write vocabulary in the same call and every op arrives with the keys it takes.

the whole of discovery
GET /api/v2/agent/context?include=all,manifest,ops

A batch can be planned before it is appliedP7

The plan is the same document as the write, annotated with what each op would change — not a summary in a different shape, because two shapes drift. A destructive op is refused once with a confirm digest over exactly those deletions, so the second call cannot quietly cover more than the first one showed you.

look, then write
POST /api/v2/agent/batch
{
  "dryRun": true,
  "ops": [
    { "op": "post.upsert",
      "address": "post:acme/launch",
      "postType": "Page",
      "fields": { "title": "Launching Shio" } }
  ]
}

A wrong call costs one retry, not one sessionP6

Every 4xx carries the fix in the body: what was wrong, the near miss if the mistake was a typo, the closed set of what is allowed, an instruction, and a call that would have worked. An agent that gets Bad Request and nothing else does the expensive thing — it re-reads documentation, or it guesses.

Give your agent a CMS it can actually drive

Run it yourself, hand it to Claude Code, and keep the approve button. Open source, no hosted tier you are being funnelled towards, and the whole design argument checked into the repository.

$claude mcp add shio -- npx @viglet/shio mcp