Reserved Keys
Every key under ai.nimblebrain/ belongs to NimbleBrain. Some are extensions a server may use. The keys on this page are different: the host sets them itself, and it removes them from anything a server sends.
Why a key is reserved
Section titled “Why a key is reserved”A _meta key on a result is a claim by the server that returned it. When the host acts on a key, a server’s copy would let that server steer the host: switch off a safeguard, or suppress guidance meant for the agent. So a key the host acts on is set only by the host’s own tools, and removed from anything a server sends.
A key that could only make the host stricter toward the server that sent it would be safe to accept. The host still keeps such a key to itself until a server has a real use for it, so that its internals do not become a contract with every server.
The keys
Section titled “The keys”| Key | Set by the host on | What it means | Why a server cannot set it |
|---|---|---|---|
ai.nimblebrain/non-advancing |
Results of the host’s own tools that made no progress, such as a tool search that matched nothing | Repeated results like this, even with the question reworded each time, tell the loop guard the agent is stuck on this tool | Nothing it could do would widen the server’s reach, but the loop guard’s inputs are internal, and no server has needed one. |
ai.nimblebrain/infra-error |
Results of calls that failed in transport: a dropped connection, a throttling gateway, a session that expired | The call never reached the tool’s logic, so its failure says nothing about the tool, and the loop guard does not count it | A server that set it on its own errors would exempt itself from the loop guard permanently. |
ai.nimblebrain/skill-activated |
Results of the host’s own skill-loading tool | A skill’s guidance was delivered to the agent in this run, so the host does not deliver it twice | A server that set it could suppress guidance the agent is meant to receive, including safety rules. |
ai.nimblebrain/skill-suppression |
Results of the host’s own skill-muting tool | A skill was muted for the rest of the conversation | The same reason, and it lasts for the rest of the conversation. |
A JSON-RPC error your server returns to an ordinary tools/call never earns infra-error, however its message is worded. One gap remains: when a task-augmented call fails at task creation, the host classifies the server’s error message by its text, so a message worded like a throttling error can earn the marker (#838).
Routing key
Section titled “Routing key”One more key is set by the host’s own components and scoped to a single hop:
| Key | Where | Meaning |
|---|---|---|
ai.nimblebrain/source |
tools/call, resources/read, and task requests at the MCP endpoint |
Names the server a request is for. A workspace endpoint serves many servers behind one URL, and two servers can use the same resource URI. The app bridge always sets it to the app’s own server, whatever the app asks for. A tools/call that names a source is treated as that app’s call: it may reach only that server’s tools, and only those whose ui.visibility includes "app". A client that sets the key can only narrow what it reaches. |
If you see one
Section titled “If you see one”Seeing one of these keys in a trace between the host and your server is normal. Seeing your own server set one is a bug in your server. The host removes the key, so it does nothing, but the attempt tells you something in your code is copying _meta it should not.
Related
Section titled “Related”- NimbleBrain and MCP: the full extension list and design rules
- Protocol support: what the host advertises and reads