Skip to main content
Glama

On Board

Shared project memory for agents. One MCP server, one project memory folder, many IDEs and agent clients. Skill-first setup, one shared runtime, and project-scoped configuration.

License: Apache 2.0 MCP MCP Badge Release A2A On Board MCP server

Related MCP server: ForgeSwarm

What this is

On Board is a local MCP server for coordinating AI agents across a project. It gives Claude Desktop, Claude Code, Codex, Cursor, Antigravity, and other MCP clients the same project memory, ticket queue, and handoff history.

The goal is simple: when one agent stops and another agent continues, the next agent should not need the human to explain the project again.

onboard → read memory → claim work → write progress → hand off

Everything stays local to the project unless you choose to connect other tools.


Quick start (skill-first)

Install the onboard skill from inside the project you want to configure:

# Node.js 22.20 or later; select your agent when prompted.
npx skills add swisspra/On_Board --skill onboard

npx runs the skills CLI from npm; the skill itself comes from Git. No separate On Board npm package is needed. The skill guides runtime installation and native client configuration; installing the skill alone does not start an MCP server, upgrade an existing shared runtime, or initialize memory.

Native resources require a verified 4.2+ runtime. A working 4.1.1 or source installation can stay in place; see runtime upgrades or the optional source runtime.

Then send your agent this prompt:

Using /onboard, set up On Board for this project. Keep existing memory and other MCP servers unchanged.

The /onboard skill reuses one shared onboard-memory-mcp runtime and configures one project — the one you run it in — for one client of your choice. It resolves an existing runtime first and installs the shared runtime only when none is present (reuse, not a per-project install). It reads and writes only that project's own MCP config. It does not initialize or migrate .agent-mem/, and it does not touch other MCP servers, your instructions, or hooks.

What happens, in order:

  1. Reload your agent after the install so it discovers the new /onboard skill (reopen the window, or start a new session).

  2. The skill resolves or installs the shared runtime and writes the project's MCP config.

  3. Trust and restart your MCP client so it loads the new agent-memory server. Some clients ask before running a newly added server; approve the prompt, then restart.

Prerequisites are real, not hidden behind a one-command promise:

  • Node.js ≥ 22.20 to run npx skills.

  • Setup helper: Python ≥ 3.11. The skill's scripts/setup.py needs it; where the machine's python3 is older, run the one-time helper with uv run --no-project --python 3.12 scripts/setup.py ….

  • Runtime: Python ≥ 3.10, plus uv or pipx already installed, for the onboard-memory-mcp runtime the skill installs.

Runtime states, so you know where you are: Runtime available (the runtime is resolved or installed) → Configured (the project's MCP config now points at it) → Awaiting trust or restart (the client has not loaded it yet) → Ready (the client shows the agent-memory tools). Setup ends at Ready; initializing or joining a board is a separate step, started only when you explicitly ask the agent to begin work.

Prefer to wire things by hand, or install from a package manager or a clone? Those paths stay fully supported — see Manual installation and docs/SETUP.md.


🚀 v4.0.0 — agents now wake each other

Until v4 this board was pull-only: an agent found out about new work when a human told it to look. v4 ships memory_wait_for_event — an agent parks inside one tool call and wakes the moment a peer creates a ticket, submits work, or delivers a verdict.

This is not a demo claim. In the launch trial, a GPT agent (Codex) and a Claude agent closed a full reject → fix → resubmit cycle on this board with zero human relay — the reviewer's fix instructions travelled inside the wake payload, the worker re-read the file, attached a sha256, and resubmitted; the reviewer reproduced the hash byte-for-byte before approving:

A2A transaction sequence — every arrow is a real transaction from the launch trial

Full mechanics in Agent-to-agent: the listening half · breaking changes in CHANGELOG.md · release notes.

Why this exists

Most agent workflows break for boring reasons:

  • The next chat does not know what the last chat did.

  • Parallel agents overwrite or redo each other's work.

  • Important decisions live only in conversation history.

  • Handoffs are informal, so review and follow-up work drift.

On Board keeps those facts in project-local files under .agent-mem/. The MCP tools expose that memory to any supported client.

Who this is for

  • Solo developers using more than one agent or IDE

  • Teams experimenting with multi-agent coding workflows

  • Projects where handoffs, tickets, and review notes matter

  • Local-first MCP users who want shared context without a hosted service

It is not an autonomous project manager. Humans still decide what matters, review important changes, and accept the final result.


Manual installation

These paths stay supported; they are just secondary to the skill-first quick start above. Use them to install from a package manager, or to run everything from a clone by hand.

Install the server

The server is published as onboard-memory-mcp. Install it with whichever tool you prefer:

# Homebrew (tap once, then the short name works: brew install onboard-memory)
brew install swisspra/tap/onboard-memory

# pipx
pipx install onboard-memory-mcp

# uv
uv tool install --python 3.12 onboard-memory-mcp

All three provide the onboard-memory-mcp command (Homebrew also adds a short onboard-memory alias). Homebrew covers macOS and Linux; on Windows use pipx or uv (the command is onboard-memory-mcp.exe). Point your MCP client's command at it instead of python3 onboard_server.py. You can also skip this and run from a clone using the setup paths below. (On Homebrew 6+, approve the one-time tap-trust prompt, or run brew trust swisspra/tap.)

The v4.2.0 runtime uses mcp[cli]>=2.3.0,<3 and the SDK's MCPServer API. The lockfile selects MCP 2.3.0; SDK 1.x is no longer supported. Minimum AnyIO, PyJWT, and cryptography versions also prevent installers from retaining known-vulnerable transitive dependencies.

Headless config (no clone)

With the server installed, wire your MCP client to it directly — no repo checkout, no setup-project.sh:

{
  "mcpServers": {
    "agent-memory": {
      "command": "onboard-memory-mcp",
      "env": { "AGENT_PROJECT_DIR": "/full/path/to/your/project" }
    }
  }
}
  • CLI clients (Claude Code, Codex) inherit your shell PATH, so the bare onboard-memory-mcp works.

  • GUI clients (Claude Desktop, Cursor) launch with a minimal PATH. Use the absolute path from which onboard-memory-mcp (where on Windows) as command — typically /opt/homebrew/bin/onboard-memory-mcp (Homebrew, Apple Silicon), /usr/local/bin/onboard-memory-mcp (Homebrew, Intel), /home/linuxbrew/.linuxbrew/bin/onboard-memory-mcp (Homebrew, Linux), ~/.local/bin/onboard-memory-mcp (pipx / uv on macOS/Linux), or %USERPROFILE%\.local\bin\onboard-memory-mcp.exe (pipx / uv on Windows).

AGENT_PROJECT_DIR is required — it decides which project owns .agent-mem/. Nothing here initializes memory: starting work is a separate step. In your first work session, call memory_init once (creates .agent-mem/) — or memory_bootstrap when adopting an existing repo — then memory_onboard each session. If .agent-mem/ already exists, never bootstrap it again; just join.

The pipx/uv path normally uses prebuilt dependency wheels on supported CPython 3.11+ platforms. Wheel availability depends on Python and architecture; Python 3.10 or Intel macOS may need a C/Rust toolchain. Homebrew bottle builds target ARM macOS and x86_64 Linux. Upstream dependency bottles are currently unavailable for Intel macOS, so Homebrew is not a compiler-free fallback there. Template: configs/binary-mcp.json; full detail and platform notes in docs/SETUP.md.

Set up a project

Choose one setup path:

Option 1: Agent setup

The skill-first quick start above is the recommended path. If you would rather not use the skill CLI, ask an agent to read AGENT_SETUP.md — it delegates to the canonical install reference instead of inventing a second recipe — and to docs/SETUP.md for the manual steps.

Option 2: Script setup

git clone https://github.com/swisspra/On_Board.git
cd On_Board
bash setup-project.sh /full/path/to/your/project
bash doctor.sh /full/path/to/your/project

Add the generated MCP config to your client:

/full/path/to/your/project/.onboard/mcp.generated.json

Some clients accept this JSON directly. Others require you to merge it into their own MCP settings file.

After memory is initialized, open the dashboard with:

bash /full/path/to/your/project/.onboard/run-dashboard.sh

On Board is installed once. Each project points to the same On Board folder, but gets separate memory through AGENT_PROJECT_DIR.

Each setup-project.sh run also registers the project locally in .onboard/linked-projects.json inside the On Board checkout. This file is gitignored and only helps updates remember which projects point here.

The setup script uses uv sync --inexact to install/update dependencies without pruning local test/dev extras. MCP clients run python3 onboard_server.py; the launcher uses the local .venv directly and rebuilds it only if the venv is missing. This keeps normal startup fast, avoids uv run startup timeouts, and makes a shared central checkout more durable.

On Board does not write memory from end-turn hooks. Current Stop hooks in several agent clients run every turn, which creates noisy memory and can force agents to re-onboard too often.

Optional: add AGENT_MEM_CONTEXT_DIRS to the generated MCP config when agents should read shared docs/specs outside the project folder.

Option 3: Advanced manual setup

If you do not want to run the setup script, install with uv sync, write the MCP config yourself, and add project rules/hooks manually. See docs/SETUP.md.

Setup stops at the config; nothing above initializes memory. When you later start work in the project — a separate, explicit request — do it in a chat with any MCP-aware agent (Claude Desktop, Claude Code, Cursor, Codex, Antigravity). Skip memory_bootstrap if .agent-mem/ already exists and just join:

memory_bootstrap(
  agent_name="dev-main",
  description="Existing project using On Board",
  current_task="Set up shared project memory"
)

memory_onboard(
  agent_name="dev-main",
  agent_platform="claude-code",
  agent_role="main"
)

That's it. The agent now sees the project briefing, the open tickets, the recent memory, and the protocol it should follow. Every subsequent action is stamped with its identity.

Full setup details and manual setup: see docs/SETUP.md.

To update an existing install, run bash update.sh in the central On Board checkout. It will show known linked projects. Refresh all of them with bash update.sh --refresh-linked, or inspect them with bash setup-project.sh --list-linked.


The loop in one example

1. SPEC
   opus-testcase reads requirement → writes 5–20 acceptance tickets
   with explicit pre/post conditions.

2. BUILD
   dev-track-2 claims a ticket → implements in src/ → submits with
   file diff + test plan.

3. TEST
   Jonhny-tester picks up submission → runs UI in Chromium → captures
   screenshots → submits PASS or FAIL with evidence.

4. REVIEW
   desktop-opus4.7 (or the human) checks evidence → approves OR rejects
   with concrete fix instructions.

   If rejected → ticket reopens → dev-track-2 patches → Jonhny retests
   → loop closes.

When this loop runs cleanly, a single ticket goes from open to "shipped to production" in 4–15 minutes of agent time. The human checks in at the end, not in the middle.


Agent-to-agent: the listening half (v4)

Everything above still works pull-style. v4 adds the missing edge: agents can now wake each other instead of waiting for a human to relay messages.

worker:  memory_wait_for_event(agent_name="dev-track-2", timeout_s=180)
         → parks inside one tool call until the board changes
lead:    memory_create_ticket(..., assigned_to="dev-track-2")
worker:  wakes in seconds, claims, works,
         memory_submit_ticket(..., stay_active=True)
lead:    wakes on the submission, reviews
worker:  wakes on the verdict — approve closes the loop;
         a rejection arrives WITH the review notes and fix
         instructions in the wake payload, so it re-claims,
         fixes, and resubmits without asking anyone

Design points, all field-verified across Claude Desktop × Claude Desktop and Claude × Codex (GPT):

  • Check before blocking — a re-arm after a gap returns its backlog in 0 s instead of waking empty. One wake drains the whole queue.

  • Loop guard — an agent never wakes on its own actions, so two listeners cannot ping-pong each other.

  • Role gate — completed ≠ success: whoever executed a ticket may reach submitted but may never close it; only the owner or a main/lead/reviewer adjudicates. Solo use is still possible via explicit allow_self_review=True, permanently stamped in the audit.

  • Client limits respected — Claude Desktop cancels tool calls at ~240 s per call (measured), so timeouts clamp to 200 s there; stdio clients (Claude Code, Codex) may pass long_wait and park much longer.

  • Idle budget, in minutes — the server counts consecutive empty parks and answers STAND-DOWN once idle_budget_min (default 15) is spent, so an unattended listener stops on its own instead of looking wedged. Budgets are stated in minutes because a human watching a silent loop counts wall clock, not iterations — a compliant agent looping for 20 minutes looks stuck even when it is exactly on budget. Every idle reply prints idle 3/5 — ~6 min to stand-down. The counter resets on a real event and never on re-arming, and STAND-DOWN is a distinct status so a loop matching on idle cannot read it as permission to continue. idle_budget_min=0 listens indefinitely.

  • Use the listen MCP prompt for the standard re-arm loop.

v4 also hardens the board for simultaneous writers (advisory lock on ticket mutations, per-process tmp files), because with A2A two agents acting in the same instant is the normal case, not the rare one. Breaking changes and the migration guide live in CHANGELOG.md.


Tools (30 MCP tools, 5 buckets)

Bucket

Tools

Agent lifecycle

memory_onboard, memory_agent_join, memory_handoff, memory_checkpoint, memory_get_briefing, memory_wait_for_event

Ticket queue

memory_create_ticket, memory_claim_ticket, memory_submit_ticket, memory_review_ticket, memory_cancel_ticket, memory_terminate_ticket, memory_list_tickets

Persistent memory

memory_write, memory_unpin, memory_read, memory_search, memory_search_vector, memory_links

Project context

memory_init, memory_bootstrap, memory_status, memory_doctor, memory_update_state, memory_context_dirs, memory_context_read

Compaction

memory_prepare_compaction, memory_compact, memory_token_usage, memory_search_archive

Full reference: docs/TOOLS.md.

Native resources (v4.2.0)

Three read-only JSON resources are exposed for clients that read MCP resources: onboard://project, onboard://tickets, and onboard://memory/summary. They return bounded projections (no raw memory bodies) and never create or modify a board.

Every resource read is live state with a private ttlMs 0 hint; only the static response catalogs use ttlMs 60000. Clients that support resource subscriptions and honor them get a coalesced ResourceUpdated invalidation notice when any of the three resources change. That is a re-read cue — not durable delivery and not a model wake-up; there is no replay. Use memory_wait_for_event when an agent must actually be woken by a peer.

On Board ships no MCP App (ui://) view this round: a host-rendered view is not a dependable wake mechanism, and not every host — CLI clients in particular — renders apps. See docs/TOOLS.md.


What makes this different

On Board is not only a place to store memories. It keeps the work loop visible:

onboard -> claim ticket -> submit evidence -> review -> approve or reopen

That gives agents a shared queue, stable identities, recent handoffs, and a review gate. Rejected work reopens with fix instructions instead of becoming a dead terminal state.


Project structure (runtime data)

your-project/
├── .agent-mem/                runtime memory, gitignored
│   ├── project.json
│   ├── agents.json            agent registry (identity, status, KIA)
│   ├── memories.json
│   ├── state.json             project phase, owner, design defaults
│   ├── archive.json
│   ├── digests.json
│   ├── checkpoints/
│   └── tickets/
│       ├── _index.json
│       ├── TK-<id>.md                      the spec
│       ├── review/TK-<id>-submit.md        dev submission
│       ├── closed/                         approved work
│       └── rejected/<ticket_id>/attempt-<N>/
│           ├── <ticket_id>.md              rejected spec for that round
│           ├── <ticket_id>-submit.md       submission under review
│           └── <ticket_id>-rejected.md     reviewer notes + fix instructions

Everything is plain text or JSON. You can cat your way through the project's full history. No vector DB lock-in, no opaque embeddings — just files an audit can read.


Current status (v4.2.0)

The primary skill-first route reuses one shared onboard-memory-mcp runtime — installed once and reused by every configured project, each with its own project-selected memory folder. A central On Board checkout stays a supported secondary path:

  • The skill-first command above is the primary installation entry; a project is configured with the /onboard skill for one chosen client, reusing an existing runtime and installing the shared runtime only when none is present. Memory is never initialized or migrated by the installer.

  • Three read-only native resources (onboard://project, onboard://tickets, onboard://memory/summary) expose bounded project, ticket, and memory projections. All three reads carry a private ttlMs 0 hint (only the static catalogs use ttlMs 60000); subscription notifications are a capability-dependent re-read cue, not a model wake-up. They exist only on a verified v4.2+ runtime.

  • memory_onboard is the primary start call for agents and returns compact current context.

  • memory_wait_for_event turns the board push-capable: agents park, wake on peer actions, and close reject/retry loops with zero human relay (see the A2A section).

  • memory_doctor checks board health and data integrity — a diagnostic, not a setup gate.

  • The secondary source route runs setup-project.sh, which generates project MCP config, rules, startup hooks, and a dashboard launcher.

  • Linked-project registry tracks which projects point at the central checkout, so updates can refresh known projects without scanning the machine.

  • In that source route, runtime startup uses python3 onboard_server.py; the launcher normally execs .venv/bin/python server.py and only falls back to uv sync --inexact if .venv is missing. The primary route points clients at the installed onboard-memory-mcp executable instead of the source launcher.

  • Existing working 4.1.1 or source-based bindings keep working unchanged; the skill asks before replacing a shared runtime, and it never upgrades one unsolicited.

  • Startup hooks return a small read-only briefing. End-turn/Stop hooks are not installed by default because current clients can run them too often.

  • The dashboard is local and read-only.

Full CHANGELOG: CHANGELOG.md.


License

Apache-2.0. Free to use, fork, modify, redistribute, build commercial products on. No restrictions on use.

Available Tools

30 tools
memory_agent_joinA

Register as an active agent.

Multiple active agents may share a platform. Use ticket claims and roles to prevent work collisions. Your agent_name is stamped on EVERY write for traceability.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is not read-only, but the description adds meaningful behavioral context: agent_name is stamped on every write for traceability, and agents are advised to use tickets/roles to avoid collisions. This goes beyond the basic annotation flags and gives the agent important operational expectations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four short, focused sentences: purpose, multi-agent context, coordination guidance, and traceability side effect. It is front-loaded and every sentence earns its place without fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential context: what the tool does, why it matters (collision prevention), and a critical side effect (traceability). With an output schema present and detailed nested parameter schemas, the tool is adequately specified for an agent to use it correctly. Minor gaps exist (e.g., re-joining behavior, how to leave), but these are not critical for the core registration use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The context signal reports 0% schema description coverage, likely because the top-level 'params' property is a wrapper with no description. However, the nested AgentJoinInput schema does provide detailed per-field descriptions (e.g., agent_name stability, role options). The tool description itself adds minimal parameter semantics, only mentioning agent_name's traceability effect, which is not a parameter explanation. With the nested schema carrying the load, the baseline stands at 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Register as an active agent', a specific verb+resource pair that clearly defines the tool's purpose. It distinguishes itself from sibling tools like memory_init or memory_onboard by emphasizing active registration and multi-agent coordination. The additional note about agent_name being stamped on every write further clarifies its role in traceability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context—multiple agents may share a platform and ticket claims/roles should be used to prevent collisions—but it does not explicitly state when to use this tool versus alternatives or when not to use it. The usage scenario is implied rather than directly articulated, so it stops short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_bootstrapA

Bootstrap .agent-mem/ for an EXISTING project by auto-scanning the codebase.

Reads: README, git log, directory structure, package configs. Seeds memory with: project context, tech stack, recent history, structure, warnings.

Use this instead of memory_init when joining an existing project for the first time. After bootstrap, the next agent gets full context without you manually typing everything.

Returns: str: Bootstrap summary with what was discovered and seeded.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations provide basic safety hints (readOnlyHint=false, destructiveHint=false, etc.), but the description adds valuable behavioral context by listing what the tool reads (README, git log, directory structure, package configs) and what it seeds (project context, tech stack, history, structure, warnings). It also discloses the return type. It could have mentioned whether it overwrites existing memory, but the act of 'bootstrapping' implies creation/writing, so the score is still high.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured. It opens with a one-sentence purpose, follows with two terse lines (Reads/Seeds), gives a clear usage note, and ends with the return type. Every sentence contributes meaningful information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a bootstrap tool with many parameters and an output schema, the description covers the core behavior, when to use it, and what it returns. It lacks edge-case details such as behavior when .agent-mem/ already exists, whether the scan flags are defaulted true, or failure modes. However, it is sufficiently complete for an agent to invoke the tool correctly in the primary use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Context indicates schema description coverage is 0%, so the description must compensate. It partially does by explaining that the tool reads README/git/config/structure (which maps to the scan_* flags) and seeds project context/tech stack/history/warnings (mapping to description, tech_stack, known_warnings, etc.). However, it does not mention the required agent_name parameter or explicitly connect the 'project description' to the description parameter. It gives a high-level conceptual mapping but lacks parameter-level detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool bootstraps .agent-mem/ for an existing project by auto-scanning the codebase, which is a specific verb and resource. It explicitly distinguishes itself from the sibling tool memory_init with 'Use this instead of memory_init when joining an existing project for the first time,' making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'when joining an existing project for the first time.' It also names the alternative tool to use instead (memory_init) and explains the benefit: 'the next agent gets full context without you manually typing everything.' This is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_cancel_ticketC
Idempotent

Cancel a ticket. Allowed: creator, claimer, or an active main/lead/reviewer agent.

NameRequiredDescriptionDefault
reasonNo
ticket_idYes
agent_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=false, idempotentHint=true and openWorldHint=false, so safety and repeat-call behavior are covered. The description adds the permission model, which is real value beyond the annotations. It still omits whether the ticket can be recovered afterward, what happens to an existing claim, and whether cancelled tickets remain visible to list_tickets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and then the constraint, with no filler. The only knock is that brevity here leans toward under-specification rather than efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. But for a state-mutating ticket tool with three undocumented parameters and several overlapping siblings, the definition leaves the agent without the preconditions, parameter roles, or post-cancel state needed to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for all three parameters and does not meet it. It never mentions ticket_id, agent_name (is it the caller or the target of the action?), or whether reason is optional and recorded. The agent must infer all parameter meaning from bare titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Cancel a ticket"), which is clear enough on its own. However, the sibling list contains memory_terminate_ticket, memory_submit_ticket, and memory_review_ticket, and the description does nothing to distinguish cancelling from terminating or submitting. An agent has to guess which of the ticket-lifecycle siblings to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The authorization clause ("Allowed: creator, claimer, or an active main/lead/reviewer agent") is a genuine prerequisite that tells the agent whether it is eligible to call the tool. But there is no guidance on when cancelling is the right action versus terminate_ticket or submit_ticket, and no stated preconditions such as ticket state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_checkpointA

Full state checkpoint. Do every 10-15 min or before risky ops. Saves both as memory entry AND standalone file; rejected outright if .agent-mem/checkpoints resolves outside the project.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds real value beyond them: dual persistence (memory entry AND file) and an explicit rejection condition when the checkpoint path resolves outside the project — a guardrail the agent would otherwise only discover by failing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information (what, when, and a safety constraint), with the core action front-loaded. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and the failure mode is covered. But for a structured, multi-field checkpoint payload with zero schema descriptions, the description leaves the agent guessing about what content to capture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description says nothing about the five input fields (summary, blockers, agent_name, active_branch, remaining_tasks). For a checkpoint tool, guidance on what belongs in summary vs. remaining_tasks isn't inferable from bare titles alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and artifact: saves a 'full state checkpoint' both as a memory entry and a standalone file. This distinguishes it somewhat from siblings like memory_write and memory_update_state, though it never names them directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Do every 10-15 min or before risky ops' gives an explicit cadence and trigger condition, which is unusually actionable. It stops short of naming alternatives (memory_update_state, memory_compact) or when-not-to-use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_claim_ticketB
Idempotent

Claim an open ticket (sets to claimed). Call again on a claimed ticket to advance to in_progress (e.g. when spawning a subagent).

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description directly contradicts the idempotentHint annotation. It states that calling again on a claimed ticket advances to in_progress, meaning repeated calls have different effects, violating idempotency. No other behavioral details (e.g., error conditions, permissions) are provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and front-loaded with the action. It conveys the primary behavior and an important nuance (second call advances state) without unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description is incomplete. The contradiction with idempotency is a critical gap, and the description does not clarify edge cases (e.g., what happens if the ticket is already in_progress). Missing parameter guidance also reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides no explanation for the parameters ticket_id and agent_name. The input schema only describes ticket_id as 'Ticket ID to claim', while agent_name has no description. With 0% schema description coverage from the tool description, the agent is left without guidance on what these parameters mean or how to format them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: claiming an open ticket, with a specific verb ('Claim') and resource ('ticket'). It also distinguishes itself from sibling ticket tools (create, cancel, submit, etc.) by detailing the state transition behavior. The added note about advancing to in_progress on a second call further clarifies the tool's unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: claim an open ticket, and recall it on a claimed ticket to advance to in_progress, e.g., when spawning a subagent. However, it does not explicitly mention alternatives or when not to use it, so it lacks exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_compactA

Compact old memories into compressed digests to save tokens.

How it works:

  1. Splits memories into HOT (recent/pinned) and COLD (old)

  2. Groups cold entries by agent session

  3. Compresses each group into a local digest

  4. Archives raw cold entries to archive.json

  5. Keeps only hot entries in memories.json + adds digest references

Token savings: typically 60-80% reduction on old entries.

Config via env vars:

  • AGENT_MEM_HOT_HOURS: hours to keep full detail (default: 24)

  • AGENT_MEM_MAX_HOT: max hot entries (default: 50)

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses significant behavioral detail beyond the annotations: it splits memories into HOT/COLD, groups by session, compresses into digests, archives raw entries to archive.json, and keeps digest references. This provides rich context about side effects without contradicting the destructiveHint=false annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, uses a numbered 5-step breakdown, includes a token savings estimate, and lists environment variables. Every section contributes useful information with no filler or redundancy, making it appropriately sized for a multi-step operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the end-to-end process, archival behavior, environmental configuration, and token impact. It does not explain the relationship to memory_prepare_compaction or the auto-compaction threshold, but given the rich mechanism description and presence of an output schema, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool description does not mention force or agent_name, but the input schema provides clear descriptions for both properties ('Force compaction even if under threshold', 'Who is running the compaction'). The schema already covers parameter meaning, so the description adds no extra value; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Compact old memories into compressed digests to save tokens,' a specific verb+resource+outcome statement. It clearly describes what the tool does, but it does not explicitly differentiate it from the sibling memory_prepare_compaction tool, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for saving tokens on old memories and explains the HOT/COLD split mechanism, but it never states explicit when-to-use/when-not-to-use conditions or mentions alternatives like memory_prepare_compaction. The context is useful but the guidance is mostly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_context_dirsA
Read-onlyIdempotent

List all configured external context/info directories and their files.

Context dirs are set via AGENT_MEM_CONTEXT_DIRS env var (colon-separated paths). These folders contain reference docs, specs, shared info that agents should know about but live outside the project folder.

Returns: str: List of context dirs and their contents.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint false. The description adds meaningful context about the env var source and that the tool returns a list of dirs and file names, which is beyond what annotations convey. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief, front-loaded with the main verb phrase, and includes a clear Returns section. Every sentence adds value, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, strong annotations, and a simple output type, the description fully covers the tool's behavior. It explains what the dirs are, how they are set, and what the return value is, making it self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific details (none needed) but does explain how the directories are configured via the AGENT_MEM_CONTEXT_DIRS environment variable, enriching understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List all configured external context/info directories and their files.' This clearly distinguishes the tool from siblings like memory_read or memory_search, which operate on content rather than listing directory locations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the purpose and configuration of context dirs, implying when to use the tool (to discover available external reference material). It doesn't explicitly name alternatives, but the unique scope provides sufficient context for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_context_readA
Read-onlyIdempotent

Read a file from the external context directories.

Searches all configured AGENT_MEM_CONTEXT_DIRS for the filename. Use memory_context_dirs to list available files first.

Returns: str: File content (truncated to max_chars).

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds useful behavioral context: searches all configured AGENT_MEM_CONTEXT_DIRS and truncates output to max_chars. It doesn't cover error handling for missing files, but the safety profile is well-covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Exactly three short sentences. Front-loaded with the primary purpose, followed by a usage hint and return type. No redundant wording—every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety, schema covering parameters, and the description stating return type and truncation, the tool is well-documented. The only minor gap is lack of error behavior (e.g., file not found), but this is not critical given the output schema likely covers return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is reported as 0%, but the schema itself provides clear descriptions for filename ('Filename or relative path...') and max_chars ('Max characters to return'). The tool description adds no additional parameter semantics, so baseline 3 applies, with schema doing the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Read' and specific resource 'file from external context directories'. It also differentiates from siblings like memory_read by specifying 'external context directories' and mentions using memory_context_dirs for listing, reinforcing its distinct role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit prerequisite: 'Use memory_context_dirs to list available files first.' This clarifies when to use the tool in a workflow. However, it does not explicitly contrast with alternative tools like memory_read or memory_search, so a small deduction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_create_ticketB

Create a ticket requesting help from another agent.

Ticket is saved as .md file in tickets/ (open queue). Assign to a specific agent NAME or leave open for anyone.

Examples:

  • PM needs coder: assigned_to="cursor-coder"

  • Coder needs review: assigned_to="codex-main"

  • Anyone can pick up: assigned_to=None

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the mutation profile is covered. The description adds real context beyond that — the ticket lands as a .md file in tickets/ as an open queue item — but says nothing about what happens on duplicate titles, whether the ticket must later be claimed/submitted, or any authorization requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus three short examples: the purpose is front-loaded and the bullets are scannable. The examples partly duplicate the assigned_to property description, so there is minor redundancy, but nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the inner CreateTicketInput fields (scope, forbidden, required_fields, target_url) are self-documented in the schema. Still, for a 12-field creation tool whose top-level 'params' is undocumented, the description should at least say the single params object must satisfy CreateTicketInput; that gap keeps it at merely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is reported at 0% because the single top-level 'params' wrapper is undocumented, and the description does nothing to explain that wrapper or the CreateTicketInput structure it must contain. The assignment examples restate what the nested assigned_to property already documents (stable agent name, e.g. 'cursor-coder'), so the description adds little beyond the inner schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Create a ticket requesting help from another agent', with the extra qualifier that it goes into the open queue in tickets/. That is enough to distinguish it from memory_claim_ticket / memory_submit_ticket behaviorally, but the description never names those siblings or explains the queue lifecycle, so an agent still has to infer the ordering from the tool names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three worked examples show the intended assignment routing (assigned_to a specific agent vs. None for anyone), which implies when to use the tool. However, there is no explicit statement of when to create a ticket versus memory_write, memory_handoff, or the ticket siblings, and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_doctorA
Read-onlyIdempotent

Check project-local On Board setup without changing files.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint=false, and idempotentHint=true. The description reinforces this by saying 'without changing files' and adds useful context about 'project-local' scope. No contradiction found; it provides additional behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It front-loads the action ('Check') and packs in scope and non-destructive intent efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, a full annotation set (read-only, non-destructive, idempotent), and an output schema, the description is sufficient for basic understanding. It clearly states what it does and that it is safe, though it could clarify the meaning of 'On Board' for an agent unfamiliar with the domain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is trivially 100%, so the description carries no parameter burden. Baseline for 0 parameters is 4, and no further elaboration is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks 'project-local On Board setup' and specifies it does so 'without changing files', giving a specific verb, resource, and constraint. It distinguishes itself from write-oriented tools like memory_init, though the term 'On Board' is somewhat opaque and not differentiated from memory_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (use it to check setup without modifying files), but no explicit alternatives or when-not-to-use guidance is provided relative to sibling tools. The description does not name any other tool or exclusion scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_get_briefingA
Read-onlyIdempotent

CALL THIS FIRST. Token-aware briefing with workflow modes.

Loads: hot memories (full detail) + warm digests (compressed history). Use mode='brief' for handoff-first catchup, 'normal' for default onboarding, 'deep' for broad context, or 'handoff-only' for fast task transfer.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is clear. The description adds useful behavioral context: it is token-aware, loads hot memories at full detail and warm digests as compressed history, and has workflow modes. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It starts with the critical 'CALL THIS FIRST' instruction, then a brief explanation of what it loads, and ends with mode options. Every sentence earns its place, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description needn't explain returns. It adequately covers the tool's workflow modes and the need to call it first. It lacks explicit differentiation from similar sibling tools (e.g., memory_onboard), but the first-call directive and mode variety provide enough context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning for the `mode` parameter by explaining each value ('brief' for handoff-first, 'normal' for onboarding, 'deep' for broad context, 'handoff-only' for fast transfer). However, it does not describe `focus_area` or `include_full_history`, and the top-level schema has no description (0% coverage). The mode explanation helps but doesn't fully compensate for undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Token-aware briefing with workflow modes.' It specifies what it loads (hot memories + warm digests) and its role as a first-call onboarding/briefing tool. While it doesn't explicitly differentiate from sibling tools like memory_onboard or memory_bootstrap, the specific resource ('briefing') and modes make the purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance with 'CALL THIS FIRST' and describes scenarios for each mode (handoff-first, default onboarding, broad context, fast task transfer). It doesn't mention exclusions or alternative tools, but the strong first-call directive and mode-specific contexts are sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_handoffB

Formal handoff. ALWAYS call before leaving. Next agent sees this first.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a mutating operation but not destructive. The description adds that the handoff is visible to the next agent, which is useful behavioral context. However, it doesn't reveal whether the handoff overwrites previous ones or how it integrates with other memory tools, leaving some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two crisp sentences, immediately stating the tool's purpose and mandatory usage. No wasted words; front-loaded with the most critical information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description doesn't explain how to craft an effective handoff or what happens to existing handoff data. For a tool marked 'ALWAYS call', more guidance on content and side effects is needed to ensure correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no information about the required fields (agent_name, summary, next_steps) or optional ones. The agent must infer parameter meaning from names alone, which is insufficient for a nested schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool facilitates a formal handoff and emphasizes its mandatory use before leaving, making its purpose obvious. It doesn't explicitly name sibling alternatives, but the 'ALWAYS call before leaving' positioning distinguishes it from general memory write tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance ('ALWAYS call before leaving') and notes that the next agent sees it first, establishing priority. It lacks explicit exclusions or alternative recommendations, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_initA
Idempotent

Initialize .agent-mem/ in the project root. Call once per project. Safe to re-call.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the key behavioral fact that it initializes .agent-mem/ in the project root and reinforces idempotency with 'Safe to re-call'. Annotations already convey idempotentHint=true and destructiveHint=false, so the description aligns but doesn't significantly extend beyond them, lacking details like overwrite behavior or prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, front-loaded with the primary action. Each sentence adds value—purpose, when to call, and re-call safety—with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has an output schema, and strong annotations. The description sufficiently covers purpose and usage, and the schema covers parameters. It lacks some context about what .agent-mem is used for, but that doesn't hinder invocation, so it's nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description contains zero information about the required 'description' parameter or the optional 'tech_stack' parameter. With schema description coverage at 0%, the description fails to compensate, leaving parameter meaning entirely to the input schema's own field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Initialize' and identifies the exact resource '.agent-mem/' in the project root. This clearly distinguishes it from sibling read/write/search tools and establishes a unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance with 'Call once per project' and 'Safe to re-call', covering when to call and idempotency. It does not name alternatives, but no close alternative exists for initialization, so this is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_list_ticketsA
Read-onlyIdempotent

List tickets. Shows open/in_progress/in_review by default. Use include_closed for history.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the default status filter behavior and the include_closed option, which are behavioral details beyond the annotations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences convey the purpose and a key usage hint. The first sentence is front-loaded with the core action. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with good annotation coverage and an output schema, the description covers the essential behavioral details: default filtering and how to include history. It doesn't discuss pagination or ordering, but these are likely in the output schema. Overall, the description is adequate for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Though the top-level schema coverage is 0%, the nested schema provides descriptions for 'status', 'assigned_to', and 'include_closed'. The description adds meaning to 'include_closed' by explaining it is for history, and clarifies the implicit default for status. This goes beyond the schema's basic filter labels.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List tickets' clearly, with a specific verb and resource. It also specifies the default scope ('open/in_progress/in_review'), which distinguishes it from other ticket operations like create or claim.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context that listing defaults to active statuses and that 'include_closed' is for historical tickets. It does not explicitly exclude alternatives like search, but the default behavior is well described.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_onboardB

Compact session entrypoint: join, collision-check, and show current working context.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool performs 'join' and 'collision-check', which imply state mutation and potential validation failures. However, it does not specify whether it writes persistent state, what a collision entails, or any side effects beyond showing context. Since annotations are all false (readOnlyHint=false, etc.), the description carries the burden, and it provides only partial transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that is front-loaded with the core purpose. It contains no redundant words and efficiently communicates the tool's role. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is too sparse for a tool with many optional parameters and an output schema. It does not mention the different briefing modes, the role of ticket_id, or what the output briefing contains. While the schema handles parameter details, the description should better tie the workflow together, especially given the large number of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description covers 0% of the schema parameters (per context signals) and provides no insight into how parameters like mode, agent_name, or token_budget affect behavior. Although the schema itself has rich parameter descriptions, the tool description fails to add any contextual meaning or usage examples, so it does not compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies this as a session entrypoint with specific actions: join, collision-check, and show context. It distinguishes from siblings like memory_agent_join by being a combined/compact operation, though it doesn't explicitly name alternatives. The verb 'join' and resource 'session' make the core purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'session entrypoint' implies this is for starting or onboarding a session, but there is no explicit guidance on when to use this versus siblings like memory_agent_join, memory_get_briefing, or memory_init. It does not state any exclusions or alternative conditions, leaving the usage context to be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_prepare_compactionA
Read-onlyIdempotent

Returns cold entries grouped by agent session — ready for YOU to summarize.

Read the returned entries, write your own digest with memory_write(memory_type='context'). Digests are read ONLY by agents: write them in compressed English (token-thrift) — facts, decisions, file paths; no prose. Code/paths/IDs stay verbatim. then run memory_compact() to archive the originals.

Workflow:

  1. Call memory_prepare_compaction() → get grouped cold entries

  2. Read and summarize them yourself

  3. Call memory_write(memory_type='context', title='Digest: ...', content='your summary')

  4. Call memory_compact() → archives cold entries, keeps your digest

Returns: str: Cold entries grouped by agent, with token counts.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safe read-only nature is already communicated. The description adds value by detailing that output is a string with token counts and that the intended usage is to summarize before compacting, which gives the agent a clearer picture of expected behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat lengthy due to the workflow and style guidance, but it is well-organized and front-loaded with the primary purpose. The workflow list makes it scannable, and each sentence contributes useful information, so it earns a 4 rather than a lower score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the return type, the full workflow, and important context about how digest content should be written (compressed English, verbatim code/paths/IDs). With no parameters and safe annotations, this is sufficient for the agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters and the input schema is empty, so there are no parameter descriptions needed. The baseline for zero-parameter tools is 4, and the description does not attempt to explain any (non-existent) parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states that the tool 'Returns cold entries grouped by agent session' and frames it as a preparation step for summarization and compaction. This distinguishes it from sibling tools like memory_compact, which performs the actual archival, by indicating this is the read step before writing a digest.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a numbered workflow: call memory_prepare_compaction, summarize, call memory_write for the digest, then call memory_compact. This makes it clear when to use this tool as the initiation of a compaction sequence, though it does not explicitly list scenarios where it should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_readB
Read-onlyIdempotent

Read memories with filters. Filter by agent_name to trace who wrote what.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds that filtering is supported and highlights agent_name filtering, but it doesn't disclose other behavioral traits such as default limit, response format, or search vs read semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the core purpose and a specific usage tip. Every word earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the schema has six nested parameters and an output schema exists, the description is minimal but covers the primary read operation. However, it lacks details on filtering semantics, defaults, and how it compares to search tools, making it only moderately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description only compensates for one parameter (agent_name) and ignores the other six parameters (tag, limit, memory_type, pinned_only, since_minutes, response_format). It adds little meaning beyond what the schema already shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads memories with filtering capability, using specific verb 'Read' and resource 'memories'. It provides a concrete use case (filter by agent_name) that distinguishes it from related tools, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by suggesting a specific scenario (trace who wrote what), but it does not explicitly say when to use this tool versus other memory tools like memory_search or memory_get_briefing. No exclusions or alternative references are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_review_ticketA

Review a submitted ticket. Approve → closed/ or Reject → rejected/.

On approve: moves ticket + submission to closed/ On reject: archives THIS attempt to tickets/rejected/<ticket_id>/attempt-/ (ticket spec marked 'rejected', the submission, and <ticket_id>-rejected.md with the fix instructions), then reopens the canonical ticket + index as 'open'. Each attempt gets its own directory, so a later rejection never overwrites an earlier one.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give generic flags (readOnly=false, destructive=false, idempotent=false); the description supplies the real state machine: file moves, attempt-scoped archive directories, spec marked 'rejected', canonical ticket reopened as 'open'. It even explains why the tool is non-idempotent (each attempt gets its own directory, no overwrite), which reconciles the idempotentHint=false with destructiveHint=false. It omits role/permission requirements and any validation of the ticket's current state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the outcome and the two branches, and the trailing note about per-attempt directories is non-redundant information. The layout is a bit ragged and 'then reopens the canonical ticket + index as open' plus the parenthetical could be tightened, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the annotations cover the safety profile. The remaining gap is the guard conditions around invocation (ticket state, reviewer role, what happens if fix_instructions is omitted on reject), which matter for a state-transition tool but are not covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage reads as 0% at the top level (single nested 'params' object), so the description must carry weight. It adds some meaning by tying ticket_id to path construction and indicating that fix instructions are persisted into <ticket_id>-rejected.md, but it never explains verdict, agent_name, review_notes, or allow_self_review semantics, leaving that to the nested schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Review a submitted ticket') and immediately enumerates the two outcomes with their destination paths (closed/ vs rejected/), which is far more than a restatement of the name. It is clearly distinct from submit_ticket/claim_ticket/cancel_ticket by the verdict-routing it performs, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The approve/reject branches make the two modes of use clear and imply this runs after a submission exists, but there is no explicit 'call this when X, not when Y', no prerequisites (ticket must be in submitted state), and no pointer to alternatives such as terminate_ticket or cancel_ticket.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_search_archiveA
Read-onlyIdempotent

Search the cold archive (compacted entries). Use when you need old details that were compressed out of the hot memory.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, covering the safety profile. The description adds behavioral context that the archive is compacted and contains details compressed out of hot memory, implying results may be less complete. This adds value beyond annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the main action ('Search the cold archive') followed by a clear usage note. Every word earns its place; there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only search tool with one required parameter and an output schema present, the description is complete. It explains what the archive is, when to use the tool, and the safety profile is covered by annotations. No significant gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description does not mention the query or limit parameters. It does not compensate for the missing parameter documentation. The parameter names are self-explanatory, but the description provides no additional semantics about how searching works or what limit controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Search the cold archive (compacted entries)'. It uses a specific verb (Search) and resource (cold archive), and explicitly distinguishes itself from hot memory search by mentioning 'compressed out of the hot memory'. This differentiates it from sibling tools like memory_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: 'Use when you need old details that were compressed out of the hot memory.' This clearly indicates when to use the tool, though it does not name alternatives directly. However, the contrast between cold archive and hot memory implies the alternative (search hot memory) sufficiently.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_search_vectorC
Read-onlyIdempotent

Optional vector-style search. Disabled by default; JSON remains canonical.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, and non-destructive. The description adds that the vector backend is disabled by default and that JSON remains canonical, which hints at fallback behavior but does not state what happens when disabled. This provides some context beyond annotations but lacks richness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two short sentences and the core purpose front-loaded. The second sentence about JSON canonical adds a caveat but is somewhat cryptic. It is not padded, though the ambiguity slightly reduces its effectiveness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With sibling search tools and a disabled-by-default backend, the description should clarify when vector search is useful and what happens when disabled. It does not explain return behavior or fallback, and the ambiguous 'JSON remains canonical' leaves key operational context missing. The available output schema and annotations do not cover these gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no information about the query, limit, or backend parameters. The schema itself offers only a brief description for backend, so the description fails to compensate, leaving parameter semantics almost entirely to the structural names in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The phrase 'vector-style search' clearly identifies a search operation on memories, and the title 'Vector-style Search Memories' reinforces the resource. However, it does not explicitly differentiate from sibling tools like memory_search or memory_search_archive, though 'vector-style' implies a specialized variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool over the sibling memory_search or memory_search_archive. The phrases 'Optional' and 'Disabled by default' hint at availability but do not offer selection criteria or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_statusC
Read-onlyIdempotent

Quick status dashboard.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond the annotations, which already indicate read-only, idempotent, and non-destructive behavior. It does not mention return format, pagination, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short ('Quick status dashboard'), but it is under-specified rather than appropriately concise. It is a noun fragment that lacks the details needed to understand the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simple nature, the description is not complete enough. It leaves 'status' undefined and does not clarify what the dashboard contains, despite the presence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema is empty, so the description has nothing to explain. The baseline for a parameterless tool is 4, and nothing in the description detracts from that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Quick status dashboard' conveys only that the tool provides some kind of status overview, but it fails to specify what status is shown or what action the tool performs. This does not distinguish it from sibling tools like memory_get_briefing or memory_doctor, both of which could plausibly be status-related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description gives no context about conditions, exclusions, or preferred use cases, leaving an agent to guess.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_submit_ticketA

Submit completed work on a ticket for review.

Creates a submission report in tickets/review/ and moves ticket to review status. Another agent (reviewer/PM) will approve or reject.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the concrete actions (creating a report in tickets/review/ and moving the ticket to review status), which is useful since annotations are all false. However, it omits the key default behavior of auto-handing off unless stay_active is true, a significant side effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It's a short, front-loaded description with no redundant content. Every sentence contributes to understanding the tool's function and workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with six nested parameters and no explanation of its required inputs, the description is incomplete. It doesn't mention that ticket_id, agent_name, and summary are required, nor the stay_active auto-handoff behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% per context signals, and the description makes no mention of any parameter names, meanings, or required fields. The schema itself provides some descriptions, but the tool description adds no parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Submit completed work on a ticket for review,' which is a specific verb+resource+outcome. It also explains it creates a submission report and moves the ticket to review status, distinguishing it from sibling tools like memory_create_ticket or memory_review_ticket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly situates when to use: after work is completed, to hand off for review by another agent. It doesn't explicitly mention when not to use or compare to alternatives, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_terminate_ticketA
DestructiveIdempotent

Forcefully terminate a ticket at any stage. Creator or active main/reviewer only.

NameRequiredDescriptionDefault
reasonNo
ticket_idYes
agent_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond destructiveHint=true, the description adds that this is 'forceful' and allowed 'at any stage', plus the auth constraint 'Creator or active main/reviewer only', which are useful behavioral disclosures. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise, front-loaded sentences with no filler. The first states purpose, the second adds the permission constraint, earning a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a destructive tool with 3 parameters and zero schema descriptions, the description is too brief; it omits the 'reason' parameter and does not clarify what 'active main/reviewer' means, relying on domain knowledge. It is minimally adequate but leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explain the 'agent_name', 'ticket_id', or 'reason' parameters. The only hint is the permission phrase which relates to 'agent_name', but it does not explicitly map parameters or clarify the 'reason' field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'terminate' with resource 'ticket' and qualifies with 'forcefully' and 'at any stage', clearly distinguishing from the sibling 'memory_cancel_ticket'. It states exactly what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the permission restriction 'Creator or active main/reviewer only' and implies this is for forceful termination at any stage, but does not explicitly name when to use this versus 'memory_cancel_ticket' or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_token_usageA
Read-onlyIdempotent

Show token usage breakdown and recommend compaction if needed.

Returns token estimates for: hot memories, digests, archive, briefing output.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is clear. The description adds behavior beyond the annotations by stating the tool makes a compaction recommendation and lists the specific token estimate categories (hot memories, digests, archive, briefing output), providing useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the main action. It avoids redundancy and every sentence provides distinct value—the second sentence details what the breakdown includes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no params), the existing output schema, and annotations covering safety, the description provides sufficient context. It mentions the categories of token estimates and the recommendation function, making the tool's purpose and output clear without needing further elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description carries no parameter burden. Per the baseline for 0 params, a score of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Show') and resource ('token usage breakdown') and adds an additional behavior ('recommend compaction if needed'). This clearly distinguishes it from sibling tools like memory_compact (which performs compaction) and memory_status (which likely provides general status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when token usage needs assessment or compaction may be needed) but does not explicitly state when to use it over alternatives like memory_status or memory_compact. No exclusions or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_unpinA
Idempotent

Unpin a memory without deleting it, preserving the audit record.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-destructive and idempotent behavior, and the description adds context by clarifying that unpinning does not delete the memory and preserves the audit record. This goes beyond the annotations by specifying what side effects (or lack thereof) occur, though it doesn't cover aspects like permissions or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to meaning, efficiently conveying the action and its non-destructive nature.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action and its audit-preserving attribute, but lacks any parameter guidance. Given the tool's simplicity and the presence of an output schema and annotations, it is minimally adequate, yet incomplete for fully autonomous invocation without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter explanations. However, it does not mention agent_name, memory_id, or reason at all, leaving the agent to infer their meanings from names alone. This is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Unpin' and resource 'memory', and clearly distinguishes itself from deletion by stating 'without deleting it, preserving the audit record.' This makes its purpose unambiguous and differentiates it from sibling tools like memory_write or memory_update_state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when one wants to unpin a memory while retaining the audit record, but it does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. No sibling tool is referenced, so the guidance is only implicit and thus limited.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_update_stateC
Idempotent

Update shared key-value state. Stamped with agent_name.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only, idempotent, and non-destructive behavior. The description adds the behavioral detail that updates are 'Stamped with agent_name', which is useful context. However, it does not explain the stamping mechanism or what happens to existing values, so it adds only partial value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is two short sentences with no filler. It front-loads the action and resource, and each word contributes meaning. This is a model of conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While an output schema exists and the tool is relatively simple, the description is too sparse to be fully contextual. It lacks guidance on usage, parameter behavior, and the exact meaning of 'stamped'. The presence of many sibling memory tools also demands clearer differentiation, which is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description provides virtually no parameter information. It mentions 'agent_name' in the context of stamping but does not clarify the roles of 'key' or 'value'. The agent is left to infer parameter semantics from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Update' and identifies the resource as 'shared key-value state', making the tool's primary function clear. It adds 'Stamped with agent_name' providing extra specificity. However, it does not explicitly distinguish this from sibling tools like memory_write, which could also be used for writing state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. There is no mention of scenarios, prerequisites, or exclusions. The description simply states what it does, leaving the agent without context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_wait_for_eventA
Read-only

Park until another agent acts, then return everything pending.

The listening half of On Board. Instead of a human relaying messages, an agent blocks here until a peer creates a ticket, changes a status, or assigns work.

Returns instantly if events piled up since your last call, so re-arming after a gap costs one call rather than an empty wake. One wake drains the whole queue. You never wake on your own actions.

Re-arm by calling it again — the cursor is stored per agent, so you carry no bookkeeping.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals non-obvious behaviors beyond annotations: 'Returns instantly if events piled up', 'One wake drains the whole queue', 'You never wake on your own actions', and 'cursor is stored per agent'. These are valuable and not in the readOnly/destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the purpose, and each subsequent sentence adds a distinct behavioral fact. No verbosity or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 parameters) and the presence of an output schema, the description covers the core lifecycle, queue-draining behavior, and re-arming. Parameter details are left to the schema, which is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Context signals report 0% schema description coverage, and the description does not explain parameters like kinds, timeout_s, long_wait, or only_mine. It only hints at agent_name via 'per agent', so it fails to compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Park until another agent acts, then return everything pending' – a specific verb and resource. 'The listening half of On Board' clearly distinguishes it from sibling tools like memory_write or memory_create_ticket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly frames when to use: 'Instead of a human relaying messages, an agent blocks here until a peer creates a ticket...' and gives direct re-arm instructions: 'Re-arm by calling it again.' This is clear contextual placement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_writeB

Write a memory entry stamped with your agent_name.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a non-read-only, non-idempotent operation, but the description adds no context about side effects such as entry persistence, compaction implications, pinning behavior, or retraction linkage. The single sentence does not extend beyond the basic write action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence of eight words. It is front-loaded and free of fluff, making it easy to parse, though its brevity is a double-edged sword.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a complex schema, multiple related memory operations, and significant behavioral nuances (e.g., priority auto-pinning, retraction). The description offers almost no context about these behaviors or how they affect the agent's decision to use this tool, making it incomplete for the complexity involved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool description only highlights agent_name, while the required parameters memory_type, title, and content are not mentioned at all. Although the nested schema contains descriptions for these fields, the top-level parameter coverage is 0%, and the description does little to compensate by summarizing the expected input format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Write' with a clear resource 'memory entry' and adds the distinctive 'stamped with your agent_name' detail. This effectively distinguishes the tool from siblings like memory_read, memory_search, and memory_compact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use memory_write versus alternative tools. It does not mention exclusions, prerequisites, or preferred scenarios, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev4.2.0
    • Changedmemory_create_ticket1 field changed
      • changedInput schema / $defs / CreateTicketInput / properties / assigned_to / description
        Previous value: -"Agent name or platform to assign (e.g. 'cursor', 'codex'). Empty = any agent."New value: +"Stable agent name to assign (e.g. 'cursor-coder', 'codex-main'). Exact, case-sensitive match — a platform name is not an assignee. Empty = any agent."
  2. 30 tool updatesv4.0.4
    • First observedmemory_agent_join
    • First observedmemory_bootstrap
    • First observedmemory_cancel_ticket
    • First observedmemory_checkpoint
    • First observedmemory_claim_ticket
    • First observedmemory_compact
    • First observedmemory_context_dirs
    • First observedmemory_context_read
    • First observedmemory_create_ticket
    • First observedmemory_doctor
    • First observedmemory_get_briefing
    • First observedmemory_handoff
    • First observedmemory_init
    • First observedmemory_links
    • First observedmemory_list_tickets
    • First observedmemory_onboard
    • First observedmemory_prepare_compaction
    • First observedmemory_read
    • First observedmemory_review_ticket
    • First observedmemory_search
    • First observedmemory_search_archive
    • First observedmemory_search_vector
    • First observedmemory_status
    • First observedmemory_submit_ticket
    • First observedmemory_terminate_ticket
    • First observedmemory_token_usage
    • First observedmemory_unpin
    • First observedmemory_update_state
    • First observedmemory_wait_for_event
    • First observedmemory_write

TDQS

B3.2/5.0

Scored across 30 tools

Disambiguation3/5

Most tools target distinct workflow steps, but there are genuine collision zones: memory_init vs memory_bootstrap (both seed .agent-mem/), memory_onboard ('compact session entrypoint') vs memory_get_briefing ('CALL THIS FIRST'), and three search tools (memory_search, memory_search_archive, memory_search_vector) that an agent may pick wrong. memory_cancel_ticket vs memory_terminate_ticket also overlap, distinguished only by 'forcefully' and role restrictions. Descriptions help, but conflicting entry-point guidance is a real misselection hazard.

Naming Consistency4/5

All tools share a uniform memory_ prefix and snake_case, with mostly predictable verb_noun forms (memory_create_ticket, memory_claim_ticket, memory_search). Minor deviations are noun-only names like memory_doctor, memory_status, and memory_links. Very readable as a set.

Tool Count3/5

30 tools exceeds the heavy threshold, and several could be consolidated (init/bootstrap, three search variants, prepare_compaction/compact/status/doctor/token_usage cluster). However the domain is genuinely broad — memory store, ticketing, compaction, handoff, external context — so most tools map to a distinct step rather than being padding.

Completeness3/5

Ticket lifecycle is well covered (create, claim, submit, review, cancel, terminate, list), but there are dead ends: memory_unpin exists with no memory_pin counterpart, and there is no memory_delete despite unpin referencing preservation 'without deleting'. The vector search is disabled by default, and ticket detail retrieval only comes indirectly via list.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers