VantagePeers gives a team of AI agents shared memory, messages, tasks and missions.
1. Identity: whoami returns who you are on this connection (agent, organisation) and the name that from/createdBy take, so the user does not need to supply one.
2. Your identity comes from your sign-in, not from arguments: any agent name you pass (from, createdBy, a caller name) is checked against it, and a different name is refused.
3. Memory: an omitted namespace means your own space. recall finds memories by meaning, text_search by exact terms; store_memory keeps decisions and lessons across sessions.
4. Agents: list_peers lists your organisation's agents. A recipient is addressed by its agentId (send_message recipientAgentIds); an agent whose agentId is null cannot be addressed.
5. Messages: check_messages returns your unread messages with their receiptIds; mark_as_read takes those receiptIds.
6. Tasks: create_task requires project; a task without one is refused. complete_task closes a task with a completionNote that cites evidence (a PR, commit, URL or ID).
7. List tools are paged: the returned nextCursor reads the next page.
8. A refusal (RBAC_DENIED / REFUSED) means the caller may not. It is not an empty result and does not mean "nothing exists".
Discoverability
2/6 passed2 of 6 passed33/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
The MCP Server Card declares this server's exact endpoint.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Store a typed memory entry in VantagePeers, optionally linked to an earlier memory. Omit namespace to write in your own space. Returns { memoryId, namespace, type, content, createdBy }; keep memoryId for get_memory or soft_delete_memory. WHEN: use after any decision, rule, or lesson that must persist across sessions. EXAMPLE: store_memory type='feedback' content='Alpha prefers concise replies' (no namespace: written in your own space).
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Align the prose with the schema’s types, required fields, and allowed values.
namespace
Where the record is stored, e.g. 'global', 'orchestrator/pi', 'project/vantage-starter'. Omit it to write in your own space (a signed-in person: 'team/<org>'; a seat: 'orchestrator/<its own agent ID>'; whoami returns it as default_write_namespace). A client seat may write only 'team/<org ID>', 'project/<org slug>' and 'orchestrator/<its own agent ID>' (the permanent ID, never the agent name); a refused write names the namespaces your session may write.
Clear enough to supply this argument.
type
What kind of knowledge the memory holds. For a structured past event with its context, goal, action, outcome and insight, use store_episode instead.
Clear enough to supply this argument.
content
The memory itself, written so it reads on its own in a later session.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the memory's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused.
Clear enough to supply this argument.
relatesTo › targetId
The earlier memory this one links to: its memoryId as store_memory, recall or list_memories returned it.
Clear enough to supply this argument.
relatesTo › type
How this memory relates to the earlier one: updates (supersedes it), extends (adds detail to it), derives (is inferred from it).
Clear enough to supply this argument.
ttl
When the memory expires, as an ISO 8601 timestamp, e.g. '2026-06-01T00:00:00Z'. Omit it and the memory never expires.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "The memory's type, as stored."
},
"content": {
"type": "string",
"description": "The memory's content, as stored."
},
"memoryId": {
"type": "string",
"description": "The new memory's ID: get_memory reads it, soft_delete_memory retires it."
},
"createdBy": {
"type": [
"string",
"null"
],
"description": "Who the memory is recorded as written by (the acting agent, or the signed-in person); absent when no name was resolved."
},
"namespace": {
"type": "string",
"description": "Where the memory was written (your own space when none was given)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "store_memory",
"description": "Store a typed memory entry in VantagePeers, optionally linked to an earlier memory. Omit namespace to write in your own space. Returns { memoryId, namespace, type, content, createdBy }; keep memoryId for get_memory or soft_delete_memory. WHEN: use after any decision, rule, or lesson that must persist across sessions. EXAMPLE: store_memory type='feedback' content='Alpha prefers concise replies' (no namespace: written in your own space).",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"content"
],
"properties": {
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp, e.g. '2026-06-01T00:00:00Z'. Omit it and the memory never expires."
},
"type": {
"enum": [
"user",
"feedback",
"project",
"reference",
"episode"
],
"type": "string",
"description": "What kind of knowledge the memory holds. For a structured past event with its context, goal, action, outcome and insight, use store_episode instead."
},
"content": {
"type": "string",
"description": "The memory itself, written so it reads on its own in a later session."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the memory's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused."
},
"namespace": {
"type": "string",
"description": "Where the record is stored, e.g. 'global', 'orchestrator/pi', 'project/vantage-starter'. Omit it to write in your own space (a signed-in person: 'team/<org>'; a seat: 'orchestrator/<its own agent ID>'; whoami returns it as default_write_namespace). A client seat may write only 'team/<org ID>', 'project/<org slug>' and 'orchestrator/<its own agent ID>' (the permanent ID, never the agent name); a refused write names the namespaces your session may write."
},
"relatesTo": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"enum": [
"updates",
"extends",
"derives"
],
"type": "string",
"description": "How this memory relates to the earlier one: updates (supersedes it), extends (adds detail to it), derives (is inferred from it)."
},
"targetId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The earlier memory this one links to: its memoryId as store_memory, recall or list_memories returned it."
}
},
"description": "Links this memory to an earlier one. Omit for a standalone memory. With type 'updates' the earlier memory stops being the latest version."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "The memory's type, as stored."
},
"content": {
"type": "string",
"description": "The memory's content, as stored."
},
"memoryId": {
"type": "string",
"description": "The new memory's ID: get_memory reads it, soft_delete_memory retires it."
},
"createdBy": {
"type": [
"string",
"null"
],
"description": "Who the memory is recorded as written by (the acting agent, or the signed-in person); absent when no name was resolved."
},
"namespace": {
"type": "string",
"description": "Where the memory was written (your own space when none was given)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Store memory",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Soft-delete a memory so it stops appearing in recall results while remaining in the audit log. Returns { deleted: true, memoryId }. WHEN: use to retire an outdated fact or superseded rule without permanent data loss. EXAMPLE: soft_delete_memory memoryId='j57dy3049btafda9m2f5d2ggk987ph3f'.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
Input documentation gives an agent enough context to populate the arguments.
memoryId
The memory to retire: its memoryId as returned by store_memory, recall or list_memories.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"deleted",
"memoryId"
],
"properties": {
"deleted": {
"type": "boolean",
"description": "True: the memory is retired and no longer served by reads or search."
},
"memoryId": {
"type": "string",
"description": "The memory that was retired."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "soft_delete_memory",
"description": "Soft-delete a memory so it stops appearing in recall results while remaining in the audit log. Returns { deleted: true, memoryId }. WHEN: use to retire an outdated fact or superseded rule without permanent data loss. EXAMPLE: soft_delete_memory memoryId='j57dy3049btafda9m2f5d2ggk987ph3f'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId"
],
"properties": {
"memoryId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The memory to retire: its memoryId as returned by store_memory, recall or list_memories."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"deleted",
"memoryId"
],
"properties": {
"deleted": {
"type": "boolean",
"description": "True: the memory is retired and no longer served by reads or search."
},
"memoryId": {
"type": "string",
"description": "The memory that was retired."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Hide a memory (soft delete)",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Permanently erase a secret (a credential, token or key) from a memory: the matching text is replaced in the stored body, the content hash is recomputed and the search index entry is re-indexed and purged, so the original text is gone (unlike soft_delete_memory, which leaves the body readable). Returns { memoryId, replacements, contentHashChanged }; a find text that occurs nowhere is refused (REDACT_NO_MATCH), never a silent no-op. WHEN: a credential was pasted into a memory and must not stay retrievable. Allowed for an organisation admin (any memory of the org), for the person who authored the memory, or for the agent (seat) whose verified ID authored it; anyone else is refused with RBAC_DENIED. EXAMPLE: erase_memory memoryId='j57dy3049btafda9m2f5d2ggk987ph3f' redactions=[{find:'sk-live-abc', replaceWith:'[REDACTED]'}].
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
memoryId
The memory holding the secret: its memoryId as returned by recall, list_memories or get_memory.
Clear enough to supply this argument.
redactions › items › find
The exact text to erase, e.g. the leaked token.
Clear enough to supply this argument.
redactions › items › replaceWith
What replaces it, e.g. '[REDACTED]'. An empty string removes the text.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Erase text from a memory",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
Output schema85/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId",
"replacements",
"contentHashChanged"
],
"properties": {
"memoryId": {
"type": "string",
"description": "The memory that was erased from."
},
"replacements": {
"type": "number",
"description": "How many occurrences were replaced, across the memory's versions."
},
"contentHashChanged": {
"type": "boolean",
"description": "True when the stored content hash was recomputed."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "erase_memory",
"description": "Permanently erase a secret (a credential, token or key) from a memory: the matching text is replaced in the stored body, the content hash is recomputed and the search index entry is re-indexed and purged, so the original text is gone (unlike soft_delete_memory, which leaves the body readable). Returns { memoryId, replacements, contentHashChanged }; a find text that occurs nowhere is refused (REDACT_NO_MATCH), never a silent no-op. WHEN: a credential was pasted into a memory and must not stay retrievable. Allowed for an organisation admin (any memory of the org), for the person who authored the memory, or for the agent (seat) whose verified ID authored it; anyone else is refused with RBAC_DENIED. EXAMPLE: erase_memory memoryId='j57dy3049btafda9m2f5d2ggk987ph3f' redactions=[{find:'sk-live-abc', replaceWith:'[REDACTED]'}].",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId",
"redactions"
],
"properties": {
"memoryId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The memory holding the secret: its memoryId as returned by recall, list_memories or get_memory."
},
"redactions": {
"type": "array",
"items": {
"type": "object",
"required": [
"find",
"replaceWith"
],
"properties": {
"find": {
"type": "string",
"minLength": 1,
"description": "The exact text to erase, e.g. the leaked token."
},
"replaceWith": {
"type": "string",
"description": "What replaces it, e.g. '[REDACTED]'. An empty string removes the text."
}
}
},
"maxItems": 50,
"minItems": 1,
"description": "The find/replace pairs to apply to the memory body (and to every earlier version of it)."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId",
"replacements",
"contentHashChanged"
],
"properties": {
"memoryId": {
"type": "string",
"description": "The memory that was erased from."
},
"replacements": {
"type": "number",
"description": "How many occurrences were replaced, across the memory's versions."
},
"contentHashChanged": {
"type": "boolean",
"description": "True when the stored content hash was recomputed."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Erase text from a memory",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Permanently erase one row you or your organisation own: the row is DELETED (and, for a memory, its search entry is purged), unlike the soft deletes that leave the body readable. Covered tables: memories, messages, missions, tasks, recurringTasks, briefingNotes, diary, debateRooms, issues, businessUnits, debateTemplates. Returns { table, rowId, erased: true, cascaded }, where cascaded counts the dependent rows deleted with it (receipts, turns, participants). WHEN: authored content must be gone for good. Allowed for an organisation admin (any row of the org), for the person who wrote the row, or for the agent (seat) whose verified ID wrote it; a row without a stored author ID (legacy, or written by an unverified seat) is erasable by an admin only; anyone else, and any other organisation, is refused with RBAC_DENIED and the row is unchanged. For a secret inside a memory that must otherwise stay, use erase_memory. EXAMPLE: erase_row table='tasks' rowId='j57dy3049btafda9m2f5d2ggk987ph3f'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
table
The table the row lives in; the tool that returned the row tells you which.
Clear enough to supply this argument.
rowId
The row to erase: its ID as returned by the tool that listed it (e.g. list_tasks, list_memories, list_messages).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table",
"rowId",
"erased",
"cascaded"
],
"properties": {
"rowId": {
"type": "string",
"description": "The row that was erased."
},
"table": {
"type": "string",
"description": "The table the row was erased from."
},
"erased": {
"type": "boolean",
"description": "True: the row is deleted."
},
"cascaded": {
"type": "object",
"description": "For each dependent table, how many rows were deleted with it (receipts, turns, participants); empty when none.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "erase_row",
"description": "Permanently erase one row you or your organisation own: the row is DELETED (and, for a memory, its search entry is purged), unlike the soft deletes that leave the body readable. Covered tables: memories, messages, missions, tasks, recurringTasks, briefingNotes, diary, debateRooms, issues, businessUnits, debateTemplates. Returns { table, rowId, erased: true, cascaded }, where cascaded counts the dependent rows deleted with it (receipts, turns, participants). WHEN: authored content must be gone for good. Allowed for an organisation admin (any row of the org), for the person who wrote the row, or for the agent (seat) whose verified ID wrote it; a row without a stored author ID (legacy, or written by an unverified seat) is erasable by an admin only; anyone else, and any other organisation, is refused with RBAC_DENIED and the row is unchanged. For a secret inside a memory that must otherwise stay, use erase_memory. EXAMPLE: erase_row table='tasks' rowId='j57dy3049btafda9m2f5d2ggk987ph3f'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table",
"rowId"
],
"properties": {
"rowId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The row to erase: its ID as returned by the tool that listed it (e.g. list_tasks, list_memories, list_messages)."
},
"table": {
"enum": [
"memories",
"messages",
"missions",
"tasks",
"recurringTasks",
"briefingNotes",
"diary",
"debateRooms",
"issues",
"businessUnits",
"debateTemplates"
],
"type": "string",
"description": "The table the row lives in; the tool that returned the row tells you which."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table",
"rowId",
"erased",
"cascaded"
],
"properties": {
"rowId": {
"type": "string",
"description": "The row that was erased."
},
"table": {
"type": "string",
"description": "The table the row was erased from."
},
"erased": {
"type": "boolean",
"description": "True: the row is deleted."
},
"cascaded": {
"type": "object",
"description": "For each dependent table, how many rows were deleted with it (receipts, turns, participants); empty when none.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Erase a row",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Permanently erase one fix pattern: the pattern, its fix attempts and its search entry are DELETED. Returns { patternId, erased: true, cascaded }, where cascaded counts the dependent rows deleted with it (fixAttempts, searchEntry). WHEN: a fix pattern was recorded in error, or carries content that must be gone for good. Allowed for an admin of the operator organisation only (a fix pattern carries no author, as an issue row carries none); an agent that is not an admin, any client organisation, and a fleet-master call without a proof are refused with RBAC_DENIED and the pattern is unchanged. EXAMPLE: erase_fix_pattern patternId='m9748paffd0emrbwyskj868e1x88kvhj'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
patternId
The fix pattern to erase: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"erased",
"cascaded"
],
"properties": {
"erased": {
"type": "boolean",
"description": "True: the pattern is deleted. A refusal is an error result, never this shape."
},
"cascaded": {
"type": "object",
"description": "For each dependent item, how many were deleted with the pattern: fixAttempts (its attempts) and searchEntry (its search entry).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"patternId": {
"type": "string",
"description": "The fix pattern that was erased: the patternId you sent."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "erase_fix_pattern",
"description": "Permanently erase one fix pattern: the pattern, its fix attempts and its search entry are DELETED. Returns { patternId, erased: true, cascaded }, where cascaded counts the dependent rows deleted with it (fixAttempts, searchEntry). WHEN: a fix pattern was recorded in error, or carries content that must be gone for good. Allowed for an admin of the operator organisation only (a fix pattern carries no author, as an issue row carries none); an agent that is not an admin, any client organisation, and a fleet-master call without a proof are refused with RBAC_DENIED and the pattern is unchanged. EXAMPLE: erase_fix_pattern patternId='m9748paffd0emrbwyskj868e1x88kvhj'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId"
],
"properties": {
"patternId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The fix pattern to erase: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"erased",
"cascaded"
],
"properties": {
"erased": {
"type": "boolean",
"description": "True: the pattern is deleted. A refusal is an error result, never this shape."
},
"cascaded": {
"type": "object",
"description": "For each dependent item, how many were deleted with the pattern: fixAttempts (its attempts) and searchEntry (its search entry).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"patternId": {
"type": "string",
"description": "The fix pattern that was erased: the patternId you sent."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Erase a fix pattern",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Fetch a single memory by its memoryId, including relations and episode metadata. Returns { _id, _creationTime, namespace, type, content, createdBy, createdById?, instanceId?, relations[{ targetId, type }], isLatest, ttl?, createdAt, updatedAt, contentHash?, clerkOrgId?, episode? { context, goal, action, outcome, insight, severity } }, the memory row: createdBy is the author, episode is present on an episode only. A memory you may not read, or that does not exist, is an error result ('Memory not found'). WHEN: use when you have a specific memoryId from a prior recall/store and need the full record. EXAMPLE: get_memory memoryId='j57dy3049btafda9m2f5d2ggk987ph3f'.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
Input documentation gives an agent enough context to populate the arguments.
memoryId
The memory to fetch: its memoryId as returned by recall, text_search, list_memories or store_memory.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_memory",
"description": "Fetch a single memory by its memoryId, including relations and episode metadata. Returns { _id, _creationTime, namespace, type, content, createdBy, createdById?, instanceId?, relations[{ targetId, type }], isLatest, ttl?, createdAt, updatedAt, contentHash?, clerkOrgId?, episode? { context, goal, action, outcome, insight, severity } }, the memory row: createdBy is the author, episode is present on an episode only. A memory you may not read, or that does not exist, is an error result ('Memory not found'). WHEN: use when you have a specific memoryId from a prior recall/store and need the full record. EXAMPLE: get_memory memoryId='j57dy3049btafda9m2f5d2ggk987ph3f'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId"
],
"properties": {
"memoryId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The memory to fetch: its memoryId as returned by recall, text_search, list_memories or store_memory."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get memory",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Semantic vector search over VantagePeers memories, ranked by cosine similarity. Returns { items[{ memoryId, score, namespace, type, content }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: looking up past decisions, rules or facts by meaning rather than by exact words (text_search matches exact terms). EXAMPLE: recall query='Pi feedback rules' namespace='global' type='feedback' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
What you are looking for, in natural language; results are ranked by meaning, not exact words.
Clear enough to supply this argument.
namespace
The namespace to read memories from, e.g. 'project/vantage-peers' or 'orchestrator/sigma'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read.
Clear enough to supply this argument.
type
The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Clear enough to supply this argument.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"score",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"score": {
"type": "number",
"description": "How close the memory is in meaning to the query (cosine similarity, higher is closer)."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The memories closest in meaning to the query, best match first; empty when none passes the similarity threshold or the namespace holds none."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "recall",
"description": "Semantic vector search over VantagePeers memories, ranked by cosine similarity. Returns { items[{ memoryId, score, namespace, type, content }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: looking up past decisions, rules or facts by meaning rather than by exact words (text_search matches exact terms). EXAMPLE: recall query='Pi feedback rules' namespace='global' type='feedback' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"type": {
"enum": [
"user",
"feedback",
"project",
"reference",
"episode"
],
"type": "string",
"description": "The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "What you are looking for, in natural language; results are ranked by meaning, not exact words."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"namespace": {
"type": "string",
"description": "The namespace to read memories from, e.g. 'project/vantage-peers' or 'orchestrator/sigma'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"score",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"score": {
"type": "number",
"description": "How close the memory is in meaning to the query (cosine similarity, higher is closer)."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The memories closest in meaning to the query, best match first; empty when none passes the similarity threshold or the namespace holds none."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Recall memories",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
BM25 full-text keyword search over VantagePeers memories for exact term matching. Returns { items[{ memoryId, namespace, type, content }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: the words or ID to find are known exactly (recall ranks by meaning instead). EXAMPLE: text_search query='Day 92 C3 descriptions' namespace='project/vantage-peers' limit=10.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
The words to match; results are ranked by keyword relevance, so exact terms and IDs work best.
Clear enough to supply this argument.
namespace
The namespace to read memories from, e.g. 'project/vantage-peers' or 'orchestrator/sigma'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read.
Clear enough to supply this argument.
type
The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The memories matching the query's words, best match first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "text_search",
"description": "BM25 full-text keyword search over VantagePeers memories for exact term matching. Returns { items[{ memoryId, namespace, type, content }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: the words or ID to find are known exactly (recall ranks by meaning instead). EXAMPLE: text_search query='Day 92 C3 descriptions' namespace='project/vantage-peers' limit=10.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"type": {
"enum": [
"user",
"feedback",
"project",
"reference",
"episode"
],
"type": "string",
"description": "The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "The words to match; results are ranked by keyword relevance, so exact terms and IDs work best."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"namespace": {
"type": "string",
"description": "The namespace to read memories from, e.g. 'project/vantage-peers' or 'orchestrator/sigma'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The memories matching the query's words, best match first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search memories (text)",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Combined vector + BM25 search via Reciprocal Rank Fusion for best semantic and keyword coverage. Returns { items[{ memoryId, rrfScore, namespace, type, content }], truncated? }, highest fused score first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: a query needs both meaning and exact terms to match; it fuses the two rankings recall and text_search compute alone. EXAMPLE: hybrid_search query='onboarding customer flow' namespace='project/vantage-peers' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
query
What you are looking for; matched both by meaning and by keywords.
Clear enough to supply this argument.
namespace
The namespace to read memories from, e.g. 'project/vantage-peers' or 'orchestrator/sigma'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read.
Clear enough to supply this argument.
type
The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept.
Clear enough to supply this argument.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Clear enough to supply this argument.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
vectorWeight
How much the meaning-based ranking counts in the fusion, relative to textWeight; raise it for intent-style queries.
Clear enough to supply this argument.
textWeight
How much the keyword ranking counts in the fusion, relative to vectorWeight; raise it for exact terms or IDs.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"rrfScore",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"rrfScore": {
"type": "number",
"description": "The fused rank score of the meaning and keyword rankings (Reciprocal Rank Fusion, higher is better)."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The memories matching by meaning and by words, highest fused score first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "hybrid_search",
"description": "Combined vector + BM25 search via Reciprocal Rank Fusion for best semantic and keyword coverage. Returns { items[{ memoryId, rrfScore, namespace, type, content }], truncated? }, highest fused score first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: a query needs both meaning and exact terms to match; it fuses the two rankings recall and text_search compute alone. EXAMPLE: hybrid_search query='onboarding customer flow' namespace='project/vantage-peers' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"type": {
"enum": [
"user",
"feedback",
"project",
"reference",
"episode"
],
"type": "string",
"description": "The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "What you are looking for; matched both by meaning and by keywords."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"namespace": {
"type": "string",
"description": "The namespace to read memories from, e.g. 'project/vantage-peers' or 'orchestrator/sigma'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read."
},
"textWeight": {
"type": "number",
"default": 1,
"maximum": 1,
"minimum": 0,
"description": "How much the keyword ranking counts in the fusion, relative to vectorWeight; raise it for exact terms or IDs."
},
"vectorWeight": {
"type": "number",
"default": 1,
"maximum": 1,
"minimum": 0,
"description": "How much the meaning-based ranking counts in the fusion, relative to textWeight; raise it for intent-style queries."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"rrfScore",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"rrfScore": {
"type": "number",
"description": "The fused rank score of the meaning and keyword rankings (Reciprocal Rank Fusion, higher is better)."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The memories matching by meaning and by words, highest fused score first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search memories by meaning+words",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Store a structured episodic memory capturing context, goal, action, outcome, and insight from a past event. Omit namespace to write in your own space. Returns { memoryId, type: 'episode', severity, namespace, createdBy }; the memoryId is the episodeId get_episode takes. WHEN: use after completing a non-trivial task or encountering an unexpected failure or success. EXAMPLE: store_episode namespace='orchestrator/alpha' createdBy='alpha' severity='major' context='...' goal='...' action='...' outcome='...' insight='...'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
namespace
Where the episode is stored, e.g. 'orchestrator/pi'. Omit it to write in your own space (a signed-in person: 'team/<org>'; a seat: 'orchestrator/<its own agent ID>'); a refused write names the namespaces your session may write.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the episode's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused.
Clear enough to supply this argument.
context
The situation that triggered the episode: what the setup was.
Clear enough to supply this argument.
goal
What was being attempted.
Clear enough to supply this argument.
action
What was actually done.
Clear enough to supply this argument.
outcome
What happened as a result, success or failure.
Clear enough to supply this argument.
insight
The lesson to keep: what to do (or avoid) next time.
Clear enough to supply this argument.
severity
How far the lesson reaches: critical (every orchestrator should learn it), major (changes how this work is done), minor (a local note).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId",
"type",
"severity",
"namespace"
],
"properties": {
"type": {
"type": "string",
"description": "Always 'episode'."
},
"memoryId": {
"type": "string",
"description": "The new episode's ID: the episodeId get_episode takes."
},
"severity": {
"type": "string",
"description": "The episode's severity, as stored."
},
"createdBy": {
"type": [
"string",
"null"
],
"description": "Who the episode is recorded as written by (the acting agent, or the signed-in person); absent when no name was resolved."
},
"namespace": {
"type": "string",
"description": "Where the episode was written (your own space when none was given)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "store_episode",
"description": "Store a structured episodic memory capturing context, goal, action, outcome, and insight from a past event. Omit namespace to write in your own space. Returns { memoryId, type: 'episode', severity, namespace, createdBy }; the memoryId is the episodeId get_episode takes. WHEN: use after completing a non-trivial task or encountering an unexpected failure or success. EXAMPLE: store_episode namespace='orchestrator/alpha' createdBy='alpha' severity='major' context='...' goal='...' action='...' outcome='...' insight='...'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was actually done."
},
"context": {
"type": "string",
"description": "The situation that triggered the episode: what the setup was."
},
"insight": {
"type": "string",
"description": "The lesson to keep: what to do (or avoid) next time."
},
"outcome": {
"type": "string",
"description": "What happened as a result, success or failure."
},
"severity": {
"enum": [
"critical",
"major",
"minor"
],
"type": "string",
"description": "How far the lesson reaches: critical (every orchestrator should learn it), major (changes how this work is done), minor (a local note)."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the episode's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused."
},
"namespace": {
"type": "string",
"description": "Where the episode is stored, e.g. 'orchestrator/pi'. Omit it to write in your own space (a signed-in person: 'team/<org>'; a seat: 'orchestrator/<its own agent ID>'); a refused write names the namespaces your session may write."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memoryId",
"type",
"severity",
"namespace"
],
"properties": {
"type": {
"type": "string",
"description": "Always 'episode'."
},
"memoryId": {
"type": "string",
"description": "The new episode's ID: the episodeId get_episode takes."
},
"severity": {
"type": "string",
"description": "The episode's severity, as stored."
},
"createdBy": {
"type": [
"string",
"null"
],
"description": "Who the episode is recorded as written by (the acting agent, or the signed-in person); absent when no name was resolved."
},
"namespace": {
"type": "string",
"description": "Where the episode was written (your own space when none was given)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Store episode",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Fetch a single episode by its memory document ID. Episodes are memories with type='episode' carrying context/goal/action/outcome/insight + severity. Returns { _id, _creationTime, namespace, type, content, createdBy, createdById?, instanceId?, relations[{ targetId, type }], isLatest, ttl?, createdAt, updatedAt, contentHash?, clerkOrgId?, episode? { context, goal, action, outcome, insight, severity } }, the episode's memory row: the structured fields are under episode, the author is createdBy. An ID that is not an episode, or that you may not read, is an error result ('Episode not found'). WHEN: use when you have an episodeId from store_episode or a prior search and need the full record. EXAMPLE: get_episode episodeId='j57dy3049btafda9m2f5d2ggk987ph3f'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
episodeId
The episode to fetch: the memoryId returned by store_episode, list_episodes or search_episodes_by_semantic.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_episode",
"description": "Fetch a single episode by its memory document ID. Episodes are memories with type='episode' carrying context/goal/action/outcome/insight + severity. Returns { _id, _creationTime, namespace, type, content, createdBy, createdById?, instanceId?, relations[{ targetId, type }], isLatest, ttl?, createdAt, updatedAt, contentHash?, clerkOrgId?, episode? { context, goal, action, outcome, insight, severity } }, the episode's memory row: the structured fields are under episode, the author is createdBy. An ID that is not an episode, or that you may not read, is an error result ('Episode not found'). WHEN: use when you have an episodeId from store_episode or a prior search and need the full record. EXAMPLE: get_episode episodeId='j57dy3049btafda9m2f5d2ggk987ph3f'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"episodeId"
],
"properties": {
"episodeId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The episode to fetch: the memoryId returned by store_episode, list_episodes or search_episodes_by_semantic."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get episode",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
List episodes (memories with type='episode') ordered newest first. Returns { items[{ _id, _creationTime, namespace, type, content, createdBy, relations, isLatest, createdAt, updatedAt }], nextCursor, truncated }: items are episode documents, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the same page as JSON, without nextCursor on the last page. WHEN: use to enumerate episodes by namespace or creator before recall/audit. EXAMPLE: list_episodes namespace='orchestrator/sigma' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
namespace
The namespace to read episodes from, e.g. 'orchestrator/sigma' or 'orchestrator/pi'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read.
Clear enough to supply this argument.
createdBy
Keep only episodes written by this agent, e.g. 'sigma'. Omit to include every author.
Clear enough to supply this argument.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page. With a cursor and no limit, a page holds 50 rows.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_episodes call returned, to fetch the following (older) page. Omit for the first page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The episodes (memories of type 'episode'), newest first; their structured fields are under episode."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_episodes",
"description": "List episodes (memories with type='episode') ordered newest first. Returns { items[{ _id, _creationTime, namespace, type, content, createdBy, relations, isLatest, createdAt, updatedAt }], nextCursor, truncated }: items are episode documents, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the same page as JSON, without nextCursor on the last page. WHEN: use to enumerate episodes by namespace or creator before recall/audit. EXAMPLE: list_episodes namespace='orchestrator/sigma' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page. With a cursor and no limit, a page holds 50 rows."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_episodes call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"createdBy": {
"type": "string",
"description": "Keep only episodes written by this agent, e.g. 'sigma'. Omit to include every author."
},
"namespace": {
"type": "string",
"description": "The namespace to read episodes from, e.g. 'orchestrator/sigma' or 'orchestrator/pi'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The episodes (memories of type 'episode'), newest first; their structured fields are under episode."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List episodes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
BM25 full-text keyword search restricted to episodes (memories with type='episode'). Returns { items[{ memoryId, namespace, type, content }], truncated? }: the matching episodes, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use when search_episodes_by_semantic returns too-broad results and you need an exact phrase or ID inside an episode field. EXAMPLE: search_episodes_by_keyword query='convex deploy schema' namespace='orchestrator/sigma' limit=10.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
query
The words to match; results are ranked by keyword relevance, so exact terms and IDs work best.
Clear enough to supply this argument.
namespace
The namespace to read episodes from, e.g. 'orchestrator/sigma' or 'orchestrator/pi'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read.
Clear enough to supply this argument.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Clear enough to supply this argument.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The episodes matching the query's words, best match first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "search_episodes_by_keyword",
"description": "BM25 full-text keyword search restricted to episodes (memories with type='episode'). Returns { items[{ memoryId, namespace, type, content }], truncated? }: the matching episodes, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use when search_episodes_by_semantic returns too-broad results and you need an exact phrase or ID inside an episode field. EXAMPLE: search_episodes_by_keyword query='convex deploy schema' namespace='orchestrator/sigma' limit=10.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "The words to match; results are ranked by keyword relevance, so exact terms and IDs work best."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"namespace": {
"type": "string",
"description": "The namespace to read episodes from, e.g. 'orchestrator/sigma' or 'orchestrator/pi'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The episodes matching the query's words, best match first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search episodes by keyword",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Semantic vector search restricted to episodes (memories with type='episode'), ranked by cosine similarity. Returns { items[{ memoryId, score, namespace, type, content }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to recall structured past events by intent — failure modes, lessons, similar contexts. EXAMPLE: search_episodes_by_semantic query='hook false positive blocked publish' namespace='orchestrator/sigma' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
What you are looking for, in natural language; results are ranked by meaning, not exact words.
Clear enough to supply this argument.
namespace
The namespace to read episodes from, e.g. 'orchestrator/sigma' or 'orchestrator/pi'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read.
Clear enough to supply this argument.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Find similar past episodes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema77/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"score",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"score": {
"type": "number",
"description": "How close the memory is in meaning to the query (cosine similarity, higher is closer)."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The episodes closest in meaning to the query, best match first; empty when none passes the similarity threshold."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "search_episodes_by_semantic",
"description": "Semantic vector search restricted to episodes (memories with type='episode'), ranked by cosine similarity. Returns { items[{ memoryId, score, namespace, type, content }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to recall structured past events by intent — failure modes, lessons, similar contexts. EXAMPLE: search_episodes_by_semantic query='hook false positive blocked publish' namespace='orchestrator/sigma' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "What you are looking for, in natural language; results are ranked by meaning, not exact words."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"namespace": {
"type": "string",
"description": "The namespace to read episodes from, e.g. 'orchestrator/sigma' or 'orchestrator/pi'; whoami lists the namespaces your session may read. The fleet master may omit it to read every namespace. Required for every session except the fleet master: a call without it is refused, and the refusal names the namespaces this session may read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"memoryId",
"score",
"namespace",
"type",
"content"
],
"properties": {
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"score": {
"type": "number",
"description": "How close the memory is in meaning to the query (cosine similarity, higher is closer)."
},
"content": {
"type": "string",
"description": "The matching memory's indexed text."
},
"memoryId": {
"type": "string",
"description": "The matching memory's ID: the memoryId get_memory takes."
},
"namespace": {
"type": "string",
"description": "The namespace the matching memory is stored in."
}
},
"additionalProperties": {}
},
"description": "The episodes closest in meaning to the query, best match first; empty when none passes the similarity threshold."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Find similar past episodes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Fetch an orchestrator profile with static identity and dynamic session state fields. Returns { found, item? { _id, _creationTime, orchestratorId, name, static, dynamic }, id? }: item is the profile (orchestratorId, name, static, dynamic) when found is true, id the orchestratorId asked for when found is false; the text is the profile as JSON, or null when no profile by that ID is visible to you. WHEN: use to check peer status, capabilities, or current task before assigning work. EXAMPLE: get_profile orchestratorId='gamma'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
orchestratorId
The orchestrator whose profile to read, e.g. 'gamma', as list_peers shows it.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "The orchestratorId that was asked for; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"orchestratorId",
"name",
"static",
"dynamic"
],
"properties": {
"_id": {
"type": "string",
"description": "The profile row's ID."
},
"name": {
"type": "string",
"description": "The orchestrator's display name."
},
"static": {
"type": "object",
"required": [
"role",
"workspace",
"capabilities"
],
"properties": {
"role": {
"type": "string",
"description": "What the orchestrator is for."
},
"workspace": {
"type": "string",
"description": "The orchestrator's primary working directory."
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Keywords for what the orchestrator can do; empty when none."
}
},
"description": "Identity facts that rarely change.",
"additionalProperties": {}
},
"agentId": {
"type": "string",
"description": "The agent the profile belongs to, by its permanent ID; absent on profiles written before it was recorded."
},
"dynamic": {
"type": "object",
"required": [
"lastSeen",
"sessionCount"
],
"properties": {
"lastSeen": {
"type": "number",
"description": "When the orchestrator was last active (milliseconds since the Unix epoch)."
},
"currentTask": {
"type": "string",
"description": "What the orchestrator is working on; absent when it set none."
},
"sessionCount": {
"type": "number",
"description": "How many sessions the orchestrator has run."
},
"endOfDayIndex": {
"type": "string",
"description": "The index written at the end of its last working day; absent when none was written."
}
},
"description": "Session state, updated each session.",
"additionalProperties": {}
},
"instanceId": {
"type": "string",
"description": "The instance the orchestrator runs as, e.g. 'sigma-vps'; absent when none was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"orchestratorId": {
"type": "string",
"description": "The orchestrator's name, as the tools take it."
}
},
"description": "The profile; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the profile exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the profile as JSON, or null."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_profile",
"description": "Fetch an orchestrator profile with static identity and dynamic session state fields. Returns { found, item? { _id, _creationTime, orchestratorId, name, static, dynamic }, id? }: item is the profile (orchestratorId, name, static, dynamic) when found is true, id the orchestratorId asked for when found is false; the text is the profile as JSON, or null when no profile by that ID is visible to you. WHEN: use to check peer status, capabilities, or current task before assigning work. EXAMPLE: get_profile orchestratorId='gamma'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orchestratorId"
],
"properties": {
"orchestratorId": {
"type": "string",
"description": "The orchestrator whose profile to read, e.g. 'gamma', as list_peers shows it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "The orchestratorId that was asked for; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"orchestratorId",
"name",
"static",
"dynamic"
],
"properties": {
"_id": {
"type": "string",
"description": "The profile row's ID."
},
"name": {
"type": "string",
"description": "The orchestrator's display name."
},
"static": {
"type": "object",
"required": [
"role",
"workspace",
"capabilities"
],
"properties": {
"role": {
"type": "string",
"description": "What the orchestrator is for."
},
"workspace": {
"type": "string",
"description": "The orchestrator's primary working directory."
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Keywords for what the orchestrator can do; empty when none."
}
},
"description": "Identity facts that rarely change.",
"additionalProperties": {}
},
"agentId": {
"type": "string",
"description": "The agent the profile belongs to, by its permanent ID; absent on profiles written before it was recorded."
},
"dynamic": {
"type": "object",
"required": [
"lastSeen",
"sessionCount"
],
"properties": {
"lastSeen": {
"type": "number",
"description": "When the orchestrator was last active (milliseconds since the Unix epoch)."
},
"currentTask": {
"type": "string",
"description": "What the orchestrator is working on; absent when it set none."
},
"sessionCount": {
"type": "number",
"description": "How many sessions the orchestrator has run."
},
"endOfDayIndex": {
"type": "string",
"description": "The index written at the end of its last working day; absent when none was written."
}
},
"description": "Session state, updated each session.",
"additionalProperties": {}
},
"instanceId": {
"type": "string",
"description": "The instance the orchestrator runs as, e.g. 'sigma-vps'; absent when none was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"orchestratorId": {
"type": "string",
"description": "The orchestrator's name, as the tools take it."
}
},
"description": "The profile; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the profile exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the profile as JSON, or null."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get orchestrator profile",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Create or update an orchestrator profile with static identity facts and dynamic session state. Writes only the calling agent's own profile (the fleet master may write any); given fields replace the stored ones, omitted fields are kept. Returns { profileId, orchestratorId, name }. WHEN: call on each session start to update lastSeen/sessionCount, or when role/capabilities change. EXAMPLE: update_profile orchestratorId='alpha' dynamic={lastSeen: Date.now(), sessionCount: 5}. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
orchestratorId
The orchestrator whose profile is written, as list_peers shows it. Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
name
The display name shown to peers. Omit to keep the stored one ('Unknown' on a new profile).
Clear enough to supply this argument.
static › role
What this orchestrator is for, in a few words.
Clear enough to supply this argument.
static › workspace
The orchestrator's primary working directory.
Clear enough to supply this argument.
static › capabilities
Keywords for what this orchestrator can do, e.g. ['convex', 'mcp'].
Clear enough to supply this argument.
dynamic › currentTask
The task or goal in progress. Omit to clear it in the replaced state.
Clear enough to supply this argument.
dynamic › lastSeen
The moment this session started (a millisecond timestamp, as Date.now() gives).
Clear enough to supply this argument.
dynamic › sessionCount
How many sessions this orchestrator has run so far.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"orchestratorId"
],
"properties": {
"name": {
"type": "string",
"description": "The display name sent; absent when none was given."
},
"profileId": {
"type": "string",
"description": "The profile's ID (created when none existed)."
},
"orchestratorId": {
"type": "string",
"description": "Whose profile was written."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_profile",
"description": "Create or update an orchestrator profile with static identity facts and dynamic session state. Writes only the calling agent's own profile (the fleet master may write any); given fields replace the stored ones, omitted fields are kept. Returns { profileId, orchestratorId, name }. WHEN: call on each session start to update lastSeen/sessionCount, or when role/capabilities change. EXAMPLE: update_profile orchestratorId='alpha' dynamic={lastSeen: Date.now(), sessionCount: 5}. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "The display name shown to peers. Omit to keep the stored one ('Unknown' on a new profile)."
},
"static": {
"type": "object",
"required": [
"role",
"workspace",
"capabilities"
],
"properties": {
"role": {
"type": "string",
"description": "What this orchestrator is for, in a few words."
},
"workspace": {
"type": "string",
"description": "The orchestrator's primary working directory."
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Keywords for what this orchestrator can do, e.g. ['convex', 'mcp']."
}
},
"description": "Identity facts that rarely change. Omit to keep the stored ones; given, the whole object is replaced."
},
"dynamic": {
"type": "object",
"required": [
"lastSeen",
"sessionCount"
],
"properties": {
"lastSeen": {
"type": "number",
"description": "The moment this session started (a millisecond timestamp, as Date.now() gives)."
},
"currentTask": {
"type": "string",
"description": "The task or goal in progress. Omit to clear it in the replaced state."
},
"sessionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "How many sessions this orchestrator has run so far."
}
},
"description": "Session state. Omit to keep the stored state; given, the whole object is replaced."
},
"orchestratorId": {
"type": "string",
"description": "The orchestrator whose profile is written, as list_peers shows it. Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"orchestratorId"
],
"properties": {
"name": {
"type": "string",
"description": "The display name sent; absent when none was given."
},
"profileId": {
"type": "string",
"description": "The profile's ID (created when none existed)."
},
"orchestratorId": {
"type": "string",
"description": "Whose profile was written."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update an agent profile",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
List active (isLatest=true) memories for a namespace, ordered newest first. Returns { items[{ _id, _creationTime, namespace, type, content, createdBy, relations, isLatest, createdAt, updatedAt }], nextCursor, truncated }: items are memory documents (latest versions only), newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the same page as JSON, without nextCursor on the last page. WHEN: use to audit what a namespace contains or to paginate all entries without a query. EXAMPLE: list_memories namespace='project/vantage-peers' type='project' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
namespace
The namespace to list, e.g. 'global' or 'orchestrator/pi'; whoami lists the namespaces your session may read.
Clear enough to supply this argument.
type
The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept.
Clear enough to supply this argument.
createdBy
Keep only memories written by this agent, e.g. 'pi'. Omit to include every author.
Clear enough to supply this argument.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page. With a cursor and no limit, a page holds 50 rows.
Clear enough to supply this argument.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_memories call returned, to fetch the following (older) page. Omit for the first page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The memories (latest versions only), newest first; empty when the namespace holds none."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_memories",
"description": "List active (isLatest=true) memories for a namespace, ordered newest first. Returns { items[{ _id, _creationTime, namespace, type, content, createdBy, relations, isLatest, createdAt, updatedAt }], nextCursor, truncated }: items are memory documents (latest versions only), newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the same page as JSON, without nextCursor on the last page. WHEN: use to audit what a namespace contains or to paginate all entries without a query. EXAMPLE: list_memories namespace='project/vantage-peers' type='project' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"namespace"
],
"properties": {
"type": {
"enum": [
"user",
"feedback",
"project",
"reference",
"episode"
],
"type": "string",
"description": "The kind of memory to keep, as store_memory or store_episode recorded it; without it, every kind is kept."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page. With a cursor and no limit, a page holds 50 rows."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_memories call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"createdBy": {
"type": "string",
"description": "Keep only memories written by this agent, e.g. 'pi'. Omit to include every author."
},
"namespace": {
"type": "string",
"description": "The namespace to list, e.g. 'global' or 'orchestrator/pi'; whoami lists the namespaces your session may read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"namespace",
"type",
"content",
"createdBy",
"relations",
"isLatest",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The memory's ID: the memoryId get_memory and soft_delete_memory take."
},
"ttl": {
"type": "string",
"description": "When the memory expires, as an ISO 8601 timestamp; absent when it never expires."
},
"type": {
"type": "string",
"description": "What the memory is about: user, feedback, project, reference or episode."
},
"content": {
"type": "string",
"description": "The memory itself."
},
"episode": {
"type": "object",
"required": [
"context",
"goal",
"action",
"outcome",
"insight",
"severity"
],
"properties": {
"goal": {
"type": "string",
"description": "What was being attempted."
},
"action": {
"type": "string",
"description": "What was done."
},
"context": {
"type": "string",
"description": "The situation the episode happened in."
},
"insight": {
"type": "string",
"description": "The lesson to carry forward."
},
"outcome": {
"type": "string",
"description": "What happened as a result."
},
"severity": {
"type": "string",
"description": "How much the episode matters: critical, major or minor."
}
},
"description": "The episode's structured record; present on an episode (type 'episode'), absent on every other memory type.",
"additionalProperties": {}
},
"isLatest": {
"type": "boolean",
"description": "False once the memory was superseded (a later memory 'updates' it), soft-deleted or expired; true otherwise."
},
"createdAt": {
"type": "number",
"description": "When the memory was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "The agent or person recorded as the memory's author."
},
"namespace": {
"type": "string",
"description": "Where the memory is stored, e.g. 'team/<org>', 'orchestrator/<agent ID>' or 'project/<slug>'."
},
"relations": {
"type": "array",
"items": {
"type": "object",
"required": [
"targetId",
"type"
],
"properties": {
"type": {
"type": "string",
"description": "How this memory relates to it: updates (supersedes it), extends (adds detail to it) or derives (is inferred from it)."
},
"targetId": {
"type": "string",
"description": "The earlier memory this one points to."
}
},
"additionalProperties": {}
},
"description": "Links from this memory to earlier ones; empty when it has none."
},
"updatedAt": {
"type": "number",
"description": "When the memory last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this memory (the slug can be renamed, this cannot); absent on a fleet-owned memory and on rows written before it was recorded."
},
"instanceId": {
"type": "string",
"description": "The author's instance that wrote it, e.g. 'sigma-vps'; absent when none was recorded."
},
"contentHash": {
"type": "string",
"description": "The import key of a row brought in from an OKF bundle; absent on every row written directly."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The memories (latest versions only), newest first; empty when the namespace holds none."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List memories",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Send a message to one or more agents BY AGENT ID (recipientAgentIds, the `agentId` values list_peers returns), or via channel routing (broadcast / fleet role / instance). Returns { messageId, from, recipientAgentIds?, channel?, stateUnverified? }: recipientAgentIds or channel, as the call addressed it, and stateUnverified (the state claims in the content the server could not check) when there are any; keep messageId for list_broadcast_status. WHEN: use to notify peers of task completion, handoff, or decision; creates one receipt per recipient. Pass exactly one of recipientAgentIds and channel; an agent of your organisation is addressed by its ID, a name is never matched against an ID. EXAMPLE: send_message from='agent-a' recipientAgentIds=['<agentId from list_peers>'] content='Brief ready'. EXAMPLE: send_message from='alpha' channel='beta' content='C3 descriptions PR ready for review'.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
from
The agent sending, by name (e.g. 'sigma'), recorded as the sender. Omit it when your credential resolves one agent (it is then that agent) or when you are a signed-in person (you send in your own name). Otherwise omitting it is refused.
Clear enough to supply this argument.
fromAgentId
The agent this message is sent as, by agent ID: yours is whoami's agent_id, and list_peers shows each agent's agentId; the recipients see that agent as the sender. Beside from, the ID alone decides; a verified agent may name only itself. Without it, your credential or from identifies the sender.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fromInstanceId
The sending instance, e.g. 'pi-chromebook', as set_summary and list_peers name it. Omit when you run as a single instance.
Clear enough to supply this argument.
channel
Recipients by name: 'broadcast' for everyone, a role such as 'tau', an instance such as 'pi-vps', or several comma-separated. Omit it when recipientAgentIds is given.
Clear enough to supply this argument.
recipientAgentIds
Recipients by agent ID: the agentId values list_peers returns for your organisation. A name here is refused, never matched. Omit it when channel is given.
Clear enough to supply this argument.
content
The message text the recipients will read.
Clear enough to supply this argument.
sessionDay
The session day the message belongs to (Day 1 = 2026-03-06 UTC); list_messages filters by it. Omit it and today's day is derived.
Clear enough to supply this argument.
tenantId
The organisation the message belongs to, by slug (whoami returns yours as org_slug). Omit it: it is derived from your credential. A slug other than your own organisation's is refused unless you are the fleet master.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messageId",
"from"
],
"properties": {
"from": {
"type": "string",
"description": "Who the message is recorded as sent by."
},
"channel": {
"type": "string",
"description": "Where it was sent; present when sent to a channel, absent when sent by recipientAgentIds."
},
"messageId": {
"type": "string",
"description": "The new message's ID: list_broadcast_status takes it."
},
"stateUnverified": {
"type": "array",
"items": {
"type": "string"
},
"description": "State claims in the content that could not be checked (e.g. GitHub unreachable), one sentence each; absent when every claim checked out or none was made."
},
"recipientAgentIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The agent IDs it was sent to; present when sent by recipientAgentIds, absent when sent to a channel."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "send_message",
"description": "Send a message to one or more agents BY AGENT ID (recipientAgentIds, the `agentId` values list_peers returns), or via channel routing (broadcast / fleet role / instance). Returns { messageId, from, recipientAgentIds?, channel?, stateUnverified? }: recipientAgentIds or channel, as the call addressed it, and stateUnverified (the state claims in the content the server could not check) when there are any; keep messageId for list_broadcast_status. WHEN: use to notify peers of task completion, handoff, or decision; creates one receipt per recipient. Pass exactly one of recipientAgentIds and channel; an agent of your organisation is addressed by its ID, a name is never matched against an ID. EXAMPLE: send_message from='agent-a' recipientAgentIds=['<agentId from list_peers>'] content='Brief ready'. EXAMPLE: send_message from='alpha' channel='beta' content='C3 descriptions PR ready for review'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"content"
],
"properties": {
"from": {
"type": "string",
"description": "The agent sending, by name (e.g. 'sigma'), recorded as the sender. Omit it when your credential resolves one agent (it is then that agent) or when you are a signed-in person (you send in your own name). Otherwise omitting it is refused."
},
"channel": {
"type": "string",
"description": "Recipients by name: 'broadcast' for everyone, a role such as 'tau', an instance such as 'pi-vps', or several comma-separated. Omit it when recipientAgentIds is given."
},
"content": {
"type": "string",
"description": "The message text the recipients will read."
},
"tenantId": {
"type": "string",
"description": "The organisation the message belongs to, by slug (whoami returns yours as org_slug). Omit it: it is derived from your credential. A slug other than your own organisation's is refused unless you are the fleet master."
},
"sessionDay": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The session day the message belongs to (Day 1 = 2026-03-06 UTC); list_messages filters by it. Omit it and today's day is derived."
},
"fromAgentId": {
"type": "string",
"minLength": 1,
"description": "The agent this message is sent as, by agent ID: yours is whoami's agent_id, and list_peers shows each agent's agentId; the recipients see that agent as the sender. Beside from, the ID alone decides; a verified agent may name only itself. Without it, your credential or from identifies the sender."
},
"fromInstanceId": {
"type": "string",
"description": "The sending instance, e.g. 'pi-chromebook', as set_summary and list_peers name it. Omit when you run as a single instance."
},
"recipientAgentIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Recipients by agent ID: the agentId values list_peers returns for your organisation. A name here is refused, never matched. Omit it when channel is given."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messageId",
"from"
],
"properties": {
"from": {
"type": "string",
"description": "Who the message is recorded as sent by."
},
"channel": {
"type": "string",
"description": "Where it was sent; present when sent to a channel, absent when sent by recipientAgentIds."
},
"messageId": {
"type": "string",
"description": "The new message's ID: list_broadcast_status takes it."
},
"stateUnverified": {
"type": "array",
"items": {
"type": "string"
},
"description": "State claims in the content that could not be checked (e.g. GitHub unreachable), one sentence each; absent when every claim checked out or none was made."
},
"recipientAgentIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The agent IDs it was sent to; present when sent by recipientAgentIds, absent when sent to a channel."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Send message",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Check for unread messages addressed to a recipient role, returning receiptIds for acknowledgment. Returns { messages[{ receiptId, from, fromInstanceId?, fromId?, channel?, content, createdAt }], truncated, nextSince, stuckInProgress { entries, total, truncated, actionableStuckCount }, peersStuckOnYou { entries, total, truncated, actionableStuckCount } }; the text is the messages as a JSON array (pass the receiptIds to mark_as_read), or 'No new messages.'; a truncated page ends with the since= value to resume, and the stuckInProgress / peersStuckOnYou blocks follow when present. WHEN: call at session start and after long pauses to drain the inbox before starting work. EXAMPLE: check_messages recipient='gamma' recipientInstanceId='gamma-vps'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
recipient
The orchestrator whose inbox to read, e.g. 'sigma'.
Clear enough to supply this argument.
recipientInstanceId
Also read the messages addressed to this instance, e.g. 'pi-chromebook', as set_summary names it. Omit to read role-addressed messages only.
Clear enough to supply this argument.
tenantId
Keep only messages of this organisation, by slug (whoami returns yours as org_slug). Omit for every organisation your session may read.
Clear enough to supply this argument.
since
The moment after which messages count: return only messages created after it (a millisecond timestamp, as Date.now() gives). Pass the nextSince of a truncated reply to page the backlog. Omit for the whole unread backlog.
Clear enough to supply this argument.
limit
How many messages to return in this call; pair a smaller value with since to page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messages",
"truncated",
"nextSince",
"stuckInProgress",
"peersStuckOnYou"
],
"properties": {
"messages": {
"type": "array",
"items": {
"type": "object",
"required": [
"receiptId",
"from",
"content",
"createdAt"
],
"properties": {
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'; absent when the backend did not return it."
},
"content": {
"type": "string",
"description": "The full message body."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"receiptId": {
"type": "string",
"description": "The receipt to pass to mark_as_read once the message is handled."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
},
"description": "The unread messages, oldest first; empty when there are none (the text then says 'No new messages.' or shows only the stuck blocks)."
},
"nextSince": {
"type": [
"number",
"null"
],
"description": "The since value that resumes after this page; null when truncated is false."
},
"truncated": {
"type": "boolean",
"description": "True when more unread messages exist than this page holds; pass nextSince as since to read on."
},
"peersStuckOnYou": {
"type": "object",
"required": [
"entries",
"total",
"truncated",
"actionableStuckCount"
],
"properties": {
"total": {
"type": "number",
"description": "How many such tasks were found, including any beyond entries."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"taskId",
"title",
"age"
],
"properties": {
"age": {
"type": "number",
"description": "How long the task has been in progress, in milliseconds (since its open work segment started, else since it started)."
},
"title": {
"type": "string",
"description": "The task's title."
},
"taskId": {
"type": "string",
"description": "The task's ID."
}
},
"additionalProperties": {}
},
"description": "Tasks you created that are in progress with someone else; empty when there are none."
},
"truncated": {
"type": "boolean",
"description": "True when the bounded scan stopped early, so more such tasks may exist."
},
"actionableStuckCount": {
"type": "number",
"description": "How many entries have no open work segment and are past the stuck threshold: the ones that call for action."
}
},
"description": "Tasks you created that are in progress with someone else. The text shows this block only when entries is non-empty or truncated is true.",
"additionalProperties": {}
},
"stuckInProgress": {
"type": "object",
"required": [
"entries",
"total",
"truncated",
"actionableStuckCount"
],
"properties": {
"total": {
"type": "number",
"description": "How many such tasks were found, including any beyond entries."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"taskId",
"title",
"age"
],
"properties": {
"age": {
"type": "number",
"description": "How long the task has been in progress, in milliseconds (since its open work segment started, else since it started)."
},
"title": {
"type": "string",
"description": "The task's title."
},
"taskId": {
"type": "string",
"description": "The task's ID."
}
},
"additionalProperties": {}
},
"description": "Your own tasks in progress, of any age; empty when there are none."
},
"truncated": {
"type": "boolean",
"description": "True when the bounded scan stopped early, so more such tasks may exist."
},
"actionableStuckCount": {
"type": "number",
"description": "How many entries have no open work segment and are past the stuck threshold: the ones that call for action."
}
},
"description": "Your own tasks in progress, of any age. The text shows this block only when entries is non-empty or truncated is true.",
"additionalProperties": {}
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "check_messages",
"description": "Check for unread messages addressed to a recipient role, returning receiptIds for acknowledgment. Returns { messages[{ receiptId, from, fromInstanceId?, fromId?, channel?, content, createdAt }], truncated, nextSince, stuckInProgress { entries, total, truncated, actionableStuckCount }, peersStuckOnYou { entries, total, truncated, actionableStuckCount } }; the text is the messages as a JSON array (pass the receiptIds to mark_as_read), or 'No new messages.'; a truncated page ends with the since= value to resume, and the stuckInProgress / peersStuckOnYou blocks follow when present. WHEN: call at session start and after long pauses to drain the inbox before starting work. EXAMPLE: check_messages recipient='gamma' recipientInstanceId='gamma-vps'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipient"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "How many messages to return in this call; pair a smaller value with since to page."
},
"since": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The moment after which messages count: return only messages created after it (a millisecond timestamp, as Date.now() gives). Pass the nextSince of a truncated reply to page the backlog. Omit for the whole unread backlog."
},
"tenantId": {
"type": "string",
"description": "Keep only messages of this organisation, by slug (whoami returns yours as org_slug). Omit for every organisation your session may read."
},
"recipient": {
"type": "string",
"description": "The orchestrator whose inbox to read, e.g. 'sigma'."
},
"recipientInstanceId": {
"type": "string",
"description": "Also read the messages addressed to this instance, e.g. 'pi-chromebook', as set_summary names it. Omit to read role-addressed messages only."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messages",
"truncated",
"nextSince",
"stuckInProgress",
"peersStuckOnYou"
],
"properties": {
"messages": {
"type": "array",
"items": {
"type": "object",
"required": [
"receiptId",
"from",
"content",
"createdAt"
],
"properties": {
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'; absent when the backend did not return it."
},
"content": {
"type": "string",
"description": "The full message body."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"receiptId": {
"type": "string",
"description": "The receipt to pass to mark_as_read once the message is handled."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
},
"description": "The unread messages, oldest first; empty when there are none (the text then says 'No new messages.' or shows only the stuck blocks)."
},
"nextSince": {
"type": [
"number",
"null"
],
"description": "The since value that resumes after this page; null when truncated is false."
},
"truncated": {
"type": "boolean",
"description": "True when more unread messages exist than this page holds; pass nextSince as since to read on."
},
"peersStuckOnYou": {
"type": "object",
"required": [
"entries",
"total",
"truncated",
"actionableStuckCount"
],
"properties": {
"total": {
"type": "number",
"description": "How many such tasks were found, including any beyond entries."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"taskId",
"title",
"age"
],
"properties": {
"age": {
"type": "number",
"description": "How long the task has been in progress, in milliseconds (since its open work segment started, else since it started)."
},
"title": {
"type": "string",
"description": "The task's title."
},
"taskId": {
"type": "string",
"description": "The task's ID."
}
},
"additionalProperties": {}
},
"description": "Tasks you created that are in progress with someone else; empty when there are none."
},
"truncated": {
"type": "boolean",
"description": "True when the bounded scan stopped early, so more such tasks may exist."
},
"actionableStuckCount": {
"type": "number",
"description": "How many entries have no open work segment and are past the stuck threshold: the ones that call for action."
}
},
"description": "Tasks you created that are in progress with someone else. The text shows this block only when entries is non-empty or truncated is true.",
"additionalProperties": {}
},
"stuckInProgress": {
"type": "object",
"required": [
"entries",
"total",
"truncated",
"actionableStuckCount"
],
"properties": {
"total": {
"type": "number",
"description": "How many such tasks were found, including any beyond entries."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"taskId",
"title",
"age"
],
"properties": {
"age": {
"type": "number",
"description": "How long the task has been in progress, in milliseconds (since its open work segment started, else since it started)."
},
"title": {
"type": "string",
"description": "The task's title."
},
"taskId": {
"type": "string",
"description": "The task's ID."
}
},
"additionalProperties": {}
},
"description": "Your own tasks in progress, of any age; empty when there are none."
},
"truncated": {
"type": "boolean",
"description": "True when the bounded scan stopped early, so more such tasks may exist."
},
"actionableStuckCount": {
"type": "number",
"description": "How many entries have no open work segment and are past the stuck threshold: the ones that call for action."
}
},
"description": "Your own tasks in progress, of any age. The text shows this block only when entries is non-empty or truncated is true.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Check messages",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List the tasks that other peers have BLOCKED on one of YOUR live tasks (blockedOnTaskId), oldest wait first, with the age of each wait. A dedicated opt-in read: check_messages returns messages only and never carries this list. WHEN: call after check_messages, or before picking new work, to see who is waiting on you. EXAMPLE: list_blocked_on_me. Returns { entries[{ blockedTaskId, blockedTitle, blockedAssignee, onTaskId, onTaskTitle, age }], total, truncated, oldestAge }; ages are ms. truncated=true means the bounded scan stopped early and total is a lower bound. An empty list is a real absence; a refusal is an error, never an empty list.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recipient
Has no effect: the waiters listed are always those of the verified agent your credential resolves, whatever name is sent, and a caller with none is refused. Accepted only so that a client which sends it is not refused; leave it out.
Clear enough to supply this argument.
tenantId
Keep only waiters of this organisation, by slug (whoami returns yours as org_slug). Omit for every organisation your session may read.
Clear enough to supply this argument.
limit
How many waiters entries lists; total still counts every waiter found.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entries",
"total",
"truncated",
"oldestAge"
],
"properties": {
"total": {
"type": "number",
"description": "How many waiters were found, including those beyond `limit`; a lower bound when truncated is true."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"blockedTaskId",
"blockedTitle",
"blockedAssignee",
"onTaskId",
"onTaskTitle",
"age"
],
"properties": {
"age": {
"type": "number",
"description": "How long it has been waiting, in milliseconds since it was blocked."
},
"onTaskId": {
"type": "string",
"description": "Your task it waits on."
},
"onTaskTitle": {
"type": "string",
"description": "Your task's title."
},
"blockedTitle": {
"type": "string",
"description": "The waiting task's title."
},
"blockedTaskId": {
"type": "string",
"description": "The waiting task, blocked on one of yours."
},
"blockedAssignee": {
"type": "string",
"description": "Who the waiting task belongs to, by name."
}
},
"additionalProperties": {}
},
"description": "The waiters, oldest wait first, cut to `limit`; empty when nobody waits on you."
},
"oldestAge": {
"type": "number",
"description": "The longest wait among the waiters found, in milliseconds; 0 when nobody waits."
},
"truncated": {
"type": "boolean",
"description": "True when the bounded scan stopped early, so more waiters may exist."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_blocked_on_me",
"description": "List the tasks that other peers have BLOCKED on one of YOUR live tasks (blockedOnTaskId), oldest wait first, with the age of each wait. A dedicated opt-in read: check_messages returns messages only and never carries this list. WHEN: call after check_messages, or before picking new work, to see who is waiting on you. EXAMPLE: list_blocked_on_me. Returns { entries[{ blockedTaskId, blockedTitle, blockedAssignee, onTaskId, onTaskTitle, age }], total, truncated, oldestAge }; ages are ms. truncated=true means the bounded scan stopped early and total is a lower bound. An empty list is a real absence; a refusal is an error, never an empty list.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "How many waiters entries lists; total still counts every waiter found."
},
"tenantId": {
"type": "string",
"description": "Keep only waiters of this organisation, by slug (whoami returns yours as org_slug). Omit for every organisation your session may read."
},
"recipient": {
"type": "string",
"deprecated": true,
"description": "Has no effect: the waiters listed are always those of the verified agent your credential resolves, whatever name is sent, and a caller with none is refused. Accepted only so that a client which sends it is not refused; leave it out."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entries",
"total",
"truncated",
"oldestAge"
],
"properties": {
"total": {
"type": "number",
"description": "How many waiters were found, including those beyond `limit`; a lower bound when truncated is true."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"blockedTaskId",
"blockedTitle",
"blockedAssignee",
"onTaskId",
"onTaskTitle",
"age"
],
"properties": {
"age": {
"type": "number",
"description": "How long it has been waiting, in milliseconds since it was blocked."
},
"onTaskId": {
"type": "string",
"description": "Your task it waits on."
},
"onTaskTitle": {
"type": "string",
"description": "Your task's title."
},
"blockedTitle": {
"type": "string",
"description": "The waiting task's title."
},
"blockedTaskId": {
"type": "string",
"description": "The waiting task, blocked on one of yours."
},
"blockedAssignee": {
"type": "string",
"description": "Who the waiting task belongs to, by name."
}
},
"additionalProperties": {}
},
"description": "The waiters, oldest wait first, cut to `limit`; empty when nobody waits on you."
},
"oldestAge": {
"type": "number",
"description": "The longest wait among the waiters found, in milliseconds; 0 when nobody waits."
},
"truncated": {
"type": "boolean",
"description": "True when the bounded scan stopped early, so more waiters may exist."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List tasks blocked on me",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Mark one or more message receipts as read using receiptIds from check_messages. Returns { markedAsRead: <count> }; a receipt already read is not counted again. WHEN: call immediately after processing each batch of messages returned by check_messages. EXAMPLE: mark_as_read receiptIds=['j57aaaaa...', 'j57bbbbb...'] callerOrchestrator='pi'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
receiptIds
The receipts to acknowledge: the receiptId values check_messages returned, as a list.
Clear enough to supply this argument.
callerOrchestrator
The recipient marking its own receipts; each receipt must be addressed to it. Omit it when your credential resolves one agent: it is then that agent. An organisation-level token and the fleet master must name it.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"markedAsRead"
],
"properties": {
"markedAsRead": {
"type": "number",
"description": "How many receipts this call marked read; one already read is not counted."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "mark_as_read",
"description": "Mark one or more message receipts as read using receiptIds from check_messages. Returns { markedAsRead: <count> }; a receipt already read is not counted again. WHEN: call immediately after processing each batch of messages returned by check_messages. EXAMPLE: mark_as_read receiptIds=['j57aaaaa...', 'j57bbbbb...'] callerOrchestrator='pi'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"receiptIds"
],
"properties": {
"receiptIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{32}$"
},
"minItems": 1,
"description": "The receipts to acknowledge: the receiptId values check_messages returned, as a list."
},
"callerOrchestrator": {
"type": "string",
"description": "The recipient marking its own receipts; each receipt must be addressed to it. Omit it when your credential resolves one agent: it is then that agent. An organisation-level token and the fleet master must name it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"markedAsRead"
],
"properties": {
"markedAsRead": {
"type": "number",
"description": "How many receipts this call marked read; one already read is not counted."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Mark messages as read",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Delete a message and all its receipts; only the original sender or system may delete. Returns { deleted: true, receiptsDeleted }. WHEN: use to retract a mistaken broadcast or sensitive content before recipients read it. EXAMPLE: delete_message messageId='j57dy3049btafda9m2f5d2ggk987ph3f' callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
messageId
The message to delete: its messageId as returned by send_message, list_messages or get_message.
Clear enough to supply this argument.
callerOrchestrator
The agent deleting; it must be the message's sender (or 'system'). Omit it when your credential resolves one agent: it is then that agent. A signed-in organisation admin may also omit it; anyone else omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"deleted",
"receiptsDeleted"
],
"properties": {
"deleted": {
"type": "boolean",
"description": "True: the message was deleted."
},
"receiptsDeleted": {
"type": "number",
"description": "How many of its read receipts were deleted with it."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "delete_message",
"description": "Delete a message and all its receipts; only the original sender or system may delete. Returns { deleted: true, receiptsDeleted }. WHEN: use to retract a mistaken broadcast or sensitive content before recipients read it. EXAMPLE: delete_message messageId='j57dy3049btafda9m2f5d2ggk987ph3f' callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messageId"
],
"properties": {
"messageId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The message to delete: its messageId as returned by send_message, list_messages or get_message."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent deleting; it must be the message's sender (or 'system'). Omit it when your credential resolves one agent: it is then that agent. A signed-in organisation admin may also omit it; anyone else omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"deleted",
"receiptsDeleted"
],
"properties": {
"deleted": {
"type": "boolean",
"description": "True: the message was deleted."
},
"receiptsDeleted": {
"type": "number",
"description": "How many of its read receipts were deleted with it."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Delete message",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Set the status summary of an orchestrator instance: one or two sentences on what it is working on now, replacing the previous summary, which peers read in list_peers. Returns { orchestratorId, instanceId, summary }. WHEN: use at the start of a session and after a major change of focus, so peers see what you are doing. EXAMPLE: set_summary orchestratorId='alpha' instanceId='alpha-vps' summary='Standardizing 86 tool descriptions for B2'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
orchestratorId
The orchestrator whose summary this is, e.g. 'alpha', as list_peers shows it. Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
instanceId
Which running instance this is, e.g. 'pi-vps'; list_peers shows one row per instance. Omit for the orchestrator's role-level profile.
Clear enough to supply this argument.
summary
One or two sentences on what you are working on now, shown to peers by list_peers.
Clear enough to supply this argument.
endOfDayIndex
The durable end-of-day index written by close-day, kept apart from summary so the next live-status write does not overwrite it. Omit it on normal updates: the stored index is kept.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Set my status summary",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema87/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orchestratorId",
"summary"
],
"properties": {
"summary": {
"type": "string",
"description": "The status summary, as stored."
},
"instanceId": {
"type": "string",
"description": "The instance whose status was set; absent when none was given."
},
"orchestratorId": {
"type": "string",
"description": "Whose status was set."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "set_summary",
"description": "Set the status summary of an orchestrator instance: one or two sentences on what it is working on now, replacing the previous summary, which peers read in list_peers. Returns { orchestratorId, instanceId, summary }. WHEN: use at the start of a session and after a major change of focus, so peers see what you are doing. EXAMPLE: set_summary orchestratorId='alpha' instanceId='alpha-vps' summary='Standardizing 86 tool descriptions for B2'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"summary"
],
"properties": {
"summary": {
"type": "string",
"description": "One or two sentences on what you are working on now, shown to peers by list_peers."
},
"instanceId": {
"type": "string",
"description": "Which running instance this is, e.g. 'pi-vps'; list_peers shows one row per instance. Omit for the orchestrator's role-level profile."
},
"endOfDayIndex": {
"type": "string",
"description": "The durable end-of-day index written by close-day, kept apart from summary so the next live-status write does not overwrite it. Omit it on normal updates: the stored index is kept."
},
"orchestratorId": {
"type": "string",
"description": "The orchestrator whose summary this is, e.g. 'alpha', as list_peers shows it. Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orchestratorId",
"summary"
],
"properties": {
"summary": {
"type": "string",
"description": "The status summary, as stored."
},
"instanceId": {
"type": "string",
"description": "The instance whose status was set; absent when none was given."
},
"orchestratorId": {
"type": "string",
"description": "Whose status was set."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Set my status summary",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List all orchestrator profiles with current task and session info, newest first. For an organisation token, lists the organisation's agents, each with its unique `agentId`: pass it to send_message `recipientAgentIds` (agentId null = not addressable). Returns { items[{ id, instanceId, name, role, workspace, currentTask, lastSeen, sessionCount }], nextCursor, truncated, scopeFiltered? }: items are profiles, newest first; nextCursor is the next page's cursor, null on the last page; scopeFiltered counts rows withheld by scope; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the profiles, or { items, nextCursor?, scopeFiltered? } when another page exists or rows were withheld. WHEN: use before assigning work or sending a DM to confirm who is active and what they are doing. EXAMPLE: list_peers limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_peers call returned, to fetch the following (older) page. Omit for the first page.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "List peer agents and their status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema75/100
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"instanceId",
"name",
"role",
"workspace",
"currentTask",
"lastSeen",
"sessionCount"
],
"properties": {
"id": {
"type": "string",
"description": "The orchestrator's name, as tools take it."
},
"_id": {
"type": "string",
"description": "The profile row's ID; absent for an organisation's agent (listed from the roster, not from a profile)."
},
"name": {
"type": "string",
"description": "The orchestrator's display name."
},
"role": {
"type": [
"string",
"null"
],
"description": "What the orchestrator does; null for an organisation's agent, whose profile is not read."
},
"agentId": {
"type": [
"string",
"null"
],
"description": "The agent's permanent ID, to pass in send_message recipientAgentIds; null when the agent is not addressable, absent on the fleet's own profile listing."
},
"lastSeen": {
"type": [
"string",
"null"
],
"description": "When the orchestrator was last active, as an ISO 8601 timestamp; null for an organisation's agent, whose profile is not read."
},
"workspace": {
"type": [
"string",
"null"
],
"description": "Where the orchestrator works; null for an organisation's agent, whose profile is not read."
},
"instanceId": {
"type": "string",
"description": "The instance the orchestrator runs as, e.g. 'sigma-vps'."
},
"currentTask": {
"type": [
"string",
"null"
],
"description": "What the orchestrator is working on, 'idle' when nothing; null for an organisation's agent, whose profile is not read."
},
"sessionCount": {
"type": [
"number",
"null"
],
"description": "How many sessions the orchestrator has run; null for an organisation's agent, whose profile is not read."
},
"_creationTime": {
"type": "number",
"description": "When the profile was created (milliseconds since the Unix epoch); absent for an organisation's agent."
}
},
"additionalProperties": {}
},
"description": "The orchestrators, newest first; for an organisation, its agents."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
},
"scopeFiltered": {
"type": "number",
"description": "How many rows of your own organisation on this page your session may not see and were left out; absent when none were."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_peers",
"description": "List all orchestrator profiles with current task and session info, newest first. For an organisation token, lists the organisation's agents, each with its unique `agentId`: pass it to send_message `recipientAgentIds` (agentId null = not addressable). Returns { items[{ id, instanceId, name, role, workspace, currentTask, lastSeen, sessionCount }], nextCursor, truncated, scopeFiltered? }: items are profiles, newest first; nextCursor is the next page's cursor, null on the last page; scopeFiltered counts rows withheld by scope; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the profiles, or { items, nextCursor?, scopeFiltered? } when another page exists or rows were withheld. WHEN: use before assigning work or sending a DM to confirm who is active and what they are doing. EXAMPLE: list_peers limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_peers call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"instanceId",
"name",
"role",
"workspace",
"currentTask",
"lastSeen",
"sessionCount"
],
"properties": {
"id": {
"type": "string",
"description": "The orchestrator's name, as tools take it."
},
"_id": {
"type": "string",
"description": "The profile row's ID; absent for an organisation's agent (listed from the roster, not from a profile)."
},
"name": {
"type": "string",
"description": "The orchestrator's display name."
},
"role": {
"type": [
"string",
"null"
],
"description": "What the orchestrator does; null for an organisation's agent, whose profile is not read."
},
"agentId": {
"type": [
"string",
"null"
],
"description": "The agent's permanent ID, to pass in send_message recipientAgentIds; null when the agent is not addressable, absent on the fleet's own profile listing."
},
"lastSeen": {
"type": [
"string",
"null"
],
"description": "When the orchestrator was last active, as an ISO 8601 timestamp; null for an organisation's agent, whose profile is not read."
},
"workspace": {
"type": [
"string",
"null"
],
"description": "Where the orchestrator works; null for an organisation's agent, whose profile is not read."
},
"instanceId": {
"type": "string",
"description": "The instance the orchestrator runs as, e.g. 'sigma-vps'."
},
"currentTask": {
"type": [
"string",
"null"
],
"description": "What the orchestrator is working on, 'idle' when nothing; null for an organisation's agent, whose profile is not read."
},
"sessionCount": {
"type": [
"number",
"null"
],
"description": "How many sessions the orchestrator has run; null for an organisation's agent, whose profile is not read."
},
"_creationTime": {
"type": "number",
"description": "When the profile was created (milliseconds since the Unix epoch); absent for an organisation's agent."
}
},
"additionalProperties": {}
},
"description": "The orchestrators, newest first; for an organisation, its agents."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
},
"scopeFiltered": {
"type": "number",
"description": "How many rows of your own organisation on this page your session may not see and were left out; absent when none were."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List peer agents and their status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
List historical messages filtered by session day or sender, newest first; use check_messages for unread. Returns { items[{ _id, from, content, createdAt, _creationTime }], nextCursor, truncated }: items are messages, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the messages on the last page, else { items, nextCursor }. WHEN: use for audit, recap, or debugging a specific day's message traffic. EXAMPLE: list_messages sessionDay=92 from='alpha' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
sessionDay
Keep only messages of this session day (Day 1 = 2026-03-06 UTC), as send_message stamps it. Omit for every day.
Clear enough to supply this argument.
from
Keep only messages from this sender, e.g. 'alpha'. Omit for every sender.
Clear enough to supply this argument.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Clear enough to supply this argument.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_messages call returned, to fetch the following (older) page. Omit for the first page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"from",
"content",
"createdAt",
"_creationTime"
],
"properties": {
"_id": {
"type": "string",
"description": "The message's ID: the messageId the message tools take."
},
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'; every stored message has one (the list door declares it optional)"
},
"content": {
"type": "string",
"description": "The full message body."
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the message was sent in; absent on a fleet message."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"sessionDay": {
"type": "number",
"description": "The sender's working-day number when it was sent; absent when none was recorded."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation; absent on a fleet message and on messages written before it was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
},
"description": "The messages, newest first; empty when none matches the filters."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_messages",
"description": "List historical messages filtered by session day or sender, newest first; use check_messages for unread. Returns { items[{ _id, from, content, createdAt, _creationTime }], nextCursor, truncated }: items are messages, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the messages on the last page, else { items, nextCursor }. WHEN: use for audit, recap, or debugging a specific day's message traffic. EXAMPLE: list_messages sessionDay=92 from='alpha' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"from": {
"type": "string",
"description": "Keep only messages from this sender, e.g. 'alpha'. Omit for every sender."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_messages call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"sessionDay": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Keep only messages of this session day (Day 1 = 2026-03-06 UTC), as send_message stamps it. Omit for every day."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"from",
"content",
"createdAt",
"_creationTime"
],
"properties": {
"_id": {
"type": "string",
"description": "The message's ID: the messageId the message tools take."
},
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'; every stored message has one (the list door declares it optional)"
},
"content": {
"type": "string",
"description": "The full message body."
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the message was sent in; absent on a fleet message."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"sessionDay": {
"type": "number",
"description": "The sender's working-day number when it was sent; absent when none was recorded."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation; absent on a fleet message and on messages written before it was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
},
"description": "The messages, newest first; empty when none matches the filters."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List messages",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
BM25 full-text keyword search over message content, ranked by relevance. Returns { items[{ _id, from, content, createdAt, channel }], truncated? }: the matching messages, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use for post-incident audit or to find peer DMs by topic — e.g. 'find messages about deploy' across the recent sessionDay window. EXAMPLE: search_messages_by_keyword query='convex deploy' from='pi' sessionDay=102 limit=10.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
query
The words to match; results are ranked by keyword relevance, so exact terms and IDs work best.
Clear enough to supply this argument.
from
Keep only messages from this sender, e.g. 'pi'. Omit for every sender.
Clear enough to supply this argument.
channel
Keep only messages sent on this channel, e.g. 'sigma' or 'broadcast'. Omit for every channel.
Clear enough to supply this argument.
sessionDay
Keep only messages of this session day (Day 1 = 2026-03-06 UTC), as send_message stamps it. Omit for every day.
Clear enough to supply this argument.
tenantId
Keep only messages of this organisation, by slug (whoami returns yours as org_slug). Omit for every organisation your session may read.
Clear enough to supply this argument.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Clear enough to supply this argument.
fields
How much of each match comes back: lite is the message's ID, sender, channel, text, session day and creation time; full is every stored field.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"from",
"content",
"createdAt",
"channel"
],
"properties": {
"_id": {
"type": "string",
"description": "The message's ID: the messageId the message tools take."
},
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'."
},
"content": {
"type": "string",
"description": "The full message body."
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the message was sent in; absent on a fleet message."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"sessionDay": {
"type": "number",
"description": "The sender's working-day number when it was sent; absent when none was recorded."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation; absent on a fleet message and on messages written before it was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch); present with fields='full' only."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
},
"description": "The messages whose text matches the query, best match first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "search_messages_by_keyword",
"description": "BM25 full-text keyword search over message content, ranked by relevance. Returns { items[{ _id, from, content, createdAt, channel }], truncated? }: the matching messages, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use for post-incident audit or to find peer DMs by topic — e.g. 'find messages about deploy' across the recent sessionDay window. EXAMPLE: search_messages_by_keyword query='convex deploy' from='pi' sessionDay=102 limit=10.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"from": {
"type": "string",
"description": "Keep only messages from this sender, e.g. 'pi'. Omit for every sender."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "The words to match; results are ranked by keyword relevance, so exact terms and IDs work best."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "lite",
"description": "How much of each match comes back: lite is the message's ID, sender, channel, text, session day and creation time; full is every stored field."
},
"channel": {
"type": "string",
"description": "Keep only messages sent on this channel, e.g. 'sigma' or 'broadcast'. Omit for every channel."
},
"tenantId": {
"type": "string",
"description": "Keep only messages of this organisation, by slug (whoami returns yours as org_slug). Omit for every organisation your session may read."
},
"sessionDay": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Keep only messages of this session day (Day 1 = 2026-03-06 UTC), as send_message stamps it. Omit for every day."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"from",
"content",
"createdAt",
"channel"
],
"properties": {
"_id": {
"type": "string",
"description": "The message's ID: the messageId the message tools take."
},
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'."
},
"content": {
"type": "string",
"description": "The full message body."
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the message was sent in; absent on a fleet message."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"sessionDay": {
"type": "number",
"description": "The sender's working-day number when it was sent; absent when none was recorded."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation; absent on a fleet message and on messages written before it was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch); present with fields='full' only."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
},
"description": "The messages whose text matches the query, best match first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search messages by keyword",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Show read/unread receipt status for a broadcast message by messageId. Returns { messageId, from, channel, createdAt, receipts: [{ recipient, recipientInstanceId, read, readAt }], truncated, scopeFiltered? }. WHEN: use after send_message to confirm all recipients acknowledged a critical announcement. EXAMPLE: list_broadcast_status messageId='j57dy3049btafda9m2f5d2ggk987ph3f'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
messageId
The broadcast to inspect: the messageId send_message returned.
Clear enough to supply this argument.
limit
How many receipts this answer holds; truncated is true when more exist.
Clear enough to supply this argument.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messageId",
"from",
"createdAt",
"receipts",
"truncated"
],
"properties": {
"from": {
"type": "string",
"description": "Who sent the message."
},
"channel": {
"type": "string",
"description": "Where it was sent (an agent's name, a list of names, or 'broadcast'); absent when not recorded."
},
"receipts": {
"type": "array",
"items": {
"type": "object",
"required": [
"recipient",
"read"
],
"properties": {
"read": {
"type": "boolean",
"description": "Whether that recipient has marked the message read."
},
"readAt": {
"type": "number",
"description": "When it was marked read (milliseconds since the Unix epoch); absent while unread."
},
"recipient": {
"type": "string",
"description": "Who the receipt is for, by name."
},
"recipientInstanceId": {
"type": "string",
"description": "The recipient's instance, e.g. 'pi-vps'; absent when the receipt is for the agent as a whole."
}
},
"additionalProperties": {}
},
"description": "One read receipt per recipient you may see, cut to `limit`; empty when none is visible to you."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"messageId": {
"type": "string",
"description": "The message whose receipts these are."
},
"truncated": {
"type": "boolean",
"description": "True when more receipts exist than are listed (beyond `limit` or the fetch cap)."
},
"scopeFiltered": {
"type": "number",
"description": "How many receipts were withheld because your session may not see those recipients; absent when none was."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_broadcast_status",
"description": "Show read/unread receipt status for a broadcast message by messageId. Returns { messageId, from, channel, createdAt, receipts: [{ recipient, recipientInstanceId, read, readAt }], truncated, scopeFiltered? }. WHEN: use after send_message to confirm all recipients acknowledged a critical announcement. EXAMPLE: list_broadcast_status messageId='j57dy3049btafda9m2f5d2ggk987ph3f'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messageId"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many receipts this answer holds; truncated is true when more exist."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"messageId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The broadcast to inspect: the messageId send_message returned."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messageId",
"from",
"createdAt",
"receipts",
"truncated"
],
"properties": {
"from": {
"type": "string",
"description": "Who sent the message."
},
"channel": {
"type": "string",
"description": "Where it was sent (an agent's name, a list of names, or 'broadcast'); absent when not recorded."
},
"receipts": {
"type": "array",
"items": {
"type": "object",
"required": [
"recipient",
"read"
],
"properties": {
"read": {
"type": "boolean",
"description": "Whether that recipient has marked the message read."
},
"readAt": {
"type": "number",
"description": "When it was marked read (milliseconds since the Unix epoch); absent while unread."
},
"recipient": {
"type": "string",
"description": "Who the receipt is for, by name."
},
"recipientInstanceId": {
"type": "string",
"description": "The recipient's instance, e.g. 'pi-vps'; absent when the receipt is for the agent as a whole."
}
},
"additionalProperties": {}
},
"description": "One read receipt per recipient you may see, cut to `limit`; empty when none is visible to you."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"messageId": {
"type": "string",
"description": "The message whose receipts these are."
},
"truncated": {
"type": "boolean",
"description": "True when more receipts exist than are listed (beyond `limit` or the fetch cap)."
},
"scopeFiltered": {
"type": "number",
"description": "How many receipts were withheld because your session may not see those recipients; absent when none was."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List broadcast status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Create a task assigned to an orchestrator with priority, status tracking, and optional mission link. Returns { taskId, title, assignedTo, priority, status }; keep taskId for start_task, update_task and complete_task. WHEN: use to delegate work, track a deliverable, or instantiate a step from a mission plan. `project` is required: a task with no project is refused, because billing groups done tasks by project. EXAMPLE: create_task title='Standardize tool descriptions' project='vantage-peers' assignedTo='beta' priority='high' createdBy='alpha'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
A short statement of the work, shown in every task list.
Clear enough to supply this argument.
description
The brief: what to do, the context, and how completion will be verified. Omit for a title-only task.
Clear enough to supply this argument.
project
The billing line the work belongs to, e.g. 'vantage-starter': billing_summary_by_project groups done tasks by this exact name (surrounding spaces trimmed), so spell it the same way on every task of a project.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
tags
Free labels for grouping and search, e.g. ['backend', 'p1']. Omit for none.
Clear enough to supply this argument.
assignedTo
The orchestrator who will do the work, by name, e.g. 'beta' or a client role; list_peers shows who exists.
Clear enough to supply this argument.
assignedToAgentId
The agent who does the work, named by agent ID (the agentId list_peers returns): the task is in that agent's queue (list_tasks with assignedTo). Given, the ID alone decides, and an ID that is not an active agent of your organisation is refused. Omit it to resolve the assignee from assignedTo.
Clear enough to supply this argument.
assignedToInstance
A specific instance of the assignee, e.g. 'pi-vps', as list_peers shows it. Omit to let any instance of that orchestrator pick it up.
Clear enough to supply this argument.
priority
How urgent the work is relative to the assignee's other tasks: urgent jumps the queue, low waits.
Clear enough to supply this argument.
status
The state the task starts in; set another one only when importing work already under way.
Clear enough to supply this argument.
dependsOn
Tasks that must be done before this one can start: their taskIds as returned by create_task or list_tasks. Omit for none.
Clear enough to supply this argument.
missionId
The mission this task belongs to: its missionId as returned by create_mission or list_missions. Omit for a standalone task.
Clear enough to supply this argument.
estimatedMinutes
Your estimate of the work, in minutes. Omit when unknown; billing never uses it.
Clear enough to supply this argument.
dueDate
The moment the work is due (a millisecond timestamp, as Date.now() gives). Omit for no due date.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the task's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused.
Clear enough to supply this argument.
deliverable › pkg
Which npm package the task is meant to publish, e.g. '@vantageos/widget': the backend watches the npm registry for it to tell when the work has in fact shipped.
Clear enough to supply this argument.
deliverable › export
The name the published package must export, e.g. 'WidgetPanel': once a published version exports it while the task is still open, get_task reports deliverableDivergence='delivered-but-open', the cue that the task is in fact done.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"title": {
"type": "string",
"description": "The task's title, as stored."
},
"status": {
"type": "string",
"description": "The status the task was created in (todo for a new task)."
},
"taskId": {
"type": "string",
"description": "The new task's ID: start_task, update_task and complete_task take it."
},
"priority": {
"type": "string",
"description": "The task's priority, as stored."
},
"assignedTo": {
"type": "string",
"description": "Who the task is assigned to."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "create_task",
"description": "Create a task assigned to an orchestrator with priority, status tracking, and optional mission link. Returns { taskId, title, assignedTo, priority, status }; keep taskId for start_task, update_task and complete_task. WHEN: use to delegate work, track a deliverable, or instantiate a step from a mission plan. `project` is required: a task with no project is refused, because billing groups done tasks by project. EXAMPLE: create_task title='Standardize tool descriptions' project='vantage-peers' assignedTo='beta' priority='high' createdBy='alpha'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"project",
"assignedTo",
"priority"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels for grouping and search, e.g. ['backend', 'p1']. Omit for none."
},
"title": {
"type": "string",
"description": "A short statement of the work, shown in every task list."
},
"status": {
"enum": [
"todo",
"in_progress",
"review",
"blocked",
"done",
"cancelled",
"failed"
],
"type": "string",
"default": "todo",
"description": "The state the task starts in; set another one only when importing work already under way."
},
"dueDate": {
"type": "number",
"description": "The moment the work is due (a millisecond timestamp, as Date.now() gives). Omit for no due date."
},
"project": {
"type": "string",
"minLength": 1,
"description": "The billing line the work belongs to, e.g. 'vantage-starter': billing_summary_by_project groups done tasks by this exact name (surrounding spaces trimmed), so spell it the same way on every task of a project."
},
"priority": {
"enum": [
"urgent",
"high",
"medium",
"low"
],
"type": "string",
"description": "How urgent the work is relative to the assignee's other tasks: urgent jumps the queue, low waits."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the task's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{32}$"
},
"description": "Tasks that must be done before this one can start: their taskIds as returned by create_task or list_tasks. Omit for none."
},
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The mission this task belongs to: its missionId as returned by create_mission or list_missions. Omit for a standalone task."
},
"assignedTo": {
"type": "string",
"description": "The orchestrator who will do the work, by name, e.g. 'beta' or a client role; list_peers shows who exists."
},
"deliverable": {
"type": "object",
"required": [
"pkg",
"export"
],
"properties": {
"pkg": {
"type": "string",
"maxLength": 214,
"minLength": 1,
"description": "Which npm package the task is meant to publish, e.g. '@vantageos/widget': the backend watches the npm registry for it to tell when the work has in fact shipped."
},
"export": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The name the published package must export, e.g. 'WidgetPanel': once a published version exports it while the task is still open, get_task reports deliverableDivergence='delivered-but-open', the cue that the task is in fact done."
}
},
"description": "The artifact the task delivers (today an npm export). The backend checks the npm registry and get_task reports deliverableDivergence='delivered-but-open' when it is published while the task is still open. Omit when the task ships no package.",
"additionalProperties": false
},
"description": {
"type": "string",
"description": "The brief: what to do, the context, and how completion will be verified. Omit for a title-only task."
},
"estimatedMinutes": {
"type": "number",
"description": "Your estimate of the work, in minutes. Omit when unknown; billing never uses it."
},
"assignedToAgentId": {
"type": "string",
"minLength": 1,
"description": "The agent who does the work, named by agent ID (the agentId list_peers returns): the task is in that agent's queue (list_tasks with assignedTo). Given, the ID alone decides, and an ID that is not an active agent of your organisation is refused. Omit it to resolve the assignee from assignedTo."
},
"assignedToInstance": {
"type": "string",
"description": "A specific instance of the assignee, e.g. 'pi-vps', as list_peers shows it. Omit to let any instance of that orchestrator pick it up."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"title": {
"type": "string",
"description": "The task's title, as stored."
},
"status": {
"type": "string",
"description": "The status the task was created in (todo for a new task)."
},
"taskId": {
"type": "string",
"description": "The new task's ID: start_task, update_task and complete_task take it."
},
"priority": {
"type": "string",
"description": "The task's priority, as stored."
},
"assignedTo": {
"type": "string",
"description": "Who the task is assigned to."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Create task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
List tasks with optional filters by assignee, status, project, or creator, newest first. Returns { items[{ _id, _creationTime, title, assignedTo, priority, status }], nextCursor, truncated }: items are tasks, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the tasks on the last page, else { items, nextCursor }. WHEN: use to check the backlog, review in-progress items, or audit a specific project's tasks. EXAMPLE: list_tasks assignedTo='gamma' status=['in_progress'] project='vantage-peers' limit=20. excludeAutoGenerated: when true, filters out cron-spawned tasks (createdBy starts with `cron-` OR title matches the `/check-messages` polling pattern). Use to keep Pi's queue clean from scheduler noise. With updatedSince the rows come newest-UPDATED first and a window of any size pages complete through nextCursor. Refused above 2000 rows (drop one key, narrow by status or raise updatedSince): assignedTo with createdBy, project or assignedToInstance with createdBy or updatedSince, and createdBy over an updatedSince window where that creator is rare. status shorthands: open is todo, in_progress, review and blocked; active is todo and in_progress; all applies no filter. A caller other than the fleet master may name in assignedTo (or, without it, createdBy) only an identity of its fromAllowList (whoami lists it); another name is refused.
Resolve contradictions between the description, input schema, and annotations.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
assignedTo
Keep only tasks assigned to this orchestrator, e.g. 'gamma'. Omit for every assignee.
Clear enough to supply this argument.
assignedToInstance
Keep only tasks assigned to this instance, e.g. 'pi-vps'. Omit for every instance.
Clear enough to supply this argument.
status
Keep tasks in any of these states; a shorthand for a set of states (the tool description says which) is the only entry of its list. Without it, every state.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Keep only tasks of this project, e.g. 'vantage-peers'. Omit for every project.
Clear enough to supply this argument.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
How much of each row comes back: lite is each task's ID, creation time, title, status, priority, assignee and mission (plus deliverableDivergence when set), enough to pick a row for fewer tokens; full is every stored field.
Clear enough to supply this argument.
createdBy
Keep only tasks created by this orchestrator, e.g. 'pi'. Omit for every creator.
Clear enough to supply this argument.
updatedSince
The moment from which changes count: keep only tasks last updated at or after it (a millisecond timestamp, as Date.now() gives), newest-updated first. Omit for no time window.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_tasks call returned, to fetch the following (older) page. Omit for the first page.
Clear enough to supply this argument.
excludeAutoGenerated
Set true to hide scheduler noise: tasks whose creator starts with 'cron-' or whose title is the check-messages polling title. Omit to include them.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
},
"description": "The tasks, newest first (newest-updated first with updatedSince); lite rows carry _id, _creationTime, title, status, priority, assignedTo and missionId, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_tasks",
"description": "List tasks with optional filters by assignee, status, project, or creator, newest first. Returns { items[{ _id, _creationTime, title, assignedTo, priority, status }], nextCursor, truncated }: items are tasks, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the tasks on the last page, else { items, nextCursor }. WHEN: use to check the backlog, review in-progress items, or audit a specific project's tasks. EXAMPLE: list_tasks assignedTo='gamma' status=['in_progress'] project='vantage-peers' limit=20. excludeAutoGenerated: when true, filters out cron-spawned tasks (createdBy starts with `cron-` OR title matches the `/check-messages` polling pattern). Use to keep Pi's queue clean from scheduler noise. With updatedSince the rows come newest-UPDATED first and a window of any size pages complete through nextCursor. Refused above 2000 rows (drop one key, narrow by status or raise updatedSince): assignedTo with createdBy, project or assignedToInstance with createdBy or updatedSince, and createdBy over an updatedSince window where that creator is rare. status shorthands: open is todo, in_progress, review and blocked; active is todo and in_progress; all applies no filter. A caller other than the fleet master may name in assignedTo (or, without it, createdBy) only an identity of its fromAllowList (whoami lists it); another name is refused.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_tasks call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "lite",
"description": "How much of each row comes back: lite is each task's ID, creation time, title, status, priority, assignee and mission (plus deliverableDivergence when set), enough to pick a row for fewer tokens; full is every stored field."
},
"status": {
"type": "array",
"items": {
"enum": [
"todo",
"in_progress",
"review",
"blocked",
"done",
"cancelled",
"open",
"active",
"all"
],
"type": "string"
},
"minItems": 1,
"description": "Keep tasks in any of these states; a shorthand for a set of states (the tool description says which) is the only entry of its list. Without it, every state."
},
"project": {
"type": "string",
"description": "Keep only tasks of this project, e.g. 'vantage-peers'. Omit for every project."
},
"createdBy": {
"type": "string",
"description": "Keep only tasks created by this orchestrator, e.g. 'pi'. Omit for every creator."
},
"assignedTo": {
"type": "string",
"description": "Keep only tasks assigned to this orchestrator, e.g. 'gamma'. Omit for every assignee."
},
"updatedSince": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The moment from which changes count: keep only tasks last updated at or after it (a millisecond timestamp, as Date.now() gives), newest-updated first. Omit for no time window.",
"exclusiveMinimum": 0
},
"assignedToInstance": {
"type": "string",
"description": "Keep only tasks assigned to this instance, e.g. 'pi-vps'. Omit for every instance."
},
"excludeAutoGenerated": {
"type": "boolean",
"description": "Set true to hide scheduler noise: tasks whose creator starts with 'cron-' or whose title is the check-messages polling title. Omit to include them."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
},
"description": "The tasks, newest first (newest-updated first with updatedSince); lite rows carry _id, _creationTime, title, status, priority, assignedTo and missionId, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List tasks",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Bulk-close the open tasks matching a filter, in one atomic mutation. SAFETY: a call without dryRun only previews the matching tasks; dryRun=false commits. The filter must narrow (autoGeneratedOnly, assignedTo or status); an empty filter throws BULK_FILTER_TOO_BROAD. A live run needs callerOrchestrator (BULK_CALLER_REQUIRED). At most 500 tasks close per call: when more match, the live call closes 500, returns remaining: true + cappedAt: 500, and the rest drains in the background under the same filter and checks; poll get_bulk_complete_run with the bulkRunId. Re-calling with the same filter is safe: closed tasks leave the scan. Returns {count, sampleIds, bulkRunId, executedAt?, cappedAt?, remaining?}: bulkRunId is the evidence token; cappedAt + remaining appear together when more than 500 matched, otherwise count is exact. WHEN: cron-spam cleanup of auto-generated check-messages polling tasks. EXAMPLE (preview): bulk_complete_tasks filter={autoGeneratedOnly:true} callerOrchestrator='system'. EXAMPLE (commit): bulk_complete_tasks filter={status:'todo'} dryRun=false callerOrchestrator='system'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › autoGeneratedOnly
Set true to close only scheduler-made tasks: a creator starting with 'cron-' (the dash is required) or a title that is exactly the check-messages polling title. Omit to not filter on origin.
Clear enough to supply this argument.
filter › assignedTo
Close only tasks assigned to this orchestrator, e.g. 'beta'. Omit for every assignee.
Clear enough to supply this argument.
filter › status
Close only the open tasks currently in this state, for example those waiting on a reviewer; without it, open tasks in any state.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
dryRun
Whether this call only previews: true lists what would close and writes nothing; false closes the matched tasks for real.
Clear enough to supply this argument.
completionNoteTemplate
The completion note written on every closed task; {{day}}, {{bulkRunId}} and {{executedAt}} are filled in. Omit for 'bulk-cleanup: cron-spam day {{day}} runId={{bulkRunId}} executedAt={{executedAt}}'.
Clear enough to supply this argument.
callerOrchestrator
The agent closing the tasks; every matched task must name it as creator or assignee, unless the fleet master acts as 'system'. Omit it when your credential resolves one agent: it is then that agent. A live run (dryRun=false) without one is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"count",
"sampleIds",
"bulkRunId"
],
"properties": {
"count": {
"type": "number",
"description": "How many tasks match (dry run) or were closed (live run); a lower bound when remaining is true."
},
"cappedAt": {
"type": "number",
"description": "The per-call cap (500) when more tasks matched than one call closes; absent otherwise."
},
"bulkRunId": {
"type": "string",
"description": "The run's ID, the evidence of the call; get_bulk_complete_run reads a live run."
},
"remaining": {
"type": "boolean",
"description": "True when matching tasks are left beyond the cap (a live run drains them in the background); absent otherwise."
},
"sampleIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 10 of those tasks, by ID; empty when none matched."
},
"executedAt": {
"type": "number",
"description": "When the live run closed the tasks (milliseconds since the Unix epoch); absent on a dry run."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "bulk_complete_tasks",
"description": "Bulk-close the open tasks matching a filter, in one atomic mutation. SAFETY: a call without dryRun only previews the matching tasks; dryRun=false commits. The filter must narrow (autoGeneratedOnly, assignedTo or status); an empty filter throws BULK_FILTER_TOO_BROAD. A live run needs callerOrchestrator (BULK_CALLER_REQUIRED). At most 500 tasks close per call: when more match, the live call closes 500, returns remaining: true + cappedAt: 500, and the rest drains in the background under the same filter and checks; poll get_bulk_complete_run with the bulkRunId. Re-calling with the same filter is safe: closed tasks leave the scan. Returns {count, sampleIds, bulkRunId, executedAt?, cappedAt?, remaining?}: bulkRunId is the evidence token; cappedAt + remaining appear together when more than 500 matched, otherwise count is exact. WHEN: cron-spam cleanup of auto-generated check-messages polling tasks. EXAMPLE (preview): bulk_complete_tasks filter={autoGeneratedOnly:true} callerOrchestrator='system'. EXAMPLE (commit): bulk_complete_tasks filter={status:'todo'} dryRun=false callerOrchestrator='system'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"filter"
],
"properties": {
"dryRun": {
"type": "boolean",
"default": true,
"description": "Whether this call only previews: true lists what would close and writes nothing; false closes the matched tasks for real."
},
"filter": {
"type": "object",
"properties": {
"status": {
"enum": [
"todo",
"in_progress",
"review",
"blocked"
],
"type": "string",
"description": "Close only the open tasks currently in this state, for example those waiting on a reviewer; without it, open tasks in any state."
},
"assignedTo": {
"type": "string",
"description": "Close only tasks assigned to this orchestrator, e.g. 'beta'. Omit for every assignee."
},
"autoGeneratedOnly": {
"type": "boolean",
"description": "Set true to close only scheduler-made tasks: a creator starting with 'cron-' (the dash is required) or a title that is exactly the check-messages polling title. Omit to not filter on origin."
}
},
"description": "Which open tasks to close. Set at least one key; several keys narrow together."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent closing the tasks; every matched task must name it as creator or assignee, unless the fleet master acts as 'system'. Omit it when your credential resolves one agent: it is then that agent. A live run (dryRun=false) without one is refused."
},
"completionNoteTemplate": {
"type": "string",
"description": "The completion note written on every closed task; {{day}}, {{bulkRunId}} and {{executedAt}} are filled in. Omit for 'bulk-cleanup: cron-spam day {{day}} runId={{bulkRunId}} executedAt={{executedAt}}'."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"count",
"sampleIds",
"bulkRunId"
],
"properties": {
"count": {
"type": "number",
"description": "How many tasks match (dry run) or were closed (live run); a lower bound when remaining is true."
},
"cappedAt": {
"type": "number",
"description": "The per-call cap (500) when more tasks matched than one call closes; absent otherwise."
},
"bulkRunId": {
"type": "string",
"description": "The run's ID, the evidence of the call; get_bulk_complete_run reads a live run."
},
"remaining": {
"type": "boolean",
"description": "True when matching tasks are left beyond the cap (a live run drains them in the background); absent otherwise."
},
"sampleIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 10 of those tasks, by ID; empty when none matched."
},
"executedAt": {
"type": "number",
"description": "When the live run closed the tasks (milliseconds since the Unix epoch); absent on a dry run."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Bulk complete tasks",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Read the status of one live bulk_complete_tasks run by the `bulkRunId` its first call returned. WHEN: a bulk_complete_tasks call reported `remaining: true` — the rest drains in the background, and this is where you see how it went. Returns {bulkRunId, status, closed, remaining, failureReason?, createdBy, orgId?, startedAt, updatedAt}: status `running` (batches still draining), `complete` (the pile is gone; `closed` is the total) or `failed` (a later batch was refused — RBAC or the closure gate — `failureReason` says why, `closed` is what was closed before it, the rest stay open; re-calling bulk_complete_tasks with the same filter meets the same refusal). Readable by the run's own organisation and by its creator only; any other id, org or caller gets 'not found'. EXAMPLE: get_bulk_complete_run bulkRunId='bulk-1760000000000-ab12cd34'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
bulkRunId
The run to read: the bulkRunId the first live bulk_complete_tasks call returned.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bulkRunId",
"createdBy",
"status",
"closed",
"remaining",
"startedAt",
"updatedAt"
],
"properties": {
"orgId": {
"type": "string",
"description": "The slug of the organisation whose tasks the run closes; absent on a fleet run."
},
"closed": {
"type": "number",
"description": "How many tasks the run has closed so far; the total once status is complete."
},
"status": {
"type": "string",
"description": "running (batches still draining), complete (every matching task is closed) or failed (a later batch was refused; see failureReason)."
},
"bulkRunId": {
"type": "string",
"description": "The run's ID, as the first bulk_complete_tasks call returned it."
},
"createdBy": {
"type": "string",
"description": "Who started the run."
},
"remaining": {
"type": "boolean",
"description": "True while matching tasks are still left to close."
},
"startedAt": {
"type": "number",
"description": "When the run started (milliseconds since the Unix epoch)."
},
"updatedAt": {
"type": "number",
"description": "When the run last progressed (milliseconds since the Unix epoch)."
},
"failureReason": {
"type": "string",
"description": "Why a batch was refused (RBAC or the closure gate); present only when status is failed."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_bulk_complete_run",
"description": "Read the status of one live bulk_complete_tasks run by the `bulkRunId` its first call returned. WHEN: a bulk_complete_tasks call reported `remaining: true` — the rest drains in the background, and this is where you see how it went. Returns {bulkRunId, status, closed, remaining, failureReason?, createdBy, orgId?, startedAt, updatedAt}: status `running` (batches still draining), `complete` (the pile is gone; `closed` is the total) or `failed` (a later batch was refused — RBAC or the closure gate — `failureReason` says why, `closed` is what was closed before it, the rest stay open; re-calling bulk_complete_tasks with the same filter meets the same refusal). Readable by the run's own organisation and by its creator only; any other id, org or caller gets 'not found'. EXAMPLE: get_bulk_complete_run bulkRunId='bulk-1760000000000-ab12cd34'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bulkRunId"
],
"properties": {
"bulkRunId": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The run to read: the bulkRunId the first live bulk_complete_tasks call returned."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bulkRunId",
"createdBy",
"status",
"closed",
"remaining",
"startedAt",
"updatedAt"
],
"properties": {
"orgId": {
"type": "string",
"description": "The slug of the organisation whose tasks the run closes; absent on a fleet run."
},
"closed": {
"type": "number",
"description": "How many tasks the run has closed so far; the total once status is complete."
},
"status": {
"type": "string",
"description": "running (batches still draining), complete (every matching task is closed) or failed (a later batch was refused; see failureReason)."
},
"bulkRunId": {
"type": "string",
"description": "The run's ID, as the first bulk_complete_tasks call returned it."
},
"createdBy": {
"type": "string",
"description": "Who started the run."
},
"remaining": {
"type": "boolean",
"description": "True while matching tasks are still left to close."
},
"startedAt": {
"type": "number",
"description": "When the run started (milliseconds since the Unix epoch)."
},
"updatedAt": {
"type": "number",
"description": "When the run last progressed (milliseconds since the Unix epoch)."
},
"failureReason": {
"type": "string",
"description": "Why a batch was refused (RBAC or the closure gate); present only when status is failed."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get bulk complete run status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
BM25 full-text keyword search over task titles, ranked by relevance. Returns { items[{ _id, title, assignedTo, priority, status }], truncated? }: the matching tasks, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to find tasks by topic/keyword when list_tasks filters are too broad — e.g. 'find tasks about hook' across all assignees. EXAMPLE: search_tasks_by_keyword query='hook PostToolUse' status='todo' limit=10.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
query
The words to match against task titles; exact terms work best.
Clear enough to supply this argument.
assignedTo
Keep only tasks assigned to this orchestrator. Omit for every assignee.
Clear enough to supply this argument.
status
Keep only tasks in this state. Omit for every state.
Clear enough to supply this argument.
project
Keep only tasks of this project. Omit for every project.
Clear enough to supply this argument.
missionId
The mission whose tasks to search, by the missionId list_missions returns; without it, every mission.
Clear enough to supply this argument.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Clear enough to supply this argument.
fields
How much of each match comes back: lite is each task's ID, title, status, priority, assignee and mission; full is every stored field.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch); present with fields='full' only."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
},
"description": "The tasks whose title matches the query, best match first; lite rows carry _id, title, status, priority, assignedTo and missionId, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "search_tasks_by_keyword",
"description": "BM25 full-text keyword search over task titles, ranked by relevance. Returns { items[{ _id, title, assignedTo, priority, status }], truncated? }: the matching tasks, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to find tasks by topic/keyword when list_tasks filters are too broad — e.g. 'find tasks about hook' across all assignees. EXAMPLE: search_tasks_by_keyword query='hook PostToolUse' status='todo' limit=10.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "The words to match against task titles; exact terms work best."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "lite",
"description": "How much of each match comes back: lite is each task's ID, title, status, priority, assignee and mission; full is every stored field."
},
"status": {
"enum": [
"todo",
"in_progress",
"review",
"blocked",
"done"
],
"type": "string",
"description": "Keep only tasks in this state. Omit for every state."
},
"project": {
"type": "string",
"description": "Keep only tasks of this project. Omit for every project."
},
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The mission whose tasks to search, by the missionId list_missions returns; without it, every mission."
},
"assignedTo": {
"type": "string",
"description": "Keep only tasks assigned to this orchestrator. Omit for every assignee."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch); present with fields='full' only."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
},
"description": "The tasks whose title matches the query, best match first; lite rows carry _id, title, status, priority, assignedTo and missionId, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search tasks by keyword",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Billing/refacturation base — sums MACHINE-derived actualMinutes (startedAt→completedAt, never a hand-typed time line) grouped by project for tasks completed within [from, to]. WHEN: use to build the refacturation base for a client or period, or to audit billed time before invoicing. project is optional — omit to get every project, or pass one to filter the returned rows to a single project. from/to bound the completion moment of the tasks counted — omit both to count every completed task up to now. NEVER hides truncation: if the underlying scan hit its cap, `truncated: true` is returned — treat that as a signal to narrow the period and re-query, not as a complete total. EXAMPLE: billing_summary_by_project project='vantage-immo' from=1783000000000 to=1783949200149. unattributedTaskCount is split into noProjectCount (done task with no project, whatever its duration) and noDurationCount (a project but no measured duration); a task with neither counts in noProjectCount only. Pass listNoDuration=true to also get noDurationTasks [{taskId, assignedTo, project, completedAt}] (at most 200; noDurationTasksTruncated says when it is cut). A duration is never estimated. Returns { byProject: [{project, totalMinutes, taskCount, legacyTaskCount, legacyMinutes}], unattributedTaskCount, noProjectCount, noDurationCount, noDurationTasks?[{ taskId, assignedTo, project, completedAt }], noDurationTasksTruncated?, invalidDurationTaskCount, truncated }: legacyMinutes is the part of totalMinutes timed from start to close rather than by work segments, invalidDurationTaskCount the done tasks left out for a negative duration.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Report only this project, e.g. 'vantage-immo'. Omit to get every project's totals.
Clear enough to supply this argument.
from
The moment the billed period starts, as a millisecond timestamp like the one Date.now() gives: tasks completed at or after it count. Omit to count from the first completed task.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
to
The moment the billed period ends, as a millisecond timestamp like the one Date.now() gives: tasks completed at or before it count. Omit to count until now.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
listNoDuration
Set true to also list the done tasks that have a project but no measured duration (noDurationTasks, at most 200; noDurationTasksTruncated says when the list is cut). Omit to get their count only.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"byProject",
"unattributedTaskCount",
"noProjectCount",
"noDurationCount",
"invalidDurationTaskCount",
"truncated"
],
"properties": {
"byProject": {
"type": "array",
"items": {
"type": "object",
"required": [
"project",
"totalMinutes",
"taskCount",
"legacyTaskCount",
"legacyMinutes"
],
"properties": {
"project": {
"type": "string",
"description": "The project these totals are for."
},
"taskCount": {
"type": "number",
"description": "How many of its done tasks carry a measured duration."
},
"totalMinutes": {
"type": "number",
"description": "The measured working minutes of its done tasks in the period."
},
"legacyMinutes": {
"type": "number",
"description": "The part of totalMinutes timed the legacy way."
},
"legacyTaskCount": {
"type": "number",
"description": "How many of those tasks were timed the legacy way (start to close, not work segments)."
}
},
"additionalProperties": {}
},
"description": "One row per project with billable time in the period; empty when none."
},
"truncated": {
"type": "boolean",
"description": "True when the scan hit its cap, so the totals are incomplete: narrow the period and ask again."
},
"noProjectCount": {
"type": "number",
"description": "Done tasks with no project, whatever their duration."
},
"noDurationCount": {
"type": "number",
"description": "Done tasks with a project but no measured duration."
},
"noDurationTasks": {
"type": "array",
"items": {
"type": "object",
"required": [
"taskId",
"assignedTo",
"project",
"completedAt"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task with no measured duration."
},
"project": {
"type": "string",
"description": "Its project."
},
"assignedTo": {
"type": "string",
"description": "Who it is assigned to."
},
"completedAt": {
"type": "number",
"description": "When it closed (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The done tasks counted in noDurationCount, at most 200; present only when listNoDuration=true was passed."
},
"unattributedTaskCount": {
"type": "number",
"description": "Done tasks in the period that cannot be billed: noProjectCount plus noDurationCount."
},
"invalidDurationTaskCount": {
"type": "number",
"description": "Done tasks left out because their recorded duration is negative (an impossible value)."
},
"noDurationTasksTruncated": {
"type": "boolean",
"description": "True when noDurationTasks was cut at its cap; present only with noDurationTasks."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "billing_summary_by_project",
"description": "Billing/refacturation base — sums MACHINE-derived actualMinutes (startedAt→completedAt, never a hand-typed time line) grouped by project for tasks completed within [from, to]. WHEN: use to build the refacturation base for a client or period, or to audit billed time before invoicing. project is optional — omit to get every project, or pass one to filter the returned rows to a single project. from/to bound the completion moment of the tasks counted — omit both to count every completed task up to now. NEVER hides truncation: if the underlying scan hit its cap, `truncated: true` is returned — treat that as a signal to narrow the period and re-query, not as a complete total. EXAMPLE: billing_summary_by_project project='vantage-immo' from=1783000000000 to=1783949200149. unattributedTaskCount is split into noProjectCount (done task with no project, whatever its duration) and noDurationCount (a project but no measured duration); a task with neither counts in noProjectCount only. Pass listNoDuration=true to also get noDurationTasks [{taskId, assignedTo, project, completedAt}] (at most 200; noDurationTasksTruncated says when it is cut). A duration is never estimated. Returns { byProject: [{project, totalMinutes, taskCount, legacyTaskCount, legacyMinutes}], unattributedTaskCount, noProjectCount, noDurationCount, noDurationTasks?[{ taskId, assignedTo, project, completedAt }], noDurationTasksTruncated?, invalidDurationTaskCount, truncated }: legacyMinutes is the part of totalMinutes timed from start to close rather than by work segments, invalidDurationTaskCount the done tasks left out for a negative duration.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The moment the billed period ends, as a millisecond timestamp like the one Date.now() gives: tasks completed at or before it count. Omit to count until now."
},
"from": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The moment the billed period starts, as a millisecond timestamp like the one Date.now() gives: tasks completed at or after it count. Omit to count from the first completed task."
},
"project": {
"type": "string",
"description": "Report only this project, e.g. 'vantage-immo'. Omit to get every project's totals."
},
"listNoDuration": {
"type": "boolean",
"description": "Set true to also list the done tasks that have a project but no measured duration (noDurationTasks, at most 200; noDurationTasksTruncated says when the list is cut). Omit to get their count only."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"byProject",
"unattributedTaskCount",
"noProjectCount",
"noDurationCount",
"invalidDurationTaskCount",
"truncated"
],
"properties": {
"byProject": {
"type": "array",
"items": {
"type": "object",
"required": [
"project",
"totalMinutes",
"taskCount",
"legacyTaskCount",
"legacyMinutes"
],
"properties": {
"project": {
"type": "string",
"description": "The project these totals are for."
},
"taskCount": {
"type": "number",
"description": "How many of its done tasks carry a measured duration."
},
"totalMinutes": {
"type": "number",
"description": "The measured working minutes of its done tasks in the period."
},
"legacyMinutes": {
"type": "number",
"description": "The part of totalMinutes timed the legacy way."
},
"legacyTaskCount": {
"type": "number",
"description": "How many of those tasks were timed the legacy way (start to close, not work segments)."
}
},
"additionalProperties": {}
},
"description": "One row per project with billable time in the period; empty when none."
},
"truncated": {
"type": "boolean",
"description": "True when the scan hit its cap, so the totals are incomplete: narrow the period and ask again."
},
"noProjectCount": {
"type": "number",
"description": "Done tasks with no project, whatever their duration."
},
"noDurationCount": {
"type": "number",
"description": "Done tasks with a project but no measured duration."
},
"noDurationTasks": {
"type": "array",
"items": {
"type": "object",
"required": [
"taskId",
"assignedTo",
"project",
"completedAt"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task with no measured duration."
},
"project": {
"type": "string",
"description": "Its project."
},
"assignedTo": {
"type": "string",
"description": "Who it is assigned to."
},
"completedAt": {
"type": "number",
"description": "When it closed (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The done tasks counted in noDurationCount, at most 200; present only when listNoDuration=true was passed."
},
"unattributedTaskCount": {
"type": "number",
"description": "Done tasks in the period that cannot be billed: noProjectCount plus noDurationCount."
},
"invalidDurationTaskCount": {
"type": "number",
"description": "Done tasks left out because their recorded duration is negative (an impossible value)."
},
"noDurationTasksTruncated": {
"type": "boolean",
"description": "True when noDurationTasks was cut at its cap; present only with noDurationTasks."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Billing summary by project",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Update any mutable field on a task; only provided fields are patched, updatedAt auto-set. Returns { taskId, updated: true }. WHEN: use to reassign, reprioritize, or add context to an existing task without recreating it. EXAMPLE: update_task taskId='k178d3ns...' status='review' callerOrchestrator='alpha'. NOTE: on a [REVIEW] task, the orchestrator that most recently reassigned it away (lastAssignedTo) may reclaim it by setting assignedTo back to itself.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to update: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
title
A new title. Omit to keep the current one.
Clear enough to supply this argument.
description
A new brief, replacing the current one. Omit to keep it.
Clear enough to supply this argument.
project
The billing line the task moves to: the same project name create_task took (surrounding spaces trimmed, an empty one refused), which billing_summary_by_project groups done tasks by. Omit to keep the current one.
Clear enough to supply this argument.
tags
New tags, replacing the whole list. Omit to keep the current tags.
Clear enough to supply this argument.
assignedTo
Reassign to this orchestrator by name. Omit to keep the assignee. The previous assignee is remembered so a reviewer can reclaim a [REVIEW] task.
Clear enough to supply this argument.
assignedToAgentId
The agent who does the work from now on, named by agent ID (the agentId list_peers returns); the previous assignee is remembered. Given, the ID alone decides, and an ID that is not an active agent of the task's organisation is refused. Omit to resolve from assignedTo, or to keep the assignee.
Clear enough to supply this argument.
priority
A new priority. Omit to keep the current one.
Clear enough to supply this argument.
status
A new state. Omit to keep it. Blocking goes through block_task and failing through fail_task, each with its own evidence gate; setting done re-stamps completedAt.
Clear enough to supply this argument.
dependsOn
The complete new list of prerequisite taskIds (from list_tasks), replacing the current one; an empty list clears it. Omit to keep it. To add without replacing, use add_task_dependency.
Clear enough to supply this argument.
missionId
Link the task to this mission: its missionId from list_missions. Omit to keep the current link.
Clear enough to supply this argument.
estimatedMinutes
A new estimate, in minutes. Omit to keep it.
Clear enough to supply this argument.
actualMinutes
Recorded actual duration, in minutes. Omit to keep it; on done it is otherwise derived from the work segments.
Clear enough to supply this argument.
startedAt
The moment work started (a millisecond timestamp, as Date.now() gives). Omit to keep it.
Clear enough to supply this argument.
completedAt
The moment work completed (a millisecond timestamp, as Date.now() gives); billing counts the task in the period holding it. Omit to keep it (on done it is set to now).
Clear enough to supply this argument.
dueDate
The new moment the work is due (a millisecond timestamp, as Date.now() gives). Omit to keep it.
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused.
Clear enough to supply this argument.
cancelReason
Why the task is cancelled; required when status is cancelled, and only the task's creator (or 'system') may cancel. Omit for any other change.
Clear enough to supply this argument.
deliverable › pkg
Which npm package the task is meant to publish, e.g. '@vantageos/widget': the backend watches the npm registry for it to tell when the work has in fact shipped.
Clear enough to supply this argument.
deliverable › export
The name the published package must export, e.g. 'WidgetPanel': once a published version exports it while the task is still open, get_task reports deliverableDivergence='delivered-but-open', the cue that the task is in fact done.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"updated"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"updated": {
"type": "boolean",
"description": "True: the changes were written."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_task",
"description": "Update any mutable field on a task; only provided fields are patched, updatedAt auto-set. Returns { taskId, updated: true }. WHEN: use to reassign, reprioritize, or add context to an existing task without recreating it. EXAMPLE: update_task taskId='k178d3ns...' status='review' callerOrchestrator='alpha'. NOTE: on a [REVIEW] task, the orchestrator that most recently reassigned it away (lastAssignedTo) may reclaim it by setting assignedTo back to itself.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "New tags, replacing the whole list. Omit to keep the current tags."
},
"title": {
"type": "string",
"description": "A new title. Omit to keep the current one."
},
"status": {
"enum": [
"todo",
"in_progress",
"review",
"done",
"cancelled"
],
"type": "string",
"description": "A new state. Omit to keep it. Blocking goes through block_task and failing through fail_task, each with its own evidence gate; setting done re-stamps completedAt."
},
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to update: its taskId as returned by create_task, list_tasks or get_task."
},
"dueDate": {
"type": "number",
"description": "The new moment the work is due (a millisecond timestamp, as Date.now() gives). Omit to keep it."
},
"project": {
"type": "string",
"description": "The billing line the task moves to: the same project name create_task took (surrounding spaces trimmed, an empty one refused), which billing_summary_by_project groups done tasks by. Omit to keep the current one."
},
"priority": {
"enum": [
"urgent",
"high",
"medium",
"low"
],
"type": "string",
"description": "A new priority. Omit to keep the current one."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{32}$"
},
"description": "The complete new list of prerequisite taskIds (from list_tasks), replacing the current one; an empty list clears it. Omit to keep it. To add without replacing, use add_task_dependency."
},
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "Link the task to this mission: its missionId from list_missions. Omit to keep the current link."
},
"startedAt": {
"type": "number",
"description": "The moment work started (a millisecond timestamp, as Date.now() gives). Omit to keep it."
},
"assignedTo": {
"type": "string",
"description": "Reassign to this orchestrator by name. Omit to keep the assignee. The previous assignee is remembered so a reviewer can reclaim a [REVIEW] task."
},
"completedAt": {
"type": "number",
"description": "The moment work completed (a millisecond timestamp, as Date.now() gives); billing counts the task in the period holding it. Omit to keep it (on done it is set to now)."
},
"deliverable": {
"type": "object",
"required": [
"pkg",
"export"
],
"properties": {
"pkg": {
"type": "string",
"maxLength": 214,
"minLength": 1,
"description": "Which npm package the task is meant to publish, e.g. '@vantageos/widget': the backend watches the npm registry for it to tell when the work has in fact shipped."
},
"export": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The name the published package must export, e.g. 'WidgetPanel': once a published version exports it while the task is still open, get_task reports deliverableDivergence='delivered-but-open', the cue that the task is in fact done."
}
},
"description": "The artifact the task delivers (today an npm export); setting it re-checks the npm registry. Omit to keep the current one.",
"additionalProperties": false
},
"description": {
"type": "string",
"description": "A new brief, replacing the current one. Omit to keep it."
},
"cancelReason": {
"type": "string",
"description": "Why the task is cancelled; required when status is cancelled, and only the task's creator (or 'system') may cancel. Omit for any other change."
},
"actualMinutes": {
"type": "number",
"description": "Recorded actual duration, in minutes. Omit to keep it; on done it is otherwise derived from the work segments."
},
"estimatedMinutes": {
"type": "number",
"description": "A new estimate, in minutes. Omit to keep it."
},
"assignedToAgentId": {
"type": "string",
"minLength": 1,
"description": "The agent who does the work from now on, named by agent ID (the agentId list_peers returns); the previous assignee is remembered. Given, the ID alone decides, and an ID that is not an active agent of the task's organisation is refused. Omit to resolve from assignedTo, or to keep the assignee."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"updated"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"updated": {
"type": "boolean",
"description": "True: the changes were written."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Mark a task as done with a mandatory completionNote; always notify the creator via send_message after. Returns { taskId, status: 'done' }. WHEN: call when all deliverables are committed or verified — never complete without a proof token in the note. EXAMPLE: complete_task taskId='k178d3ns...' completionNote='PR #667 merged, 86 descriptions updated' callerOrchestrator='beta'.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to complete: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
completionNote
What was actually done, with a verifiable proof (a PR, a commit SHA, a test count).
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused. A signed-in person may omit it and acts in its own name.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "complete_task",
"description": "Mark a task as done with a mandatory completionNote; always notify the creator via send_message after. Returns { taskId, status: 'done' }. WHEN: call when all deliverables are committed or verified — never complete without a proof token in the note. EXAMPLE: complete_task taskId='k178d3ns...' completionNote='PR #667 merged, 86 descriptions updated' callerOrchestrator='beta'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"completionNote"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to complete: its taskId as returned by create_task, list_tasks or get_task."
},
"completionNote": {
"type": "string",
"description": "What was actually done, with a verifiable proof (a PR, a commit SHA, a test count)."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused. A signed-in person may omit it and acts in its own name."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Complete task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Mark a task as failed (a terminal state distinct from done/cancelled) with a mandatory failureNote describing how the work ended. Returns { taskId, status: 'failed' }. WHEN: use when the work was genuinely attempted and did not succeed — never call complete_task to close out failed work, and never call update_task with status="failed" (refused server-side; this tool is the only door). A task already done/cancelled cannot be re-terminated as failed. EXAMPLE: fail_task taskId='k178d3ns...' failureNote='Migration errored on row 4102, rolled back cleanly' callerOrchestrator='beta'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to fail: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
failureNote
How the work ended in failure: what was attempted and why it did not succeed.
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "fail_task",
"description": "Mark a task as failed (a terminal state distinct from done/cancelled) with a mandatory failureNote describing how the work ended. Returns { taskId, status: 'failed' }. WHEN: use when the work was genuinely attempted and did not succeed — never call complete_task to close out failed work, and never call update_task with status=\"failed\" (refused server-side; this tool is the only door). A task already done/cancelled cannot be re-terminated as failed. EXAMPLE: fail_task taskId='k178d3ns...' failureNote='Migration errored on row 4102, rolled back cleanly' callerOrchestrator='beta'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"failureNote"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to fail: its taskId as returned by create_task, list_tasks or get_task."
},
"failureNote": {
"type": "string",
"description": "How the work ended in failure: what was attempted and why it did not succeed."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Fail task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Set a task to in_progress and record the startedAt timestamp for duration tracking. Returns { taskId, status: 'in_progress' }. WHEN: call as the first action when picking up a task to signal activity and enable metrics. EXAMPLE: start_task taskId='k178d3ns...' callerOrchestrator='gamma'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to start: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused. A signed-in person may omit it and acts in its own name.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "start_task",
"description": "Set a task to in_progress and record the startedAt timestamp for duration tracking. Returns { taskId, status: 'in_progress' }. WHEN: call as the first action when picking up a task to signal activity and enable metrics. EXAMPLE: start_task taskId='k178d3ns...' callerOrchestrator='gamma'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to start: its taskId as returned by create_task, list_tasks or get_task."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused. A signed-in person may omit it and acts in its own name."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Start task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Close the task's open work segment and stop the duration clock, without ending the task. Paused is not blocked: the task remains claimable work, just off the clock until resumed. Returns { taskId, status: 'todo' }. WHEN: call before stepping away from an in_progress task so its billed duration doesn't keep accruing while idle. EXAMPLE: pause_task taskId='b2v9k4x7p1m6q0z3w8n5r2t4y7c1u9df' callerOrchestrator='gamma'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to pause: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "pause_task",
"description": "Close the task's open work segment and stop the duration clock, without ending the task. Paused is not blocked: the task remains claimable work, just off the clock until resumed. Returns { taskId, status: 'todo' }. WHEN: call before stepping away from an in_progress task so its billed duration doesn't keep accruing while idle. EXAMPLE: pause_task taskId='b2v9k4x7p1m6q0z3w8n5r2t4y7c1u9df' callerOrchestrator='gamma'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to pause: its taskId as returned by create_task, list_tasks or get_task."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Pause task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Open a new work segment on a paused task and set it back to in_progress. Returns { taskId, status: 'in_progress' }. WHEN: call after pause_task to resume the clock on the same task. EXAMPLE: resume_task taskId='b2v9k4x7p1m6q0z3w8n5r2t4y7c1u9df' callerOrchestrator='gamma'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to resume: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "resume_task",
"description": "Open a new work segment on a paused task and set it back to in_progress. Returns { taskId, status: 'in_progress' }. WHEN: call after pause_task to resume the clock on the same task. EXAMPLE: resume_task taskId='b2v9k4x7p1m6q0z3w8n5r2t4y7c1u9df' callerOrchestrator='gamma'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to resume: its taskId as returned by create_task, list_tasks or get_task."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status the task is in after this call."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Resume task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Restate the real boundaries of ONE recorded work segment, when it grew across an unrecorded break (e.g. a station's session ended without pause_task and the segment stayed open for days). The original machine-recorded span is kept, never overwritten: the corrected segment stores the original bounds, the reason and who corrected it, and get_task shows them in workSegments. A correction can only SHRINK a span to lie inside what the machine recorded; it can never extend it or move it outside that span, and the configured segment-duration cap still applies. One correction per segment. Returns { taskId, segmentIndex, corrected: true }. WHEN: call when complete_task/pause_task refuse a task because its trailing segment spans an implausible duration and the over-cap attestation marker doesn't fit (span exceeds 2x the cap, or the segment is still open) — correct the segment first, then complete_task or pause_task normally. EXAMPLE: correct_task_segment taskId='k178d3ns...' segmentIndex=0 start=1767250800000 end=1767268800000 reason='unrecorded break, real work was 5 hours' callerOrchestrator='gamma'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
taskId
The task to correct: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
segmentIndex
Which work segment to correct: its position in the workSegments list get_task returns, the first listed being 0.
Clear enough to supply this argument.
start
The moment the work in this segment really started (a millisecond timestamp, as Date.now() gives); it can only move later than the recorded start.
Clear enough to supply this argument.
end
The moment the work in this segment really ended (a millisecond timestamp, as Date.now() gives); it can only move earlier than the recorded end (or now, if the segment is still open).
Clear enough to supply this argument.
reason
Why the segment is corrected, written for a later reviewer, e.g. 'unrecorded break, real work was 5 hours'; it is stored on the segment beside the recorded and corrected times.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused. It is recorded as who corrected the segment.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"segmentIndex",
"corrected"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"corrected": {
"type": "boolean",
"description": "True: the segment and the task's measured time were rewritten."
},
"segmentIndex": {
"type": "number",
"description": "Which work segment was corrected (0 is the first)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "correct_task_segment",
"description": "Restate the real boundaries of ONE recorded work segment, when it grew across an unrecorded break (e.g. a station's session ended without pause_task and the segment stayed open for days). The original machine-recorded span is kept, never overwritten: the corrected segment stores the original bounds, the reason and who corrected it, and get_task shows them in workSegments. A correction can only SHRINK a span to lie inside what the machine recorded; it can never extend it or move it outside that span, and the configured segment-duration cap still applies. One correction per segment. Returns { taskId, segmentIndex, corrected: true }. WHEN: call when complete_task/pause_task refuse a task because its trailing segment spans an implausible duration and the over-cap attestation marker doesn't fit (span exceeds 2x the cap, or the segment is still open) — correct the segment first, then complete_task or pause_task normally. EXAMPLE: correct_task_segment taskId='k178d3ns...' segmentIndex=0 start=1767250800000 end=1767268800000 reason='unrecorded break, real work was 5 hours' callerOrchestrator='gamma'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"segmentIndex",
"start",
"end",
"reason"
],
"properties": {
"end": {
"type": "number",
"description": "The moment the work in this segment really ended (a millisecond timestamp, as Date.now() gives); it can only move earlier than the recorded end (or now, if the segment is still open)."
},
"start": {
"type": "number",
"description": "The moment the work in this segment really started (a millisecond timestamp, as Date.now() gives); it can only move later than the recorded start."
},
"reason": {
"type": "string",
"pattern": "^\\s*(?:\\S\\s*){12}",
"description": "Why the segment is corrected, written for a later reviewer, e.g. 'unrecorded break, real work was 5 hours'; it is stored on the segment beside the recorded and corrected times."
},
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to correct: its taskId as returned by create_task, list_tasks or get_task."
},
"segmentIndex": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Which work segment to correct: its position in the workSegments list get_task returns, the first listed being 0."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused. It is recorded as who corrected the segment."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"segmentIndex",
"corrected"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"corrected": {
"type": "boolean",
"description": "True: the segment and the task's measured time were rewritten."
},
"segmentIndex": {
"type": "number",
"description": "Which work segment was corrected (0 is the first)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Correct task segment",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Atomically claim a todo task, preventing race conditions when multiple orchestrators compete. Returns { claimed: true, reason? } when the claim succeeds, or { claimed: false, reason } when the task is not claimable (not todo, paused, or carrying an open work segment); nothing is written then. WHEN: use before start_task in multi-orchestrator queues to ensure exclusive ownership. EXAMPLE: checkout_task taskId='k178d3ns...' callerOrchestrator='alpha' callerInstance='alpha-vps'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to claim: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
callerOrchestrator
The agent claiming the task. Omit it when your credential resolves one agent: the claim is then checked as that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
callerInstance
Your instance, e.g. 'sigma-vps', recorded as the claiming instance. Omit when you run as a single instance.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Claim a task to work on",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema90/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"claimed"
],
"properties": {
"reason": {
"type": "string",
"description": "Why the claim failed (not found, paused, already has an open work segment, not todo); absent when claimed."
},
"claimed": {
"type": "boolean",
"description": "True when the task is now yours and in progress; false when it could not be claimed (nothing was written)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "checkout_task",
"description": "Atomically claim a todo task, preventing race conditions when multiple orchestrators compete. Returns { claimed: true, reason? } when the claim succeeds, or { claimed: false, reason } when the task is not claimable (not todo, paused, or carrying an open work segment); nothing is written then. WHEN: use before start_task in multi-orchestrator queues to ensure exclusive ownership. EXAMPLE: checkout_task taskId='k178d3ns...' callerOrchestrator='alpha' callerInstance='alpha-vps'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to claim: its taskId as returned by create_task, list_tasks or get_task."
},
"callerInstance": {
"type": "string",
"description": "Your instance, e.g. 'sigma-vps', recorded as the claiming instance. Omit when you run as a single instance."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent claiming the task. Omit it when your credential resolves one agent: the claim is then checked as that agent. Otherwise omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"claimed"
],
"properties": {
"reason": {
"type": "string",
"description": "Why the claim failed (not found, paused, already has an open work segment, not todo); absent when claimed."
},
"claimed": {
"type": "boolean",
"description": "True when the task is now yours and in progress; false when it could not be claimed (nothing was written)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Claim a task to work on",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Permanently delete a task; only the creator or system role may delete. Returns { deleted: true }. WHEN: use to remove erroneously created tasks or test artifacts — prefer complete_task for real work. EXAMPLE: delete_task taskId='k178d3ns...' callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to delete: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
callerOrchestrator
The agent deleting; it must be the task's creator (or 'system'). Omit it when your credential resolves one agent: it is then that agent. A signed-in organisation admin may also omit it; anyone else omitting it is refused.
{
"name": "delete_task",
"description": "Permanently delete a task; only the creator or system role may delete. Returns { deleted: true }. WHEN: use to remove erroneously created tasks or test artifacts — prefer complete_task for real work. EXAMPLE: delete_task taskId='k178d3ns...' callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to delete: its taskId as returned by create_task, list_tasks or get_task."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent deleting; it must be the task's creator (or 'system'). Omit it when your credential resolves one agent: it is then that agent. A signed-in organisation admin may also omit it; anyone else omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"deleted"
],
"properties": {
"deleted": {
"type": "boolean",
"description": "True: the row was deleted."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Delete task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Mark a task as blocked with an optional reason and blocking task IDs, setting status to blocked. Returns { taskId, status: 'blocked', reason, blockedOnTaskId, blockedCause, dependsOn? }; dependsOn is the full resulting list and appears only when blockedBy was given. WHEN: use when external dependency or missing input prevents progress — record the specific blocker. A block is a commitment, not just a journal entry: cite blockedOnTaskId (a live task owned by someone else) so the responder is charged to unblock you, OR mark the reason with '# blocked-on-nobody: <reason>' when nobody in the fleet owns the obstacle. Pass blockedCause to say WHAT you are waiting on ('human' — an operator decision/answer; 'authorisation' — a merge/publish/approval gate; 'peer_task' — a plain upstream dependency; 'other' if none apply) so waiting-on state is derivable, never a free-text guess. EXAMPLE: block_task taskId='k178d3ns...' blockedOnTaskId='k17bbbbb...' blockedCause='authorisation' reason='Waiting for B2 PR#667 merge' callerOrchestrator='beta'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to block: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
reason
Why the task is blocked. Omit it only when blockedOnTaskId is given; without a blocker it must carry the marker '# blocked-on-nobody: <reason>'.
Clear enough to supply this argument.
blockedBy
Prerequisite taskIds (from list_tasks) to add to the task's dependsOn; appended, de-duplicated, nothing removed. Omit to leave dependsOn as it is.
Clear enough to supply this argument.
blockedOnTaskId
The live task, owned by someone else, that this one waits on: its taskId from list_tasks. Omit it only when reason carries the '# blocked-on-nobody:' marker.
Clear enough to supply this argument.
blockedCause
What is being waited on: peer_task (an upstream task), human (an operator decision), authorisation (a merge, publish or approval gate), or other.
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status",
"reason",
"blockedCause"
],
"properties": {
"reason": {
"type": "string",
"description": "The block reason, as recorded."
},
"status": {
"type": "string",
"description": "The task's status after this call: blocked."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "The task's full dependency list after this call; present only when blockedBy was given."
},
"blockedCause": {
"type": "string",
"description": "What the task waits on: peer_task, human, authorisation or other."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on; absent when the block names no task."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "block_task",
"description": "Mark a task as blocked with an optional reason and blocking task IDs, setting status to blocked. Returns { taskId, status: 'blocked', reason, blockedOnTaskId, blockedCause, dependsOn? }; dependsOn is the full resulting list and appears only when blockedBy was given. WHEN: use when external dependency or missing input prevents progress — record the specific blocker. A block is a commitment, not just a journal entry: cite blockedOnTaskId (a live task owned by someone else) so the responder is charged to unblock you, OR mark the reason with '# blocked-on-nobody: <reason>' when nobody in the fleet owns the obstacle. Pass blockedCause to say WHAT you are waiting on ('human' — an operator decision/answer; 'authorisation' — a merge/publish/approval gate; 'peer_task' — a plain upstream dependency; 'other' if none apply) so waiting-on state is derivable, never a free-text guess. EXAMPLE: block_task taskId='k178d3ns...' blockedOnTaskId='k17bbbbb...' blockedCause='authorisation' reason='Waiting for B2 PR#667 merge' callerOrchestrator='beta'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"reason": {
"type": "string",
"description": "Why the task is blocked. Omit it only when blockedOnTaskId is given; without a blocker it must carry the marker '# blocked-on-nobody: <reason>'."
},
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to block: its taskId as returned by create_task, list_tasks or get_task."
},
"blockedBy": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{32}$"
},
"description": "Prerequisite taskIds (from list_tasks) to add to the task's dependsOn; appended, de-duplicated, nothing removed. Omit to leave dependsOn as it is."
},
"blockedCause": {
"anyOf": [
{
"type": "string",
"const": "peer_task"
},
{
"type": "string",
"const": "human"
},
{
"type": "string",
"const": "authorisation"
},
{
"type": "string",
"const": "other"
}
],
"default": "other",
"description": "What is being waited on: peer_task (an upstream task), human (an operator decision), authorisation (a merge, publish or approval gate), or other."
},
"blockedOnTaskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The live task, owned by someone else, that this one waits on: its taskId from list_tasks. Omit it only when reason carries the '# blocked-on-nobody:' marker."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"status",
"reason",
"blockedCause"
],
"properties": {
"reason": {
"type": "string",
"description": "The block reason, as recorded."
},
"status": {
"type": "string",
"description": "The task's status after this call: blocked."
},
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "The task's full dependency list after this call; present only when blockedBy was given."
},
"blockedCause": {
"type": "string",
"description": "What the task waits on: peer_task, human, authorisation or other."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on; absent when the block names no task."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Block task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Add dependency task IDs to a task so it cannot start until all listed tasks complete. APPENDS: the new IDs are merged into the task's existing dependsOn (deduplicated, existing first) and the full resulting list is returned; nothing already there is removed. Each ID must be an existing task of the same organisation; a self-dependency or a cycle is refused. To REPLACE the whole list use update_task dependsOn. Returns { taskId, dependsOn, updated: true } with the full resulting list. WHEN: use when creating a task that depends on prior work not yet captured in dependsOn. EXAMPLE: add_task_dependency taskId='k178d3ns...' dependsOn=['k17bbbbb...'] callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to make dependent: its taskId as returned by create_task, list_tasks or get_task.
Clear enough to supply this argument.
dependsOn
The prerequisite tasks to add: their taskIds as returned by create_task or list_tasks.
Clear enough to supply this argument.
callerOrchestrator
The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"dependsOn",
"updated"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"updated": {
"type": "boolean",
"description": "True: the list was written."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "The task's full dependency list after this call (earlier ones kept)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "add_task_dependency",
"description": "Add dependency task IDs to a task so it cannot start until all listed tasks complete. APPENDS: the new IDs are merged into the task's existing dependsOn (deduplicated, existing first) and the full resulting list is returned; nothing already there is removed. Each ID must be an existing task of the same organisation; a self-dependency or a cycle is refused. To REPLACE the whole list use update_task dependsOn. Returns { taskId, dependsOn, updated: true } with the full resulting list. WHEN: use when creating a task that depends on prior work not yet captured in dependsOn. EXAMPLE: add_task_dependency taskId='k178d3ns...' dependsOn=['k17bbbbb...'] callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"dependsOn"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to make dependent: its taskId as returned by create_task, list_tasks or get_task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{32}$"
},
"description": "The prerequisite tasks to add: their taskIds as returned by create_task or list_tasks."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent acting on this task; it must be the task's creator or assignee. Omit it when your credential resolves one agent: the call then acts as that agent. Without a resolved agent, omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"dependsOn",
"updated"
],
"properties": {
"taskId": {
"type": "string",
"description": "The task this result is about."
},
"updated": {
"type": "boolean",
"description": "True: the list was written."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "The task's full dependency list after this call (earlier ones kept)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Add task dependency",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List all tasks linked to a mission, optionally filtered by status, newest first. Returns { items[{ _id, _creationTime, title, assignedTo, priority, status }], nextCursor, truncated, scopeFiltered? }: items are tasks, newest first; nextCursor is the next page's cursor, null on the last page; scopeFiltered counts rows withheld by scope; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the tasks, or { items, nextCursor?, scopeFiltered? } when another page exists or rows were withheld. WHEN: use to review mission progress or find blocked/open tasks within a specific mission. status shorthands: open is todo, in_progress, review and blocked; active is todo and in_progress; all applies no filter. EXAMPLE: list_tasks_by_mission missionId='k57a36y8...' status=['in_progress'] limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
missionId
The mission to list: its missionId as returned by create_mission or list_missions.
Clear enough to supply this argument.
status
Keep tasks in any of these states; a shorthand for a set of states (the tool description says which) is the only entry of its list. Without it, every state.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
How much of each row comes back: lite is each task's ID, creation time, title, status, priority, assignee and mission, enough to pick a row for fewer tokens; full is every stored field.
Clear enough to supply this argument.
createdBy
Keep only tasks created by this orchestrator. Omit for every creator.
Clear enough to supply this argument.
updatedSince
The moment from which changes count: keep only tasks last updated at or after it (a millisecond timestamp, as Date.now() gives; Date.now() minus 86400000 for the last day). Omit for no time window.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_tasks_by_mission call returned, to fetch the following (older) page. Omit for the first page.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
},
"description": "The mission's tasks, newest first; lite rows carry _id, _creationTime, title, status, priority, assignedTo and missionId, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
},
"scopeFiltered": {
"type": "number",
"description": "How many rows of your own organisation on this page your session may not see and were left out; absent when none were."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_tasks_by_mission",
"description": "List all tasks linked to a mission, optionally filtered by status, newest first. Returns { items[{ _id, _creationTime, title, assignedTo, priority, status }], nextCursor, truncated, scopeFiltered? }: items are tasks, newest first; nextCursor is the next page's cursor, null on the last page; scopeFiltered counts rows withheld by scope; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the tasks, or { items, nextCursor?, scopeFiltered? } when another page exists or rows were withheld. WHEN: use to review mission progress or find blocked/open tasks within a specific mission. status shorthands: open is todo, in_progress, review and blocked; active is todo and in_progress; all applies no filter. EXAMPLE: list_tasks_by_mission missionId='k57a36y8...' status=['in_progress'] limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_tasks_by_mission call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "lite",
"description": "How much of each row comes back: lite is each task's ID, creation time, title, status, priority, assignee and mission, enough to pick a row for fewer tokens; full is every stored field."
},
"status": {
"type": "array",
"items": {
"enum": [
"todo",
"in_progress",
"review",
"blocked",
"done",
"cancelled",
"failed",
"open",
"active",
"all"
],
"type": "string"
},
"minItems": 1,
"description": "Keep tasks in any of these states; a shorthand for a set of states (the tool description says which) is the only entry of its list. Without it, every state."
},
"createdBy": {
"type": "string",
"description": "Keep only tasks created by this orchestrator. Omit for every creator."
},
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The mission to list: its missionId as returned by create_mission or list_missions."
},
"updatedSince": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The moment from which changes count: keep only tasks last updated at or after it (a millisecond timestamp, as Date.now() gives; Date.now() minus 86400000 for the last day). Omit for no time window.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
},
"description": "The mission's tasks, newest first; lite rows carry _id, _creationTime, title, status, priority, assignedTo and missionId, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
},
"scopeFiltered": {
"type": "number",
"description": "How many rows of your own organisation on this page your session may not see and were left out; absent when none were."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List tasks by mission",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Create a mission grouping related tasks under a project with a pilot orchestrator and agent list. Returns { missionId, name, project, pilot, status }; pass missionId to create_task or instantiate_template_into_mission. WHEN: use when starting a multi-task initiative that needs lifecycle tracking and progress reporting. EXAMPLE: create_mission name='Day 92 C3' project='vantage-peers' pilot='alpha' agents=['beta','gamma'] priority='high' createdBy='alpha'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
name
A short name for the initiative, shown in mission lists.
Clear enough to supply this argument.
description
What the mission is about. Omit for a name-only mission.
Clear enough to supply this argument.
project
The project the mission belongs to, e.g. 'vantage-peers'.
Clear enough to supply this argument.
status
Where in its lifecycle the new mission begins.
Clear enough to supply this argument.
priority
How urgent the mission is, a label list_missions and get_mission show; its tasks keep their own priority.
Clear enough to supply this argument.
pilot
The orchestrator leading the mission, by name, e.g. 'alpha'; list_peers shows who exists.
Clear enough to supply this argument.
agents
The orchestrators taking part, by name, e.g. ['beta', 'gamma'].
Clear enough to supply this argument.
brief
The mission brief: goals, constraints, definition of done. Omit to add it later (a template can supply it).
Clear enough to supply this argument.
startDate
The moment work on the mission is planned to start (a millisecond timestamp, as Date.now() gives). Omit when not planned.
Clear enough to supply this argument.
targetDate
The moment the mission is meant to be finished by (a millisecond timestamp, as Date.now() gives). Omit for no target.
Clear enough to supply this argument.
progress
How far the mission is, as a percentage. Omit to start at none.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the mission's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId",
"name",
"project",
"pilot",
"status"
],
"properties": {
"name": {
"type": "string",
"description": "The mission's name, as stored."
},
"pilot": {
"type": "string",
"description": "Who pilots the mission."
},
"status": {
"type": "string",
"description": "The status the mission was created in."
},
"project": {
"type": "string",
"description": "The project the mission belongs to."
},
"missionId": {
"type": "string",
"description": "The new mission's ID: create_task and instantiate_template_into_mission take it."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "create_mission",
"description": "Create a mission grouping related tasks under a project with a pilot orchestrator and agent list. Returns { missionId, name, project, pilot, status }; pass missionId to create_task or instantiate_template_into_mission. WHEN: use when starting a multi-task initiative that needs lifecycle tracking and progress reporting. EXAMPLE: create_mission name='Day 92 C3' project='vantage-peers' pilot='alpha' agents=['beta','gamma'] priority='high' createdBy='alpha'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"project",
"priority",
"pilot",
"agents"
],
"properties": {
"name": {
"type": "string",
"description": "A short name for the initiative, shown in mission lists."
},
"brief": {
"type": "string",
"description": "The mission brief: goals, constraints, definition of done. Omit to add it later (a template can supply it)."
},
"pilot": {
"type": "string",
"description": "The orchestrator leading the mission, by name, e.g. 'alpha'; list_peers shows who exists."
},
"agents": {
"type": "array",
"items": {
"type": "string"
},
"description": "The orchestrators taking part, by name, e.g. ['beta', 'gamma']."
},
"status": {
"enum": [
"brainstorm",
"plan",
"execute",
"validate",
"complete",
"cancelled"
],
"type": "string",
"default": "brainstorm",
"description": "Where in its lifecycle the new mission begins."
},
"project": {
"type": "string",
"description": "The project the mission belongs to, e.g. 'vantage-peers'."
},
"priority": {
"enum": [
"urgent",
"high",
"medium",
"low"
],
"type": "string",
"description": "How urgent the mission is, a label list_missions and get_mission show; its tasks keep their own priority."
},
"progress": {
"type": "number",
"description": "How far the mission is, as a percentage. Omit to start at none."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the mission's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused."
},
"startDate": {
"type": "number",
"description": "The moment work on the mission is planned to start (a millisecond timestamp, as Date.now() gives). Omit when not planned."
},
"targetDate": {
"type": "number",
"description": "The moment the mission is meant to be finished by (a millisecond timestamp, as Date.now() gives). Omit for no target."
},
"description": {
"type": "string",
"description": "What the mission is about. Omit for a name-only mission."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId",
"name",
"project",
"pilot",
"status"
],
"properties": {
"name": {
"type": "string",
"description": "The mission's name, as stored."
},
"pilot": {
"type": "string",
"description": "Who pilots the mission."
},
"status": {
"type": "string",
"description": "The status the mission was created in."
},
"project": {
"type": "string",
"description": "The project the mission belongs to."
},
"missionId": {
"type": "string",
"description": "The new mission's ID: create_task and instantiate_template_into_mission take it."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Create mission",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List missions filtered by project, pilot, or status, newest first with cursor paging support. Returns { items[{ _id, _creationTime, name, status, pilot, priority, project }], nextCursor, truncated }: items are missions, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the missions on the last page, else { items, nextCursor }. WHEN: use to audit active missions, find missions by pilot, or check cross-project progress. status shorthands: open is brainstorm, plan, execute and validate; active is plan and execute; all applies no filter. A caller other than the fleet master must pass pilot equal to its own user ID, and is refused otherwise; only the fleet master lists every pilot. EXAMPLE: list_missions project='vantage-peers' status=['execute'] pilot='alpha' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Keep only missions of this project. Omit for every project.
Clear enough to supply this argument.
pilot
Keep only missions led by this orchestrator. Omit for every pilot.
Clear enough to supply this argument.
status
The mission stages to keep; a shorthand for a set of stages (the tool description says which) is the only entry of its list. Without it, every stage.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
How much of each row comes back: the short form is each mission's ID, creation time, name, status, pilot, priority and project; the other is every stored field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
updatedSince
The moment from which changes count: keep only missions last updated at or after it (a millisecond timestamp, as Date.now() gives; Date.now() minus 86400000 for the last day). Omit for no time window.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_missions call returned, to fetch the following (older) page. Omit for the first page.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"name",
"status",
"pilot",
"priority",
"project"
],
"properties": {
"_id": {
"type": "string",
"description": "The mission's ID: the missionId the mission tools take."
},
"name": {
"type": "string",
"description": "The mission's name."
},
"brief": {
"type": "string",
"description": "The mission brief; absent when none, and on lite rows."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this mission; absent on a fleet-owned mission."
},
"pilot": {
"type": "string",
"description": "The orchestrator leading the mission, by name."
},
"agents": {
"type": "array",
"items": {
"type": "string"
},
"description": "The orchestrators working on the mission, by name; absent on lite rows."
},
"status": {
"type": "string",
"description": "Which stage the mission is at: brainstorm, plan, execute, validate, complete or cancelled."
},
"project": {
"type": "string",
"description": "The project the mission belongs to."
},
"priority": {
"type": "string",
"description": "How urgent the mission is: urgent, high, medium or low."
},
"progress": {
"type": "number",
"description": "How far the mission has got, as a percentage; absent when never set, and on lite rows."
},
"createdAt": {
"type": "number",
"description": "When the mission was created (milliseconds since the Unix epoch); absent on lite rows."
},
"createdBy": {
"type": "string",
"description": "Who created the mission; absent on lite rows."
},
"updatedAt": {
"type": "number",
"description": "When the mission last changed (milliseconds since the Unix epoch); absent on lite rows."
},
"description": {
"type": "string",
"description": "What the mission is for; absent when none, and on lite rows."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The missions, newest first; lite rows carry _id, _creationTime, name, status, pilot, priority and project, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_missions",
"description": "List missions filtered by project, pilot, or status, newest first with cursor paging support. Returns { items[{ _id, _creationTime, name, status, pilot, priority, project }], nextCursor, truncated }: items are missions, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the missions on the last page, else { items, nextCursor }. WHEN: use to audit active missions, find missions by pilot, or check cross-project progress. status shorthands: open is brainstorm, plan, execute and validate; active is plan and execute; all applies no filter. A caller other than the fleet master must pass pilot equal to its own user ID, and is refused otherwise; only the fleet master lists every pilot. EXAMPLE: list_missions project='vantage-peers' status=['execute'] pilot='alpha' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"pilot": {
"type": "string",
"description": "Keep only missions led by this orchestrator. Omit for every pilot."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_missions call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "lite",
"description": "How much of each row comes back: the short form is each mission's ID, creation time, name, status, pilot, priority and project; the other is every stored field."
},
"status": {
"type": "array",
"items": {
"enum": [
"brainstorm",
"plan",
"execute",
"validate",
"complete",
"cancelled",
"open",
"active",
"all"
],
"type": "string"
},
"minItems": 1,
"description": "The mission stages to keep; a shorthand for a set of stages (the tool description says which) is the only entry of its list. Without it, every stage."
},
"project": {
"type": "string",
"description": "Keep only missions of this project. Omit for every project."
},
"updatedSince": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The moment from which changes count: keep only missions last updated at or after it (a millisecond timestamp, as Date.now() gives; Date.now() minus 86400000 for the last day). Omit for no time window.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"name",
"status",
"pilot",
"priority",
"project"
],
"properties": {
"_id": {
"type": "string",
"description": "The mission's ID: the missionId the mission tools take."
},
"name": {
"type": "string",
"description": "The mission's name."
},
"brief": {
"type": "string",
"description": "The mission brief; absent when none, and on lite rows."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this mission; absent on a fleet-owned mission."
},
"pilot": {
"type": "string",
"description": "The orchestrator leading the mission, by name."
},
"agents": {
"type": "array",
"items": {
"type": "string"
},
"description": "The orchestrators working on the mission, by name; absent on lite rows."
},
"status": {
"type": "string",
"description": "Which stage the mission is at: brainstorm, plan, execute, validate, complete or cancelled."
},
"project": {
"type": "string",
"description": "The project the mission belongs to."
},
"priority": {
"type": "string",
"description": "How urgent the mission is: urgent, high, medium or low."
},
"progress": {
"type": "number",
"description": "How far the mission has got, as a percentage; absent when never set, and on lite rows."
},
"createdAt": {
"type": "number",
"description": "When the mission was created (milliseconds since the Unix epoch); absent on lite rows."
},
"createdBy": {
"type": "string",
"description": "Who created the mission; absent on lite rows."
},
"updatedAt": {
"type": "number",
"description": "When the mission last changed (milliseconds since the Unix epoch); absent on lite rows."
},
"description": {
"type": "string",
"description": "What the mission is for; absent when none, and on lite rows."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The missions, newest first; lite rows carry _id, _creationTime, name, status, pilot, priority and project, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List missions",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Fetch a single mission by its ID with full details: status, pilot, agents, progress, start and target dates. Returns { found, item? { _id, _creationTime, name, project, status, priority, pilot, agents, createdBy, createdAt, updatedAt }, id? }: item is the mission document (status, pilot, agents, progress, startDate, targetDate, brief) when found is true, id the missionId asked for when found is false; the text is the mission as JSON, or null when it does not exist or is not visible to you. WHEN: use before assigning tasks or reporting to get the canonical mission state. EXAMPLE: get_mission missionId='k57a36y8w5t085bqr23dsmvb2d882506'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
missionId
The mission to fetch: its missionId as returned by create_mission or list_missions.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "The missionId that was asked for; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"name",
"project",
"status",
"priority",
"pilot",
"agents",
"createdBy",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The mission's ID: the missionId the mission tools take."
},
"name": {
"type": "string",
"description": "The mission's name."
},
"brief": {
"type": "string",
"description": "The mission brief; absent when none was given."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this mission; absent on a fleet-owned mission."
},
"pilot": {
"type": "string",
"description": "The orchestrator leading the mission, by name."
},
"agents": {
"type": "array",
"items": {
"type": "string"
},
"description": "The orchestrators working on the mission, by name."
},
"status": {
"type": "string",
"description": "Which stage the mission is at: brainstorm, plan, execute, validate, complete or cancelled."
},
"pilotId": {
"type": "string",
"description": "The permanent ID of the pilot: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"project": {
"type": "string",
"description": "The project the mission belongs to."
},
"agentIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The permanent IDs of the orchestrators in agents; absent on missions written before they were recorded."
},
"priority": {
"type": "string",
"description": "How urgent the mission is: urgent, high, medium or low."
},
"progress": {
"type": "number",
"description": "How far the mission has got, as a percentage; absent when never set."
},
"createdAt": {
"type": "number",
"description": "When the mission was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the mission."
},
"startDate": {
"type": "number",
"description": "When work is planned to start (milliseconds since the Unix epoch); absent when not set."
},
"updatedAt": {
"type": "number",
"description": "When the mission last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this mission (the slug can be renamed, this cannot); absent on a fleet-owned mission and on rows written before it was recorded."
},
"targetDate": {
"type": "number",
"description": "When the mission should be done (milliseconds since the Unix epoch); absent when not set."
},
"cancelledBy": {
"type": "string",
"description": "Who cancelled the mission; absent unless it is cancelled."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the creator: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"description": {
"type": "string",
"description": "What the mission is for; absent when none was given."
},
"lastActedBy": {
"type": "string",
"description": "The person ('user:<subject>') who last created, edited or cancelled the mission from the dashboard; absent when only agents did."
},
"cancelReason": {
"type": "string",
"description": "Why the mission was cancelled; absent unless it is cancelled."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"cancelledById": {
"type": "string",
"description": "The permanent ID of whoever cancelled it: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
}
},
"description": "The mission; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the mission exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the mission as JSON, or null."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_mission",
"description": "Fetch a single mission by its ID with full details: status, pilot, agents, progress, start and target dates. Returns { found, item? { _id, _creationTime, name, project, status, priority, pilot, agents, createdBy, createdAt, updatedAt }, id? }: item is the mission document (status, pilot, agents, progress, startDate, targetDate, brief) when found is true, id the missionId asked for when found is false; the text is the mission as JSON, or null when it does not exist or is not visible to you. WHEN: use before assigning tasks or reporting to get the canonical mission state. EXAMPLE: get_mission missionId='k57a36y8w5t085bqr23dsmvb2d882506'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId"
],
"properties": {
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The mission to fetch: its missionId as returned by create_mission or list_missions."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "The missionId that was asked for; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"name",
"project",
"status",
"priority",
"pilot",
"agents",
"createdBy",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The mission's ID: the missionId the mission tools take."
},
"name": {
"type": "string",
"description": "The mission's name."
},
"brief": {
"type": "string",
"description": "The mission brief; absent when none was given."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this mission; absent on a fleet-owned mission."
},
"pilot": {
"type": "string",
"description": "The orchestrator leading the mission, by name."
},
"agents": {
"type": "array",
"items": {
"type": "string"
},
"description": "The orchestrators working on the mission, by name."
},
"status": {
"type": "string",
"description": "Which stage the mission is at: brainstorm, plan, execute, validate, complete or cancelled."
},
"pilotId": {
"type": "string",
"description": "The permanent ID of the pilot: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"project": {
"type": "string",
"description": "The project the mission belongs to."
},
"agentIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The permanent IDs of the orchestrators in agents; absent on missions written before they were recorded."
},
"priority": {
"type": "string",
"description": "How urgent the mission is: urgent, high, medium or low."
},
"progress": {
"type": "number",
"description": "How far the mission has got, as a percentage; absent when never set."
},
"createdAt": {
"type": "number",
"description": "When the mission was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the mission."
},
"startDate": {
"type": "number",
"description": "When work is planned to start (milliseconds since the Unix epoch); absent when not set."
},
"updatedAt": {
"type": "number",
"description": "When the mission last changed (milliseconds since the Unix epoch)."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this mission (the slug can be renamed, this cannot); absent on a fleet-owned mission and on rows written before it was recorded."
},
"targetDate": {
"type": "number",
"description": "When the mission should be done (milliseconds since the Unix epoch); absent when not set."
},
"cancelledBy": {
"type": "string",
"description": "Who cancelled the mission; absent unless it is cancelled."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the creator: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"description": {
"type": "string",
"description": "What the mission is for; absent when none was given."
},
"lastActedBy": {
"type": "string",
"description": "The person ('user:<subject>') who last created, edited or cancelled the mission from the dashboard; absent when only agents did."
},
"cancelReason": {
"type": "string",
"description": "Why the mission was cancelled; absent unless it is cancelled."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"cancelledById": {
"type": "string",
"description": "The permanent ID of whoever cancelled it: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
}
},
"description": "The mission; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the mission exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the mission as JSON, or null."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get mission",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Update any mutable field on a mission. Each given field overwrites the stored value (agents is replaced whole, never appended); omitted fields are kept and updatedAt is set. Cancelling (status='cancelled') needs callerOrchestrator, the mission's creator or 'system', and a cancelReason; a complete mission cannot be cancelled. Returns { missionId, updated: true }. WHEN: use to advance status, update progress percentage, or change pilot/agents mid-flight. EXAMPLE: update_mission missionId='k57a36y8...' progress=75 status='validate'.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
missionId
The mission to update: its missionId as returned by create_mission or list_missions.
Clear enough to supply this argument.
name
The label list_missions and get_mission show; the mission keeps its missionId, so tasks and links to it are unaffected. Omit to keep it.
Clear enough to supply this argument.
description
A new description, replacing the current one. Omit to keep it.
Clear enough to supply this argument.
project
The project the mission files under: the same name create_mission took, which list_missions' project filter compares exactly; usually the billing line its tasks carry (billing reads each task's own project, not the mission's). Omit to keep it.
Clear enough to supply this argument.
status
Where the mission stands in its life, from first idea to closed; list_missions' status filter and its open and active shorthands read it. Moving it to cancelled needs callerOrchestrator and cancelReason. Omit to keep it.
Clear enough to supply this argument.
priority
How urgent the mission is, a label list_missions and get_mission show; nothing filters or orders by it and its tasks keep their own priority. Omit to keep it.
Clear enough to supply this argument.
pilot
A new lead orchestrator, by name. Omit to keep it.
Clear enough to supply this argument.
agents
The complete new list of participating orchestrators, replacing the current one. Omit to keep it.
Clear enough to supply this argument.
brief
A new brief, replacing the current one. Omit to keep it.
Clear enough to supply this argument.
startDate
The new moment work on the mission is planned to start (a millisecond timestamp, as Date.now() gives). Omit to keep it.
Clear enough to supply this argument.
targetDate
The new moment the mission is meant to be finished by (a millisecond timestamp, as Date.now() gives). Omit to keep it.
Clear enough to supply this argument.
progress
The new progress percentage. Omit to keep it.
Clear enough to supply this argument.
callerOrchestrator
The agent making the change; to cancel it must be the mission's creator (or 'system'). Omit it for any other change: a cancellation without it is refused unless a signed-in organisation admin makes it.
Clear enough to supply this argument.
cancelReason
Why the mission is cancelled; required with status cancelled. Omit for any other change.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId",
"updated"
],
"properties": {
"updated": {
"type": "boolean",
"description": "True: the changes were written."
},
"missionId": {
"type": "string",
"description": "The mission that was updated."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_mission",
"description": "Update any mutable field on a mission. Each given field overwrites the stored value (agents is replaced whole, never appended); omitted fields are kept and updatedAt is set. Cancelling (status='cancelled') needs callerOrchestrator, the mission's creator or 'system', and a cancelReason; a complete mission cannot be cancelled. Returns { missionId, updated: true }. WHEN: use to advance status, update progress percentage, or change pilot/agents mid-flight. EXAMPLE: update_mission missionId='k57a36y8...' progress=75 status='validate'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId"
],
"properties": {
"name": {
"type": "string",
"description": "The label list_missions and get_mission show; the mission keeps its missionId, so tasks and links to it are unaffected. Omit to keep it."
},
"brief": {
"type": "string",
"description": "A new brief, replacing the current one. Omit to keep it."
},
"pilot": {
"type": "string",
"description": "A new lead orchestrator, by name. Omit to keep it."
},
"agents": {
"type": "array",
"items": {
"type": "string"
},
"description": "The complete new list of participating orchestrators, replacing the current one. Omit to keep it."
},
"status": {
"enum": [
"brainstorm",
"plan",
"execute",
"validate",
"complete",
"cancelled"
],
"type": "string",
"description": "Where the mission stands in its life, from first idea to closed; list_missions' status filter and its open and active shorthands read it. Moving it to cancelled needs callerOrchestrator and cancelReason. Omit to keep it."
},
"project": {
"type": "string",
"description": "The project the mission files under: the same name create_mission took, which list_missions' project filter compares exactly; usually the billing line its tasks carry (billing reads each task's own project, not the mission's). Omit to keep it."
},
"priority": {
"enum": [
"urgent",
"high",
"medium",
"low"
],
"type": "string",
"description": "How urgent the mission is, a label list_missions and get_mission show; nothing filters or orders by it and its tasks keep their own priority. Omit to keep it."
},
"progress": {
"type": "number",
"description": "The new progress percentage. Omit to keep it."
},
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The mission to update: its missionId as returned by create_mission or list_missions."
},
"startDate": {
"type": "number",
"description": "The new moment work on the mission is planned to start (a millisecond timestamp, as Date.now() gives). Omit to keep it."
},
"targetDate": {
"type": "number",
"description": "The new moment the mission is meant to be finished by (a millisecond timestamp, as Date.now() gives). Omit to keep it."
},
"description": {
"type": "string",
"description": "A new description, replacing the current one. Omit to keep it."
},
"cancelReason": {
"type": "string",
"description": "Why the mission is cancelled; required with status cancelled. Omit for any other change."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent making the change; to cancel it must be the mission's creator (or 'system'). Omit it for any other change: a cancellation without it is refused unless a signed-in organisation admin makes it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId",
"updated"
],
"properties": {
"updated": {
"type": "boolean",
"description": "True: the changes were written."
},
"missionId": {
"type": "string",
"description": "The mission that was updated."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update mission",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Change a mission's lifecycle status in a single call without touching other fields. Served to the fleet master only: any other caller is refused. Returns { missionId, status }. WHEN: only the status changes; update_mission changes the other fields and records a cancelReason. EXAMPLE: update_mission_status missionId='k57a36y8...' status='complete'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
missionId
The mission to move: its missionId as returned by create_mission or list_missions.
Clear enough to supply this argument.
status
The stage the mission moves to, read by list_missions' status filter. Every stage is accepted here, cancelled included, and no cancel reason is recorded; a reopened (no longer cancelled) mission is accepted too.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The mission's status after this call."
},
"missionId": {
"type": "string",
"description": "The mission whose status was set."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_mission_status",
"description": "Change a mission's lifecycle status in a single call without touching other fields. Served to the fleet master only: any other caller is refused. Returns { missionId, status }. WHEN: only the status changes; update_mission changes the other fields and records a cancelReason. EXAMPLE: update_mission_status missionId='k57a36y8...' status='complete'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId",
"status"
],
"properties": {
"status": {
"enum": [
"brainstorm",
"plan",
"execute",
"validate",
"complete",
"cancelled"
],
"type": "string",
"description": "The stage the mission moves to, read by list_missions' status filter. Every stage is accepted here, cancelled included, and no cancel reason is recorded; a reopened (no longer cancelled) mission is accepted too."
},
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The mission to move: its missionId as returned by create_mission or list_missions."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"missionId",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The mission's status after this call."
},
"missionId": {
"type": "string",
"description": "The mission whose status was set."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update mission status",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Write or upsert a diary entry for a specific date and orchestrator with highlights and blockers. Returns { diaryId, date, orchestrator }; writing the same date again replaces that entry's content, highlights and blockers. WHEN: call at end of session to record what was accomplished, learned, and what blocked progress. EXAMPLE: write_diary date='2026-06-06' orchestrator='gamma' content='Standardized 86 descriptions...'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
date
The day the entry covers, as an ISO date, e.g. '2026-03-25'.
Clear enough to supply this argument.
orchestrator
Whose diary this is, e.g. 'gamma'. Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
content
The entry: what was done, learned and decided that day.
Clear enough to supply this argument.
highlights
The day's key points, one per item. Omit for none (an existing entry's list is cleared).
Clear enough to supply this argument.
blockers
What blocked progress, one per item. Omit for none (an existing entry's list is cleared).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"diaryId",
"date",
"orchestrator"
],
"properties": {
"date": {
"type": "string",
"description": "The day the entry is for, as given."
},
"diaryId": {
"type": "string",
"description": "The diary entry's ID."
},
"orchestrator": {
"type": "string",
"description": "Whose diary the entry belongs to."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "write_diary",
"description": "Write or upsert a diary entry for a specific date and orchestrator with highlights and blockers. Returns { diaryId, date, orchestrator }; writing the same date again replaces that entry's content, highlights and blockers. WHEN: call at end of session to record what was accomplished, learned, and what blocked progress. EXAMPLE: write_diary date='2026-06-06' orchestrator='gamma' content='Standardized 86 descriptions...'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"date",
"content"
],
"properties": {
"date": {
"type": "string",
"description": "The day the entry covers, as an ISO date, e.g. '2026-03-25'."
},
"content": {
"type": "string",
"description": "The entry: what was done, learned and decided that day."
},
"blockers": {
"type": "array",
"items": {
"type": "string"
},
"description": "What blocked progress, one per item. Omit for none (an existing entry's list is cleared)."
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "The day's key points, one per item. Omit for none (an existing entry's list is cleared)."
},
"orchestrator": {
"type": "string",
"description": "Whose diary this is, e.g. 'gamma'. Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"diaryId",
"date",
"orchestrator"
],
"properties": {
"date": {
"type": "string",
"description": "The day the entry is for, as given."
},
"diaryId": {
"type": "string",
"description": "The diary entry's ID."
},
"orchestrator": {
"type": "string",
"description": "Whose diary the entry belongs to."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Write diary entry",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Fetch the diary entry of one orchestrator for one date. Returns { found, item? { _id, _creationTime, date, orchestrator, content, createdAt }, id? }: item is the diary entry (content, highlights, blockers, createdBy) when found is true, id the '<orchestrator>/<date>' asked for when found is false; the text is the entry as JSON, or null when none exists for that date and orchestrator. WHEN: use to review what an orchestrator did on a given day for recap or handoff briefing. EXAMPLE: get_diary date='2026-06-06' orchestrator='alpha'.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
date
The day to read, as an ISO date, e.g. '2026-03-25'.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "What was asked for, as '<orchestrator>/<date>'; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"date",
"orchestrator",
"content",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The diary entry's ID."
},
"date": {
"type": "string",
"description": "The day the entry is for, as YYYY-MM-DD."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this entry; absent on a fleet-owned entry."
},
"content": {
"type": "string",
"description": "The diary entry itself."
},
"blockers": {
"type": "array",
"items": {
"type": "string"
},
"description": "What blocked the day; absent when none were given."
},
"createdAt": {
"type": "number",
"description": "When the entry was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the entry, as authenticated; absent on entries written before it was recorded."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this entry (the slug can be renamed, this cannot); absent on a fleet-owned entry and on rows written before it was recorded."
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "The day's highlights; absent when none were given."
},
"instanceId": {
"type": "string",
"description": "The instance that wrote it; absent when none was recorded."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the entry is about, by name."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"description": "The diary entry; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the diary entry exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the diary entry as JSON, or null."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_diary",
"description": "Fetch the diary entry of one orchestrator for one date. Returns { found, item? { _id, _creationTime, date, orchestrator, content, createdAt }, id? }: item is the diary entry (content, highlights, blockers, createdBy) when found is true, id the '<orchestrator>/<date>' asked for when found is false; the text is the entry as JSON, or null when none exists for that date and orchestrator. WHEN: use to review what an orchestrator did on a given day for recap or handoff briefing. EXAMPLE: get_diary date='2026-06-06' orchestrator='alpha'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"date",
"orchestrator"
],
"properties": {
"date": {
"type": "string",
"description": "The day to read, as an ISO date, e.g. '2026-03-25'."
},
"orchestrator": {
"type": "string",
"description": "Whose diary to read, e.g. 'alpha'."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "What was asked for, as '<orchestrator>/<date>'; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"date",
"orchestrator",
"content",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The diary entry's ID."
},
"date": {
"type": "string",
"description": "The day the entry is for, as YYYY-MM-DD."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this entry; absent on a fleet-owned entry."
},
"content": {
"type": "string",
"description": "The diary entry itself."
},
"blockers": {
"type": "array",
"items": {
"type": "string"
},
"description": "What blocked the day; absent when none were given."
},
"createdAt": {
"type": "number",
"description": "When the entry was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the entry, as authenticated; absent on entries written before it was recorded."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this entry (the slug can be renamed, this cannot); absent on a fleet-owned entry and on rows written before it was recorded."
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "The day's highlights; absent when none were given."
},
"instanceId": {
"type": "string",
"description": "The instance that wrote it; absent when none was recorded."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the entry is about, by name."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"description": "The diary entry; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the diary entry exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the diary entry as JSON, or null."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get diary entry",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
List diary entries filtered by orchestrator or author, newest first with cursor paging support. Returns { items[{ _id, _creationTime, date, orchestrator, content, createdAt }], nextCursor, truncated }: items are diary entries, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the entries on the last page, else { items, nextCursor }. WHEN: use to review recent history across sessions or audit a period of activity. EXAMPLE: list_diaries orchestrator='beta' limit=10.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
orchestrator
Keep only this orchestrator's diary. Omit for every orchestrator.
Clear enough to supply this argument.
createdBy
Keep only entries whose verified author is this agent (the orchestrator field is what the writer typed; this one is what the credential proved). Omit for every author.
Clear enough to supply this argument.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_diaries call returned, to fetch the following (older) page. Omit for the first page.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"date",
"orchestrator",
"content",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The diary entry's ID."
},
"date": {
"type": "string",
"description": "The day the entry is for, as YYYY-MM-DD."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this entry; absent on a fleet-owned entry."
},
"content": {
"type": "string",
"description": "The diary entry itself."
},
"blockers": {
"type": "array",
"items": {
"type": "string"
},
"description": "What blocked the day; absent when none were given."
},
"createdAt": {
"type": "number",
"description": "When the entry was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the entry, as authenticated; absent on entries written before it was recorded."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this entry (the slug can be renamed, this cannot); absent on a fleet-owned entry and on rows written before it was recorded."
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "The day's highlights; absent when none were given."
},
"instanceId": {
"type": "string",
"description": "The instance that wrote it; absent when none was recorded."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the entry is about, by name."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The diary entries, newest first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_diaries",
"description": "List diary entries filtered by orchestrator or author, newest first with cursor paging support. Returns { items[{ _id, _creationTime, date, orchestrator, content, createdAt }], nextCursor, truncated }: items are diary entries, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the entries on the last page, else { items, nextCursor }. WHEN: use to review recent history across sessions or audit a period of activity. EXAMPLE: list_diaries orchestrator='beta' limit=10.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_diaries call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"createdBy": {
"type": "string",
"description": "Keep only entries whose verified author is this agent (the orchestrator field is what the writer typed; this one is what the credential proved). Omit for every author."
},
"orchestrator": {
"type": "string",
"description": "Keep only this orchestrator's diary. Omit for every orchestrator."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"date",
"orchestrator",
"content",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The diary entry's ID."
},
"date": {
"type": "string",
"description": "The day the entry is for, as YYYY-MM-DD."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this entry; absent on a fleet-owned entry."
},
"content": {
"type": "string",
"description": "The diary entry itself."
},
"blockers": {
"type": "array",
"items": {
"type": "string"
},
"description": "What blocked the day; absent when none were given."
},
"createdAt": {
"type": "number",
"description": "When the entry was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the entry, as authenticated; absent on entries written before it was recorded."
},
"clerkOrgId": {
"type": "string",
"description": "The permanent ID of the organisation that owns this entry (the slug can be renamed, this cannot); absent on a fleet-owned entry and on rows written before it was recorded."
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "The day's highlights; absent when none were given."
},
"instanceId": {
"type": "string",
"description": "The instance that wrote it; absent when none was recorded."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the author: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the entry is about, by name."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "The diary entries, newest first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List diary entries",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Create a briefing note that records one discussion: its title, topic, participants, full content, the decisions reached and the memories it builds on. Returns { noteId, title, topic, createdBy }. WHEN: use after key architectural, product, or operational discussions to record decisions durably. EXAMPLE: create_briefing_note title='C3 desc standard' topic='architecture' participants=['alpha','beta'] content='...' createdBy='gamma'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
title
A short title naming the discussion.
Clear enough to supply this argument.
topic
The category the note files under, e.g. 'architecture', 'revenue', 'product'; list_briefing_notes filters by it.
Clear enough to supply this argument.
participants
Who took part, as a list of names, e.g. ['pi', 'sigma'].
Clear enough to supply this argument.
content
The full write-up of the discussion.
Clear enough to supply this argument.
decisions
The decisions reached, one per item. Omit when none were made.
Clear enough to supply this argument.
linkedMemoryIds
Memories this note builds on: their memoryId values as returned by store_memory or recall. Only memories belong here: a briefing note's own ID is refused. Omit for none.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the note's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"noteId",
"title",
"topic"
],
"properties": {
"title": {
"type": "string",
"description": "The note's title, as stored."
},
"topic": {
"type": "string",
"description": "The note's topic, as stored."
},
"noteId": {
"type": "string",
"description": "The new note's ID: get_briefing_note reads it."
},
"createdBy": {
"type": [
"string",
"null"
],
"description": "Who the note is recorded as written by (the acting agent, or the signed-in person); absent when no name was resolved."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "create_briefing_note",
"description": "Create a briefing note that records one discussion: its title, topic, participants, full content, the decisions reached and the memories it builds on. Returns { noteId, title, topic, createdBy }. WHEN: use after key architectural, product, or operational discussions to record decisions durably. EXAMPLE: create_briefing_note title='C3 desc standard' topic='architecture' participants=['alpha','beta'] content='...' createdBy='gamma'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"topic",
"participants",
"content"
],
"properties": {
"title": {
"type": "string",
"description": "A short title naming the discussion."
},
"topic": {
"type": "string",
"description": "The category the note files under, e.g. 'architecture', 'revenue', 'product'; list_briefing_notes filters by it."
},
"content": {
"type": "string",
"description": "The full write-up of the discussion."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the note's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent; a signed-in person omits it and is recorded under its own verified account. Otherwise omitting it is refused."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The decisions reached, one per item. Omit when none were made."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Who took part, as a list of names, e.g. ['pi', 'sigma']."
},
"linkedMemoryIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{32}$"
},
"description": "Memories this note builds on: their memoryId values as returned by store_memory or recall. Only memories belong here: a briefing note's own ID is refused. Omit for none."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"noteId",
"title",
"topic"
],
"properties": {
"title": {
"type": "string",
"description": "The note's title, as stored."
},
"topic": {
"type": "string",
"description": "The note's topic, as stored."
},
"noteId": {
"type": "string",
"description": "The new note's ID: get_briefing_note reads it."
},
"createdBy": {
"type": [
"string",
"null"
],
"description": "Who the note is recorded as written by (the acting agent, or the signed-in person); absent when no name was resolved."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Create briefing note",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Update an existing briefing note; only provided fields are patched (arrays are FULL REPLACE). Returns { noteId, updated: true }. WHEN: use to add decisions, fix content, or relink memories — RBAC: caller must be createdBy or system. EXAMPLE: update_briefing_note noteId='j57aaaaa...' callerOrchestrator='alpha' decisions=['Use hybrid_search first']. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
noteId
The note to update: its noteId as returned by create_briefing_note or list_briefing_notes.
Clear enough to supply this argument.
callerOrchestrator
The agent updating; it must be the note's author (or 'system'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
title
A new title, replacing the current one. Omit to keep it.
Clear enough to supply this argument.
topic
The category the note is filed under, compared exactly by the topic filter of list_briefing_notes and search_briefing_notes_by_keyword: after the change the note is listed under the new topic, no longer under the old one. Omit to keep it.
Clear enough to supply this argument.
participants
The complete new participant list, replacing the current one (never appended). Omit to keep it.
Clear enough to supply this argument.
content
New content, replacing the current one. Omit to keep it.
Clear enough to supply this argument.
decisions
The complete new decision list, replacing the current one (never appended). Omit to keep it.
Clear enough to supply this argument.
linkedMemoryIds
The complete new list of linked memories, replacing the current one: memoryId values from store_memory or recall (memory IDs only). Omit to keep it.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"noteId",
"updated"
],
"properties": {
"noteId": {
"type": "string",
"description": "The note that was updated."
},
"updated": {
"type": "boolean",
"description": "True: the changes were written."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_briefing_note",
"description": "Update an existing briefing note; only provided fields are patched (arrays are FULL REPLACE). Returns { noteId, updated: true }. WHEN: use to add decisions, fix content, or relink memories — RBAC: caller must be createdBy or system. EXAMPLE: update_briefing_note noteId='j57aaaaa...' callerOrchestrator='alpha' decisions=['Use hybrid_search first']. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"noteId"
],
"properties": {
"title": {
"type": "string",
"description": "A new title, replacing the current one. Omit to keep it."
},
"topic": {
"type": "string",
"description": "The category the note is filed under, compared exactly by the topic filter of list_briefing_notes and search_briefing_notes_by_keyword: after the change the note is listed under the new topic, no longer under the old one. Omit to keep it."
},
"noteId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The note to update: its noteId as returned by create_briefing_note or list_briefing_notes."
},
"content": {
"type": "string",
"description": "New content, replacing the current one. Omit to keep it."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The complete new decision list, replacing the current one (never appended). Omit to keep it."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "The complete new participant list, replacing the current one (never appended). Omit to keep it."
},
"linkedMemoryIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{32}$"
},
"description": "The complete new list of linked memories, replacing the current one: memoryId values from store_memory or recall (memory IDs only). Omit to keep it."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent updating; it must be the note's author (or 'system'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"noteId",
"updated"
],
"properties": {
"noteId": {
"type": "string",
"description": "The note that was updated."
},
"updated": {
"type": "boolean",
"description": "True: the changes were written."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update briefing note",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Fetch one briefing note by its noteId. Returns { _id, _creationTime, title, topic, participants, content, contentTruncated?, decisions?, linkedMemoryIds?, createdBy, createdAt, updatedAt?, updatedBy?, orgId? }, the stored note. A note you may not read, or that does not exist, is an error result ('Briefing note not found'). WHEN: use when you have a specific noteId and need the full structured record for a handoff or recap. EXAMPLE: get_briefing_note noteId='j57dy3049btafda9m2f5d2ggk987ph3f'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
noteId
The note to fetch: its noteId as returned by create_briefing_note or list_briefing_notes.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"title",
"topic",
"participants",
"content",
"createdBy",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The note's ID: the noteId the briefing-note tools take."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this note; absent on a fleet-owned note."
},
"title": {
"type": "string",
"description": "The note's title."
},
"topic": {
"type": "string",
"description": "What the note is about, used to group notes."
},
"content": {
"type": "string",
"description": "The body of the note: the whole body, or a preview when contentTruncated is true."
},
"createdAt": {
"type": "number",
"description": "When the note was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the note."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The decisions the note records; absent when none were given."
},
"updatedAt": {
"type": "number",
"description": "When the note last changed (milliseconds since the Unix epoch); absent when it was never updated."
},
"updatedBy": {
"type": "string",
"description": "Who last changed it; absent when it was never updated."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Who took part, by name; each of them may read the note."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"linkedMemoryIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the memories the note refers to (get_memory reads each); absent when none."
},
"contentTruncated": {
"type": "boolean",
"description": "True when content is only a preview of a body stored apart; absent when content is the whole body."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_briefing_note",
"description": "Fetch one briefing note by its noteId. Returns { _id, _creationTime, title, topic, participants, content, contentTruncated?, decisions?, linkedMemoryIds?, createdBy, createdAt, updatedAt?, updatedBy?, orgId? }, the stored note. A note you may not read, or that does not exist, is an error result ('Briefing note not found'). WHEN: use when you have a specific noteId and need the full structured record for a handoff or recap. EXAMPLE: get_briefing_note noteId='j57dy3049btafda9m2f5d2ggk987ph3f'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"noteId"
],
"properties": {
"noteId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The note to fetch: its noteId as returned by create_briefing_note or list_briefing_notes."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"title",
"topic",
"participants",
"content",
"createdBy",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The note's ID: the noteId the briefing-note tools take."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this note; absent on a fleet-owned note."
},
"title": {
"type": "string",
"description": "The note's title."
},
"topic": {
"type": "string",
"description": "What the note is about, used to group notes."
},
"content": {
"type": "string",
"description": "The body of the note: the whole body, or a preview when contentTruncated is true."
},
"createdAt": {
"type": "number",
"description": "When the note was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the note."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The decisions the note records; absent when none were given."
},
"updatedAt": {
"type": "number",
"description": "When the note last changed (milliseconds since the Unix epoch); absent when it was never updated."
},
"updatedBy": {
"type": "string",
"description": "Who last changed it; absent when it was never updated."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Who took part, by name; each of them may read the note."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"linkedMemoryIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the memories the note refers to (get_memory reads each); absent when none."
},
"contentTruncated": {
"type": "boolean",
"description": "True when content is only a preview of a body stored apart; absent when content is the whole body."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get briefing note",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
List briefing notes filtered by topic, newest first, with cursor paging support. Returns { items[{ _id, title, topic, participants, createdBy, _creationTime }], nextCursor, truncated }: items are notes, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the notes on the last page, else { items, nextCursor }. WHEN: use to review recent discussions on a topic or audit the full briefing history. EXAMPLE: list_briefing_notes topic='architecture' limit=10 fields='lite'.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
topic
Keep only notes filed under this topic, e.g. 'architecture'. Omit for every topic.
Clear enough to supply this argument.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
How much of each row comes back: lite gives each note's ID, creation time, topic, title, participants and author, without its content (get_briefing_note reads it); full gives every stored field.
Clear enough to supply this argument.
updatedSince
The moment from which changes count: keep only notes last updated at or after it (a millisecond timestamp, as Date.now() gives; Date.now() minus 86400000 for the last day). Omit for no time window.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_briefing_notes call returned, to fetch the following (older) page. Omit for the first page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"title",
"topic",
"participants",
"createdBy",
"_creationTime"
],
"properties": {
"_id": {
"type": "string",
"description": "The note's ID: the noteId the briefing-note tools take."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this note; absent on a fleet-owned note."
},
"title": {
"type": "string",
"description": "The note's title."
},
"topic": {
"type": "string",
"description": "What the note is about, used to group notes."
},
"content": {
"type": "string",
"description": "The body of the note, or a preview when contentTruncated is true; absent on lite rows (get_briefing_note reads it)."
},
"createdAt": {
"type": "number",
"description": "When the note was written (milliseconds since the Unix epoch); absent on lite rows."
},
"createdBy": {
"type": "string",
"description": "Who wrote the note."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The decisions the note records; absent when none were given, and on lite rows."
},
"updatedAt": {
"type": "number",
"description": "When the note last changed (milliseconds since the Unix epoch); absent when it was never updated, and on lite rows."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Who took part, by name; each of them may read the note."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"contentTruncated": {
"type": "boolean",
"description": "True when content is only a preview of a body stored apart; absent when content is the whole body, and on lite rows."
}
},
"additionalProperties": {}
},
"description": "The notes, newest first; lite rows carry _id, _creationTime, topic, title, participants and createdBy, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_briefing_notes",
"description": "List briefing notes filtered by topic, newest first, with cursor paging support. Returns { items[{ _id, title, topic, participants, createdBy, _creationTime }], nextCursor, truncated }: items are notes, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the notes on the last page, else { items, nextCursor }. WHEN: use to review recent discussions on a topic or audit the full briefing history. EXAMPLE: list_briefing_notes topic='architecture' limit=10 fields='lite'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"topic": {
"type": "string",
"description": "Keep only notes filed under this topic, e.g. 'architecture'. Omit for every topic."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_briefing_notes call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "lite",
"description": "How much of each row comes back: lite gives each note's ID, creation time, topic, title, participants and author, without its content (get_briefing_note reads it); full gives every stored field."
},
"updatedSince": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The moment from which changes count: keep only notes last updated at or after it (a millisecond timestamp, as Date.now() gives; Date.now() minus 86400000 for the last day). Omit for no time window.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"title",
"topic",
"participants",
"createdBy",
"_creationTime"
],
"properties": {
"_id": {
"type": "string",
"description": "The note's ID: the noteId the briefing-note tools take."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this note; absent on a fleet-owned note."
},
"title": {
"type": "string",
"description": "The note's title."
},
"topic": {
"type": "string",
"description": "What the note is about, used to group notes."
},
"content": {
"type": "string",
"description": "The body of the note, or a preview when contentTruncated is true; absent on lite rows (get_briefing_note reads it)."
},
"createdAt": {
"type": "number",
"description": "When the note was written (milliseconds since the Unix epoch); absent on lite rows."
},
"createdBy": {
"type": "string",
"description": "Who wrote the note."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The decisions the note records; absent when none were given, and on lite rows."
},
"updatedAt": {
"type": "number",
"description": "When the note last changed (milliseconds since the Unix epoch); absent when it was never updated, and on lite rows."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Who took part, by name; each of them may read the note."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"contentTruncated": {
"type": "boolean",
"description": "True when content is only a preview of a body stored apart; absent when content is the whole body, and on lite rows."
}
},
"additionalProperties": {}
},
"description": "The notes, newest first; lite rows carry _id, _creationTime, topic, title, participants and createdBy, full rows every stored field."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List briefing notes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
BM25 full-text keyword search over briefing note content, ranked by relevance. Returns { items[{ _id, title, topic, participants, createdBy, createdAt }], truncated? }: the matching notes, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to recall briefings about a topic/decision when list_briefing_notes filters are too coarse — e.g. 'find briefings about migration plan'. EXAMPLE: search_briefing_notes_by_keyword query='migration plan' topic='daily' limit=10.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
The words to match against note content; exact terms work best.
Clear enough to supply this argument.
topic
Keep only notes filed under this topic. Omit for every topic.
Clear enough to supply this argument.
createdBy
Keep only notes written by this author, as a note records it in createdBy: an agent's name, as list_peers lists it (your own is whoami's agent_name), or 'user:<subject>' for a note a person wrote. Omit for every author.
Clear enough to supply this argument.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
How much of each match comes back: lite is each note's ID, title, topic, author, creation date and participants, without its content; full is every stored field.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"title",
"topic",
"participants",
"createdBy",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The note's ID: the noteId the briefing-note tools take."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this note; absent on a fleet-owned note."
},
"title": {
"type": "string",
"description": "The note's title."
},
"topic": {
"type": "string",
"description": "What the note is about, used to group notes."
},
"content": {
"type": "string",
"description": "The body of the note, or a preview when contentTruncated is true; absent on lite rows (get_briefing_note reads it)."
},
"createdAt": {
"type": "number",
"description": "When the note was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the note."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The decisions the note records; absent when none were given, and on lite rows."
},
"updatedAt": {
"type": "number",
"description": "When the note last changed (milliseconds since the Unix epoch); absent when it was never updated, and on lite rows."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Who took part, by name; each of them may read the note."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch); present with fields='full' only."
},
"contentTruncated": {
"type": "boolean",
"description": "True when content is only a preview of a body stored apart; absent when content is the whole body, and on lite rows."
}
},
"additionalProperties": {}
},
"description": "The notes whose content matches the query, best match first; lite rows carry _id, title, topic, createdBy, createdAt and participants."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "search_briefing_notes_by_keyword",
"description": "BM25 full-text keyword search over briefing note content, ranked by relevance. Returns { items[{ _id, title, topic, participants, createdBy, createdAt }], truncated? }: the matching notes, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to recall briefings about a topic/decision when list_briefing_notes filters are too coarse — e.g. 'find briefings about migration plan'. EXAMPLE: search_briefing_notes_by_keyword query='migration plan' topic='daily' limit=10.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "The words to match against note content; exact terms work best."
},
"topic": {
"type": "string",
"description": "Keep only notes filed under this topic. Omit for every topic."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "lite",
"description": "How much of each match comes back: lite is each note's ID, title, topic, author, creation date and participants, without its content; full is every stored field."
},
"createdBy": {
"type": "string",
"description": "Keep only notes written by this author, as a note records it in createdBy: an agent's name, as list_peers lists it (your own is whoami's agent_name), or 'user:<subject>' for a note a person wrote. Omit for every author."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"title",
"topic",
"participants",
"createdBy",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The note's ID: the noteId the briefing-note tools take."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this note; absent on a fleet-owned note."
},
"title": {
"type": "string",
"description": "The note's title."
},
"topic": {
"type": "string",
"description": "What the note is about, used to group notes."
},
"content": {
"type": "string",
"description": "The body of the note, or a preview when contentTruncated is true; absent on lite rows (get_briefing_note reads it)."
},
"createdAt": {
"type": "number",
"description": "When the note was written (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who wrote the note."
},
"decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The decisions the note records; absent when none were given, and on lite rows."
},
"updatedAt": {
"type": "number",
"description": "When the note last changed (milliseconds since the Unix epoch); absent when it was never updated, and on lite rows."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Who took part, by name; each of them may read the note."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch); present with fields='full' only."
},
"contentTruncated": {
"type": "boolean",
"description": "True when content is only a preview of a body stored apart; absent when content is the whole body, and on lite rows."
}
},
"additionalProperties": {}
},
"description": "The notes whose content matches the query, best match first; lite rows carry _id, title, topic, createdBy, createdAt and participants."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search briefing notes by keyword",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Create a recurring task template that auto-generates tasks on a cron schedule. Returns { taskId, cronExpression }: taskId is the new template's ID (the recurringTaskId other recurring tools take). WHEN: use for daily standups, weekly reviews, or any repeating work item pattern. EXAMPLE: create_recurring_task title='Daily standup' assignedTo='alpha' priority='medium' cronExpression='0 9 * * *' createdBy='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
title
The title every generated task gets.
Clear enough to supply this argument.
description
The brief every generated task gets. Omit for title-only tasks.
Clear enough to supply this argument.
assignedTo
Who receives the generated tasks, by name; list_peers shows who exists.
Clear enough to supply this argument.
priority
How urgent each generated task is for its assignee: urgent work comes before low in their queue.
Clear enough to supply this argument.
project
The project every generated task belongs to. Omit for none.
Clear enough to supply this argument.
tags
Labels copied onto each generated task, e.g. ['standup']; a 'review' tag lets a previous assignee reclaim the task. Omit for none.
Clear enough to supply this argument.
cronExpression
When a task is generated, as a standard five-field cron (minute hour day-of-month month day-of-week), e.g. '0 9 * * *' for 09:00 every day.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the template's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"cronExpression"
],
"properties": {
"taskId": {
"type": "string",
"description": "The new template's ID: the recurringTaskId (or taskId) the recurring tools take."
},
"cronExpression": {
"type": "string",
"description": "The schedule, as stored."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "create_recurring_task",
"description": "Create a recurring task template that auto-generates tasks on a cron schedule. Returns { taskId, cronExpression }: taskId is the new template's ID (the recurringTaskId other recurring tools take). WHEN: use for daily standups, weekly reviews, or any repeating work item pattern. EXAMPLE: create_recurring_task title='Daily standup' assignedTo='alpha' priority='medium' cronExpression='0 9 * * *' createdBy='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"assignedTo",
"priority",
"cronExpression"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels copied onto each generated task, e.g. ['standup']; a 'review' tag lets a previous assignee reclaim the task. Omit for none."
},
"title": {
"type": "string",
"description": "The title every generated task gets."
},
"project": {
"type": "string",
"description": "The project every generated task belongs to. Omit for none."
},
"priority": {
"enum": [
"urgent",
"high",
"medium",
"low"
],
"type": "string",
"description": "How urgent each generated task is for its assignee: urgent work comes before low in their queue."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the template's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
},
"assignedTo": {
"type": "string",
"description": "Who receives the generated tasks, by name; list_peers shows who exists."
},
"description": {
"type": "string",
"description": "The brief every generated task gets. Omit for title-only tasks."
},
"cronExpression": {
"type": "string",
"description": "When a task is generated, as a standard five-field cron (minute hour day-of-month month day-of-week), e.g. '0 9 * * *' for 09:00 every day."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId",
"cronExpression"
],
"properties": {
"taskId": {
"type": "string",
"description": "The new template's ID: the recurringTaskId (or taskId) the recurring tools take."
},
"cronExpression": {
"type": "string",
"description": "The schedule, as stored."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Create recurring task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List recurring task templates filtered by assignee or active status, newest first. Returns { items[{ _id, _creationTime, title, assignedTo, priority, cronExpression, nextRunAt, active, createdBy }], nextCursor, truncated, scopeFiltered? }: items are recurring templates, newest first; nextCursor is the next page's cursor, null on the last page; scopeFiltered counts rows withheld by scope; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the templates, or { items, nextCursor?, scopeFiltered? } when another page exists or rows were withheld. WHEN: use to audit which schedules are active or find templates to pause/resume/update. Each row also reports one-open-instance state: lastTaskId (task made by the last run), skippedRuns (consecutive ticks skipped because that task was still open), lastSkippedAt, lastSkipReason. EXAMPLE: list_recurring_tasks assignedTo='beta' active=true limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
assignedTo
Keep only templates whose tasks go to this orchestrator. Omit for every assignee.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"cronExpression",
"nextRunAt",
"active",
"createdBy"
],
"properties": {
"_id": {
"type": "string",
"description": "The template's ID: the recurringTaskId (or taskId) the recurring tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The labels every created task gets; absent when none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this schedule; absent on a fleet-owned schedule."
},
"title": {
"type": "string",
"description": "The title every created task gets."
},
"active": {
"type": "boolean",
"description": "Whether the schedule runs: false after pause_recurring_task, true after resume_recurring_task."
},
"project": {
"type": "string",
"description": "The project every created task is filed under; absent when none."
},
"priority": {
"type": "string",
"description": "The priority every created task gets: urgent, high, medium or low."
},
"createdBy": {
"type": "string",
"description": "Who created the schedule."
},
"nextRunAt": {
"type": "number",
"description": "When the schedule next creates a task (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "Who every created task is assigned to, by name."
},
"lastTaskId": {
"type": "string",
"description": "The last task the schedule created; absent before its first run."
},
"description": {
"type": "string",
"description": "The brief every created task gets; absent when none was given."
},
"skippedRuns": {
"type": "number",
"description": "How many consecutive runs created nothing because the last task was still open; resets to 0 when a task is created; absent before any run was skipped."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of that assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"lastCreatedAt": {
"type": "number",
"description": "When the schedule last created a task (milliseconds since the Unix epoch); absent before its first run."
},
"lastSkippedAt": {
"type": "number",
"description": "When the latest run was skipped (milliseconds since the Unix epoch); absent when none was."
},
"cronExpression": {
"type": "string",
"description": "The schedule, as a cron expression, e.g. '0 9 * * 1' (Mondays at 09:00)."
},
"lastSkipReason": {
"type": "string",
"description": "Why the latest run was skipped, naming the open task; absent when none was."
}
},
"additionalProperties": {}
},
"description": "The recurring schedules, newest first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
},
"scopeFiltered": {
"type": "number",
"description": "How many rows of your own organisation on this page your session may not see and were left out; absent when none were."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_recurring_tasks",
"description": "List recurring task templates filtered by assignee or active status, newest first. Returns { items[{ _id, _creationTime, title, assignedTo, priority, cronExpression, nextRunAt, active, createdBy }], nextCursor, truncated, scopeFiltered? }: items are recurring templates, newest first; nextCursor is the next page's cursor, null on the last page; scopeFiltered counts rows withheld by scope; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the templates, or { items, nextCursor?, scopeFiltered? } when another page exists or rows were withheld. WHEN: use to audit which schedules are active or find templates to pause/resume/update. Each row also reports one-open-instance state: lastTaskId (task made by the last run), skippedRuns (consecutive ticks skipped because that task was still open), lastSkippedAt, lastSkipReason. EXAMPLE: list_recurring_tasks assignedTo='beta' active=true limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"active": {
"type": "boolean",
"description": "true keeps running templates, false keeps paused ones. Omit for both."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_recurring_tasks call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"assignedTo": {
"type": "string",
"description": "Keep only templates whose tasks go to this orchestrator. Omit for every assignee."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"cronExpression",
"nextRunAt",
"active",
"createdBy"
],
"properties": {
"_id": {
"type": "string",
"description": "The template's ID: the recurringTaskId (or taskId) the recurring tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The labels every created task gets; absent when none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this schedule; absent on a fleet-owned schedule."
},
"title": {
"type": "string",
"description": "The title every created task gets."
},
"active": {
"type": "boolean",
"description": "Whether the schedule runs: false after pause_recurring_task, true after resume_recurring_task."
},
"project": {
"type": "string",
"description": "The project every created task is filed under; absent when none."
},
"priority": {
"type": "string",
"description": "The priority every created task gets: urgent, high, medium or low."
},
"createdBy": {
"type": "string",
"description": "Who created the schedule."
},
"nextRunAt": {
"type": "number",
"description": "When the schedule next creates a task (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "Who every created task is assigned to, by name."
},
"lastTaskId": {
"type": "string",
"description": "The last task the schedule created; absent before its first run."
},
"description": {
"type": "string",
"description": "The brief every created task gets; absent when none was given."
},
"skippedRuns": {
"type": "number",
"description": "How many consecutive runs created nothing because the last task was still open; resets to 0 when a task is created; absent before any run was skipped."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of that assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"lastCreatedAt": {
"type": "number",
"description": "When the schedule last created a task (milliseconds since the Unix epoch); absent before its first run."
},
"lastSkippedAt": {
"type": "number",
"description": "When the latest run was skipped (milliseconds since the Unix epoch); absent when none was."
},
"cronExpression": {
"type": "string",
"description": "The schedule, as a cron expression, e.g. '0 9 * * 1' (Mondays at 09:00)."
},
"lastSkipReason": {
"type": "string",
"description": "Why the latest run was skipped, naming the open task; absent when none was."
}
},
"additionalProperties": {}
},
"description": "The recurring schedules, newest first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
},
"scopeFiltered": {
"type": "number",
"description": "How many rows of your own organisation on this page your session may not see and were left out; absent when none were."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List recurring tasks",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Pause a recurring task template to stop auto-creating tasks until explicitly resumed. Returns { taskId, active: false }. WHEN: use during holidays, freezes, or when the assignee is unavailable for a period. EXAMPLE: pause_recurring_task taskId='j57aaaaa...'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The recurring template: its ID as returned by create_recurring_task or list_recurring_tasks.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Resume a paused recurring task template and recalculate its next scheduled run time. Returns { taskId, active: true, nextRunAt }. WHEN: use after a pause period ends to re-enable automatic task generation. EXAMPLE: resume_recurring_task taskId='j57aaaaa...'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The recurring template: its ID as returned by create_recurring_task or list_recurring_tasks.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Permanently delete a recurring task template, stopping all future scheduled task generation. Returns { deleted: true }. WHEN: use when a recurring process is retired and should never generate tasks again. EXAMPLE: delete_recurring_task taskId='j57aaaaa...'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The recurring template: its ID as returned by create_recurring_task or list_recurring_tasks.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Update a recurring task template's fields; cronExpression change auto-recalculates nextRunAt. Returns { recurringTaskId, updated: true }. WHEN: use to change assignee, schedule, or priority of an active recurring template. EXAMPLE: update_recurring_task recurringTaskId='j57aaaaa...' cronExpression='0 10 * * 1' priority='high'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
recurringTaskId
The recurring template: its ID as returned by create_recurring_task or list_recurring_tasks.
Clear enough to supply this argument.
title
A new title for future tasks. Omit to keep it.
Clear enough to supply this argument.
description
A new brief for future tasks. Omit to keep it.
Clear enough to supply this argument.
assignedTo
Who receives the tasks generated from now on, by agent name as list_peers shows it under name (not an agent ID); tasks already generated keep their assignee. Omit to keep it.
Clear enough to supply this argument.
priority
How urgent the tasks this schedule creates from now on will be; the tasks it already created keep their own priority. Omit to keep the current one.
Clear enough to supply this argument.
project
The billing line each task generated from now on carries: the project name create_recurring_task took, the same value create_task's project takes. Tasks already generated keep theirs. Omit to keep it.
Clear enough to supply this argument.
tags
The complete new tag list for future tasks, replacing the current one. Omit to keep it.
Clear enough to supply this argument.
cronExpression
A new five-field cron schedule, e.g. '0 10 * * 1'; the next run time is recomputed. Omit to keep the schedule.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recurringTaskId",
"updated"
],
"properties": {
"updated": {
"type": "boolean",
"description": "True: the changes were written."
},
"recurringTaskId": {
"type": "string",
"description": "The template that was updated."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_recurring_task",
"description": "Update a recurring task template's fields; cronExpression change auto-recalculates nextRunAt. Returns { recurringTaskId, updated: true }. WHEN: use to change assignee, schedule, or priority of an active recurring template. EXAMPLE: update_recurring_task recurringTaskId='j57aaaaa...' cronExpression='0 10 * * 1' priority='high'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recurringTaskId"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The complete new tag list for future tasks, replacing the current one. Omit to keep it."
},
"title": {
"type": "string",
"description": "A new title for future tasks. Omit to keep it."
},
"project": {
"type": "string",
"description": "The billing line each task generated from now on carries: the project name create_recurring_task took, the same value create_task's project takes. Tasks already generated keep theirs. Omit to keep it."
},
"priority": {
"enum": [
"urgent",
"high",
"medium",
"low"
],
"type": "string",
"description": "How urgent the tasks this schedule creates from now on will be; the tasks it already created keep their own priority. Omit to keep the current one."
},
"assignedTo": {
"type": "string",
"description": "Who receives the tasks generated from now on, by agent name as list_peers shows it under name (not an agent ID); tasks already generated keep their assignee. Omit to keep it."
},
"description": {
"type": "string",
"description": "A new brief for future tasks. Omit to keep it."
},
"cronExpression": {
"type": "string",
"description": "A new five-field cron schedule, e.g. '0 10 * * 1'; the next run time is recomputed. Omit to keep the schedule."
},
"recurringTaskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The recurring template: its ID as returned by create_recurring_task or list_recurring_tasks."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recurringTaskId",
"updated"
],
"properties": {
"updated": {
"type": "boolean",
"description": "True: the changes were written."
},
"recurringTaskId": {
"type": "string",
"description": "The template that was updated."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update recurring task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Post your answer to the debate-room turn you were asked for; the only way a turn enters a room. Returns { accepted: true, turnSeq, closed, closeReason?, workDuringTurn } when the turn is recorded. WHEN: the [DEBATE-TURN] message in your inbox asks for it, exactly once per turnSeq, then mark that message read. EXAMPLE: debate_post_turn roomId='<roomId from the message>' turnSeq=3 text='...' done=false. A refusal (not_your_turn, stale_turn, too_long, room_closed, ...) is returned as an error result, never as a success.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
roomId
The room: the roomId carried by the [DEBATE-TURN] message in your inbox.
Clear enough to supply this argument.
turnSeq
The turn number the [DEBATE-TURN] message gives; a turn that has already moved on is refused.
Clear enough to supply this argument.
text
Your answer for this turn, within the character limit the message states.
Clear enough to supply this argument.
done
Set true when you have nothing more to add; the room closes once every agent says so in one round. Omit it (false) to keep the debate going.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"accepted",
"turnSeq",
"closed",
"workDuringTurn"
],
"properties": {
"closed": {
"type": "boolean",
"description": "True when this turn closed the room (see closeReason)."
},
"turnSeq": {
"type": "number",
"description": "The turn number that was recorded."
},
"accepted": {
"type": "boolean",
"description": "True: the turn was recorded in the room's transcript."
},
"closeReason": {
"type": "string",
"description": "Why the room closed: round_limit, operator_stop, all_done or all_silent; absent while the room stays open."
},
"workDuringTurn": {
"type": "string",
"description": "Whether work was done while the turn was open: always 'could_not_judge' for an agent today (the backend does not judge it), 'not_applicable' for a person."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "debate_post_turn",
"description": "Post your answer to the debate-room turn you were asked for; the only way a turn enters a room. Returns { accepted: true, turnSeq, closed, closeReason?, workDuringTurn } when the turn is recorded. WHEN: the [DEBATE-TURN] message in your inbox asks for it, exactly once per turnSeq, then mark that message read. EXAMPLE: debate_post_turn roomId='<roomId from the message>' turnSeq=3 text='...' done=false. A refusal (not_your_turn, stale_turn, too_long, room_closed, ...) is returned as an error result, never as a success.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"roomId",
"turnSeq",
"text"
],
"properties": {
"done": {
"type": "boolean",
"description": "Set true when you have nothing more to add; the room closes once every agent says so in one round. Omit it (false) to keep the debate going."
},
"text": {
"type": "string",
"description": "Your answer for this turn, within the character limit the message states."
},
"roomId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The room: the roomId carried by the [DEBATE-TURN] message in your inbox."
},
"turnSeq": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "The turn number the [DEBATE-TURN] message gives; a turn that has already moved on is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"accepted",
"turnSeq",
"closed",
"workDuringTurn"
],
"properties": {
"closed": {
"type": "boolean",
"description": "True when this turn closed the room (see closeReason)."
},
"turnSeq": {
"type": "number",
"description": "The turn number that was recorded."
},
"accepted": {
"type": "boolean",
"description": "True: the turn was recorded in the room's transcript."
},
"closeReason": {
"type": "string",
"description": "Why the room closed: round_limit, operator_stop, all_done or all_silent; absent while the room stays open."
},
"workDuringTurn": {
"type": "string",
"description": "Whether work was done while the turn was open: always 'could_not_judge' for an agent today (the backend does not judge it), 'not_applicable' for a person."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Post a debate-room turn",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Read a debate room: its subject, frozen template, pointer and the full transcript. Read-only. Returns { room { _id, _creationTime, tenantId, tenantOrgId, templateId, template, settings, subject, status, round, position, turnSeq, participantState, createdBy, createdById, createdAt, refusalRows, refusalsOverflow }, turns[{ _id, _creationTime, roomId, turnSeq, round, position, kind, writer, postedAt }], truncated? }: the room (subject, frozen template, status, whose turn it is) and every turn in order; a room you are not part of returns a ROOM NOT AVAILABLE error, never an empty room. Over the 60 KB response cap the transcript is cut to its first turns and says so (truncated: true, and _meta in the text). WHEN: the [DEBATE-TURN] message says earlier turns were omitted, or you need the whole transcript. EXAMPLE: debate_get_room roomId='<roomId from the message>'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
roomId
The room: the roomId carried by the [DEBATE-TURN] message in your inbox.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"room",
"turns"
],
"properties": {
"room": {
"type": "object",
"required": [
"_id",
"_creationTime",
"tenantId",
"tenantOrgId",
"templateId",
"template",
"settings",
"subject",
"status",
"round",
"position",
"turnSeq",
"participantState",
"createdBy",
"createdById",
"createdAt",
"refusalRows",
"refusalsOverflow"
],
"properties": {
"_id": {
"type": "string",
"description": "The room's ID: the roomId the debate tools take."
},
"round": {
"type": "number",
"description": "The current round, counting from 1."
},
"status": {
"type": "string",
"description": "Where the room is: active, stalled or closed."
},
"subject": {
"type": "string",
"description": "What the room debates."
},
"turnSeq": {
"type": "number",
"description": "The number of the current turn."
},
"awaiting": {
"type": "object",
"required": [
"participantId"
],
"properties": {
"messageId": {
"type": "string",
"description": "The turn message sent to that seat; absent before it was delivered."
},
"deadlineAt": {
"type": "number",
"description": "When the turn expires (milliseconds since the Unix epoch); absent when it does not."
},
"deliveredAt": {
"type": "number",
"description": "When it was delivered (milliseconds since the Unix epoch); absent before."
},
"participantId": {
"type": "string",
"description": "The seat the room waits on."
}
},
"description": "Whose answer the room waits for; absent when it waits on nobody.",
"additionalProperties": {}
},
"closedAt": {
"type": "number",
"description": "When the room closed (milliseconds since the Unix epoch); absent while it is open."
},
"position": {
"type": "number",
"description": "The seat whose turn it is, as an index into template.participants (from 0)."
},
"settings": {
"type": "object",
"required": [
"maxRoundLimit",
"maxParticipants",
"maxRefusalRows",
"maxTurnMessageChars",
"pollSeconds",
"maxAnswerCharsCeiling",
"maxLabelChars",
"maxTurnInstructionChars",
"maxActiveRooms"
],
"properties": {
"pollSeconds": {
"type": "number",
"description": "How often a waiting seat is polled, in seconds."
},
"maxLabelChars": {
"type": "number",
"description": "The longest name or seat label, in characters."
},
"maxRoundLimit": {
"type": "number",
"description": "The highest round limit allowed."
},
"maxActiveRooms": {
"type": "number",
"description": "How many rooms of one organisation may be open at once."
},
"maxRefusalRows": {
"type": "number",
"description": "How many refused turns are written to the transcript."
},
"maxParticipants": {
"type": "number",
"description": "The most seats a room may have."
},
"maxTurnMessageChars": {
"type": "number",
"description": "The longest turn message, in characters."
},
"maxAnswerCharsCeiling": {
"type": "number",
"description": "The highest maxAnswerChars a template may set."
},
"maxTurnInstructionChars": {
"type": "number",
"description": "The longest turn instruction, in characters."
}
},
"description": "The organisation's debate settings, frozen when the room was created.",
"additionalProperties": {}
},
"template": {
"type": "object",
"required": [
"id",
"name",
"language",
"turnInstruction",
"participants",
"roundLimit",
"maxAnswerChars",
"turnDeadlineSeconds",
"maxConsecutiveSkips",
"voiceEnabled"
],
"properties": {
"id": {
"type": "string",
"description": "The template's key within its organisation."
},
"name": {
"type": "string",
"description": "The template's display name."
},
"language": {
"type": "string",
"description": "The language turns are asked in, e.g. 'en'."
},
"roundLimit": {
"type": "number",
"description": "How many rounds the room runs at most."
},
"participants": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"label",
"kind",
"transport"
],
"properties": {
"id": {
"type": "string",
"description": "The seat's ID in the template, e.g. 'p1'."
},
"kind": {
"type": "string",
"description": "Who sits there: agent or human."
},
"label": {
"type": "string",
"description": "The seat's display name."
},
"agentId": {
"type": "string",
"description": "The agent that sits at an agent seat, by its permanent ID; absent on a human seat."
},
"channel": {
"type": "string",
"description": "The person a human seat is ('user:<subject>'); absent on an agent seat, and on the room creator's own seat."
},
"voiceKey": {
"type": [
"string",
"null"
],
"description": "The voice the seat speaks with; null or absent for none."
},
"transport": {
"type": "string",
"description": "How a turn reaches the seat: waker, live-session or human."
},
"instanceId": {
"type": "string",
"description": "The instance the turn is delivered to; absent when any."
},
"latencySource": {
"type": "string",
"description": "Where expectedLatencySeconds comes from; absent when unknown."
},
"deadlineSeconds": {
"type": [
"number",
"null"
],
"description": "How long the seat has per turn, in seconds; null to wait without limit, absent for the template default."
},
"latencyDeclaredAt": {
"type": "number",
"description": "When that latency was declared (milliseconds since the Unix epoch); absent when unknown."
},
"expectedLatencySeconds": {
"type": "number",
"description": "How long the seat usually takes to answer; absent when unknown."
}
},
"additionalProperties": {}
},
"description": "The seats, in speaking order."
},
"voiceEnabled": {
"type": "boolean",
"description": "Whether turns are also voiced."
},
"maxAnswerChars": {
"type": "number",
"description": "The longest answer a turn accepts, in characters."
},
"turnInstruction": {
"type": "string",
"description": "The instruction every turn message carries."
},
"maxConsecutiveSkips": {
"type": "number",
"description": "How many turns in a row a seat may miss before it is dropped."
},
"turnDeadlineSeconds": {
"type": "number",
"description": "The default time a seat has per turn, in seconds."
}
},
"description": "The template, frozen when the room was created: later edits of the template do not reach a running room.",
"additionalProperties": {}
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the room is in."
},
"createdAt": {
"type": "number",
"description": "When the room was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the room, the sender of every turn message."
},
"templateId": {
"type": "string",
"description": "The template the room was created from."
},
"closeReason": {
"type": "string",
"description": "Why it closed: round_limit, operator_stop, all_done or all_silent; absent while it is open."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the room's creator ('user:<subject>' for a person)."
},
"refusalRows": {
"type": "number",
"description": "How many refused turns were written to the transcript."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"participantState": {
"type": "array",
"items": {
"type": "object",
"required": [
"participantId",
"consecutiveSkips",
"dropped"
],
"properties": {
"dropped": {
"type": "boolean",
"description": "True once it missed too many turns and left the room."
},
"roundDone": {
"type": "boolean",
"description": "True when it said it has nothing more to add this round; absent otherwise."
},
"roundKind": {
"type": "string",
"description": "What it did this round: answer or skipped; absent before it spoke."
},
"participantId": {
"type": "string",
"description": "The seat."
},
"consecutiveSkips": {
"type": "number",
"description": "How many turns in a row it has missed."
}
},
"additionalProperties": {}
},
"description": "Each seat's state in the current round."
},
"refusalsOverflow": {
"type": "number",
"description": "How many refused turns beyond settings.maxRefusalRows were only counted."
}
},
"description": "The room, whole.",
"additionalProperties": {}
},
"turns": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"roomId",
"turnSeq",
"round",
"position",
"kind",
"writer",
"postedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The turn row's ID."
},
"done": {
"type": "boolean",
"description": "True when the seat said it has nothing more to add; absent otherwise."
},
"kind": {
"type": "string",
"description": "What the row is: answer, operator, skipped, dropped, refused or system."
},
"text": {
"type": "string",
"description": "What was said; absent on a row that carries no text."
},
"round": {
"type": "number",
"description": "The round it was in."
},
"reason": {
"type": "string",
"description": "The refusal reason, or the close reason of a final system row; absent otherwise."
},
"roomId": {
"type": "string",
"description": "The room the turn belongs to."
},
"writer": {
"type": "string",
"description": "The backend function that wrote it: postTurn, expireTurn, closeRoom or deliverTurn."
},
"turnSeq": {
"type": "number",
"description": "The turn's number."
},
"position": {
"type": "number",
"description": "The seat's index in template.participants (from 0)."
},
"postedAt": {
"type": "number",
"description": "When the turn was posted (milliseconds since the Unix epoch)."
},
"voiceMark": {
"type": "string",
"description": "The voice worker's mark on the turn; absent without voice."
},
"deadlineAt": {
"type": "number",
"description": "The deadline a skipped turn expired at (milliseconds since the Unix epoch); absent otherwise."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"participantId": {
"type": "string",
"description": "The seat that spoke; absent on a system row."
},
"audioStorageId": {
"type": "string",
"description": "The stored voice recording of the turn; absent without voice."
},
"workDuringTurn": {
"type": "string",
"description": "Whether work was done while the turn was open: 'could_not_judge' on an agent's answer today; absent on rows that do not record it."
}
},
"additionalProperties": {}
},
"description": "The transcript, in order; only its first turns when truncated is true."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and turns holds only the first turns (the text then says so in _meta); absent when turns is the whole transcript."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "debate_get_room",
"description": "Read a debate room: its subject, frozen template, pointer and the full transcript. Read-only. Returns { room { _id, _creationTime, tenantId, tenantOrgId, templateId, template, settings, subject, status, round, position, turnSeq, participantState, createdBy, createdById, createdAt, refusalRows, refusalsOverflow }, turns[{ _id, _creationTime, roomId, turnSeq, round, position, kind, writer, postedAt }], truncated? }: the room (subject, frozen template, status, whose turn it is) and every turn in order; a room you are not part of returns a ROOM NOT AVAILABLE error, never an empty room. Over the 60 KB response cap the transcript is cut to its first turns and says so (truncated: true, and _meta in the text). WHEN: the [DEBATE-TURN] message says earlier turns were omitted, or you need the whole transcript. EXAMPLE: debate_get_room roomId='<roomId from the message>'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"roomId"
],
"properties": {
"roomId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The room: the roomId carried by the [DEBATE-TURN] message in your inbox."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"room",
"turns"
],
"properties": {
"room": {
"type": "object",
"required": [
"_id",
"_creationTime",
"tenantId",
"tenantOrgId",
"templateId",
"template",
"settings",
"subject",
"status",
"round",
"position",
"turnSeq",
"participantState",
"createdBy",
"createdById",
"createdAt",
"refusalRows",
"refusalsOverflow"
],
"properties": {
"_id": {
"type": "string",
"description": "The room's ID: the roomId the debate tools take."
},
"round": {
"type": "number",
"description": "The current round, counting from 1."
},
"status": {
"type": "string",
"description": "Where the room is: active, stalled or closed."
},
"subject": {
"type": "string",
"description": "What the room debates."
},
"turnSeq": {
"type": "number",
"description": "The number of the current turn."
},
"awaiting": {
"type": "object",
"required": [
"participantId"
],
"properties": {
"messageId": {
"type": "string",
"description": "The turn message sent to that seat; absent before it was delivered."
},
"deadlineAt": {
"type": "number",
"description": "When the turn expires (milliseconds since the Unix epoch); absent when it does not."
},
"deliveredAt": {
"type": "number",
"description": "When it was delivered (milliseconds since the Unix epoch); absent before."
},
"participantId": {
"type": "string",
"description": "The seat the room waits on."
}
},
"description": "Whose answer the room waits for; absent when it waits on nobody.",
"additionalProperties": {}
},
"closedAt": {
"type": "number",
"description": "When the room closed (milliseconds since the Unix epoch); absent while it is open."
},
"position": {
"type": "number",
"description": "The seat whose turn it is, as an index into template.participants (from 0)."
},
"settings": {
"type": "object",
"required": [
"maxRoundLimit",
"maxParticipants",
"maxRefusalRows",
"maxTurnMessageChars",
"pollSeconds",
"maxAnswerCharsCeiling",
"maxLabelChars",
"maxTurnInstructionChars",
"maxActiveRooms"
],
"properties": {
"pollSeconds": {
"type": "number",
"description": "How often a waiting seat is polled, in seconds."
},
"maxLabelChars": {
"type": "number",
"description": "The longest name or seat label, in characters."
},
"maxRoundLimit": {
"type": "number",
"description": "The highest round limit allowed."
},
"maxActiveRooms": {
"type": "number",
"description": "How many rooms of one organisation may be open at once."
},
"maxRefusalRows": {
"type": "number",
"description": "How many refused turns are written to the transcript."
},
"maxParticipants": {
"type": "number",
"description": "The most seats a room may have."
},
"maxTurnMessageChars": {
"type": "number",
"description": "The longest turn message, in characters."
},
"maxAnswerCharsCeiling": {
"type": "number",
"description": "The highest maxAnswerChars a template may set."
},
"maxTurnInstructionChars": {
"type": "number",
"description": "The longest turn instruction, in characters."
}
},
"description": "The organisation's debate settings, frozen when the room was created.",
"additionalProperties": {}
},
"template": {
"type": "object",
"required": [
"id",
"name",
"language",
"turnInstruction",
"participants",
"roundLimit",
"maxAnswerChars",
"turnDeadlineSeconds",
"maxConsecutiveSkips",
"voiceEnabled"
],
"properties": {
"id": {
"type": "string",
"description": "The template's key within its organisation."
},
"name": {
"type": "string",
"description": "The template's display name."
},
"language": {
"type": "string",
"description": "The language turns are asked in, e.g. 'en'."
},
"roundLimit": {
"type": "number",
"description": "How many rounds the room runs at most."
},
"participants": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"label",
"kind",
"transport"
],
"properties": {
"id": {
"type": "string",
"description": "The seat's ID in the template, e.g. 'p1'."
},
"kind": {
"type": "string",
"description": "Who sits there: agent or human."
},
"label": {
"type": "string",
"description": "The seat's display name."
},
"agentId": {
"type": "string",
"description": "The agent that sits at an agent seat, by its permanent ID; absent on a human seat."
},
"channel": {
"type": "string",
"description": "The person a human seat is ('user:<subject>'); absent on an agent seat, and on the room creator's own seat."
},
"voiceKey": {
"type": [
"string",
"null"
],
"description": "The voice the seat speaks with; null or absent for none."
},
"transport": {
"type": "string",
"description": "How a turn reaches the seat: waker, live-session or human."
},
"instanceId": {
"type": "string",
"description": "The instance the turn is delivered to; absent when any."
},
"latencySource": {
"type": "string",
"description": "Where expectedLatencySeconds comes from; absent when unknown."
},
"deadlineSeconds": {
"type": [
"number",
"null"
],
"description": "How long the seat has per turn, in seconds; null to wait without limit, absent for the template default."
},
"latencyDeclaredAt": {
"type": "number",
"description": "When that latency was declared (milliseconds since the Unix epoch); absent when unknown."
},
"expectedLatencySeconds": {
"type": "number",
"description": "How long the seat usually takes to answer; absent when unknown."
}
},
"additionalProperties": {}
},
"description": "The seats, in speaking order."
},
"voiceEnabled": {
"type": "boolean",
"description": "Whether turns are also voiced."
},
"maxAnswerChars": {
"type": "number",
"description": "The longest answer a turn accepts, in characters."
},
"turnInstruction": {
"type": "string",
"description": "The instruction every turn message carries."
},
"maxConsecutiveSkips": {
"type": "number",
"description": "How many turns in a row a seat may miss before it is dropped."
},
"turnDeadlineSeconds": {
"type": "number",
"description": "The default time a seat has per turn, in seconds."
}
},
"description": "The template, frozen when the room was created: later edits of the template do not reach a running room.",
"additionalProperties": {}
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the room is in."
},
"createdAt": {
"type": "number",
"description": "When the room was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the room, the sender of every turn message."
},
"templateId": {
"type": "string",
"description": "The template the room was created from."
},
"closeReason": {
"type": "string",
"description": "Why it closed: round_limit, operator_stop, all_done or all_silent; absent while it is open."
},
"createdById": {
"type": "string",
"description": "The permanent ID of the room's creator ('user:<subject>' for a person)."
},
"refusalRows": {
"type": "number",
"description": "How many refused turns were written to the transcript."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"participantState": {
"type": "array",
"items": {
"type": "object",
"required": [
"participantId",
"consecutiveSkips",
"dropped"
],
"properties": {
"dropped": {
"type": "boolean",
"description": "True once it missed too many turns and left the room."
},
"roundDone": {
"type": "boolean",
"description": "True when it said it has nothing more to add this round; absent otherwise."
},
"roundKind": {
"type": "string",
"description": "What it did this round: answer or skipped; absent before it spoke."
},
"participantId": {
"type": "string",
"description": "The seat."
},
"consecutiveSkips": {
"type": "number",
"description": "How many turns in a row it has missed."
}
},
"additionalProperties": {}
},
"description": "Each seat's state in the current round."
},
"refusalsOverflow": {
"type": "number",
"description": "How many refused turns beyond settings.maxRefusalRows were only counted."
}
},
"description": "The room, whole.",
"additionalProperties": {}
},
"turns": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"roomId",
"turnSeq",
"round",
"position",
"kind",
"writer",
"postedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The turn row's ID."
},
"done": {
"type": "boolean",
"description": "True when the seat said it has nothing more to add; absent otherwise."
},
"kind": {
"type": "string",
"description": "What the row is: answer, operator, skipped, dropped, refused or system."
},
"text": {
"type": "string",
"description": "What was said; absent on a row that carries no text."
},
"round": {
"type": "number",
"description": "The round it was in."
},
"reason": {
"type": "string",
"description": "The refusal reason, or the close reason of a final system row; absent otherwise."
},
"roomId": {
"type": "string",
"description": "The room the turn belongs to."
},
"writer": {
"type": "string",
"description": "The backend function that wrote it: postTurn, expireTurn, closeRoom or deliverTurn."
},
"turnSeq": {
"type": "number",
"description": "The turn's number."
},
"position": {
"type": "number",
"description": "The seat's index in template.participants (from 0)."
},
"postedAt": {
"type": "number",
"description": "When the turn was posted (milliseconds since the Unix epoch)."
},
"voiceMark": {
"type": "string",
"description": "The voice worker's mark on the turn; absent without voice."
},
"deadlineAt": {
"type": "number",
"description": "The deadline a skipped turn expired at (milliseconds since the Unix epoch); absent otherwise."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"participantId": {
"type": "string",
"description": "The seat that spoke; absent on a system row."
},
"audioStorageId": {
"type": "string",
"description": "The stored voice recording of the turn; absent without voice."
},
"workDuringTurn": {
"type": "string",
"description": "Whether work was done while the turn was open: 'could_not_judge' on an agent's answer today; absent on rows that do not record it."
}
},
"additionalProperties": {}
},
"description": "The transcript, in order; only its first turns when truncated is true."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and turns holds only the first turns (the text then says so in _meta); absent when turns is the whole transcript."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get a debate room",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Register or update a GitHub repo to orchestrator mapping for webhook event routing. Returns { id, repo, orchestrator, project, active, reviewer, fallbackReviewer }; calling again for the same repo updates the mapping. WHEN: use when adding a new repo to monitoring or changing which orchestrator handles its events. EXAMPLE: add_repo_mapping repo='vantageos-agency/vantage-peers' orchestrator='alpha' project='vantage-peers'.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
repo
The GitHub repository, as owner/name, e.g. 'vantageos-agency/vantage-peers'.
Clear enough to supply this argument.
orchestrator
The orchestrator that receives the repo's webhook events, e.g. 'sigma'.
Clear enough to supply this argument.
project
The project the repo's work is billed to, e.g. 'vantage-peers'.
Clear enough to supply this argument.
active
Whether the repo's webhook events are routed: false keeps the mapping but stops routing them.
Clear enough to supply this argument.
reviewer
Who reviews the repo's pull-request tasks. Omit to use the fleet default reviewer.
Clear enough to supply this argument.
fallbackReviewer
Who reviews when the reviewer is stopped. Omit to use the fleet default.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"repo",
"orchestrator",
"project",
"active"
],
"properties": {
"id": {
"type": "string",
"description": "The mapping's ID."
},
"repo": {
"type": "string",
"description": "The GitHub repo, as 'owner/name'."
},
"active": {
"type": "boolean",
"description": "Whether the repo's events are routed; false keeps the mapping without routing."
},
"project": {
"type": "string",
"description": "The project the repo's events are filed under."
},
"reviewer": {
"type": [
"string",
"null"
],
"description": "Who reviews the repo's pull-request tasks; absent when none was given (the fleet default applies)."
},
"orchestrator": {
"type": "string",
"description": "Who receives the repo's webhook events."
},
"fallbackReviewer": {
"type": [
"string",
"null"
],
"description": "Who reviews when the reviewer is stopped; absent when none was given (the fleet default applies)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "add_repo_mapping",
"description": "Register or update a GitHub repo to orchestrator mapping for webhook event routing. Returns { id, repo, orchestrator, project, active, reviewer, fallbackReviewer }; calling again for the same repo updates the mapping. WHEN: use when adding a new repo to monitoring or changing which orchestrator handles its events. EXAMPLE: add_repo_mapping repo='vantageos-agency/vantage-peers' orchestrator='alpha' project='vantage-peers'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"repo",
"orchestrator",
"project"
],
"properties": {
"repo": {
"type": "string",
"description": "The GitHub repository, as owner/name, e.g. 'vantageos-agency/vantage-peers'."
},
"active": {
"type": "boolean",
"default": true,
"description": "Whether the repo's webhook events are routed: false keeps the mapping but stops routing them."
},
"project": {
"type": "string",
"description": "The project the repo's work is billed to, e.g. 'vantage-peers'."
},
"reviewer": {
"type": "string",
"description": "Who reviews the repo's pull-request tasks. Omit to use the fleet default reviewer."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator that receives the repo's webhook events, e.g. 'sigma'."
},
"fallbackReviewer": {
"type": "string",
"description": "Who reviews when the reviewer is stopped. Omit to use the fleet default."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"repo",
"orchestrator",
"project",
"active"
],
"properties": {
"id": {
"type": "string",
"description": "The mapping's ID."
},
"repo": {
"type": "string",
"description": "The GitHub repo, as 'owner/name'."
},
"active": {
"type": "boolean",
"description": "Whether the repo's events are routed; false keeps the mapping without routing."
},
"project": {
"type": "string",
"description": "The project the repo's events are filed under."
},
"reviewer": {
"type": [
"string",
"null"
],
"description": "Who reviews the repo's pull-request tasks; absent when none was given (the fleet default applies)."
},
"orchestrator": {
"type": "string",
"description": "Who receives the repo's webhook events."
},
"fallbackReviewer": {
"type": [
"string",
"null"
],
"description": "Who reviews when the reviewer is stopped; absent when none was given (the fleet default applies)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Add repo mapping",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List all GitHub repo to orchestrator webhook mappings, newest first with cursor paging support. Returns { items[{ _id, _creationTime, repo, orchestrator, project }], nextCursor, truncated }: items are mappings, newest first; nextCursor is null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the same page as JSON. WHEN: use to audit which repos are monitored and verify routing before adding new mappings. EXAMPLE: list_repo_mappings limit=20 fields='lite'.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
How much of each row comes back: every stored field, or the short form, just the mapping's ID, creation time, repo, orchestrator and project.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
The nextCursor value a previous list_repo_mappings call returned, to fetch the following (older) page. Omit for the first page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"repo",
"orchestrator",
"project"
],
"properties": {
"_id": {
"type": "string",
"description": "The mapping's ID."
},
"repo": {
"type": "string",
"description": "The GitHub repository, as owner/name, e.g. 'acme/app'."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this mapping; absent on a fleet-owned mapping."
},
"active": {
"type": "boolean",
"description": "Whether events are routed for the repository; absent on lite rows."
},
"project": {
"type": "string",
"description": "The project the repository belongs to."
},
"reviewer": {
"type": "string",
"description": "Who reviews the repository's pull requests; absent when the fleet default applies, and on lite rows."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the repository's events are routed to."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"lastDeployedAt": {
"type": "number",
"description": "When that commit was deployed (milliseconds since the Unix epoch); absent when no deploy was recorded, and on lite rows."
},
"lastDeployedSHA": {
"type": "string",
"description": "The commit last deployed to production; absent when no deploy was recorded, and on lite rows."
},
"fallbackReviewer": {
"type": "string",
"description": "Who reviews when the reviewer cannot; absent when the fleet default applies, and on lite rows."
}
},
"additionalProperties": {}
},
"description": "The mappings, newest first; lite rows carry _id, _creationTime, repo, orchestrator and project."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_repo_mappings",
"description": "List all GitHub repo to orchestrator webhook mappings, newest first with cursor paging support. Returns { items[{ _id, _creationTime, repo, orchestrator, project }], nextCursor, truncated }: items are mappings, newest first; nextCursor is null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the same page as JSON. WHEN: use to audit which repos are monitored and verify routing before adding new mappings. EXAMPLE: list_repo_mappings limit=20 fields='lite'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_repo_mappings call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"default": "full",
"description": "How much of each row comes back: every stored field, or the short form, just the mapping's ID, creation time, repo, orchestrator and project."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"repo",
"orchestrator",
"project"
],
"properties": {
"_id": {
"type": "string",
"description": "The mapping's ID."
},
"repo": {
"type": "string",
"description": "The GitHub repository, as owner/name, e.g. 'acme/app'."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this mapping; absent on a fleet-owned mapping."
},
"active": {
"type": "boolean",
"description": "Whether events are routed for the repository; absent on lite rows."
},
"project": {
"type": "string",
"description": "The project the repository belongs to."
},
"reviewer": {
"type": "string",
"description": "Who reviews the repository's pull requests; absent when the fleet default applies, and on lite rows."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the repository's events are routed to."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"lastDeployedAt": {
"type": "number",
"description": "When that commit was deployed (milliseconds since the Unix epoch); absent when no deploy was recorded, and on lite rows."
},
"lastDeployedSHA": {
"type": "string",
"description": "The commit last deployed to production; absent when no deploy was recorded, and on lite rows."
},
"fallbackReviewer": {
"type": "string",
"description": "Who reviews when the reviewer cannot; absent when the fleet default applies, and on lite rows."
}
},
"additionalProperties": {}
},
"description": "The mappings, newest first; lite rows carry _id, _creationTime, repo, orchestrator and project."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List repo mappings",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Delete a GitHub repo mapping by repo name, stopping webhook event routing for that repo. Returns { repo, deleted }; deleted is false when no mapping existed for that repo. WHEN: use when a repo is archived or its events should no longer generate VP notifications. EXAMPLE: remove_repo_mapping repo='vantageos-agency/vantage-peers'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
repo
The repository whose mapping to delete, as owner/name, as list_repo_mappings shows it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
List the GitHub owners bound to your organisation (master: all), and for master the org-owned repo mappings that have no proof. Returns { bindings[{ owner, orgId, installationId, accountType, githubUserLogin, boundAt, active }], nextCursor, unprovenMappings?[{ repo, orgId, project, reason }], unprovenNextCursor? }; the unproven fields are present for the fleet master only, and a null cursor means that list is exhausted. WHEN: use to see which repos you may map, or to audit mappings created without GitHub proof. EXAMPLE: get_github_owner_bindings limit=100. Pages by cursor: pass `nextCursor` back as `cursor` (and `unprovenNextCursor` as `unprovenCursor`); null means exhausted.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many rows each of the two lists holds; when more exist, nextCursor (bindings) or unprovenNextCursor (unproven mappings) fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
The nextCursor a previous get_github_owner_bindings call returned. Omit for the first page of bindings.
Clear enough to supply this argument.
unprovenCursor
Where to resume the unproven mappings: the unprovenNextCursor a previous call returned. Only the fleet master is served that list. Omit for its first page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bindings",
"nextCursor"
],
"properties": {
"bindings": {
"type": "array",
"items": {
"type": "object",
"required": [
"owner",
"orgId",
"installationId",
"accountType",
"githubUserLogin",
"boundAt",
"active"
],
"properties": {
"orgId": {
"type": "string",
"description": "The slug of the organisation the owner is bound to."
},
"owner": {
"type": "string",
"description": "The GitHub owner (user or organisation login, lowercase) whose repositories the organisation may map."
},
"active": {
"type": "boolean",
"description": "False once the installation was deleted or suspended and the binding withdrawn; true otherwise."
},
"boundAt": {
"type": "number",
"description": "When the owner was bound (milliseconds since the Unix epoch)."
},
"accountType": {
"type": "string",
"description": "What the owner is on GitHub, as GitHub reports it: User or Organization."
},
"installationId": {
"type": "number",
"description": "The GitHub App installation that proved the binding."
},
"githubUserLogin": {
"type": "string",
"description": "The GitHub user who authorised the installation."
}
},
"additionalProperties": {}
},
"description": "The GitHub owners bound to your organisation (master: every organisation), one row per binding; empty when none."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass it back as `cursor` for the next page of bindings; null when the list is exhausted."
},
"unprovenMappings": {
"type": "array",
"items": {
"type": "object",
"required": [
"repo",
"orgId",
"project",
"reason"
],
"properties": {
"repo": {
"type": "string",
"description": "The mapped repository, as owner/name."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation the mapping belongs to."
},
"reason": {
"type": "string",
"description": "Why it has no proof: owner-not-bound (no binding for the repository's owner) or owner-bound-to-another-org."
},
"project": {
"type": "string",
"description": "The project the mapping files it under."
}
},
"additionalProperties": {}
},
"description": "Organisation-owned repo mappings created without GitHub proof; present for the fleet master only."
},
"unprovenNextCursor": {
"type": [
"string",
"null"
],
"description": "Pass it back as `unprovenCursor` for the next page of unproven mappings; null when exhausted; absent for everyone but the fleet master."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_github_owner_bindings",
"description": "List the GitHub owners bound to your organisation (master: all), and for master the org-owned repo mappings that have no proof. Returns { bindings[{ owner, orgId, installationId, accountType, githubUserLogin, boundAt, active }], nextCursor, unprovenMappings?[{ repo, orgId, project, reason }], unprovenNextCursor? }; the unproven fields are present for the fleet master only, and a null cursor means that list is exhausted. WHEN: use to see which repos you may map, or to audit mappings created without GitHub proof. EXAMPLE: get_github_owner_bindings limit=100. Pages by cursor: pass `nextCursor` back as `cursor` (and `unprovenNextCursor` as `unprovenCursor`); null means exhausted.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 100,
"maximum": 500,
"minimum": 1,
"description": "How many rows each of the two lists holds; when more exist, nextCursor (bindings) or unprovenNextCursor (unproven mappings) fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor a previous get_github_owner_bindings call returned. Omit for the first page of bindings."
},
"unprovenCursor": {
"type": "string",
"description": "Where to resume the unproven mappings: the unprovenNextCursor a previous call returned. Only the fleet master is served that list. Omit for its first page."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bindings",
"nextCursor"
],
"properties": {
"bindings": {
"type": "array",
"items": {
"type": "object",
"required": [
"owner",
"orgId",
"installationId",
"accountType",
"githubUserLogin",
"boundAt",
"active"
],
"properties": {
"orgId": {
"type": "string",
"description": "The slug of the organisation the owner is bound to."
},
"owner": {
"type": "string",
"description": "The GitHub owner (user or organisation login, lowercase) whose repositories the organisation may map."
},
"active": {
"type": "boolean",
"description": "False once the installation was deleted or suspended and the binding withdrawn; true otherwise."
},
"boundAt": {
"type": "number",
"description": "When the owner was bound (milliseconds since the Unix epoch)."
},
"accountType": {
"type": "string",
"description": "What the owner is on GitHub, as GitHub reports it: User or Organization."
},
"installationId": {
"type": "number",
"description": "The GitHub App installation that proved the binding."
},
"githubUserLogin": {
"type": "string",
"description": "The GitHub user who authorised the installation."
}
},
"additionalProperties": {}
},
"description": "The GitHub owners bound to your organisation (master: every organisation), one row per binding; empty when none."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Pass it back as `cursor` for the next page of bindings; null when the list is exhausted."
},
"unprovenMappings": {
"type": "array",
"items": {
"type": "object",
"required": [
"repo",
"orgId",
"project",
"reason"
],
"properties": {
"repo": {
"type": "string",
"description": "The mapped repository, as owner/name."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation the mapping belongs to."
},
"reason": {
"type": "string",
"description": "Why it has no proof: owner-not-bound (no binding for the repository's owner) or owner-bound-to-another-org."
},
"project": {
"type": "string",
"description": "The project the mapping files it under."
}
},
"additionalProperties": {}
},
"description": "Organisation-owned repo mappings created without GitHub proof; present for the fleet master only."
},
"unprovenNextCursor": {
"type": [
"string",
"null"
],
"description": "Pass it back as `unprovenCursor` for the next page of unproven mappings; null when exhausted; absent for everyone but the fleet master."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List GitHub owner bindings",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Create a fix pattern in the knowledge base documenting symptom, root cause, and optional validated fix. Returns { patternId, created: true }. WHEN: use after resolving a non-trivial bug so future agents can find and reuse the solution. EXAMPLE: create_fix_pattern symptom='hydration mismatch' rootCause='SSR/CSR time skew' tags=['next.js'] stack=['next.js','convex'] sourceProject='vantage-starter' createdBy='alpha' severity='major'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
symptom
What the bug looks like from the outside, as someone hitting it would describe it.
Clear enough to supply this argument.
rootCause
Why the bug happens: the underlying technical cause.
Clear enough to supply this argument.
tags
Labels for finding the pattern, e.g. ['react-hydration'].
Clear enough to supply this argument.
stack
The technologies involved, e.g. ['next.js', 'convex'].
Clear enough to supply this argument.
sourceProject
The project where the bug was found, e.g. 'myreeldream'.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the pattern's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
severity
How far the lesson reaches: critical (every orchestrator should know it), major (changes how this kind of work is done), minor (a local note).
Clear enough to supply this argument.
validatedFix
The fix confirmed to work. Omit when not known yet; validate_fix sets it later.
Clear enough to supply this argument.
files
The files the fix touched. Omit when not known.
Clear enough to supply this argument.
linkedIssueIds
Issues this pattern explains, by issue ID (get_fix_pattern shows the ones already linked; link_issue_to_pattern adds more later). Omit for none.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"created"
],
"properties": {
"created": {
"type": "boolean",
"description": "True: the pattern was written."
},
"patternId": {
"type": "string",
"description": "The new fix pattern."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "create_fix_pattern",
"description": "Create a fix pattern in the knowledge base documenting symptom, root cause, and optional validated fix. Returns { patternId, created: true }. WHEN: use after resolving a non-trivial bug so future agents can find and reuse the solution. EXAMPLE: create_fix_pattern symptom='hydration mismatch' rootCause='SSR/CSR time skew' tags=['next.js'] stack=['next.js','convex'] sourceProject='vantage-starter' createdBy='alpha' severity='major'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symptom",
"rootCause",
"tags",
"stack",
"sourceProject",
"severity"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels for finding the pattern, e.g. ['react-hydration']."
},
"files": {
"type": "array",
"items": {
"type": "string"
},
"description": "The files the fix touched. Omit when not known."
},
"stack": {
"type": "array",
"items": {
"type": "string"
},
"description": "The technologies involved, e.g. ['next.js', 'convex']."
},
"symptom": {
"type": "string",
"description": "What the bug looks like from the outside, as someone hitting it would describe it."
},
"severity": {
"enum": [
"critical",
"major",
"minor"
],
"type": "string",
"description": "How far the lesson reaches: critical (every orchestrator should know it), major (changes how this kind of work is done), minor (a local note)."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the pattern's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
},
"rootCause": {
"type": "string",
"description": "Why the bug happens: the underlying technical cause."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work. Omit when not known yet; validate_fix sets it later."
},
"sourceProject": {
"type": "string",
"description": "The project where the bug was found, e.g. 'myreeldream'."
},
"linkedIssueIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Issues this pattern explains, by issue ID (get_fix_pattern shows the ones already linked; link_issue_to_pattern adds more later). Omit for none."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"created"
],
"properties": {
"created": {
"type": "boolean",
"description": "True: the pattern was written."
},
"patternId": {
"type": "string",
"description": "The new fix pattern."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Create fix pattern",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Record one attempt at fixing a known fix pattern: what was tried, whether it worked, why, and optionally its commit. Returns { attemptId, patternId, worked }. WHEN: use after each fix attempt (successful or not) to build a complete fix history. EXAMPLE: add_fix_attempt patternId='j57aaaaa...' description='Added suppressHydrationWarning' worked=true why='Prevents mismatches' createdBy='beta'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
patternId
Which fix pattern: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it.
Clear enough to supply this argument.
description
What was tried: the fix approach.
Clear enough to supply this argument.
worked
Whether this attempt fixed the bug.
Clear enough to supply this argument.
why
Why it worked or did not: the reasoning a later reader needs.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the attempt's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
commit
The git commit of this attempt, as a SHA. Omit when it was not committed.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"attemptId",
"patternId",
"worked"
],
"properties": {
"worked": {
"type": "boolean",
"description": "Whether the attempt fixed the problem, as given."
},
"attemptId": {
"type": "string",
"description": "The attempt that was recorded."
},
"patternId": {
"type": "string",
"description": "The fix pattern it was recorded on."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "add_fix_attempt",
"description": "Record one attempt at fixing a known fix pattern: what was tried, whether it worked, why, and optionally its commit. Returns { attemptId, patternId, worked }. WHEN: use after each fix attempt (successful or not) to build a complete fix history. EXAMPLE: add_fix_attempt patternId='j57aaaaa...' description='Added suppressHydrationWarning' worked=true why='Prevents mismatches' createdBy='beta'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"description",
"worked",
"why"
],
"properties": {
"why": {
"type": "string",
"description": "Why it worked or did not: the reasoning a later reader needs."
},
"commit": {
"type": "string",
"description": "The git commit of this attempt, as a SHA. Omit when it was not committed."
},
"worked": {
"type": "boolean",
"description": "Whether this attempt fixed the bug."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the attempt's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
},
"patternId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "Which fix pattern: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it."
},
"description": {
"type": "string",
"description": "What was tried: the fix approach."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"attemptId",
"patternId",
"worked"
],
"properties": {
"worked": {
"type": "boolean",
"description": "Whether the attempt fixed the problem, as given."
},
"attemptId": {
"type": "string",
"description": "The attempt that was recorded."
},
"patternId": {
"type": "string",
"description": "The fix pattern it was recorded on."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Add fix attempt",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Set or update the validated fix description on a fix pattern after confirming it works. Fleet master only. Overwrites the pattern's validatedFix with the given text (the previous value is not kept) and re-indexes the pattern for search_fix_patterns. Returns { patternId, validatedFix, validated: true }. WHEN: use after a fix attempt succeeds to promote it as the canonical solution on the pattern. EXAMPLE: validate_fix patternId='j57aaaaa...' validatedFix='Add suppressHydrationWarning to date elements'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
patternId
Which fix pattern: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it.
Clear enough to supply this argument.
validatedFix
The fix confirmed to work, replacing any earlier one.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"validatedFix",
"validated"
],
"properties": {
"patternId": {
"type": "string",
"description": "The fix pattern that was validated."
},
"validated": {
"type": "boolean",
"description": "True: the validated fix was written."
},
"validatedFix": {
"type": "string",
"description": "The fix recorded as the one that works."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "validate_fix",
"description": "Set or update the validated fix description on a fix pattern after confirming it works. Fleet master only. Overwrites the pattern's validatedFix with the given text (the previous value is not kept) and re-indexes the pattern for search_fix_patterns. Returns { patternId, validatedFix, validated: true }. WHEN: use after a fix attempt succeeds to promote it as the canonical solution on the pattern. EXAMPLE: validate_fix patternId='j57aaaaa...' validatedFix='Add suppressHydrationWarning to date elements'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"validatedFix"
],
"properties": {
"patternId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "Which fix pattern: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work, replacing any earlier one."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"validatedFix",
"validated"
],
"properties": {
"patternId": {
"type": "string",
"description": "The fix pattern that was validated."
},
"validated": {
"type": "boolean",
"description": "True: the validated fix was written."
},
"validatedFix": {
"type": "string",
"description": "The fix recorded as the one that works."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Validate fix",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Semantic search over fix patterns by symptom description, ranked by relevance. Returns { items[{ patternId, score, symptom, rootCause, validatedFix?, tags, stack, sourceProject, severity }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: call BEFORE fixing any bug to check if a matching pattern exists and reuse the validated fix. EXAMPLE: search_fix_patterns query='message disappears after sending on mobile' limit=5.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
query
The problem in your own words, e.g. 'message disappears after sending'; matched by meaning.
Clear enough to supply this argument.
limit
How many of the best matches come back; the weaker ones beyond them are not returned.
Clear enough to supply this argument.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"patternId",
"score",
"symptom",
"rootCause",
"tags",
"stack",
"sourceProject",
"severity"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the pattern; empty when none."
},
"score": {
"type": "number",
"description": "How close the pattern's symptom is in meaning to the query (cosine similarity, higher is closer)."
},
"stack": {
"type": "array",
"items": {
"type": "string"
},
"description": "The technologies the pattern applies to; empty when none."
},
"symptom": {
"type": "string",
"description": "What was observed going wrong."
},
"severity": {
"type": "string",
"description": "How much the problem matters: critical, major or minor."
},
"patternId": {
"type": "string",
"description": "The pattern's ID: the patternId get_fix_pattern takes."
},
"rootCause": {
"type": "string",
"description": "What actually caused it."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work; absent until one is validated."
},
"sourceProject": {
"type": "string",
"description": "The project where it was first seen."
}
},
"additionalProperties": {}
},
"description": "The fix patterns closest in meaning to the query, best match first; empty when none passes the similarity threshold."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "search_fix_patterns",
"description": "Semantic search over fix patterns by symptom description, ranked by relevance. Returns { items[{ patternId, score, symptom, rootCause, validatedFix?, tags, stack, sourceProject, severity }], truncated? }, best match first; the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: call BEFORE fixing any bug to check if a matching pattern exists and reuse the validated fix. EXAMPLE: search_fix_patterns query='message disappears after sending on mobile' limit=5.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many of the best matches come back; the weaker ones beyond them are not returned."
},
"query": {
"type": "string",
"description": "The problem in your own words, e.g. 'message disappears after sending'; matched by meaning."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"patternId",
"score",
"symptom",
"rootCause",
"tags",
"stack",
"sourceProject",
"severity"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the pattern; empty when none."
},
"score": {
"type": "number",
"description": "How close the pattern's symptom is in meaning to the query (cosine similarity, higher is closer)."
},
"stack": {
"type": "array",
"items": {
"type": "string"
},
"description": "The technologies the pattern applies to; empty when none."
},
"symptom": {
"type": "string",
"description": "What was observed going wrong."
},
"severity": {
"type": "string",
"description": "How much the problem matters: critical, major or minor."
},
"patternId": {
"type": "string",
"description": "The pattern's ID: the patternId get_fix_pattern takes."
},
"rootCause": {
"type": "string",
"description": "What actually caused it."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work; absent until one is validated."
},
"sourceProject": {
"type": "string",
"description": "The project where it was first seen."
}
},
"additionalProperties": {}
},
"description": "The fix patterns closest in meaning to the query, best match first; empty when none passes the similarity threshold."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search fix patterns",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List fix patterns filtered by source project, newest first with cursor paging support. Returns { items[{ _id, _creationTime, symptom, rootCause, tags, stack, sourceProject, createdBy, severity, createdAt, updatedAt }], nextCursor, truncated }: items are fix patterns, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the patterns on the last page, else { items, nextCursor }. WHEN: use to audit the knowledge base or review all patterns for a specific project. EXAMPLE: list_fix_patterns project='vantage-starter' limit=20.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Keep only patterns found in this project. Omit for every project.
Clear enough to supply this argument.
limit
How many rows one page holds; when more exist, the reply's nextCursor fetches the next page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out.
Clear enough to supply this argument.
cursor
The nextCursor value a previous list_fix_patterns call returned, to fetch the following (older) page. Omit for the first page.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"symptom",
"rootCause",
"tags",
"stack",
"sourceProject",
"createdBy",
"severity",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The pattern's ID: the patternId the fix-pattern tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels for finding the pattern; empty when none."
},
"files": {
"type": "array",
"items": {
"type": "string"
},
"description": "The files the fix touched; absent when none were recorded."
},
"stack": {
"type": "array",
"items": {
"type": "string"
},
"description": "The technologies the pattern applies to, e.g. 'convex', 'nextjs'; empty when none."
},
"symptom": {
"type": "string",
"description": "What was observed going wrong."
},
"severity": {
"type": "string",
"description": "How much the problem matters: critical, major or minor."
},
"createdAt": {
"type": "number",
"description": "When the pattern was recorded (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who recorded the pattern."
},
"rootCause": {
"type": "string",
"description": "What actually caused it."
},
"updatedAt": {
"type": "number",
"description": "When the pattern last changed (milliseconds since the Unix epoch)."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work (validate_fix); absent until one is validated."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"sourceProject": {
"type": "string",
"description": "The project where it was first seen."
},
"linkedIssueIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The issues linked to the pattern (link_issue_to_pattern); absent when none."
}
},
"additionalProperties": {}
},
"description": "The fix patterns, newest first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "list_fix_patterns",
"description": "List fix patterns filtered by source project, newest first with cursor paging support. Returns { items[{ _id, _creationTime, symptom, rootCause, tags, stack, sourceProject, createdBy, severity, createdAt, updatedAt }], nextCursor, truncated }: items are fix patterns, newest first; nextCursor is the next page's cursor, null on the last page; truncated is true when the 60 KB response cap cut the page (nextCursor is then null). The text is the bare JSON array of the patterns on the last page, else { items, nextCursor }. WHEN: use to audit the knowledge base or review all patterns for a specific project. EXAMPLE: list_fix_patterns project='vantage-starter' limit=20.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 200,
"minimum": 1,
"description": "How many rows one page holds; when more exist, the reply's nextCursor fetches the next page."
},
"cursor": {
"type": "string",
"description": "The nextCursor value a previous list_fix_patterns call returned, to fetch the following (older) page. Omit for the first page."
},
"fields": {
"enum": [
"lite",
"full"
],
"type": "string",
"deprecated": true,
"description": "Has no effect on this tool: every row comes back whole, whatever is sent. Leave it out."
},
"project": {
"type": "string",
"description": "Keep only patterns found in this project. Omit for every project."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items",
"nextCursor",
"truncated"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"_creationTime",
"symptom",
"rootCause",
"tags",
"stack",
"sourceProject",
"createdBy",
"severity",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The pattern's ID: the patternId the fix-pattern tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels for finding the pattern; empty when none."
},
"files": {
"type": "array",
"items": {
"type": "string"
},
"description": "The files the fix touched; absent when none were recorded."
},
"stack": {
"type": "array",
"items": {
"type": "string"
},
"description": "The technologies the pattern applies to, e.g. 'convex', 'nextjs'; empty when none."
},
"symptom": {
"type": "string",
"description": "What was observed going wrong."
},
"severity": {
"type": "string",
"description": "How much the problem matters: critical, major or minor."
},
"createdAt": {
"type": "number",
"description": "When the pattern was recorded (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who recorded the pattern."
},
"rootCause": {
"type": "string",
"description": "What actually caused it."
},
"updatedAt": {
"type": "number",
"description": "When the pattern last changed (milliseconds since the Unix epoch)."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work (validate_fix); absent until one is validated."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"sourceProject": {
"type": "string",
"description": "The project where it was first seen."
},
"linkedIssueIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The issues linked to the pattern (link_issue_to_pattern); absent when none."
}
},
"additionalProperties": {}
},
"description": "The fix patterns, newest first; empty when none matches."
},
"truncated": {
"type": "boolean",
"description": "True when the page exceeded the 60 KB response cap and items holds only its first rows; false when items is the whole page."
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "The cursor to pass as `cursor` for the next (older) page; null on the last page, and null when truncated is true (a cut page has no continuation: narrow the query or lower limit instead)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "List fix patterns",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Link a VantagePeers issue to a fix pattern creating a bidirectional reference. Returns { patternId, issueId, linked: true }; linking an issue already linked changes nothing. WHEN: use after creating a fix pattern for an issue to connect the symptom record with the bug tracker. EXAMPLE: link_issue_to_pattern patternId='j57aaaaa...' issueId='j57bbbbb...'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
patternId
Which fix pattern: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it.
Clear enough to supply this argument.
issueId
The issue to link, by issue ID; get_fix_pattern shows the issues already linked.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Link an issue to a known fix",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema93/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"issueId",
"linked"
],
"properties": {
"linked": {
"type": "boolean",
"description": "True: the link exists (an existing link is left as it was)."
},
"issueId": {
"type": "string",
"description": "The issue that was linked."
},
"patternId": {
"type": "string",
"description": "The fix pattern the issue is linked to."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "link_issue_to_pattern",
"description": "Link a VantagePeers issue to a fix pattern creating a bidirectional reference. Returns { patternId, issueId, linked: true }; linking an issue already linked changes nothing. WHEN: use after creating a fix pattern for an issue to connect the symptom record with the bug tracker. EXAMPLE: link_issue_to_pattern patternId='j57aaaaa...' issueId='j57bbbbb...'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"issueId"
],
"properties": {
"issueId": {
"type": "string",
"description": "The issue to link, by issue ID; get_fix_pattern shows the issues already linked."
},
"patternId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "Which fix pattern: its patternId as create_fix_pattern, search_fix_patterns or list_fix_patterns returned it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId",
"issueId",
"linked"
],
"properties": {
"linked": {
"type": "boolean",
"description": "True: the link exists (an existing link is left as it was)."
},
"issueId": {
"type": "string",
"description": "The issue that was linked."
},
"patternId": {
"type": "string",
"description": "The fix pattern the issue is linked to."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Link an issue to a known fix",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Fetch a mission template by name with all its steps. Returns { found, item? { _id, _creationTime, name, steps, isDefault, createdBy, createdAt, updatedAt }, id? }: item is the template (name, description, brief, steps, isDefault) when found is true, id the name asked for when found is false; the text is the template as JSON, or null when no visible template has that name. WHEN: use before instantiate_template_into_mission to inspect steps and verify the template exists. EXAMPLE: get_mission_template name='issue-resolution-v2'.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Input documentation gives an agent enough context to populate the arguments.
name
The template to fetch, by the unique name update_mission_template saved it under, e.g. 'issue-resolution-v2'.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "The template name that was asked for; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"name",
"steps",
"isDefault",
"createdBy",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The template's ID."
},
"name": {
"type": "string",
"description": "The template's unique name, as instantiate_template_into_mission takes it."
},
"brief": {
"type": "string",
"description": "The brief a mission made from it gets when none is supplied; absent when none."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"description"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels the task gets; absent when none."
},
"title": {
"type": "string",
"description": "The title of the task the step creates."
},
"dependsOn": {
"type": "array",
"items": {
"type": "number"
},
"description": "The 0-based indexes of the steps this one waits on; absent when it waits on none."
},
"assignedTo": {
"type": "string",
"description": "The orchestrator role the task is assigned to; absent when the instantiation decides."
},
"description": {
"type": "string",
"description": "The brief of the task the step creates."
},
"assignedToInstance": {
"type": "string",
"description": "The instance the task is assigned to; absent when none is fixed."
}
},
"additionalProperties": {}
},
"description": "The steps, in order; each becomes one task."
},
"createdAt": {
"type": "number",
"description": "When the template was first saved (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who saved the template."
},
"deletedAt": {
"type": "number",
"description": "When the template was soft-deleted (milliseconds since the Unix epoch); absent on a live template, the only kind a read returns."
},
"isDefault": {
"type": "boolean",
"description": "True when the template is a default of the catalogue."
},
"updatedAt": {
"type": "number",
"description": "When the template last changed (milliseconds since the Unix epoch)."
},
"description": {
"type": "string",
"description": "What the template is for; absent when none was given."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"description": "The template; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the template exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the template as JSON, or null."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_mission_template",
"description": "Fetch a mission template by name with all its steps. Returns { found, item? { _id, _creationTime, name, steps, isDefault, createdBy, createdAt, updatedAt }, id? }: item is the template (name, description, brief, steps, isDefault) when found is true, id the name asked for when found is false; the text is the template as JSON, or null when no visible template has that name. WHEN: use before instantiate_template_into_mission to inspect steps and verify the template exists. EXAMPLE: get_mission_template name='issue-resolution-v2'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The template to fetch, by the unique name update_mission_template saved it under, e.g. 'issue-resolution-v2'."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"found"
],
"properties": {
"id": {
"type": "string",
"description": "The template name that was asked for; present when found is false, absent otherwise."
},
"item": {
"type": "object",
"required": [
"_id",
"_creationTime",
"name",
"steps",
"isDefault",
"createdBy",
"createdAt",
"updatedAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The template's ID."
},
"name": {
"type": "string",
"description": "The template's unique name, as instantiate_template_into_mission takes it."
},
"brief": {
"type": "string",
"description": "The brief a mission made from it gets when none is supplied; absent when none."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"description"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels the task gets; absent when none."
},
"title": {
"type": "string",
"description": "The title of the task the step creates."
},
"dependsOn": {
"type": "array",
"items": {
"type": "number"
},
"description": "The 0-based indexes of the steps this one waits on; absent when it waits on none."
},
"assignedTo": {
"type": "string",
"description": "The orchestrator role the task is assigned to; absent when the instantiation decides."
},
"description": {
"type": "string",
"description": "The brief of the task the step creates."
},
"assignedToInstance": {
"type": "string",
"description": "The instance the task is assigned to; absent when none is fixed."
}
},
"additionalProperties": {}
},
"description": "The steps, in order; each becomes one task."
},
"createdAt": {
"type": "number",
"description": "When the template was first saved (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who saved the template."
},
"deletedAt": {
"type": "number",
"description": "When the template was soft-deleted (milliseconds since the Unix epoch); absent on a live template, the only kind a read returns."
},
"isDefault": {
"type": "boolean",
"description": "True when the template is a default of the catalogue."
},
"updatedAt": {
"type": "number",
"description": "When the template last changed (milliseconds since the Unix epoch)."
},
"description": {
"type": "string",
"description": "What the template is for; absent when none was given."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
}
},
"description": "The template; present when found is true, absent otherwise.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when the template exists and is visible to you (then item holds it); false when it does not or is not visible (then id says what was asked for). The text is the template as JSON, or null."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get mission template",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Create or upsert a mission template by name; existing templates are overwritten. Fleet master only (the catalog is shared fleet-wide). Steps and description are replaced whole (an omitted description is cleared); an omitted brief or isDefault keeps the stored value. Missions already instantiated are not changed. Returns { templateId, name, stepCount }. WHEN: use to define or refine reusable multi-step workflow blueprints for recurring mission types. EXAMPLE: update_mission_template name='issue-resolution-v2' steps=[{title:'Triage',description:'...'}] createdBy='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
name
The template's unique name, e.g. 'issue-resolution-v2'; an existing name is overwritten.
Clear enough to supply this argument.
description
What the template is for. Omit it and an existing template's description is cleared.
Clear enough to supply this argument.
brief
The reusable mission brief; instantiate_template_into_mission copies it onto a mission that has none. Omit to keep the stored brief.
Clear enough to supply this argument.
steps › items › title
The task title this step produces.
Clear enough to supply this argument.
steps › items › description
What to do in this step; {{key}} placeholders are filled from the instantiation context.
Clear enough to supply this argument.
steps › items › tags
Tags the step's task gets. Omit for none.
Clear enough to supply this argument.
steps › items › assignedTo
Who does this step, by name, e.g. 'proxima'. Omit to assign it to the mission's pilot.
Clear enough to supply this argument.
steps › items › assignedToInstance
A specific instance for this step, e.g. 'proxima-vps'. Omit for any instance.
Clear enough to supply this argument.
steps › items › dependsOn
Earlier steps that must finish first, by position in this list counting from 0; they become task dependencies on instantiation. Omit for none.
Clear enough to supply this argument.
createdBy
The agent this call writes as, recorded as the template's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused.
Clear enough to supply this argument.
isDefault
Set true to make this the default template for its type. Omit it and a new template is not the default, while an existing one keeps its current setting.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"templateId",
"name",
"stepCount"
],
"properties": {
"name": {
"type": "string",
"description": "Its unique name."
},
"stepCount": {
"type": "number",
"description": "How many steps it now has."
},
"templateId": {
"type": "string",
"description": "The template that was written."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_mission_template",
"description": "Create or upsert a mission template by name; existing templates are overwritten. Fleet master only (the catalog is shared fleet-wide). Steps and description are replaced whole (an omitted description is cleared); an omitted brief or isDefault keeps the stored value. Missions already instantiated are not changed. Returns { templateId, name, stepCount }. WHEN: use to define or refine reusable multi-step workflow blueprints for recurring mission types. EXAMPLE: update_mission_template name='issue-resolution-v2' steps=[{title:'Triage',description:'...'}] createdBy='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"steps"
],
"properties": {
"name": {
"type": "string",
"description": "The template's unique name, e.g. 'issue-resolution-v2'; an existing name is overwritten."
},
"brief": {
"type": "string",
"description": "The reusable mission brief; instantiate_template_into_mission copies it onto a mission that has none. Omit to keep the stored brief."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"description"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags the step's task gets. Omit for none."
},
"title": {
"type": "string",
"description": "The task title this step produces."
},
"dependsOn": {
"type": "array",
"items": {
"type": "number"
},
"description": "Earlier steps that must finish first, by position in this list counting from 0; they become task dependencies on instantiation. Omit for none."
},
"assignedTo": {
"type": "string",
"description": "Who does this step, by name, e.g. 'proxima'. Omit to assign it to the mission's pilot."
},
"description": {
"type": "string",
"description": "What to do in this step; {{key}} placeholders are filled from the instantiation context."
},
"assignedToInstance": {
"type": "string",
"description": "A specific instance for this step, e.g. 'proxima-vps'. Omit for any instance."
}
}
},
"description": "The ordered steps, replacing any existing ones; each becomes one task when instantiated."
},
"createdBy": {
"type": "string",
"description": "The agent this call writes as, recorded as the template's author (e.g. 'sigma'). Omit it when your credential resolves one agent: it is then that agent. Otherwise omitting it is refused."
},
"isDefault": {
"type": "boolean",
"description": "Set true to make this the default template for its type. Omit it and a new template is not the default, while an existing one keeps its current setting."
},
"description": {
"type": "string",
"description": "What the template is for. Omit it and an existing template's description is cleared."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"templateId",
"name",
"stepCount"
],
"properties": {
"name": {
"type": "string",
"description": "Its unique name."
},
"stepCount": {
"type": "number",
"description": "How many steps it now has."
},
"templateId": {
"type": "string",
"description": "The template that was written."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update mission template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Create one task per template step inside a mission, pre-assigned to each step's declared orchestrator. If the target mission has no brief yet, the template's own brief (if any) is copied onto it — the mission's brief, once set, is never overwritten. Returns { taskIds, count }: the created task IDs, in step order. WHEN: use after create_mission to fan out a standard workflow from a template in one call. EXAMPLE: instantiate_template_into_mission templateName='issue-resolution-v2' missionId='k57a36y8...' callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
templateName
The template to use, by name, as get_mission_template shows it.
Clear enough to supply this argument.
missionId
The mission to fill: its missionId as returned by create_mission or list_missions.
Clear enough to supply this argument.
context
Values for the {{key}} placeholders in step descriptions, e.g. {issue: '#282'}; a placeholder with no value is left as written. Omit when the steps have none.
Clear enough to supply this argument.
titlePrefix
Text put in front of every task title, e.g. '[p25]'. Omit for none.
Clear enough to supply this argument.
callerOrchestrator
The agent instantiating, recorded as creator of the tasks. Omit it when your credential resolves one agent: it is then that agent; otherwise the tasks are created by 'system' (the fleet master) or by your own signed-in account.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskIds",
"count"
],
"properties": {
"count": {
"type": "number",
"description": "How many tasks were created."
},
"taskIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The tasks created in the mission, one per template step, in order."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "instantiate_template_into_mission",
"description": "Create one task per template step inside a mission, pre-assigned to each step's declared orchestrator. If the target mission has no brief yet, the template's own brief (if any) is copied onto it — the mission's brief, once set, is never overwritten. Returns { taskIds, count }: the created task IDs, in step order. WHEN: use after create_mission to fan out a standard workflow from a template in one call. EXAMPLE: instantiate_template_into_mission templateName='issue-resolution-v2' missionId='k57a36y8...' callerOrchestrator='alpha'. A person connected without an agent is refused here (PERSON_NO_HUMAN_DOOR): reconnect and choose an agent on the consent page.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"templateName",
"missionId"
],
"properties": {
"context": {
"type": "object",
"description": "Values for the {{key}} placeholders in step descriptions, e.g. {issue: '#282'}; a placeholder with no value is left as written. Omit when the steps have none.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"missionId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The mission to fill: its missionId as returned by create_mission or list_missions."
},
"titlePrefix": {
"type": "string",
"description": "Text put in front of every task title, e.g. '[p25]'. Omit for none."
},
"templateName": {
"type": "string",
"description": "The template to use, by name, as get_mission_template shows it."
},
"callerOrchestrator": {
"type": "string",
"description": "The agent instantiating, recorded as creator of the tasks. Omit it when your credential resolves one agent: it is then that agent; otherwise the tasks are created by 'system' (the fleet master) or by your own signed-in account."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskIds",
"count"
],
"properties": {
"count": {
"type": "number",
"description": "How many tasks were created."
},
"taskIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The tasks created in the mission, one per template step, in order."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Instantiate mission template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List which MCP tools a caller has called, with the first call time, the last call time and the call count of each. Returns { items[{ tool, firstAt, lastAt, count }], truncated? }, one row per tool the caller has called (times in Unix milliseconds); the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to see what a person or an agent seat has already tried, e.g. to tell what an onboarding step still has to introduce. EXAMPLE: get_tool_usage (your own usage) or get_tool_usage caller='agent:<agent id>' (an organisation admin reading a seat).
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
caller
Whose usage to read: 'user:<Clerk subject>' for a person or 'agent:<agent ID>' for an agent (list_peers returns agent IDs). Omit it to read your own. Reading another caller needs an organisation admin role.
Clear enough to supply this argument.
orgSlug
The organisation to read, by slug (fleet operators only). Omit it to read your own organisation; naming another one is refused unless you are a fleet operator.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"tool",
"firstAt",
"lastAt",
"count"
],
"properties": {
"tool": {
"type": "string",
"description": "The MCP tool's name, e.g. 'store_memory'."
},
"count": {
"type": "number",
"description": "How many times the tool was called."
},
"lastAt": {
"type": "number",
"description": "When the tool was last called (milliseconds since the Unix epoch)."
},
"firstAt": {
"type": "number",
"description": "When the tool was first called (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "One row per tool the caller has called; empty when it has called none."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_tool_usage",
"description": "List which MCP tools a caller has called, with the first call time, the last call time and the call count of each. Returns { items[{ tool, firstAt, lastAt, count }], truncated? }, one row per tool the caller has called (times in Unix milliseconds); the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to see what a person or an agent seat has already tried, e.g. to tell what an onboarding step still has to introduce. EXAMPLE: get_tool_usage (your own usage) or get_tool_usage caller='agent:<agent id>' (an organisation admin reading a seat).",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"caller": {
"type": "string",
"description": "Whose usage to read: 'user:<Clerk subject>' for a person or 'agent:<agent ID>' for an agent (list_peers returns agent IDs). Omit it to read your own. Reading another caller needs an organisation admin role."
},
"orgSlug": {
"type": "string",
"description": "The organisation to read, by slug (fleet operators only). Omit it to read your own organisation; naming another one is refused unless you are a fleet operator."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"tool",
"firstAt",
"lastAt",
"count"
],
"properties": {
"tool": {
"type": "string",
"description": "The MCP tool's name, e.g. 'store_memory'."
},
"count": {
"type": "number",
"description": "How many times the tool was called."
},
"lastAt": {
"type": "number",
"description": "When the tool was last called (milliseconds since the Unix epoch)."
},
"firstAt": {
"type": "number",
"description": "When the tool was first called (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "One row per tool the caller has called; empty when it has called none."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get tool usage",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
List which MCP tools a person has used across all the agents it owns (one per AI client) and its own direct calls, summed per tool with the earliest first call and the latest last call. Returns { items[{ tool, firstAt, lastAt, count }], truncated? }, summed across the person's agents and its own calls (times in Unix milliseconds); the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to tell what an onboarding step still has to introduce to a person, whichever AI client they used. EXAMPLE: get_owner_tool_usage ownerUserId='user_2abc' (an organisation admin reading a member).
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
ownerUserId
The person, by Clerk user ID (user_...): the same subject get_tool_usage takes after 'user:'. Reading another member needs an organisation admin role.
Clear enough to supply this argument.
orgSlug
The organisation to read, by slug (fleet operators only). Omit it to read your own organisation.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Get a person's tool usage across their agents",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema83/100
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"tool",
"firstAt",
"lastAt",
"count"
],
"properties": {
"tool": {
"type": "string",
"description": "The MCP tool's name, e.g. 'store_memory'."
},
"count": {
"type": "number",
"description": "How many times the tool was called."
},
"lastAt": {
"type": "number",
"description": "When the tool was last called (milliseconds since the Unix epoch)."
},
"firstAt": {
"type": "number",
"description": "When the tool was first called (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "One row per tool, summed across the person's agents and its own calls; empty when none was called."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_owner_tool_usage",
"description": "List which MCP tools a person has used across all the agents it owns (one per AI client) and its own direct calls, summed per tool with the earliest first call and the latest last call. Returns { items[{ tool, firstAt, lastAt, count }], truncated? }, summed across the person's agents and its own calls (times in Unix milliseconds); the text is the same items as a bare JSON array; over the 60 KB response cap both are cut and say so (truncated: true, and _meta in the text). WHEN: use to tell what an onboarding step still has to introduce to a person, whichever AI client they used. EXAMPLE: get_owner_tool_usage ownerUserId='user_2abc' (an organisation admin reading a member).",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"ownerUserId"
],
"properties": {
"orgSlug": {
"type": "string",
"description": "The organisation to read, by slug (fleet operators only). Omit it to read your own organisation."
},
"ownerUserId": {
"type": "string",
"description": "The person, by Clerk user ID (user_...): the same subject get_tool_usage takes after 'user:'. Reading another member needs an organisation admin role."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"tool",
"firstAt",
"lastAt",
"count"
],
"properties": {
"tool": {
"type": "string",
"description": "The MCP tool's name, e.g. 'store_memory'."
},
"count": {
"type": "number",
"description": "How many times the tool was called."
},
"lastAt": {
"type": "number",
"description": "When the tool was last called (milliseconds since the Unix epoch)."
},
"firstAt": {
"type": "number",
"description": "When the tool was first called (milliseconds since the Unix epoch)."
}
},
"additionalProperties": {}
},
"description": "One row per tool, summed across the person's agents and its own calls; empty when none was called."
},
"truncated": {
"type": "boolean",
"description": "True when the answer exceeded the 60 KB response cap and items holds only its first rows (the text then says so in _meta); absent when items is the whole answer."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get a person's tool usage across their agents",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Report who this connection acts as and what it may read and write, read from its own credential only. Returns { agent_id, agent_name, agent_status, org_slug, role, suggested_orchestrator_id, acting_name, default_write_namespace, writableNamespaces, namespaceReadPrefixes, namespaceWritePrefixes, fromAllowList, scope_profile_name, actor, caller_id, agent_unresolved_reason }: agent_id is the permanent ID tools take as an agent ID, suggested_orchestrator_id the name to pass where a tool asks which orchestrator acts, default_write_namespace where a write lands when no namespace is given. WHEN: use when a call needs your agent ID, orchestrator name or namespaces, instead of asking the user. EXAMPLE: whoami (no arguments).
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"scope_profile_name",
"fromAllowList",
"namespaceReadPrefixes",
"namespaceWritePrefixes",
"suggested_orchestrator_id",
"actor",
"agent_id",
"agent_unresolved_reason",
"caller_id",
"org_slug",
"role",
"acting_name"
],
"properties": {
"role": {
"enum": [
"master",
"org-member",
"oauth-client",
"legacy"
],
"type": "string",
"description": "How the caller authenticated: master bearer, Clerk-verified organisation member, VantagePeers OAuth client, or legacy (no context)."
},
"actor": {
"anyOf": [
{
"type": "object",
"required": [
"agentId",
"orgId",
"agentName",
"orgSlug"
],
"properties": {
"orgId": {
"type": "string",
"description": "The permanent ID of the organisation the agent belongs to."
},
"agentId": {
"type": [
"string",
"null"
],
"description": "The acting agent's stored ID (the identity tools take as an agent ID); null when the backend returned no ID."
},
"orgSlug": {
"type": "string",
"description": "The slug of the organisation the agent belongs to."
},
"agentName": {
"type": "string",
"description": "The agent's current name: a label, not its identity."
}
},
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "The agent acting on THIS request: verified from the x-vantage-agent-credential header, designated by the signed-in person, or stamped on a one-agent seat. agentId is the stored agent ID (the identity; agentName is only its current label), null when the backend returned no ID. null when no agent acts. Never contains the secret."
},
"agent_id": {
"type": [
"string",
"null"
],
"description": "The acting agent's stored ID (same as actor.agentId); null when no agent is resolved."
},
"org_slug": {
"type": [
"string",
"null"
],
"description": "Slug of the organisation the caller is bound to (verified org claim or token row); null for master/legacy."
},
"caller_id": {
"type": [
"string",
"null"
],
"description": "Stable OPAQUE id of the caller (vpu_ + 32 hex): an HMAC of the verified principal under a server secret. Identical for the same identity across sessions and tokens, different for two identities, never the raw Clerk user id and never an agent name. Null when the server has no id secret configured."
},
"agent_name": {
"type": [
"string",
"null"
],
"description": "The acting agent's current name (same as actor.agentName); null when no agent acts."
},
"acting_name": {
"type": [
"string",
"null"
],
"description": "The acting agent name verified from the agent credential on THIS request; null when none was presented."
},
"agent_status": {
"type": [
"string",
"null"
],
"description": "One plain sentence when no agent is bound to this connection, naming the step that binds one; null when an agent acts (and for the fleet master)."
},
"fromAllowList": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identities this Bearer [redacted] authorized to act as (the `from` values for send_message / create_task). Empty for master scope (wildcard suppressed) and legacy bearers."
},
"scope_profile_name": {
"type": "string",
"description": "The scope profile name of the current bearer (e.g. 'alpha-test-trio', 'master', 'legacy'). 'legacy' indicates a pre-OAuth Bearer [redacted] no scope profile."
},
"writableNamespaces": {
"type": "array",
"items": {
"type": "string"
},
"description": "Every namespace this session may write (each also admits its sub-namespaces): the write prefixes plus the caller's own agent and project namespaces. Empty for master scope (wildcard suppressed) and legacy bearers."
},
"namespaceReadPrefixes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namespace prefixes this Bearer [redacted] read from. Empty for master scope (wildcard suppressed) and legacy bearers."
},
"namespaceWritePrefixes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namespace prefixes this Bearer [redacted] write to. Empty for master scope (wildcard suppressed) and legacy bearers."
},
"agent_unresolved_reason": {
"anyOf": [
{
"enum": [
"no-context",
"actor-without-agent-id",
"person-designates-no-agent",
"org-level-seat-no-agent",
"seat-agent-not-in-token-org",
"no-agent-credential-presented",
"no-agent-resolved"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Why agent_id is null (e.g. person-designates-no-agent: the signed-in person has no designated agent); null when an agent ID is returned."
},
"default_write_namespace": {
"type": [
"string",
"null"
],
"description": "Where store_memory / store_episode write when namespace is omitted (a person: 'team/<org>'; a seat: 'orchestrator/<its own agent ID>'). Null when the session has no single natural namespace (master, legacy): name one explicitly."
},
"suggested_orchestrator_id": {
"type": [
"string",
"null"
],
"description": "The canonical orchestrator ID to use as `from` in send_message / create_task / create_mission. Derived from fromAllowList[0] (case preserved). Null when no fromAllowList is configured (DCR client-generic or legacy bearer). 'master' for master-scope bearers (internal orchestrators only)."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "whoami",
"description": "Report who this connection acts as and what it may read and write, read from its own credential only. Returns { agent_id, agent_name, agent_status, org_slug, role, suggested_orchestrator_id, acting_name, default_write_namespace, writableNamespaces, namespaceReadPrefixes, namespaceWritePrefixes, fromAllowList, scope_profile_name, actor, caller_id, agent_unresolved_reason }: agent_id is the permanent ID tools take as an agent ID, suggested_orchestrator_id the name to pass where a tool asks which orchestrator acts, default_write_namespace where a write lands when no namespace is given. WHEN: use when a call needs your agent ID, orchestrator name or namespaces, instead of asking the user. EXAMPLE: whoami (no arguments).",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"scope_profile_name",
"fromAllowList",
"namespaceReadPrefixes",
"namespaceWritePrefixes",
"suggested_orchestrator_id",
"actor",
"agent_id",
"agent_unresolved_reason",
"caller_id",
"org_slug",
"role",
"acting_name"
],
"properties": {
"role": {
"enum": [
"master",
"org-member",
"oauth-client",
"legacy"
],
"type": "string",
"description": "How the caller authenticated: master bearer, Clerk-verified organisation member, VantagePeers OAuth client, or legacy (no context)."
},
"actor": {
"anyOf": [
{
"type": "object",
"required": [
"agentId",
"orgId",
"agentName",
"orgSlug"
],
"properties": {
"orgId": {
"type": "string",
"description": "The permanent ID of the organisation the agent belongs to."
},
"agentId": {
"type": [
"string",
"null"
],
"description": "The acting agent's stored ID (the identity tools take as an agent ID); null when the backend returned no ID."
},
"orgSlug": {
"type": "string",
"description": "The slug of the organisation the agent belongs to."
},
"agentName": {
"type": "string",
"description": "The agent's current name: a label, not its identity."
}
},
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "The agent acting on THIS request: verified from the x-vantage-agent-credential header, designated by the signed-in person, or stamped on a one-agent seat. agentId is the stored agent ID (the identity; agentName is only its current label), null when the backend returned no ID. null when no agent acts. Never contains the secret."
},
"agent_id": {
"type": [
"string",
"null"
],
"description": "The acting agent's stored ID (same as actor.agentId); null when no agent is resolved."
},
"org_slug": {
"type": [
"string",
"null"
],
"description": "Slug of the organisation the caller is bound to (verified org claim or token row); null for master/legacy."
},
"caller_id": {
"type": [
"string",
"null"
],
"description": "Stable OPAQUE id of the caller (vpu_ + 32 hex): an HMAC of the verified principal under a server secret. Identical for the same identity across sessions and tokens, different for two identities, never the raw Clerk user id and never an agent name. Null when the server has no id secret configured."
},
"agent_name": {
"type": [
"string",
"null"
],
"description": "The acting agent's current name (same as actor.agentName); null when no agent acts."
},
"acting_name": {
"type": [
"string",
"null"
],
"description": "The acting agent name verified from the agent credential on THIS request; null when none was presented."
},
"agent_status": {
"type": [
"string",
"null"
],
"description": "One plain sentence when no agent is bound to this connection, naming the step that binds one; null when an agent acts (and for the fleet master)."
},
"fromAllowList": {
"type": "array",
"items": {
"type": "string"
},
"description": "Identities this Bearer [redacted] authorized to act as (the `from` values for send_message / create_task). Empty for master scope (wildcard suppressed) and legacy bearers."
},
"scope_profile_name": {
"type": "string",
"description": "The scope profile name of the current bearer (e.g. 'alpha-test-trio', 'master', 'legacy'). 'legacy' indicates a pre-OAuth Bearer [redacted] no scope profile."
},
"writableNamespaces": {
"type": "array",
"items": {
"type": "string"
},
"description": "Every namespace this session may write (each also admits its sub-namespaces): the write prefixes plus the caller's own agent and project namespaces. Empty for master scope (wildcard suppressed) and legacy bearers."
},
"namespaceReadPrefixes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namespace prefixes this Bearer [redacted] read from. Empty for master scope (wildcard suppressed) and legacy bearers."
},
"namespaceWritePrefixes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Namespace prefixes this Bearer [redacted] write to. Empty for master scope (wildcard suppressed) and legacy bearers."
},
"agent_unresolved_reason": {
"anyOf": [
{
"enum": [
"no-context",
"actor-without-agent-id",
"person-designates-no-agent",
"org-level-seat-no-agent",
"seat-agent-not-in-token-org",
"no-agent-credential-presented",
"no-agent-resolved"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Why agent_id is null (e.g. person-designates-no-agent: the signed-in person has no designated agent); null when an agent ID is returned."
},
"default_write_namespace": {
"type": [
"string",
"null"
],
"description": "Where store_memory / store_episode write when namespace is omitted (a person: 'team/<org>'; a seat: 'orchestrator/<its own agent ID>'). Null when the session has no single natural namespace (master, legacy): name one explicitly."
},
"suggested_orchestrator_id": {
"type": [
"string",
"null"
],
"description": "The canonical orchestrator ID to use as `from` in send_message / create_task / create_mission. Derived from fromAllowList[0] (case preserved). Null when no fromAllowList is configured (DCR client-generic or legacy bearer). 'master' for master-scope bearers (internal orchestrators only)."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Who am I",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Fetch one task by its taskId. Returns { _id, _creationTime, title, description?, assignedTo, assignedToId?, priority, status, project?, tags?, dependsOn?, missionId?, completionNote?, completionOutcome?, workSegments?[{ start }], estimatedMinutes?, actualMinutes?, startedAt?, completedAt?, dueDate?, blockedOnTaskId?, blockedCause?, deliverableState? { state, checkedAt }, deliverableDivergence?, createdBy?, createdAt?, updatedAt?, orgId? }, the stored task; deliverableDivergence is present when a published deliverable is still open. A task you may not read, or that does not exist, is an error result ('Task not found'). WHEN: use when you hold a taskId and need the full record: the brief in description, its work segments and its completion note. EXAMPLE: get_task taskId='k172735brsw6bc3j2dkkkfxqrx88kkjq'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
taskId
The task to fetch: its taskId as returned by create_task, list_tasks or search_tasks_by_keyword.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_task",
"description": "Fetch one task by its taskId. Returns { _id, _creationTime, title, description?, assignedTo, assignedToId?, priority, status, project?, tags?, dependsOn?, missionId?, completionNote?, completionOutcome?, workSegments?[{ start }], estimatedMinutes?, actualMinutes?, startedAt?, completedAt?, dueDate?, blockedOnTaskId?, blockedCause?, deliverableState? { state, checkedAt }, deliverableDivergence?, createdBy?, createdAt?, updatedAt?, orgId? }, the stored task; deliverableDivergence is present when a published deliverable is still open. A task you may not read, or that does not exist, is an error result ('Task not found'). WHEN: use when you hold a taskId and need the full record: the brief in description, its work segments and its completion note. EXAMPLE: get_task taskId='k172735brsw6bc3j2dkkkfxqrx88kkjq'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The task to fetch: its taskId as returned by create_task, list_tasks or search_tasks_by_keyword."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"status"
],
"properties": {
"_id": {
"type": "string",
"description": "The task's ID: the taskId the task tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels on the task; absent when it has none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this task; absent on a fleet-owned task."
},
"title": {
"type": "string",
"description": "The task's one-line title."
},
"status": {
"type": "string",
"description": "Where the task is: todo, in_progress, review, blocked, done, failed or cancelled."
},
"dueDate": {
"type": "number",
"description": "When the task is due (milliseconds since the Unix epoch); absent when it has no due date."
},
"project": {
"type": "string",
"description": "The project the task is billed and grouped under; absent when it has none."
},
"priority": {
"type": "string",
"description": "How urgent the task is: urgent, high, medium or low."
},
"createdAt": {
"type": "number",
"description": "When the task was created (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who created the task."
},
"dependsOn": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the tasks this one waits on; absent when it depends on none."
},
"missionId": {
"type": "string",
"description": "The mission the task belongs to; absent when it belongs to none."
},
"startedAt": {
"type": "number",
"description": "When work first started (milliseconds since the Unix epoch); absent before start_task."
},
"updatedAt": {
"type": "number",
"description": "When the task last changed (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "The agent or person the task is assigned to, by name."
},
"completedAt": {
"type": "number",
"description": "When the task closed (milliseconds since the Unix epoch); absent while it is open."
},
"description": {
"type": "string",
"description": "The brief: what the task asks for; absent when none was given."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of the assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"blockedCause": {
"type": "string",
"description": "Why the task is blocked: peer_task, human, authorisation or other; absent when it was never blocked."
},
"workSegments": {
"type": "array",
"items": {
"type": "object",
"required": [
"start"
],
"properties": {
"end": {
"type": "number",
"description": "When this stretch of work ended (milliseconds since the Unix epoch); absent while it is still open."
},
"start": {
"type": "number",
"description": "When this stretch of work started (milliseconds since the Unix epoch)."
},
"correction": {
"type": "object",
"required": [
"originalStart",
"reason",
"by",
"at"
],
"properties": {
"at": {
"type": "number",
"description": "When it was corrected (milliseconds since the Unix epoch)."
},
"by": {
"type": "string",
"description": "Who corrected it."
},
"reason": {
"type": "string",
"description": "Why the segment was corrected."
},
"originalEnd": {
"type": "number",
"description": "The end before the correction (milliseconds since the Unix epoch); absent when the segment was open."
},
"originalStart": {
"type": "number",
"description": "The start before the correction (milliseconds since the Unix epoch)."
}
},
"description": "The correct_task_segment record of a changed segment; absent when it was never corrected.",
"additionalProperties": {}
}
},
"additionalProperties": {}
},
"description": "The measured stretches of work (start_task to pause_task or a close), from which actualMinutes is summed; absent before work started."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"actualMinutes": {
"type": "number",
"description": "The measured working time, in minutes; absent until the task closes with a measured duration."
},
"completionNote": {
"type": "string",
"description": "What was delivered, with its evidence, as written when the task closed; absent until it closes."
},
"blockedOnTaskId": {
"type": "string",
"description": "The task this one is blocked on, when block_task named one; absent otherwise."
},
"deliverableState": {
"type": "object",
"required": [
"state",
"checkedAt"
],
"properties": {
"state": {
"type": "string",
"description": "What the last check found: delivered (the published export exists), not_found or unresolved (the check could not decide)."
},
"reason": {
"type": "string",
"description": "Why the check could not decide or found nothing; absent when it was delivered."
},
"version": {
"type": "string",
"description": "The published version the check found; absent when nothing was found."
},
"checkedAt": {
"type": "number",
"description": "When the deliverable was last checked (milliseconds since the Unix epoch)."
}
},
"description": "The last machine check of the package export the task promised; absent when the task declares no deliverable or it was never checked.",
"additionalProperties": {}
},
"estimatedMinutes": {
"type": "number",
"description": "The estimate given at creation, in minutes; absent when none."
},
"completionOutcome": {
"type": "string",
"description": "How the task closed: succeeded (complete_task) or failed (fail_task); absent while it is open."
},
"deliverableDivergence": {
"type": "string",
"description": "'delivered-but-open' when the promised deliverable is published while the task is still open; absent when no divergence is known."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get task",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Fetch a single fix pattern by its patternId, with up to 100 of its fix attempts. Returns { _id, _creationTime, symptom, rootCause, validatedFix?, files?, tags, stack, sourceProject, linkedIssueIds?, createdBy, severity, createdAt, updatedAt, attempts[{ _id, description, commit?, worked, why, createdBy, createdAt }] }. A pattern you may not read is refused with RBAC_DENIED, and one that does not exist is an error result ('Fix pattern not found'). WHEN: use when you have a patternId from list_fix_patterns/search_fix_patterns and need the full record with attempts history. EXAMPLE: get_fix_pattern patternId='m9748paffd0emrbwyskj868e1x88kvhj'.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patternId
The fix pattern to fetch, by the patternId create_fix_pattern, search_fix_patterns or list_fix_patterns returns.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"symptom",
"rootCause",
"tags",
"stack",
"sourceProject",
"createdBy",
"severity",
"createdAt",
"updatedAt",
"attempts"
],
"properties": {
"_id": {
"type": "string",
"description": "The pattern's ID: the patternId the fix-pattern tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels for finding the pattern; empty when none."
},
"files": {
"type": "array",
"items": {
"type": "string"
},
"description": "The files the fix touched; absent when none were recorded."
},
"stack": {
"type": "array",
"items": {
"type": "string"
},
"description": "The technologies the pattern applies to, e.g. 'convex', 'nextjs'; empty when none."
},
"symptom": {
"type": "string",
"description": "What was observed going wrong."
},
"attempts": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"description",
"worked",
"why",
"createdBy",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The attempt's ID."
},
"why": {
"type": "string",
"description": "Why it worked, or why it did not."
},
"commit": {
"type": "string",
"description": "The git commit of the attempt; absent when none was given."
},
"worked": {
"type": "boolean",
"description": "Whether the attempt fixed the symptom."
},
"createdAt": {
"type": "number",
"description": "When the attempt was recorded (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who recorded the attempt."
},
"description": {
"type": "string",
"description": "What was tried."
}
},
"additionalProperties": {}
},
"description": "The fix attempts recorded against the pattern, at most 100; empty when none was recorded."
},
"severity": {
"type": "string",
"description": "How much the problem matters: critical, major or minor."
},
"createdAt": {
"type": "number",
"description": "When the pattern was recorded (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who recorded the pattern."
},
"rootCause": {
"type": "string",
"description": "What actually caused it."
},
"updatedAt": {
"type": "number",
"description": "When the pattern last changed (milliseconds since the Unix epoch)."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work (validate_fix); absent until one is validated."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"sourceProject": {
"type": "string",
"description": "The project where it was first seen."
},
"linkedIssueIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The issues linked to the pattern (link_issue_to_pattern); absent when none."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_fix_pattern",
"description": "Fetch a single fix pattern by its patternId, with up to 100 of its fix attempts. Returns { _id, _creationTime, symptom, rootCause, validatedFix?, files?, tags, stack, sourceProject, linkedIssueIds?, createdBy, severity, createdAt, updatedAt, attempts[{ _id, description, commit?, worked, why, createdBy, createdAt }] }. A pattern you may not read is refused with RBAC_DENIED, and one that does not exist is an error result ('Fix pattern not found'). WHEN: use when you have a patternId from list_fix_patterns/search_fix_patterns and need the full record with attempts history. EXAMPLE: get_fix_pattern patternId='m9748paffd0emrbwyskj868e1x88kvhj'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patternId"
],
"properties": {
"patternId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The fix pattern to fetch, by the patternId create_fix_pattern, search_fix_patterns or list_fix_patterns returns."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"symptom",
"rootCause",
"tags",
"stack",
"sourceProject",
"createdBy",
"severity",
"createdAt",
"updatedAt",
"attempts"
],
"properties": {
"_id": {
"type": "string",
"description": "The pattern's ID: the patternId the fix-pattern tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free labels for finding the pattern; empty when none."
},
"files": {
"type": "array",
"items": {
"type": "string"
},
"description": "The files the fix touched; absent when none were recorded."
},
"stack": {
"type": "array",
"items": {
"type": "string"
},
"description": "The technologies the pattern applies to, e.g. 'convex', 'nextjs'; empty when none."
},
"symptom": {
"type": "string",
"description": "What was observed going wrong."
},
"attempts": {
"type": "array",
"items": {
"type": "object",
"required": [
"_id",
"description",
"worked",
"why",
"createdBy",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The attempt's ID."
},
"why": {
"type": "string",
"description": "Why it worked, or why it did not."
},
"commit": {
"type": "string",
"description": "The git commit of the attempt; absent when none was given."
},
"worked": {
"type": "boolean",
"description": "Whether the attempt fixed the symptom."
},
"createdAt": {
"type": "number",
"description": "When the attempt was recorded (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who recorded the attempt."
},
"description": {
"type": "string",
"description": "What was tried."
}
},
"additionalProperties": {}
},
"description": "The fix attempts recorded against the pattern, at most 100; empty when none was recorded."
},
"severity": {
"type": "string",
"description": "How much the problem matters: critical, major or minor."
},
"createdAt": {
"type": "number",
"description": "When the pattern was recorded (milliseconds since the Unix epoch)."
},
"createdBy": {
"type": "string",
"description": "Who recorded the pattern."
},
"rootCause": {
"type": "string",
"description": "What actually caused it."
},
"updatedAt": {
"type": "number",
"description": "When the pattern last changed (milliseconds since the Unix epoch)."
},
"validatedFix": {
"type": "string",
"description": "The fix confirmed to work (validate_fix); absent until one is validated."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"sourceProject": {
"type": "string",
"description": "The project where it was first seen."
},
"linkedIssueIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "The issues linked to the pattern (link_issue_to_pattern); absent when none."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get fix pattern",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Fetch a single peer message: its full body, sender, channel, session day and organisation. Returns { _id, _creationTime, from, fromId?, fromInstanceId?, channel, content, sessionDay?, tenantId?, tenantOrgId?, createdAt }: from is the sender, tenantId the organisation it was sent in. A message you may not read, or that does not exist, is an error result ('Message not found'). WHEN: use when you have a messageId from list_messages/check_messages and need the raw row (e.g. for read-receipt audit, delete confirmation, or referencing in a fix pattern). EXAMPLE: get_message messageId='jn7eg21wdaxzdcpdxwkvhaxqnh88jqg2'.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
messageId
The message: its messageId as returned by send_message, list_messages or search_messages_by_keyword.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"from",
"channel",
"content",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The message's ID: the messageId the message tools take."
},
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'."
},
"content": {
"type": "string",
"description": "The full message body."
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the message was sent in; absent on a fleet message."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"sessionDay": {
"type": "number",
"description": "The sender's working-day number when it was sent; absent when none was recorded."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation; absent on a fleet message and on messages written before it was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_message",
"description": "Fetch a single peer message: its full body, sender, channel, session day and organisation. Returns { _id, _creationTime, from, fromId?, fromInstanceId?, channel, content, sessionDay?, tenantId?, tenantOrgId?, createdAt }: from is the sender, tenantId the organisation it was sent in. A message you may not read, or that does not exist, is an error result ('Message not found'). WHEN: use when you have a messageId from list_messages/check_messages and need the raw row (e.g. for read-receipt audit, delete confirmation, or referencing in a fix pattern). EXAMPLE: get_message messageId='jn7eg21wdaxzdcpdxwkvhaxqnh88jqg2'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"messageId"
],
"properties": {
"messageId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The message: its messageId as returned by send_message, list_messages or search_messages_by_keyword."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"from",
"channel",
"content",
"createdAt"
],
"properties": {
"_id": {
"type": "string",
"description": "The message's ID: the messageId the message tools take."
},
"from": {
"type": "string",
"description": "The sender: the agent or person who wrote it."
},
"fromId": {
"type": "string",
"description": "The permanent ID of the sender: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"channel": {
"type": "string",
"description": "Where it was sent: an agent's name, a comma-separated list of names, or 'broadcast'."
},
"content": {
"type": "string",
"description": "The full message body."
},
"tenantId": {
"type": "string",
"description": "The slug of the organisation the message was sent in; absent on a fleet message."
},
"createdAt": {
"type": "number",
"description": "When the message was sent (milliseconds since the Unix epoch)."
},
"sessionDay": {
"type": "number",
"description": "The sender's working-day number when it was sent; absent when none was recorded."
},
"tenantOrgId": {
"type": "string",
"description": "The permanent ID of that organisation; absent on a fleet message and on messages written before it was recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"fromInstanceId": {
"type": "string",
"description": "The sender's instance, e.g. 'pi-vps'; absent when none was recorded."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get message",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Fetch one recurring task template by its ID. Returns { _id, _creationTime, title, description?, assignedTo, assignedToId?, priority, project?, tags?, cronExpression, nextRunAt, lastCreatedAt?, lastTaskId?, skippedRuns?, lastSkippedAt?, lastSkipReason?, active, createdBy, orgId? }, the stored template; a template you may not read, or that does not exist, is an error result ('Recurring task not found'). lastTaskId is the last task the schedule created; skippedRuns counts the consecutive runs that created nothing because that task was still open, and resets when a task is created. WHEN: use when you hold a recurringTaskId and need its schedule, assignee and last run. EXAMPLE: get_recurring_task recurringTaskId='k57dy3049btafda9m2f5d2ggk987ph3f'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
recurringTaskId
The recurring template: its ID as returned by create_recurring_task or list_recurring_tasks.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"cronExpression",
"nextRunAt",
"active",
"createdBy"
],
"properties": {
"_id": {
"type": "string",
"description": "The template's ID: the recurringTaskId (or taskId) the recurring tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The labels every created task gets; absent when none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this schedule; absent on a fleet-owned schedule."
},
"title": {
"type": "string",
"description": "The title every created task gets."
},
"active": {
"type": "boolean",
"description": "Whether the schedule runs: false after pause_recurring_task, true after resume_recurring_task."
},
"project": {
"type": "string",
"description": "The project every created task is filed under; absent when none."
},
"priority": {
"type": "string",
"description": "The priority every created task gets: urgent, high, medium or low."
},
"createdBy": {
"type": "string",
"description": "Who created the schedule."
},
"nextRunAt": {
"type": "number",
"description": "When the schedule next creates a task (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "Who every created task is assigned to, by name."
},
"lastTaskId": {
"type": "string",
"description": "The last task the schedule created; absent before its first run."
},
"description": {
"type": "string",
"description": "The brief every created task gets; absent when none was given."
},
"skippedRuns": {
"type": "number",
"description": "How many consecutive runs created nothing because the last task was still open; resets to 0 when a task is created; absent before any run was skipped."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of that assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"lastCreatedAt": {
"type": "number",
"description": "When the schedule last created a task (milliseconds since the Unix epoch); absent before its first run."
},
"lastSkippedAt": {
"type": "number",
"description": "When the latest run was skipped (milliseconds since the Unix epoch); absent when none was."
},
"cronExpression": {
"type": "string",
"description": "The schedule, as a cron expression, e.g. '0 9 * * 1' (Mondays at 09:00)."
},
"lastSkipReason": {
"type": "string",
"description": "Why the latest run was skipped, naming the open task; absent when none was."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_recurring_task",
"description": "Fetch one recurring task template by its ID. Returns { _id, _creationTime, title, description?, assignedTo, assignedToId?, priority, project?, tags?, cronExpression, nextRunAt, lastCreatedAt?, lastTaskId?, skippedRuns?, lastSkippedAt?, lastSkipReason?, active, createdBy, orgId? }, the stored template; a template you may not read, or that does not exist, is an error result ('Recurring task not found'). lastTaskId is the last task the schedule created; skippedRuns counts the consecutive runs that created nothing because that task was still open, and resets when a task is created. WHEN: use when you hold a recurringTaskId and need its schedule, assignee and last run. EXAMPLE: get_recurring_task recurringTaskId='k57dy3049btafda9m2f5d2ggk987ph3f'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recurringTaskId"
],
"properties": {
"recurringTaskId": {
"type": "string",
"pattern": "^[a-z0-9]{32}$",
"description": "The recurring template: its ID as returned by create_recurring_task or list_recurring_tasks."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"_id",
"_creationTime",
"title",
"assignedTo",
"priority",
"cronExpression",
"nextRunAt",
"active",
"createdBy"
],
"properties": {
"_id": {
"type": "string",
"description": "The template's ID: the recurringTaskId (or taskId) the recurring tools take."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The labels every created task gets; absent when none."
},
"orgId": {
"type": "string",
"description": "The slug of the organisation that owns this schedule; absent on a fleet-owned schedule."
},
"title": {
"type": "string",
"description": "The title every created task gets."
},
"active": {
"type": "boolean",
"description": "Whether the schedule runs: false after pause_recurring_task, true after resume_recurring_task."
},
"project": {
"type": "string",
"description": "The project every created task is filed under; absent when none."
},
"priority": {
"type": "string",
"description": "The priority every created task gets: urgent, high, medium or low."
},
"createdBy": {
"type": "string",
"description": "Who created the schedule."
},
"nextRunAt": {
"type": "number",
"description": "When the schedule next creates a task (milliseconds since the Unix epoch)."
},
"assignedTo": {
"type": "string",
"description": "Who every created task is assigned to, by name."
},
"lastTaskId": {
"type": "string",
"description": "The last task the schedule created; absent before its first run."
},
"description": {
"type": "string",
"description": "The brief every created task gets; absent when none was given."
},
"skippedRuns": {
"type": "number",
"description": "How many consecutive runs created nothing because the last task was still open; resets to 0 when a task is created; absent before any run was skipped."
},
"assignedToId": {
"type": "string",
"description": "The permanent ID of that assignee: an agent ID, or 'user:<subject>' for a signed-in person; absent on rows written before IDs were recorded."
},
"_creationTime": {
"type": "number",
"description": "When the row was created (milliseconds since the Unix epoch)."
},
"lastCreatedAt": {
"type": "number",
"description": "When the schedule last created a task (milliseconds since the Unix epoch); absent before its first run."
},
"lastSkippedAt": {
"type": "number",
"description": "When the latest run was skipped (milliseconds since the Unix epoch); absent when none was."
},
"cronExpression": {
"type": "string",
"description": "The schedule, as a cron expression, e.g. '0 9 * * 1' (Mondays at 09:00)."
},
"lastSkipReason": {
"type": "string",
"description": "Why the latest run was skipped, naming the open task; absent when none was."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Get recurring task",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Export a VantagePeers namespace as an OKF v0.1 bundle (tarball). Returns { bundleUrl, storageId, size, fileCount, manifest: { types: { memoryCount, briefingCount, taskCount }, truncated, urlExpiresAt } }; the signed bundleUrl stops working at urlExpiresAt, when the stored bundle is purged. WHEN: use to ship a snapshot to Knowledge Catalog / RAG bridge / audit. EXAMPLE: export_okf_bundle namespace='project/elpi-corp' format='tarball'.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
namespace
The namespace prefix to export, e.g. 'project/elpi-corp', 'team/<orgId>', 'org/<slug>'; any prefix you may write is accepted, and a caller bound to an identity must match the namespace's owner (no cross-tenant export).
Clear enough to supply this argument.
types
Which record families to include: 'memory-*' (every memory kind), 'memory-<kind>' (one kind), 'briefing-note', 'task'. Omit (or null) to export all three families.
Clear enough to supply this argument.
format
How the bundle is packaged: tarball is the one produced today; tree is refused (OKF_FORMAT_UNSUPPORTED) until it is built.
Clear enough to supply this argument.
since
An ISO 8601 timestamp: include only entries updated at or after it. Omit (or null) to export everything.
Clear enough to supply this argument.
urlTtl
How long the signed download URL stays valid, in seconds; the stored bundle is purged when it expires. Without it, the URL lasts the default duration.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Export a namespace as an OKF bundle",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema92/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bundleUrl",
"storageId",
"size",
"fileCount",
"manifest"
],
"properties": {
"size": {
"type": "number",
"description": "The tarball's size, in bytes."
},
"manifest": {
"type": "object",
"required": [
"types",
"truncated",
"urlExpiresAt"
],
"properties": {
"types": {
"type": "object",
"required": [
"memoryCount",
"briefingCount",
"taskCount"
],
"properties": {
"taskCount": {
"type": "number",
"description": "How many tasks were exported."
},
"memoryCount": {
"type": "number",
"description": "How many memories were exported."
},
"briefingCount": {
"type": "number",
"description": "How many briefing notes were exported."
}
},
"description": "What the bundle holds, by record family.",
"additionalProperties": {}
},
"truncated": {
"type": "boolean",
"description": "True when a size bound stopped the export early, so the bundle is incomplete."
},
"urlExpiresAt": {
"type": "string",
"description": "When bundleUrl stops working and the stored bundle is purged, as an ISO 8601 timestamp."
}
},
"description": "What the bundle contains and how long it is kept.",
"additionalProperties": {}
},
"bundleUrl": {
"type": "string",
"description": "The signed URL the tarball downloads from, until manifest.urlExpiresAt."
},
"fileCount": {
"type": "number",
"description": "How many files the tarball holds."
},
"storageId": {
"type": "string",
"description": "The stored tarball, which import_okf_bundle takes as storageId."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "export_okf_bundle",
"description": "Export a VantagePeers namespace as an OKF v0.1 bundle (tarball). Returns { bundleUrl, storageId, size, fileCount, manifest: { types: { memoryCount, briefingCount, taskCount }, truncated, urlExpiresAt } }; the signed bundleUrl stops working at urlExpiresAt, when the stored bundle is purged. WHEN: use to ship a snapshot to Knowledge Catalog / RAG bridge / audit. EXAMPLE: export_okf_bundle namespace='project/elpi-corp' format='tarball'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"namespace",
"format"
],
"properties": {
"since": {
"type": [
"string",
"null"
],
"description": "An ISO 8601 timestamp: include only entries updated at or after it. Omit (or null) to export everything."
},
"types": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Which record families to include: 'memory-*' (every memory kind), 'memory-<kind>' (one kind), 'briefing-note', 'task'. Omit (or null) to export all three families."
},
"format": {
"enum": [
"tarball",
"tree"
],
"type": "string",
"description": "How the bundle is packaged: tarball is the one produced today; tree is refused (OKF_FORMAT_UNSUPPORTED) until it is built."
},
"urlTtl": {
"type": "integer",
"default": 3600,
"maximum": 9007199254740991,
"description": "How long the signed download URL stays valid, in seconds; the stored bundle is purged when it expires. Without it, the URL lasts the default duration.",
"exclusiveMinimum": 0
},
"namespace": {
"type": "string",
"description": "The namespace prefix to export, e.g. 'project/elpi-corp', 'team/<orgId>', 'org/<slug>'; any prefix you may write is accepted, and a caller bound to an identity must match the namespace's owner (no cross-tenant export)."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bundleUrl",
"storageId",
"size",
"fileCount",
"manifest"
],
"properties": {
"size": {
"type": "number",
"description": "The tarball's size, in bytes."
},
"manifest": {
"type": "object",
"required": [
"types",
"truncated",
"urlExpiresAt"
],
"properties": {
"types": {
"type": "object",
"required": [
"memoryCount",
"briefingCount",
"taskCount"
],
"properties": {
"taskCount": {
"type": "number",
"description": "How many tasks were exported."
},
"memoryCount": {
"type": "number",
"description": "How many memories were exported."
},
"briefingCount": {
"type": "number",
"description": "How many briefing notes were exported."
}
},
"description": "What the bundle holds, by record family.",
"additionalProperties": {}
},
"truncated": {
"type": "boolean",
"description": "True when a size bound stopped the export early, so the bundle is incomplete."
},
"urlExpiresAt": {
"type": "string",
"description": "When bundleUrl stops working and the stored bundle is purged, as an ISO 8601 timestamp."
}
},
"description": "What the bundle contains and how long it is kept.",
"additionalProperties": {}
},
"bundleUrl": {
"type": "string",
"description": "The signed URL the tarball downloads from, until manifest.urlExpiresAt."
},
"fileCount": {
"type": "number",
"description": "How many files the tarball holds."
},
"storageId": {
"type": "string",
"description": "The stored tarball, which import_okf_bundle takes as storageId."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Export a namespace as an OKF bundle",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Import an OKF v0.1 bundle (memories + briefing-notes + tasks) into a target VantagePeers namespace. Returns { imported: { memories, briefings, tasks }, skipped, conflicts: [{ path, reason }] }; in dry-run the counts are what a merge would import, and nothing is written. Entries already present (same content) are skipped, so a replay imports nothing. WHEN: use to restore a snapshot, migrate workspace data between tenants, or replay an export. EXAMPLE: import_okf_bundle storageId='abc...' targetNamespace='team/acme-corp' mode='merge'.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
bundleUrl
A signed HTTPS URL to an OKF tarball, e.g. the bundleUrl export_okf_bundle returned. Omit it when storageId is given.
Clear enough to supply this argument.
storageId
An uploaded tarball, by the storageId claim_upload returned. Omit it when bundleUrl is given.
Clear enough to supply this argument.
targetNamespace
Where the entries are written, e.g. 'team/<orgId>' or 'project/<slug>'; a namespace of another tenant is refused.
Clear enough to supply this argument.
mode
What the import does: dry-run previews the counts without writing, merge inserts what is new and skips what is already there. replace is accepted and today behaves exactly as merge: nothing already stored is deleted.
Clear enough to supply this argument.
idempotencyKey
Has no effect: no key is stored or compared, and content de-duplication already makes a replay import nothing. Accepted only so that a client which sends it is not refused; leave it out.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Import an OKF bundle into a namespace",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema91/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"imported",
"skipped",
"conflicts"
],
"properties": {
"skipped": {
"type": "number",
"description": "Entries left out because the same content is already stored."
},
"imported": {
"type": "object",
"required": [
"memories",
"briefings",
"tasks"
],
"properties": {
"tasks": {
"type": "number",
"description": "Tasks written (in dry-run: that a merge would write)."
},
"memories": {
"type": "number",
"description": "Memories written (in dry-run: that a merge would write)."
},
"briefings": {
"type": "number",
"description": "Briefing notes written (in dry-run: that a merge would write)."
}
},
"description": "What the import wrote, by record family.",
"additionalProperties": {}
},
"conflicts": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"reason"
],
"properties": {
"path": {
"type": "string",
"description": "The bundle file that could not be imported."
},
"reason": {
"type": "string",
"description": "Why it could not be imported."
}
},
"additionalProperties": {}
},
"description": "The bundle files that could not be imported; empty when none."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "import_okf_bundle",
"description": "Import an OKF v0.1 bundle (memories + briefing-notes + tasks) into a target VantagePeers namespace. Returns { imported: { memories, briefings, tasks }, skipped, conflicts: [{ path, reason }] }; in dry-run the counts are what a merge would import, and nothing is written. Entries already present (same content) are skipped, so a replay imports nothing. WHEN: use to restore a snapshot, migrate workspace data between tenants, or replay an export. EXAMPLE: import_okf_bundle storageId='abc...' targetNamespace='team/acme-corp' mode='merge'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"targetNamespace",
"mode"
],
"properties": {
"mode": {
"enum": [
"dry-run",
"merge",
"replace"
],
"type": "string",
"description": "What the import does: dry-run previews the counts without writing, merge inserts what is new and skips what is already there. replace is accepted and today behaves exactly as merge: nothing already stored is deleted."
},
"bundleUrl": {
"type": [
"string",
"null"
],
"description": "A signed HTTPS URL to an OKF tarball, e.g. the bundleUrl export_okf_bundle returned. Omit it when storageId is given."
},
"storageId": {
"type": [
"string",
"null"
],
"description": "An uploaded tarball, by the storageId claim_upload returned. Omit it when bundleUrl is given."
},
"idempotencyKey": {
"type": "string",
"deprecated": true,
"description": "Has no effect: no key is stored or compared, and content de-duplication already makes a replay import nothing. Accepted only so that a client which sends it is not refused; leave it out."
},
"targetNamespace": {
"type": "string",
"description": "Where the entries are written, e.g. 'team/<orgId>' or 'project/<slug>'; a namespace of another tenant is refused."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"imported",
"skipped",
"conflicts"
],
"properties": {
"skipped": {
"type": "number",
"description": "Entries left out because the same content is already stored."
},
"imported": {
"type": "object",
"required": [
"memories",
"briefings",
"tasks"
],
"properties": {
"tasks": {
"type": "number",
"description": "Tasks written (in dry-run: that a merge would write)."
},
"memories": {
"type": "number",
"description": "Memories written (in dry-run: that a merge would write)."
},
"briefings": {
"type": "number",
"description": "Briefing notes written (in dry-run: that a merge would write)."
}
},
"description": "What the import wrote, by record family.",
"additionalProperties": {}
},
"conflicts": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"reason"
],
"properties": {
"path": {
"type": "string",
"description": "The bundle file that could not be imported."
},
"reason": {
"type": "string",
"description": "Why it could not be imported."
}
},
"additionalProperties": {}
},
"description": "The bundle files that could not be imported; empty when none."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Import an OKF bundle into a namespace",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Ingest a document binary (PDF, Markdown, plain text) into the Knowledge Base. storageId names a file already uploaded and claimed for your org: generate_upload_url (given the file's sha256) returns the upload URL and ticket, the file is POSTed there, and claim_upload (given the ticket) returns the storageId this tool takes. A storageId your org has not claimed is refused (AUTH_STORAGE_NOT_OWNED). Server-side: text extraction → paragraph-aware chunking (~512 tokens/chunk with 50-char overlap) → stores chunks as memories at namespace team/<orgId>/<docId>. Requires Clerk JWT with org_id — no-org bearers are rejected. Re-ingest with same docId supersedes prior version (isLatest flip, idempotent). One document per call. Returns { docId, chunkCount, storageId }. EXAMPLE: store_document_chunked storageId='kg2anjqa…' mimeType='text/markdown' filename='spec.md'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
storageId
The uploaded file, by the storageId claim_upload returned for your organisation.
Clear enough to supply this argument.
mimeType
The document's format; it decides how text is extracted (PDF parsing, or raw UTF-8 for Markdown and plain text).
Clear enough to supply this argument.
filename
The original file name, e.g. 'spec.md', kept in each chunk's metadata.
Clear enough to supply this argument.
docId
A stable ID for the document. Omit it and a new UUID is generated; pass the docId store_document_chunked returned earlier to replace that document's previous version.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"docId",
"chunkCount",
"storageId"
],
"properties": {
"docId": {
"type": "string",
"description": "The document's ID: pass it again to replace the document, or to soft_delete_document."
},
"storageId": {
"type": "string",
"description": "The uploaded file the document was read from."
},
"chunkCount": {
"type": "number",
"description": "How many searchable chunks the document was split into."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "store_document_chunked",
"description": "Ingest a document binary (PDF, Markdown, plain text) into the Knowledge Base. storageId names a file already uploaded and claimed for your org: generate_upload_url (given the file's sha256) returns the upload URL and ticket, the file is POSTed there, and claim_upload (given the ticket) returns the storageId this tool takes. A storageId your org has not claimed is refused (AUTH_STORAGE_NOT_OWNED). Server-side: text extraction → paragraph-aware chunking (~512 tokens/chunk with 50-char overlap) → stores chunks as memories at namespace team/<orgId>/<docId>. Requires Clerk JWT with org_id — no-org bearers are rejected. Re-ingest with same docId supersedes prior version (isLatest flip, idempotent). One document per call. Returns { docId, chunkCount, storageId }. EXAMPLE: store_document_chunked storageId='kg2anjqa…' mimeType='text/markdown' filename='spec.md'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"storageId",
"mimeType",
"filename"
],
"properties": {
"docId": {
"type": "string",
"description": "A stable ID for the document. Omit it and a new UUID is generated; pass the docId store_document_chunked returned earlier to replace that document's previous version."
},
"filename": {
"type": "string",
"description": "The original file name, e.g. 'spec.md', kept in each chunk's metadata."
},
"mimeType": {
"enum": [
"application/pdf",
"text/markdown",
"text/plain"
],
"type": "string",
"description": "The document's format; it decides how text is extracted (PDF parsing, or raw UTF-8 for Markdown and plain text)."
},
"storageId": {
"type": "string",
"description": "The uploaded file, by the storageId claim_upload returned for your organisation."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"docId",
"chunkCount",
"storageId"
],
"properties": {
"docId": {
"type": "string",
"description": "The document's ID: pass it again to replace the document, or to soft_delete_document."
},
"storageId": {
"type": "string",
"description": "The uploaded file the document was read from."
},
"chunkCount": {
"type": "number",
"description": "How many searchable chunks the document was split into."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Ingest document into Knowledge Base",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Soft-delete all Knowledge Base chunks for a document. Marks every isLatest=true chunk for docId as isLatest=false — chunks remain in the DB for audit but are excluded from recall and search. Requires Clerk JWT with org_id (same org that ingested the document). One document per call. Returns { docId, markedCount }: docId is the document that was soft-deleted, markedCount counts the chunks marked deleted in this call's first batch; a larger document finishes in the background, so a count equal to the batch size means more were still being marked (0 when none was live, e.g. a repeated call). EXAMPLE: soft_delete_document docId='abc-123-uuid'.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
docId
The document: the docId store_document_chunked returned. Its chunks in team/<orgId>/<docId> leave search.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"docId",
"markedCount"
],
"properties": {
"docId": {
"type": "string",
"description": "The document that was soft-deleted."
},
"markedCount": {
"type": "number",
"description": "How many of its chunks this call marked deleted, in its first batch of 200; the rest of a larger document is marked in the background. 0 when none were live."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "soft_delete_document",
"description": "Soft-delete all Knowledge Base chunks for a document. Marks every isLatest=true chunk for docId as isLatest=false — chunks remain in the DB for audit but are excluded from recall and search. Requires Clerk JWT with org_id (same org that ingested the document). One document per call. Returns { docId, markedCount }: docId is the document that was soft-deleted, markedCount counts the chunks marked deleted in this call's first batch; a larger document finishes in the background, so a count equal to the batch size means more were still being marked (0 when none was live, e.g. a repeated call). EXAMPLE: soft_delete_document docId='abc-123-uuid'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"docId"
],
"properties": {
"docId": {
"type": "string",
"description": "The document: the docId store_document_chunked returned. Its chunks in team/<orgId>/<docId> leave search."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"docId",
"markedCount"
],
"properties": {
"docId": {
"type": "string",
"description": "The document that was soft-deleted."
},
"markedCount": {
"type": "number",
"description": "How many of its chunks this call marked deleted, in its first batch of 200; the rest of a larger document is marked in the background. 0 when none were live."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Soft-delete Knowledge Base document",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Mint a Convex storage upload URL for the Knowledge Base ingest flow. The caller's org (from the Clerk JWT) is bound implicitly. To CLAIM the upload later (required before validate_okf_bundle reads it), first compute the SHA-256 of the exact file you will upload and pass it as sha256: the response then also carries a single-use upload ticket bound to your org AND to that content (valid 15 minutes, shown once); after the POST, call claim_upload with the storageId and the ticket. Without sha256 you get the URL only (no ticket): that blob cannot be claimed, so store_document_chunked refuses it. Pass sha256 for any upload you intend to ingest. Requires Clerk JWT with org_id — no-org bearers are rejected. One URL per call. Returns { uploadUrl, ticket, expiresAt?, note? }; the text is the upload URL alone (first item), then a JSON item { ticket, expiresAt } (ticket null, with a note, when no sha256 was passed). EXAMPLE: generate_upload_url sha256='2cf24dba…' → 'https://…convex.cloud/api/storage/upload?...' + {"ticket":"9f…","expiresAt":…}.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
sha256
The SHA-256 digest of the exact file you will upload, as `sha256sum file` prints it. Omit it and you get a URL with no ticket: that upload can never be claimed or ingested.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uploadUrl",
"ticket"
],
"properties": {
"note": {
"type": "string",
"description": "Why there is no ticket; present only when no sha256 was passed."
},
"ticket": {
"type": [
"string",
"null"
],
"description": "The upload ticket claim_upload takes with that storageId; null when no sha256 was passed, so the file can never be claimed."
},
"expiresAt": {
"type": "number",
"description": "When the ticket expires (milliseconds since the Unix epoch); absent when there is no ticket."
},
"uploadUrl": {
"type": "string",
"description": "The one-time URL to POST the file to; the response gives its storageId. The text's first item is this URL alone."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "generate_upload_url",
"description": "Mint a Convex storage upload URL for the Knowledge Base ingest flow. The caller's org (from the Clerk JWT) is bound implicitly. To CLAIM the upload later (required before validate_okf_bundle reads it), first compute the SHA-256 of the exact file you will upload and pass it as sha256: the response then also carries a single-use upload ticket bound to your org AND to that content (valid 15 minutes, shown once); after the POST, call claim_upload with the storageId and the ticket. Without sha256 you get the URL only (no ticket): that blob cannot be claimed, so store_document_chunked refuses it. Pass sha256 for any upload you intend to ingest. Requires Clerk JWT with org_id — no-org bearers are rejected. One URL per call. Returns { uploadUrl, ticket, expiresAt?, note? }; the text is the upload URL alone (first item), then a JSON item { ticket, expiresAt } (ticket null, with a note, when no sha256 was passed). EXAMPLE: generate_upload_url sha256='2cf24dba…' → 'https://…convex.cloud/api/storage/upload?...' + {\"ticket\":\"9f…\",\"expiresAt\":…}.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "The SHA-256 digest of the exact file you will upload, as `sha256sum file` prints it. Omit it and you get a URL with no ticket: that upload can never be claimed or ingested."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"uploadUrl",
"ticket"
],
"properties": {
"note": {
"type": "string",
"description": "Why there is no ticket; present only when no sha256 was passed."
},
"ticket": {
"type": [
"string",
"null"
],
"description": "The upload ticket claim_upload takes with that storageId; null when no sha256 was passed, so the file can never be claimed."
},
"expiresAt": {
"type": "number",
"description": "When the ticket expires (milliseconds since the Unix epoch); absent when there is no ticket."
},
"uploadUrl": {
"type": "string",
"description": "The one-time URL to POST the file to; the response gives its storageId. The text's first item is this URL alone."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Generate Knowledge Base upload URL",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Claim an uploaded blob for your organisation with the single-use ticket generate_upload_url returned. WHEN: after POSTing a file to the upload URL, before store_document_chunked ingests it or validate_okf_bundle reads it by storageId. Binds the storageId to your org only if the ticket is valid, unused, unexpired, issued to your own org, the blob was uploaded after the ticket was issued, and its content matches the sha256 declared to generate_upload_url; the ticket is consumed. A storageId without its ticket cannot be claimed. Returns { storageId, orgId }. EXAMPLE: claim_upload storageId='kg2anjqa…' ticket='9f3c…'.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
storageId
The storageId the upload URL from generate_upload_url answered after your POST.
Clear enough to supply this argument.
ticket
The single-use ticket generate_upload_url returned beside the URL.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Claim an uploaded blob for your organisation",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema93/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"storageId",
"orgId"
],
"properties": {
"orgId": {
"type": "string",
"description": "The organisation the file is bound to, by slug."
},
"storageId": {
"type": "string",
"description": "The uploaded file, now bound to your organisation: store_document_chunked and import_okf_bundle accept it."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "claim_upload",
"description": "Claim an uploaded blob for your organisation with the single-use ticket generate_upload_url returned. WHEN: after POSTing a file to the upload URL, before store_document_chunked ingests it or validate_okf_bundle reads it by storageId. Binds the storageId to your org only if the ticket is valid, unused, unexpired, issued to your own org, the blob was uploaded after the ticket was issued, and its content matches the sha256 declared to generate_upload_url; the ticket is consumed. A storageId without its ticket cannot be claimed. Returns { storageId, orgId }. EXAMPLE: claim_upload storageId='kg2anjqa…' ticket='9f3c…'.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"storageId",
"ticket"
],
"properties": {
"ticket": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "The single-use ticket generate_upload_url returned beside the URL."
},
"storageId": {
"type": "string",
"minLength": 1,
"description": "The storageId the upload URL from generate_upload_url answered after your POST."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"storageId",
"orgId"
],
"properties": {
"orgId": {
"type": "string",
"description": "The organisation the file is bound to, by slug."
},
"storageId": {
"type": "string",
"description": "The uploaded file, now bound to your organisation: store_document_chunked and import_okf_bundle accept it."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Claim an uploaded blob for your organisation",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Audit a rolling window of recent closed-task notes, messages and memories for claims about fleet state (a commit SHA, a PR number, a VantagePeers ID, or a decisive verb such as merged, deployed or approved) that carry no source citation line (a 'recall("<query>")→[ids]' or 'none-needed: <reason>' marker). Served to the fleet master only; advisory, it changes and blocks nothing. Returns { countsByOrch, countsByCategory, samples[{ orchestrator, day, category, snippet, artifactId }] }: countsByOrch maps each orchestrator to its number of flagged artifacts; countsByCategory counts them by the tool that wrote them (complete_task notes, send_message messages, store_memory memories); samples lists up to 50 flagged artifacts, newest first, each { orchestrator, day (YYYY-MM-DD), category, snippet (first 200 characters), artifactId }. At most 2000 rows of each kind are read per call. WHEN: auditing a sprint window or one orchestrator's citation rate. EXAMPLE: improvisation_digest windowDays=7 orchestrators=['sigma','pi'].
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
windowDays
The length of the scanned window, in days ending now: artifacts created before it are not read.
Clear enough to supply this argument.
orchestrators
Count and sample only artifacts written by these orchestrators, e.g. ['sigma', 'pi']. Omit for every orchestrator.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"countsByOrch",
"countsByCategory",
"samples"
],
"properties": {
"samples": {
"type": "array",
"items": {
"type": "object",
"required": [
"orchestrator",
"day",
"category",
"snippet",
"artifactId"
],
"properties": {
"day": {
"type": "string",
"description": "The day the artifact was written, as YYYY-MM-DD."
},
"snippet": {
"type": "string",
"description": "The first 200 characters of the artifact's text."
},
"category": {
"type": "string",
"description": "The tool that wrote it: complete_task, send_message or store_memory."
},
"artifactId": {
"type": "string",
"description": "The flagged task, message or memory, by its ID (get_task, get_message or get_memory reads it)."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the artifact belongs to, by name."
}
},
"additionalProperties": {}
},
"description": "Up to 50 flagged artifacts, newest first; empty when none was flagged."
},
"countsByOrch": {
"type": "object",
"description": "For each orchestrator (by name), how many of its artifacts in the window state fleet facts without a source citation; an orchestrator with none is absent.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"countsByCategory": {
"type": "object",
"description": "How many flagged artifacts each writing tool produced: complete_task (closing notes), send_message (messages), store_memory (memories).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "improvisation_digest",
"description": "Audit a rolling window of recent closed-task notes, messages and memories for claims about fleet state (a commit SHA, a PR number, a VantagePeers ID, or a decisive verb such as merged, deployed or approved) that carry no source citation line (a 'recall(\"<query>\")→[ids]' or 'none-needed: <reason>' marker). Served to the fleet master only; advisory, it changes and blocks nothing. Returns { countsByOrch, countsByCategory, samples[{ orchestrator, day, category, snippet, artifactId }] }: countsByOrch maps each orchestrator to its number of flagged artifacts; countsByCategory counts them by the tool that wrote them (complete_task notes, send_message messages, store_memory memories); samples lists up to 50 flagged artifacts, newest first, each { orchestrator, day (YYYY-MM-DD), category, snippet (first 200 characters), artifactId }. At most 2000 rows of each kind are read per call. WHEN: auditing a sprint window or one orchestrator's citation rate. EXAMPLE: improvisation_digest windowDays=7 orchestrators=['sigma','pi'].",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"windowDays": {
"type": "number",
"default": 7,
"description": "The length of the scanned window, in days ending now: artifacts created before it are not read."
},
"orchestrators": {
"type": "array",
"items": {
"type": "string"
},
"description": "Count and sample only artifacts written by these orchestrators, e.g. ['sigma', 'pi']. Omit for every orchestrator."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"countsByOrch",
"countsByCategory",
"samples"
],
"properties": {
"samples": {
"type": "array",
"items": {
"type": "object",
"required": [
"orchestrator",
"day",
"category",
"snippet",
"artifactId"
],
"properties": {
"day": {
"type": "string",
"description": "The day the artifact was written, as YYYY-MM-DD."
},
"snippet": {
"type": "string",
"description": "The first 200 characters of the artifact's text."
},
"category": {
"type": "string",
"description": "The tool that wrote it: complete_task, send_message or store_memory."
},
"artifactId": {
"type": "string",
"description": "The flagged task, message or memory, by its ID (get_task, get_message or get_memory reads it)."
},
"orchestrator": {
"type": "string",
"description": "The orchestrator the artifact belongs to, by name."
}
},
"additionalProperties": {}
},
"description": "Up to 50 flagged artifacts, newest first; empty when none was flagged."
},
"countsByOrch": {
"type": "object",
"description": "For each orchestrator (by name), how many of its artifacts in the window state fleet facts without a source citation; an orchestrator with none is absent.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"countsByCategory": {
"type": "object",
"description": "How many flagged artifacts each writing tool produced: complete_task (closing notes), send_message (messages), store_memory (memories).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Find uncited state claims",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Search tasks by keywordBM25 full-text keyword search over task titles, ranked by relevance.
02Search briefing notes by keywordBM25 full-text keyword search over briefing note content, ranked by relevance.
03List briefing notesList briefing notes filtered by topic, newest first, with cursor paging support.
04Search memories by meaning+wordsCombined vector + BM25 search via Reciprocal Rank Fusion for best semantic and keyword coverage.
05Search messages by keywordBM25 full-text keyword search over message content, ranked by relevance.
Want to run these tasks against your MCP server with us?
VantagePeers setup, tools, quality score, publishing readiness, and alternatives.
How do I add VantagePeers to Claude, ChatGPT, or Cursor?
Add VantagePeers to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.vantagepeers.com/mcp.
Is VantagePeers MCP ready for ChatGPT and Claude?
As of November 9, 2026, VantagePeers scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is VantagePeers's MCP tool documentation?
As of November 9, 2026, VantagePeers scores 97/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 93 of 93 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to VantagePeers?
As of November 9, 2026, alternatives to VantagePeers in productivity on the Manufact MCP leaderboard include AdaptlyPost, Notion MCP, Paperpal, Turkish Airlines, and RedReplier.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.