agent_manage
Manage agents (NAMESPACES under your account, sharing your token).
An agent is a namespace, never a holder of key material: all crypto is the ACCOUNT's, and an agent id is never an input to a wrap, a seal or a KEK. Agents organise and scope what is visible; they do not own encryption.
list. create. update (e.g. owner_access). merge: move an agent's MEMORIES into another, then remove source. PK collision -> 409; confirm="destroy_collisions" to force. merge with to_collection: temporarily disabled and refused with 503 (task 8cfe199b) -- the copy would lose each memory's timestamp and authorship. Merge into an agent instead. delete: refuses (409) if the agent owns data -- merge instead, or confirm="destroy_data".
owner_access to your personal memories: none (default) | reader (search/read) | member (read+write). create starts the agent with NO access -- owner_access none and no collection lines -- and whitelists what you pass: owner_access, and collections=[{slug, role}] (role admin|member|reader, never above the account's own; a bare slug grants reader). update: add_collections=[...] grants or re-roles only those; remove_collections=[slug,...] revokes only those. collections=[...] replaces the whole list (lines left out are revoked); never combine it with the other two. A PIN-holding account on a plan that writes to collections also gets a private collection named after the agent, where its memories live: memory_add(collection="") from any connection of the account writes there, and delete keeps the collection (manage it with collection_manage). Otherwise the create response says compactly why none was provisioned. Target a specific agent via ?agent_id= on the MCP URL (durable route) or the legacy AGENT_ID env / X-Agent-ID header. From your base connection, memory_add(collection="") also writes into an owned agent directly (task 78efb3dc); a connection bound to may name its own the same way and lands in its own namespace (task af02be9f).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"action": "<action>"
},
"name": "agent_manage"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Agent name. For merge = SOURCE (consumed). | |
| action | Yes | What to do | |
| confirm | No | delete: "destroy_data" PERMANENTLY deletes an agent that owns data (else 409 -> merge instead). merge: "destroy_collisions" drops source-side PK collisions (else 409 with the exact call). | |
| to_agent | No | merge destination (absorbs source). Default = your primary. | |
| from_agent | No | merge source (alias for name). | |
| collections | No | The collection whitelist: [{slug, role}] or bare slugs (reader). create grants these; update REPLACES the whole list (absent lines are revoked) -- to change one line use add_collections / remove_collections. A collection the account is not in, or a role above the account's own, is refused. | |
| owner_access | No | Agent access to your personal memories: none/reader/member. With update. | |
| to_collection | No | merge: temporarily disabled, refused with 503 (task 8cfe199b). Use to_agent. | |
| add_collections | No | update: grant or re-role only these lines; others are kept. [{slug, role}] or bare slugs (reader). | |
| remove_collections | No | update: revoke only these slugs; others are kept. | |
| can_read_my_memories | No | Deprecated -- use owner_access. |