Skip to main content
Glama

Commons

Run several Claude Code sessions at once without them redoing or overwriting each other's work.

Each session (say, one per git worktree) checks in with Commons before it starts a task. If another session already has it, it hears so and backs off. Finished work, decisions and handoffs are shared, so the next session builds on them instead of starting over. Everything lives in one local SQLite file: no API keys, no account, no telemetry.

/plugin marketplace add Neoo-Blue/commons-memory
/plugin install commons@commons-memory

Needs uv. Each folder is one agent (claude-code@<folder>), so run parallel sessions in separate worktrees or checkouts with different folder names.

Two sessions, two worktrees, same task:

claude-code@payments-fix   start_work("fix the payments retry", paths=["pay.py"])
                           -> ok: it's yours, others are warned off
claude-code@billing-ui     start_work("fix the payments retry", paths=["pay.py"])
                           -> busy: claude-code@payments-fix has it since 02:33.
                              msg_send them to split it, or wait for their finish_work.

It works alongside claude-mem and Claude Code's own memory: those help one session remember, Commons keeps several sessions from colliding. The plugin lists 19 tools (memory and coordination only). Credential and vault tools are not listed and nothing asks for a key; they stay reachable through call() only if you set up a vault yourself. How it stays safe: docs/threat-model.md.

Beyond one machine: the hub

The same Commons runs as a small self-hosted hub, so sessions on different machines, and other AIs (Codex, Cursor, Gemini CLI, ChatGPT, Grok), share one view of who is doing what.

Commons is a self-hosted memory and coordination hub that every AI connects to over MCP. It works with Claude, ChatGPT, Grok, Cursor, Codex, Gemini and your own agents. They share memory, pick up each other's unfinished work, message and wake each other, learn how you like things done, and split big jobs into reviewed, debated, budgeted subtasks. One SQLite file (or Postgres) holds it all. A dashboard shows who is doing what and what it costs.

Commons dashboard

curl -fsSL https://raw.githubusercontent.com/Neoo-Blue/commons-memory/main/install.sh | sh
irm https://raw.githubusercontent.com/Neoo-Blue/commons-memory/main/install.ps1 | iex     # Windows

Docker: see docs/docker.md. Prefer to read it first? curl -fsSLO https://raw.githubusercontent.com/Neoo-Blue/commons-memory/main/install.sh && less install.sh && sh install.sh. No-script alternatives: uvx --from git+https://github.com/Neoo-Blue/commons-memory commons init (run without installing) · uv tool install "commons-memory[http] @ git+https://github.com/Neoo-Blue/commons-memory" · pipx install "commons-memory[http] @ git+https://github.com/Neoo-Blue/commons-memory"

Related MCP server: Memryzed

Contents

Quickstart · Feature tour · Architecture · Connect any AI · Screenshots · Multi-agent · Security · Networking · Configuration · Troubleshooting · FAQ · Comparison · Roadmap · Changelog

Onboarding (self-hosted hub)

  1. Copy .env.example to .env, create the three secret files it lists (dashboard token, Postgres password, vault key), then docker compose up -d (docker-compose.yml; the comments explain every option).

  2. Open the dashboard and go to Setup. A checklist shows what is missing:

    • provider keys: TypeSafe (Jev), Anthropic, OpenAI, Google, xAI, OpenRouter, or a local Ollama;

    • the decision agent's fallback order;

    • your service credentials;

    • features, all on by default.

    Keys are stored encrypted in the vault and never shown again.

  3. Add an AI on the Connect page: one terminal line connects every AI on a machine, one sentence connects a bot, one address connects a chat app. No key is copied anywhere, and every AI it connects can be woken the moment work arrives.

  4. Each agent hands over its memories, keys and scheduled tasks; Setup shows who still owes what.

2-minute quickstart

# 1. install (above) — this also runs `commons init` (~/.commons/commons.db)
# 2. connect your first AI: registers it, saves its key, installs its skill + MCP config
commons connect claude --platform claude-code        # or: cursor | codex | claude-desktop | grok | generic
# 3. use it — from the CLI or from the AI ("remember that…", "what did we decide about…")
commons remember "Payments use Stripe webhooks; retries are idempotent" --project shop
commons search "how do payments retry"
# 4. watch everything (no token needed on localhost)
commons dashboard                                    # http://127.0.0.1:8766

Connect a second AI the same way and it can see the first one's memory immediately. Each client lists only the 32 core tools (6.1k tokens, against 40.4k for all 186); tools(query) finds the other 154 and call(tool, args) runs them. For other AIs (ChatGPT, Grok, Muse…), paste the universal prompt.

Feature tour

Area

What you get

Learn more

Infrastructure map

One layered map of where everything runs and how it connects: machines, LXCs and VMs, containers, services, URLs and ports, tunnels, storage and bind mounts, repos, systems (e.g. Plex: its parts and the guest each runs on) and the vault credential each uses (name only). Built from a read-only collector (commons infra collect --submit, or commons infra install to run it on a schedule) and from your memories (a small model extracts stated facts, each citing its notes), merged by vmid, IP and URL. Zoomable map, inventory and drawers on the dashboard; agents ask infra("plex")

docs/guide.md

Memory & knowledge

Hybrid search (BM25 + local fastembed vectors, entity/time/recency signals, optional rerank) with token budgets · context=N returns the turns around each short hit (a reply needs the turn it answers; a long turn stands alone) and relative dates resolve against each memory's own date ("yesterday (7 May 2023)") · free-text contradiction flags (TypeSafe) · auto-capture hooks for Claude Code/Codex/Gemini/Cursor that keep every message and reply verbatim plus typed observations, and a turn hook for chat apps without hooks (docs/hooks.md) · one graph linking memory, code, sessions, agents · code index (Python, JS/TS, Go, Rust, Java, Ruby, C, C++, C#) plus live definitions, references and types from each language's own server (code_lookup, LSP) · Graphiti adapter (mirror memories into a temporal knowledge graph, bring its facts back) · conflict detection · auto-built, cited knowledge base per project · librarian that tidies and answers find()

docs/tools.md

Project board

Every request you make, in your words, with the targets (metric, goal, current), expectations, actions and deliveries under it, layer by layer (project / ui/dashboard). Done needs evidence, dropped needs a reason, and asking twice is counted. It leads every agent's check-in, so nothing you asked for is lost to context compaction or an agent switch. Agents' questions for you wait under "Needs you" and your answer goes straight back to them

docs/tools.md

No duplicate work

start_work checks every task against what other agents are doing now and what was finished, so two agents never build the same thing and nobody redoes finished work; hooks run the same check on every message. Each agent gets the Commons routine on its first check-in, so you never have to explain it

PROMPT.md

Credential vault

Commons stores your API keys and logins encrypted and makes calls for agents, so no agent ever sees a key, and a key only ever goes to its own service. A decision agent rules on each request: sound reads are allowed, writes need your request behind them, anything destructive or costly comes to you as an approval link the agent hands you: one page showing the exact request, approved with your owner password (agents can't), and approving runs it. Or switch on "approve everything" at your own risk, or always allow one key. It is an order you choose (TypeSafe, any provider you have a key for, a live connected agent on its own subscription, then you), and a phone notification with Yes / No buttons lets you answer anywhere. Agents creating accounts get a generated username and password from the vault · an agent deposits a key the moment it gets one; the base URLs it may go to can follow, and until then it goes nowhere · each key records what it is for, what it can do at the provider, and every place it is installed or used, linked on the infrastructure map, so it can be rotated or narrowed without guessing

CHANGELOG.md

Team awareness

A live Team now view (who is working, blocked, done or waiting on you) · a card per agent that the hub writes from what it can check (who issued its key and when, where it runs, how it is woken, its usage headroom, its schedules, the work it finished), kept apart from what the agent claims, with who(name) to read it · agents meet a newcomer at their next check-in instead of a broadcast that would wake and bill every agent, and a newcomer gets the whole team at its first · display names only you set, so grok reads as "Grok bot" while messages still reach it, and no agent can name itself after another · introductions you ask for: one note to each, nobody else woken · every release tells all agents what changed and what to adapt · handoffs carry a commit Commons checks on GitHub · failed CI runs, new issues and new PRs (GitHub watcher or webhook) become jobs for the best live agent

CHANGELOG.md

Continuity

Sessions, checkpoints, handoffs that resume in another AI · layered context packs (L0 gist → L3 full) so the next AI doesn't re-pay tokens · decisions with rationale and why() · leftovers and recurring jobs

docs/guide.md

Teamwork

Submit a task and it is split for the team: a model plans it (Haiku by default), else a live agent does, else keyword rules, sized to who is live, what each agent is good at and its usage left. Big hand-offs are planned too, and an agent can split a subtask it holds and merge the parts. Six-stage workflow (submit_task(pattern="sdlc") or /sdlc, or one stage with /spec /plan /build /test /review /ship): you approve the spec and confirm the release from the board or your phone, stage leads hand out task cards up to 3 levels deep, each card goes to a cheap, mid or top model and effort by difficulty x criticality (on the agent's own CLI), and the Workflow page shows the stage spine, the agent tree, traceability and tokens saved. Patterns: plan → parallel parts each gated by a review → summary; work → cross-review (author ≠ reviewer); debate → judge; consensus vote. Every job has a shared workspace: each part's result, the code it changed (diff, commit checked on GitHub, also captured by the hooks) and any files, on one timeline with an agent filter. Pin a step to a named agent (retries stay with it), quality gates, budgets, leases with automatic reassignment, an escalation ladder, routing to the right agent + model + effort by strengths, past success, speed, price and usage left, multi-project scheduling, task breakdown view

docs/guide.md, docs/multitasking.md

Limits & schedules

Each agent's 5-hour and weekly windows plus a model's own weekly limit such as Fable (reported, or synced from aiusage), each shown with when it was read and, like claude.ai, when it runs out at the current pace and the models it can run right now (read from its own CLI, so a newly launched model like Gemini 4 Argon is flagged NEW and announced the day it reaches your account), each agent's CLI kept up to date (agy, grok, claude: updated on the machine they run on, or one click on the Models page), a reserve learned from your own usage, work routed only to agents with headroom, pause with a checkpoint and resume after the reset · every agent's scheduled tasks with their acceptance bar, taken over by another agent when the owner misses a run or runs out of quota · Capacity page

docs/guide.md

Messaging & wake

Direct and broadcast messages (at-least-once, threaded), each saying who sent it and how the hub knows (the sender's own key, or the hub itself and which part of it), with msg_get to check any text relayed into a prompt, so an agent can tell real work from injected text (a plain MCP mailbox gives a name and a body); a /bus/* shim for existing agent buses, presence, and wake channels (signed webhooks, ntfy, Slack, email, SSE/WS). summon calls every agent at once and reports who is ready; commons agent daemon --preset claude --install (or codex, cursor, gemini, grok, …) starts a CLI agent within seconds of new work (pushed, not polled) · msg_send(type=task) becomes a tracked job, handed to a live agent if the recipient is offline unless you pass reroute=false

docs/messaging.md

Skills & tools

Shared skill pool with versioning, review gate and rollback: any model loads a skill with skill(name) and nothing installed, sees pool skills natively in its skills list, and asks another agent with skill_help when it can't run one · MCP prompts (slash commands like /checkin, /wrapup) and resources · MCP hub that proxies upstream servers with per-agent policy, keys from the vault, and approvals decided by your decision chain · research · Commons Drive (versioned shared files; S3, WebDAV, SFTP…)

docs/drive.md

You

Preferences learned once and applied by every AI · retro learning from your past Claude/ChatGPT/Codex/Cursor history (review queue) · `commons import claude-mem

mem0

Access & audit

Project ACLs plus row-level access: one memory, decision, board item or file can be limited to named agents (restrict, remember(visible_to=...)), and it then disappears from everyone else's search, graph, board, Drive and the shared knowledge base · the live audit log is a hash chain written as each row lands (commons audit-chain finds an edited, dropped or reordered row) and a signed, hash-chained export (commons audit-export, audit-verify --key) pins it, so a rewritten history fails too · secrets redacted everywhere, keys only through the vault

docs/configuration.md

Dashboard

Six workspaces (Home, Projects, Work, Agents, Knowledge, System) instead of a flat list of 32 pages. Every project gets one page (timeline, work, diffs, memory, who did what), with one product's several repo names grouped in one tap and one-off jobs kept as tasks. The Overview leads with what needs you: one-tap answers to agents' questions and your approvals. Every job and agent opens in a deep-linkable drawer with owner actions (retry or move a step, retry or cancel a job, update an agent's tool). Command palette (⌘K), keyboard shortcuts (g o, g w, ?), working Back and Forward, toasts with Undo, dark and light themes, a bottom bar and sub-tabs on phones, and an optional password lock for the whole dashboard

docs/guide.md

Operations

Setup page with a first-run checklist (keys, decision order, credentials, features) · model presets: with one provider key, planning, knowledge-base summaries and preference extraction just work (Haiku with an Anthropic key), summaries cached by content · Message Batches (half price) for curated imports and benchmarks · commons setup connects 17 AI clients in one command and commons doctor --repair fixes a broken connection, and every session start checks that Commons is still registered as the AI's MCP server and puts it back if not (Claude Code gets the key from a headers helper, so no config file holds it) · dashboard (30 pages, live updates) · tokens per agent, model and effort read from each agent's own records (Claude Code transcripts including subagents, the peers' bridge jobs: input, output, thinking, cache), so subscription work shows up, not only what agents remember to report · usage and cost by agent/model/project, projects grouped as on the Projects page · kill switch · backups, retention, dump/restore · Postgres + pgvector · SQLCipher · OpenTelemetry · Docker

docs/networking.md

What each feature buys you

Measured where we have numbers (details in benchmarks/README.md); "not benchmarked" means the effect is real but not yet measured. Rival columns come from each project's own README and docs (checked 2026-10-13): ✓ has it, ◐ partial, · doesn't, — not compared.

Feature

Without it → with it

mem0

claude-mem

MemPalace

Archify

Hybrid search + neighbouring turns (short hits) + date resolution

LoCoMo QA 69.5% → 78.7%; LongMemEval QA unchanged by neighbours (65% either way, where giving them to every hit costs points)

70.3% on the same LoCoMo run (paired p = 1e-11)¹

· no recall benchmark

LoCoMo dialog recall 0.545 vs Commons 0.708 (its metric)

·

Indexed search

p50 at 30k memories 1,383 ms → 68 ms

—

—

—

·

Redesigned dashboard

answer, approve, retry, move or cancel from the page you are on instead of hunting across 32 tabs; every page works on a phone (not benchmarked)

—

—

—

—

Lean tool list

tool schemas per session 39.7k → 6.3k tokens (−84%)

—

—

45 MCP tools

·

Verbatim capture hooks + turn() for chat apps

nothing said is lost to an agent's own summary; Claude Code, Codex, Gemini, Cursor, any chat app

◐

✓ (8+ harnesses)

✓ (3 clients)

·

Project board

your asks survive compaction and agent switches; asked-twice is counted

·

·

·

·

No duplicate work (start_work)

two agents never build the same thing (not benchmarked)

·

·

✓ claim protocol

·

Work splitting (model, live agent or rules plan it; split_subtask)

big jobs run in parallel across agents by strength and usage left; live run: 3 jobs, 4 agents (not benchmarked for speed)

·

·

✓ task delegation (no planner)

·

API seats (your own keys, by tier)

when every subscription agent is busy, offline or out of usage, steps that need no repo (specs, plans, reviews, research, summaries) still run on a cheap, mid or top model from your key, picked per step; stops at your 24-hour dollar cap (off by default)

·

·

·

·

Six-stage workflow (/spec /plan /build /test /review /ship)

an idea goes through spec, plan, build, verify, cross-family review and ship with you approving the spec and the release; leads split work into task cards, each routed to a cheap, mid or top model by difficulty x criticality; build and verify need evidence; every acceptance criterion traced to its tests and verdicts; a failed check stops the checks after it; Workflow page draws it all (token savings measured per job, not benchmarked)

·

·

◐ task delegation, no stages

·

Infrastructure map

where a service runs, how it is reached, what it mounts and which credential it uses, scattered across hundreds of notes → one answer from infra(name); on a live Proxmox host the collector found 18 guests, 49 services, 38 endpoints and 43 mounts in about a minute, read-only

·

·

·

◐ code architecture only

Re-filing misfiled notes

imported notes keep the old tool's folder label (2,200 Poise notes under soul-pool on a live hub) → a model proposes where each belongs, grouped per move, applied with Undo; live-captured notes are never touched

·

·

·

·

Project pages + grouped names

a live hub's 125 raw project names (folders, worktrees, one product under 6 names) in a filter dropdown, no project page → one page per product with its timeline, diffs, memory and people; one-offs kept as tasks

◐ filter by app/user

◐ project filter, no page

◐ wings and rooms

◐ repo diagrams

Job workspace + recorded diffs

every part's result, diff and GitHub-checked commit in one place; reviewers get the diff

·

◐ file paths only

✓ patch submit

·

Credential vault + decision agent + owner approvals

agents never see keys; reads allowed, writes need your ask, the rest is one approval link only you can approve (owner password), and approving runs it

·

·

·

·

Row-level access + chained audit log + signed export

one record limited to named agents; the live log and its exports are tamper-evident and verifiable

◐ scoping by ids

◐ private tags, unsigned log

◐ checksummed, unsigned

·

Shared skill pool

any model loads a skill with nothing installed; skill_help when it can't run one

◐ own skills

·

◐ own skills

·

Messaging + instant wake

daemon agents start within seconds of new work

·

◐

✓

·

Knowledge base per project

cited digest per project, rebuilt as memory changes

✓

✓

◐ no summaries

·

Code graph + diagrams

call graphs, sequence, workflow, lifecycle and architecture diffs from the real index

·

·

◐

✓

Contradiction flags (TypeSafe)

conflicting notes flagged: precision 1.00, recall 0.97 on 96 pairs

—

—

—

·

Cost controls

Message Batches −50% on imports and benchmarks; prompt caching (cached input ~10% price); KB summaries cached by content

—

—

n/a (no LLM on write)

n/a

¹ mem0's hosted platform reports LoCoMo 92.5 / LongMemEval 94.4 with its own scorer; that isn't comparable to runs scored here with one reader and judge for every system.

Architecture

flowchart LR
  subgraph Agents
    A1[Claude Code / Desktop] -->|stdio MCP| HUB
    A2[Cursor · Codex · Gemini] -->|stdio MCP| HUB
    A3[ChatGPT · Grok · Muse · custom] -->|HTTP MCP + key| HUB
    W[commons worker / agent daemon] -->|claim · heartbeat · complete| HUB
  end
  subgraph HUB[Commons hub · commons serve]
    MCP[MCP tools · aliases · ACLs · rate limit] --> RED[Secret redaction on every write]
    RED --> DB[(SQLite or Postgres<br/>memory · graph · KB · sessions<br/>jobs · messages · skills · audit)]
    ORC[Orchestrator<br/>DAG · gates · leases · routing · escalation] --> DB
    MSG[Messaging · presence · wake] --> DB
    BRK[Secret broker<br/>env:// vault:// op:// infisical://] -.leases.-> DB
    HUBX[MCP hub → upstream servers]
    BG[Background: KB · librarian · reaper · backups]
  end
  HUB --> DASH[Dashboard :8766]
  MSG -->|webhook · ntfy · SSE/WS| A3

Connect any AI

Add an AI on the dashboard's Connect page. It makes a join link (15 minutes, up to 5 AIs) and gives you three ways to use it:

  • On a computer: curl -fsSL http://HUB:8770/join/<code> | sh. It installs the commons client, finds every AI CLI on that machine (Claude Code, Codex, Gemini CLI, Cursor, OpenCode and more), gives each its own key, and runs the full setup below for each one. Running it again skips what is already connected.

  • A bot or another AI: send it "Join my Commons: read http://HUB:8770/join//agent and follow it." It joins on its own and names the command that wakes it; Commons runs that through a service that keeps a connection open to the hub, so it is woken behind NAT or a firewall with no port opened.

  • A chat app (claude.ai, ChatGPT, Grok): add a custom connector with http://HUB:8770/mcp and sign in.

Every AI Commons connects can be woken. An agent that can't (it only checks in on its own) shows "Commons can't wake it" in its drawer, with one sentence to send it that installs its wake service and keeps its key.

Prefer to do it by hand? On the machine where the AI runs:

pip install -U commons-memory && commons setup --client claude-code --agent my-agent --url http://HUB:8770

It asks for the agent's key once (hidden, saved 0600), then does every step, each on by default:

  • connects the AI to Commons over MCP;

  • installs the master instructions it always loads (CLAUDE.md plus a commons skill, AGENTS.md, GEMINI.md, or a Cursor rule);

  • installs auto-capture hooks;

  • installs instant wake;

  • hands over the AI's existing memories;

  • verifies the connection.

Add --no-<step> to leave one out. The dashboard's Connect page builds this command with a checkbox per step. Clients: claude-code, codex, gemini, cursor, opencode, copilot, cline, kilo, amp, factory, qwen, crush, goose, windsurf, zed, roo, warp.

Hosted chat apps (claude.ai, ChatGPT, Grok, Muse) can't run commands: paste PROMPT.md into their custom instructions. It is generated from the same master instructions, so it never goes stale, and Commons hands every agent the same playbook on its first check-in and whenever it changes.

Screenshots

Captured from a demo hub (python scripts/demo_seed.py demo.db): made-up agents, jobs and memories.

OverviewOverview: what needs you first (one-tap answers, approvals), then spend, running jobs, the team and activity

Jobs cockpitJobs: every job with live filters; a job opens in a drawer with its stage spine, steps, routing and owner actions

AgentsAgents: the fleet, what each is doing, its models, quota and tool version; click for the agent drawer

On a phoneOn a phone: every page works at 390 px, with a bottom bar and sub-tabs

BoardBoard (light theme): what you asked, targets and deliveries, with one-click Done and Undo

UsageUsage: spend and tokens per day by agent, 7 to 30 days

MemoryMemory: search first, filter chips, drawers, bulk actions

Connect an agentConnect an AI: one join link; a terminal line, a sentence for a bot, or a connector address, and each AI appears as it joins

Knowledge baseKnowledge: an auto-built, cited knowledge base per project

GraphGraph: memory, code, sessions and agents in one graph

Mission controlMission control: fair-share scheduling and agent load against capacity

A projectA project: everything about one product in one place: active work, timeline, diffs, memory and who did what

InfrastructureInfrastructure: where everything runs: capacity and every guest's allocation, then a zoomable map, the graph and a drawer per thing

Multi-agent in 5 commands

commons serve --transport http --host <tailnet-ip> --port 8770 --dashboard     # 1. the hub (keys required)
commons connect grok --expertise code:0.9,review:0.7                           # 2. each agent gets a key + profile
commons connect muse --expertise writing:0.9,review:0.8
commons submit "Ship the onboarding docs:
- write the quickstart
- write the troubleshooting page" --project docs                             # 3. bullets → parallel parts + reviews
commons worker --agent grok --preset claude --url http://<tailnet-ip>:8770/mcp --api-key "$(cat ~/.commons/agents/grok.key)" &   # 4. headless seats
commons status                                                                  # 5. or the dashboard's Mission control

Interactive AIs claim the same subtasks with pickup → claim_subtask → complete_subtask. Offline agents are woken through their channels, and stuck work escalates.

Security model

  • Identity. HTTP requires an agent key or OAuth 2.1 token on every request (401 otherwise). Only key hashes are stored. Each principal is rate-limited (429, COMMONS_RATE_PER_MIN).

  • Access control. Per-project ACLs (commons acl grant PROJECT AGENT --role read|write|admin). The sole author of a project can make it private. Trust scores weight search and the KB.

  • No raw secrets in memory. Every write passes a gitleaks-style and entropy redactor. Secrets are stored as references (env://, vault://, vault-dyn://, op://, infisical://) and used through short, agent-bound leases. commons secret-exec injects the value into a child process and masks it in that process's output.

  • Tools. The MCP hub applies allow/deny/approve policies per agent and tool. Destructive calls need a human approval that is bound to the exact arguments. Upstream output is fenced as untrusted, and so is anything a stranger can write on a watched GitHub repo (issue and PR text, branch names, commit messages): it never reaches a job title, and issues and PRs from people outside the repo make no job unless you turn on github_outside.

  • Owner proof. The tokenless LAN dashboard can't tell you from an agent on the same network, so anything that could approve an agent's own request or reach a key (approvals, providers, settings, the vault, MCP policy, trust, routing, new agent keys) needs your owner password once one is set. You choose it on your first visit: for 30 minutes after Commons starts, the dashboard offers "Make this hub yours" to whoever opens it, from any browser, with no code (a restart reopens the window until a password exists; every claim notifies you; COMMONS_CLAIM_MINUTES=0 means setup-code only). Each browser then stays signed in for 14 days. Want the whole dashboard behind it? Switch on dashboard_lock on Setup. Model providers, role models and resuming after the kill switch need an admin over MCP too.

  • Review gates. Skills and gated subtasks need a different agent (or you) to approve. Kill switch, daily cost cap and per-job budgets.

  • Network. Bind to loopback or a private network (below). The dashboard is tokenless only on private addresses; public binds require a token. Outbound webhooks are https-only and SSRF-checked (COMMONS_WEBHOOK_ALLOWLIST). Audit log for secrets, ACLs, approvals and escalations.

  • Encryption at rest: SQLCipher (COMMONS_DB_KEY) or disk encryption. Known gaps are tracked honestly in FLAWS_AND_GAPS.md.

Networking

  • One machine: stdio MCP. Nothing listens on the network.

  • Several machines (recommended): your tailnet / VPN. commons serve --transport http --host <tailscale-ip> --port 8770 --dashboard. The dashboard follows --host. On localhost, LAN (RFC 1918) and tailnet (100.64.0.0/10) addresses it needs no token. Binding it to a public address requires COMMONS_DASHBOARD_TOKEN. Set COMMONS_DASHBOARD_REQUIRE_TOKEN=1 to demand a token everywhere.

  • Don't bind 0.0.0.0 unless the host has no public interface. Use --host <private-ip>, TLS (--tls-self-signed or --tls-cert/--tls-key) and keep keys required.

  • From anywhere: commons expose up tailscale|cloudflare|ngrok|ssh|…. It refuses public exposure unless keys are enforced. Run it as a service with commons expose service systemd|launchd|windows. Details: docs/networking.md.

  • Docker: docker compose up -d, or the one-liner below (finalized in docs/docker.md):

    docker run -d --name commons -p 8770:8770 -p 8766:8766 -v commons-data:/data ghcr.io/neoo-blue/commons-memory:latest   # placeholder, see docs/docker.md

Configuration

Everything works with defaults. These are the settings people usually change:

Variable

Default

Purpose

COMMONS_DB

~/.commons/commons.db

SQLite path or postgresql://…

COMMONS_REQUIRE_KEYS

1

HTTP requires keys (0 = local dev only)

COMMONS_DASHBOARD_TOKEN

—

Dashboard admin token; required only on public addresses

COMMONS_DASHBOARD_REQUIRE_TOKEN

—

1 = require the token even on localhost/LAN/tailnet

COMMONS_RATE_PER_MIN

600

Per-agent HTTP rate limit

COMMONS_ADMIN_AGENTS

—

Agents with global admin rights

COMMONS_EMBEDDER

hash

fastembed for real embeddings

COMMONS_DAILY_COST_CAP

—

USD/day cap for orchestrated work

COMMONS_ESCALATE_AFTER

900

Seconds before stuck work escalates

COMMONS_LEASE_SECONDS

900

Subtask lease length

COMMONS_WEBHOOK_ALLOWLIST

—

Private or non-https wake/webhook hosts you trust

COMMONS_DB_KEY

—

SQLCipher encryption key (as a secret ref)

COMMONS_BACKGROUND

light

In-process maintenance (full, 0)

All 89 variables are in docs/configuration.md. It's generated from the code by scripts/gen_env_reference.py, and a test fails if a setting is undocumented.

Troubleshooting

Symptom

Fix

address already in use

Another service owns the port. Use --port 8770 (and update client URLs).

401 Unauthorized

Send Authorization: Bearer <agent key>. Keys live in ~/.commons/agents/<name>.key, and commons connect NAME re-keys.

429 Too Many Requests

Respect Retry-After, or raise COMMONS_RATE_PER_MIN.

Dashboard unreachable from another machine

Bind it to that interface (--host / --dashboard-host). On LAN/tailnet no token is needed. On a public address, set COMMONS_DASHBOARD_TOKEN and open http://<host>:8766/?token=…

Agent shows offline / never gets work

Make an authenticated call or commons agent daemon. Add a wake channel with commons wake add AGENT webhook url=…

Subtask stuck in claimed

The worker died. The lease expires (COMMONS_LEASE_SECONDS), then the subtask is reassigned to another agent. Run commons escalate to force it.

skill … has no approved version

Another agent (or you) must skill_review it. Authors can't self-approve.

admin rights required

Be a project admin, be listed in COMMONS_ADMIN_AGENTS, or be the project's sole author.

commons: command not found after install

Add ~/.local/bin to PATH (Windows: %USERPROFILE%\.local\bin).

Unknown-argument error from a tool

The error lists the accepted names and aliases.

FAQ

  • Do I need a server? No. A single machine uses stdio and one SQLite file. Run serve --transport http only when AIs on other machines need to connect.

  • Which AIs work? Anything that speaks MCP (stdio or streamable HTTP). Others can use the HTTP /bus/* and /agent/* endpoints or a CLI worker.

  • Will it leak my secrets to models? Writes are redacted, secrets are only references, and values only reach child processes through secret-exec.

  • What does it cost? Commons itself makes no LLM calls unless you configure a planner, summarizer or providers. Usage reported by agents shows up on the dashboard.

  • Can I move from SQLite to Postgres? Yes: commons migrate-postgres postgresql://….

  • Can I stop it? Yes. Run commons pause (kill switch). commons dump exports everything as JSONL.

Benchmarks (v0.9.0; QA on v0.28, tool sizes on v0.30)

Measured on an 8-core Apple M1 laptop that was busy with other jobs, CPU only. Full tables, caveats and per-question results are in benchmarks/README.md; every number is reproducible with commons bench.

What

Metric

Commons

LoCoMo retrieval, 1,982 questions

evidence-turn any@1 / @10

39.4% / 76.5% (v0.8: 31.2 / 71.1); reproduced on v0.21.1, results

LoCoMo retrieval

evidence-session any@10

97.4% (v0.8: 95.8)

LoCoMo end-to-end QA, 1,540 questions (cat 1-4)

LLM-judged accuracy, Haiku 4.5 reader + judge, k=20

78.7% with context=2 (short hits, v0.28) and date resolution (78.5% when every hit gets neighbours, 69.5% for hits alone); no LLM at write time

LongMemEval-S end-to-end QA, seeded 100 questions

same reader, judge and k

65% on v0.28 (67% on v0.20.1, run-to-run noise of a few points; v0.9: 62%). Since v0.28 neighbouring turns go only to short hits, so they no longer cost points on its long sessions (65% with or without them; 54.0% when every hit gets them)

Search latency, 30k / 60k memories

p50

68 ms / 114 ms (v0.8: 1,383 ms at 30k)

Tool schema an AI pays for each session

tokens, exact (Anthropic tokenizer, minus a one-tool baseline)

6,072 for the 32 core tools in v0.30; listing all 186 would cost 40,382

Self-check on your own data (commons bench self)

known-item hit@1 / @5

93% / 100% on a 166-memory sample

Head-to-head, rivals run here on the same LoCoMo data (details in benchmarks/README.md):

vs

Same metric

Commons

Rival

mem0 OSS

QA accuracy, same reader/judge/prompts, 1,540 q

78.8%

70.3% (paired: Commons alone right 232x, mem0 alone 107x, p = 1e-11)

mem0 OSS

per category: multi-hop / temporal / inference / single-hop

64.2 / 77.3 / 43.8 / 88.2

61.0 / 73.8 / 37.5 / 76.2

mem0 OSS

search p50 / LLM calls per write

24-68 ms / none

377 ms / extraction on every write

MemPalace

its own recall metric, dialog / session top-10

0.708 / 0.945

0.545 / 0.889

claude-mem 13.36

same metric, dialog / session top-10

0.708 / 0.945

0.496 / 0.811 (search p50 2.7 s)

claude-mem 13.36

footprint at rest

43 MB RSS, 0.1% CPU with 5,761 memories (185 MB once the embedder loads)

its chroma-mcp process sat at ~39% CPU on the same Mac

Published numbers elsewhere use other readers, judges and subsets (mem0's paper: 66.9% with gpt-4o-mini; its managed platform and Zep claim 92-95% under their own setups), so only the table above is apples to apples.

Comparison

Project

Great at

Commons' angle

mem0 / OpenMemory

Fact extraction, cross-client memory

Higher LoCoMo QA in every category (78.8% vs 70.3%, same reader and judge) with no LLM on the write path, plus a code graph, handoffs, a project board, orchestration and secrets; commons import mem0 brings your memories over

claude-mem

Automatic capture across 8+ agent harnesses

The same capture shared by every agent, plus orchestration, a vault, a board and a job workspace; commons import claude-mem --curate imports and cleans its history

MemPalace

Verbatim recall, retrieval benchmarks, logstream task coordination

Higher LoCoMo recall under MemPalace's own metric (0.708 vs 0.545 dialog-level); both coordinate agents (claims, diffs, wake), and Commons adds model-planned work splitting, a credential vault, a project board, row-level access and signed audit exports

Archify

Validated, interactive architecture diagrams

Diagrams come from the real code index and history: code graph with source links pinned to the indexed commit, call and multi-agent sequence diagrams, job workflows, lifecycle state machines with real transition counts, and an architecture diff between any two snapshots, plus communities, impact paths and a cluster map

Graphiti / Zep

Temporal knowledge graph

Inspired Commons' conflict and supersede model

Cognee

Rich document graphs

Commons is a lighter single-file hub

basic-memory

Human-readable Markdown memory

Commons has Obsidian/Markdown export

A2A

Agent-to-agent protocol

Commons ships an A2A server and client

Agent buses / chat bridges

Messaging

Commons adds a shared mailbox, presence and wake, plus a bus-compatible shim

Roadmap

  • First PyPI release (the publishing workflow is in place; uvx commons-memory / pipx install commons-memory work once it lands).

  • Hosted dashboard auth via OIDC.

History: CHANGELOG.md.

Development

git clone https://github.com/Neoo-Blue/commons-memory && cd commons-memory
uv venv && uv pip install -e ".[dev,all]" && uv run pytest -q
python scripts/gen_env_reference.py      # after adding a COMMONS_* setting

MIT licensed.

Available Tools

35 tools
add_leftoverC

Record an unfinished item so another agent (or the next recurring run) picks it up.

NameRequiredDescriptionDefault
textYes
agentNo
api_keyNo
projectNo
priorityNo
source_idNo
task_typeNogeneral

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a write/persist operation but says nothing about whether it requires an api_key, whether items persist across runs, how priority affects pickup, or what happens on failure. For a mutation-style tool with zero annotation coverage this is a significant gap.

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?

A single tight sentence with the action front-loaded and no wasted words. It is concise, though brevity here edges toward under-specification given the schema it must support.

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

Completeness1/5

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

A seven-parameter tool with no annotations, no output schema, and no parameter descriptions needs strong textual support, yet the description covers none of the parameters and no behavioral or return context. It is not sufficient for an agent to call the tool correctly.

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?

Seven parameters (agent, api_key, project, priority, source_id, task_type, text) at 0% schema description coverage, and the description explains none of them. The role of api_key, source_id, task_type, and default priority is left entirely undefined, so the description does not compensate for the coverage gap.

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 (record) and resource (unfinished item), plus the downstream effect (another agent or next recurring run picks it up). It does not name or distinguish itself from closely related siblings such as handoff, pickup, resume, or claim_subtask, so it falls 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 Guidelines2/5

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

The description hints at intent (unfinished work to be picked up later) but gives no explicit when-to-use guidance, no exclusions, and does not point to alternative siblings like handoff, pickup, or board_add for the same need. An agent has to guess which tool fits.

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

boardA

The project board: the user's asks (verbatim), targets with goal/current, expectations, actions and what was delivered, layer by layer (path, e.g. "ui/dashboard"). status: open|done|dropped|all. Read it before working and before you stop: everything open here is still owed to the user.

NameRequiredDescriptionDefault
pathNo
statusNoopen
projectNo
max_tokensNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It establishes the tool as read-oriented ('Read it') and clarifies the meaning of the board state, but says nothing about pagination, the max_tokens budget, permissions, or the shape of the returned content.

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 resource definition and the key usage instruction last, with no filler sentences. The phrasing is dense and slightly run-on, but every clause carries information.

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?

For a 4-parameter tool with no output schema and no annotations, the description covers the concept and the status/path semantics but omits the project filter and the token budget. It is adequate but leaves real gaps an agent must guess at.

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 coverage is 0%, so the description must compensate. It documents two of four parameters well: path with an example ('ui/dashboard') and status with enum values ('open|done|dropped|all') that the schema lacks. It says nothing about 'project' or 'max_tokens', so half the parameters remain opaque.

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 states what the artifact is ('the project board') and enumerates its contents (asks, targets with goal/current, expectations, actions, deliverables) and implies the read action via 'Read it before working.' It distinguishes itself from board_add/board_update by being the read side, though it never states that verb explicitly as the tool's function.

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 explicit timing guidance: 'Read it before working and before you stop,' plus the rationale that everything open is still owed to the user. It does not, however, name the write siblings (board_add/board_update) as the alternatives when the agent needs to modify rather than read.

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

board_addA

Record on the project board. kind: ask (the user's request, VERBATIM; record every one before you start) | target (metric + goal, e.g. metric="search p50" goal="<50 ms") | expectation (acceptance criterion) | action (a step you will take) | delivered (what you shipped; needs evidence). parent = the ask it serves. Re-adding an open ask returns it with repeated=true: the user had to say it twice, so do it now.

NameRequiredDescriptionDefault
goalNo
kindYes
pathNo
textYes
agentNo
metricNo
parentNo
statusNoopen
api_keyNo
currentNo
projectNo
evidenceNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose one genuine behavioral trait — re-adding an open ask returns repeated=true, signalling the user repeated themselves — which is useful runtime context. However, it says nothing about the api_key parameter, authentication requirements, persistence, or side effects of a write operation.

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 summary sentence is front-loaded and the pipe-delimited kind list is compact and information-dense. The prose is terse rather than bloated, though the pipe formatting makes it slightly awkward to parse.

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?

For a 12-parameter write tool with no annotations and no output schema, the description covers the semantically important fields and the repeated=true return behavior. It still omits auth/credential handling (api_key) and several less-common parameters, so an agent cannot call it fully blind.

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 0% across 12 parameters, so the description must compensate. It explains kind (five values that are effectively an undocumented enum), goal, metric, parent, text, and evidence implicitly. It leaves path, agent, status, api_key, current, project, and the kind-specific pairing rules undocumented.

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?

Opens with a specific verb+resource: 'Record on the project board.' The kind enumeration clarifies what record types exist. It does not explicitly distinguish itself from the sibling 'board_update' or 'board', leaving some ambiguity about add vs. update.

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?

Strong procedural guidance: record every ask VERBATIM before starting, use action for steps, delivered requires evidence, parent links to the ask it serves. This tells the agent when each kind applies. It stops short of naming the alternative tool (board_update) for modifying existing entries.

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

board_updateA

Move a board item: status open|doing|blocked|done|dropped, a new measured current for a target. done needs evidence (commit, file, benchmark, item id, URL); dropped needs the reason in evidence. Asks can't be edited, and an ask can't be done while items under it are open.

NameRequiredDescriptionDefault
idYes
goalNo
pathNo
agentNo
statusNo
api_keyNo
currentNo
evidenceNo

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the status vocabulary, the evidence prerequisites for terminal states, and two important guard rails around asks (non-editable, cannot complete with open children). It omits auth requirements (an api_key parameter exists) and what happens on an invalid transition, but the disclosed rules are substantive and non-obvious.

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?

Three dense sentences, front-loaded with the action and status enum before the conditional rules. No filler. The phrase 'a new measured `current` for a target' is slightly cryptic, but overall the structure is efficient.

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?

For an 8-parameter mutation tool with no annotations, no output schema, and 0% schema coverage, the description covers the highest-value semantics (status, evidence, ask constraints) but leaves several parameters and any permission/return behavior unaddressed. Adequate to call it correctly in common cases, incomplete at the margins.

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 coverage is 0%, so the description must compensate. It successfully explains status (with the enum values the schema lacks), current (a new measured value for a target), and evidence (with per-status content requirements). However, goal, path, agent, api_key, and id remain completely unexplained in both schema and description, leaving half the parameters opaque.

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 ('Move a board item') and then enumerates the valid status values (open|doing|blocked|done|dropped), so an agent immediately knows this mutates a board item's state. It does not explicitly name the sibling to use instead (board_add) for creation, so it falls just short of full sibling differentiation.

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 concrete conditional rules: done requires evidence (commit, file, benchmark, item id, URL), dropped requires a reason in evidence, asks cannot be edited, and an ask cannot be done while child items are open. These are real when/when-not constraints, though no alternatives (e.g. board_add for new items) are named.

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

callA

Run any Commons tool by name, including ones your client doesn't list. Find names and arguments with tools(query). Example: call(tool="submit_task", args={"task": "...", "project": "web"}).

NameRequiredDescriptionDefault
argsNo
toolYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that arbitrary/unlisted tools can be invoked, but says nothing about behavior on an unknown tool name, permission/credential requirements, or whether the inner call's side effects and errors are surfaced unchanged — real gaps for a dispatcher that can perform writes.

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, front-loaded with what the tool does, followed by discovery guidance and a concrete example. No filler; 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?

For a two-parameter meta-tool with no output schema, the description covers purpose, discovery, and argument shape. Missing only edge-case behavior (unknown tool, nested dispatch, error propagation), which an agent could reasonably want before relying on it.

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?

Schema coverage is 0% and both parameters are bare, but the description compensates: the worked example shows `tool` is a name string and `args` is a JSON object mirroring the target tool's arguments, and it points to tools(query) for discovering valid names and argument shapes.

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?

States a specific verb+resource: 'Run any Commons tool by name'. It also distinguishes itself from the 30+ concrete siblings by explaining it is the generic dispatcher that reaches tools the client doesn't even list, so an agent can tell it apart without opening the schema.

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?

Explicitly names the discovery path ('Find names and arguments with tools(query)') and the condition that selects this tool (target tool not listed by the client). It stops short of saying when NOT to use it, e.g. prefer calling a listed sibling directly, which is left implicit.

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

claim_subtaskA

Claim the next ready subtask assigned to you (or a specific one). Returns a work packet including dependency results and user preferences. Heartbeat before the lease expires; returns null when nothing is ready.

NameRequiredDescriptionDefault
agentNo
api_keyNo
subtask_idNo
lease_secondsNo

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the return packet shape (dependency results and user preferences), the null result when nothing is ready, and the lease/heartbeat constraint. It omits auth expectations and concurrency/failure behavior, but the key operational traits are present.

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 three sentences are tightly front-loaded: purpose first, then return shape, then lease/null behavior. There is no filler and each sentence adds useful information.

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?

No output schema or annotations exist, so the description must be relatively self-sufficient. It explains the return packet and null case, but the 0% parameter coverage and missing auth details leave gaps an agent would need filled elsewhere.

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 four parameters exist, so the description should compensate more. It hints that subtask_id is optional and implies lease_seconds via the heartbeat sentence, but it says nothing meaningful about agent or api_key, leaving half the parameters unexplained.

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 ("claim") and resource ("subtask") and clarifies the two modes: next ready subtask or a specific one. It does not explicitly distinguish itself from nearby siblings like pickup or start_work, but the core purpose is 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?

It gives an implicit usage cue ("claim the next ready subtask... or a specific one") and mentions heartbeat timing, but it does not state when to choose this over alternatives such as pickup or start_work, nor when not to use it.

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

complete_subtaskA

Finish a claimed subtask. Changed code? pass repo (owner/name), branch, commit and/or diff: they land in the job's workspace (/jobs///) with your result. Gate tasks need verdict approve|reject (or a 'VERDICT:' line in result). leftovers: unfinished items to carry forward. preferences: user preferences you learned. success=false only when you could not do the work (it is retried); a review or test that finds problems is success=true with the findings.

NameRequiredDescriptionDefault
costNo
diffNo
repoNo
agentNo
modelNo
branchNo
commitNo
resultYes
tokensNo
api_keyNo
successNo
verdictNo
leftoversNo
tokens_inNo
subtask_idYes
preferencesNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the burden and delivers real behavioral facts: artifacts land in /jobs/<job>/<key>/, success=false triggers a retry, and gate tasks require approve|reject. Missing auth/permission expectations and return behavior, so not a 5.

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?

Dense but front-loaded: the core action and the payload rule arrive first, edge cases (gate tasks, leftovers, success semantics) after. Sentence-per-line structure aids scanning, though a couple of clauses are compressed to the point of being terse.

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 16-param mutation tool with no annotations and no output schema, the description covers the crucial workflow behavior (artifact storage, retry semantics, verdict handling). The remaining gap is the metadata params, which are largely self-evident from their names.

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 0% across 16 params, so the description must compensate. It explains the meaningful ones (repo, branch, commit, diff, verdict, leftovers, preferences, success) but leaves subtask_id, result, agent, model, cost, tokens, tokens_in, and api_key undocumented.

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 ('Finish a claimed subtask'), and the workflow framing ('claimed') implicitly contrasts with claim_subtask and submit_task. It never names a sibling outright, so it stays at a 4 rather than 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 Guidelines4/5

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

Provides conditional routing guidance: pass repo/branch/commit/diff when code changed, verdict for gate tasks, leftovers/preferences for their specific payloads. The success=false rule is an explicit when-to-use boundary. No explicit alternative-tool routing, 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.

credentialsA

The user's API keys Commons holds (names, services, where each may be sent; never values). Use one with use_credential; never ask the user to paste a key.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden, and it delivers the single most important property: this exposes credential metadata only, never secret values. That implicitly signals a safe read operation and prevents an agent from expecting a key it can use directly. It omits return ordering, empty-vault behavior, and error conditions, so it is not exhaustive, but the security-critical disclosure is present.

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 sentences, both earning their place: the first defines the payload and its boundary, the second gives the action instruction and the safety rule. The non-obvious constraint ('never values') is embedded in the first sentence where an agent will actually read it.

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 parameterless lookup with no output schema, the description tells the agent what comes back (names, services, destinations) and what never does (values), which is the substantive part of the return contract. It leaves the concrete response shape unspecified, but the essential semantics are covered.

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 takes no parameters, so there is nothing to disambiguate and the schema (trivially 100% covered) is empty. The baseline for a zero-parameter tool is 4, and nothing in the description is misleading about inputs.

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 defines the resource precisely: the user's API keys held by Commons, returning names, services, and allowed destinations but never values. This is clear enough to distinguish it from sibling tools, and it explicitly names use_credential as the companion action. It stops short of a clean action verb (it reads as a noun phrase, not 'list credentials'), which is the only thing keeping it from 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 Guidelines4/5

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

It gives an explicit next step ('Use one with use_credential') and a hard rule ('never ask the user to paste a key'), which tells the agent both why to call this tool and what to do with the result. It does not spell out when it is unnecessary to call it, but for a zero-argument lookup the routing guidance is strong.

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

expandB

Fetch the full record for any id (memory, decision, entity, session, task, agent). depth>0 adds graph edges.

NameRequiredDescriptionDefault
idYes
depthNo
max_tokensNo

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden: it discloses the id taxonomy and that depth>0 adds graph edges (a real behavioral trait, not repeated anywhere else). It remains silent on read-only vs mutation semantics, error behavior for bad ids, rate limits, and what 'full record' returns.

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 core action and followed by the one non-obvious parameter behavior. Nothing is padded, though the extreme terseness leaves known gaps (max_tokens, id provenance) unaddressed.

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?

No annotations, no output schema, and 0% schema coverage mean this thin description is the only documentation. It covers enough to make the call correctly (id required, depth optional) but omits what the record contains, how ids are obtained, and the role of max_tokens.

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 0%, so the description must compensate. It adds meaning for two of three params: id (which entity kinds are accepted) and depth (non-zero pulls graph edges). The third param, max_tokens, is never mentioned despite controlling output size.

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 gives a specific verb+resource ('Fetch the full record for any id') and enumerates the accepted id kinds (memory, decision, entity, session, task, agent), which disambiguates the vague name 'expand'. It does not explicitly contrast itself with siblings like search, why, or board, so sibling differentiation is only implied.

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?

'Fetch the full record for any id' implies this is a follow-up to a listing/search tool that returns ids, and the depth clause hints at when to request graph edges. However, no alternative tool is named and no explicit when/when-not condition is stated, so usage is inferred rather than guided.

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

finish_workA

Close your work claim (all of your open ones when claim_id is empty) with the result: what changed, where, and how it was verified. status: done | dropped. Changed code? add repo, branch, commit and/or diff: they are kept with the claim (/work//). This is what the next agent is shown, so be specific.

NameRequiredDescriptionDefault
diffNo
repoNo
agentNo
branchNo
commitNo
resultNo
statusNodone
api_keyNo
claim_idNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It usefully discloses persistence ('kept with the claim (/work/<claim>/)') and downstream consumption ('what the next agent is shown'), which are real behavioral facts. It omits auth/permission needs (api_key) and any notion of reversibility or side effects on other claims.

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 core action, then scope, then payload guidance. Four compact clauses with little waste; the parenthetical about /work/<claim>/ is slightly awkward but earns its place by explaining retention.

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?

For a 9-param, mutation-style tool with no annotations and no output schema, the description covers the lifecycle and most payload fields but leaves two parameters (api_key, agent) undocumented and says nothing about authorization or error behavior.

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?

9 parameters with 0% schema coverage, so the description must compensate. It gives meaning for result, status (enumerating done|dropped, which the schema lacks), claim_id (empty = all open claims), and the code-artifact fields (repo, branch, commit, diff). It leaves api_key and agent completely unexplained.

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?

Specific verb (close) + resource (work claim) with scope qualification (all open ones when claim_id is empty). This clearly distinguishes it from the sibling start_work and the subtask/claim lifecycle 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?

Explains the triggering condition (closing a work claim), what to supply as the result, the allowed status values, and when to attach code identifiers. It does not name an alternative tool or state exclusions, so it stops short of a 5.

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

handoffA

Write a structured handoff packet (summary, state, decisions, next steps, open questions, relevant ids) so another AI can resume(). Code work: pass repo (owner/name), branch and commit; Commons checks the commit on GitHub. session_id is optional: without it your latest active session (in project) is used, or a new one is opened. Next steps and open questions become leftovers. If to_agent is set, a task is posted to that agent's inbox.

NameRequiredDescriptionDefault
goalNo
repoNo
agentNo
stateNo
branchNo
commitNo
api_keyNo
projectNo
summaryNo
to_agentNo
decisionsNo
next_stepsNo
session_idNo
relevant_idsNo
open_questionsNo

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full load and it does disclose several non-obvious behaviors: session_id auto-resolution (latest active session or a new one), that next steps/open questions become 'leftovers', that to_agent posts a task to an inbox, and that Commons verifies the commit on GitHub. Gaps remain around authentication (api_key) and error/failure behavior, but the side-effect disclosure is unusually substantive.

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?

Dense but front-loaded: the core purpose leads, followed by conditional details in a logical order, with no filler sentences. Some internal jargon (resume(), leftovers) assumes ecosystem familiarity but is not padding.

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?

For a 15-parameter tool with 0% schema coverage, no annotations, and no output schema, the description is reasonably complete on fields and side effects. It still leaves auth expectations, which fields are actually needed (0 required is ambiguous), and the response shape unaddressed, so an agent must guess on some points.

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 0%, so the description must compensate and it does explain most parameters: summary, state, decisions, next_steps, open_questions, relevant_ids, repo (owner/name format), branch, commit, session_id, project, and to_agent. It leaves `goal`, `agent`, and especially `api_key` unexplained, so it partially but not fully covers the 15 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?

States a specific verb and resource ('Write a structured handoff packet') and enumerates its contents, making its function unmistakable. It also names the counterpart tool (resume()) that consumes the output, so an agent can place it in the workflow without opening a schema.

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?

Provides some conditional guidance ('Code work: pass repo...', session_id optional resolution, to_agent posting a task), which implies when the tool applies. However, it never states explicitly when to choose handoff over overlapping siblings like finish_work, record_decision, add_leftover, or submit_task, leaving the routing decision to inference.

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

heartbeatC

Extend the lease on a subtask you are working on.

NameRequiredDescriptionDefault
agentNo
api_keyNo
subtask_idYes
lease_secondsNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full behavioral burden. It conveys that lease state is mutated, but says nothing about permissions/auth, what happens if the lease already expired, whether the operation is idempotent, or what the response contains.

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?

A single front-loaded sentence with no filler, stating the action immediately. It is efficient, though arguably too terse for a 4-parameter tool with zero schema documentation.

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 4 parameters, no output schema, and no annotations, the description is thin: it omits auth requirements, lease semantics (default 900s), required parameters, and failure modes. An agent would be guessing at much of the invocation contract.

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% across 4 parameters, so the description must compensate. It implicitly maps to subtask_id and lease_seconds (the lease being extended), but leaves 'agent' and 'api_key' unexplained and adds no format or constraint detail beyond 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?

States a specific verb and resource ('Extend the lease on a subtask'), so the agent knows this is a lease-renewal operation rather than a task state transition. It does not explicitly contrast itself with siblings like claim_subtask, pickup, or start_work, so it falls 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?

'on a subtask you are working on' implies the usage context (call it while actively working to keep the lease alive), but gives no explicit when-to-use, when-not, cadence, or alternatives. Usage is inferred rather than stated.

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

infraB

Where things run and how they connect: the infrastructure map of machines, LXCs/VMs, containers, services, domains, tunnels, storage, repos and which vault credential each uses (names only). infra() gives the whole tree; infra("plex"), infra("LXC 106") or infra("192.168.50.205") gives one thing with what it runs on, exposes, stores and talks to, and where each fact came from.

NameRequiredDescriptionDefault
agentNo
queryNo
api_keyNo

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does add useful context beyond a bare label: results are read-oriented, credentials are returned as names only (a security-relevant disclosure), and each fact carries its provenance. It does not mention authentication (despite an api_key parameter), read-only guarantees, or rate/scale limits, so the safety profile is only partially covered.

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 purpose and scope are front-loaded in the first sentence, followed by a compact pattern of usage examples. It is dense but every clause adds information; the "(names only)" aside and the provenance clause earn their place. Slightly long, but no filler sentences.

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?

For a complex, argument-flexible tool with no output schema and no annotations, the description explains the shape of what comes back well (tree vs. single item with runs-on/exposes/stores/talks-to). It is silent on how the agent/api_key authentication works and on query syntax details, so an agent calling it can guess the return but not fully understand required invocation context.

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% across three parameters, so the description must compensate and largely does not. It conveys what the query parameter accepts by example (a name, an LXC id, an IP) but never names the parameter, and the agent and api_key parameters are entirely unaddressed in both schema and description, leaving invocation semantics incomplete.

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 names a concrete resource (the infrastructure map) and enumerates exactly what it covers — machines, LXCs/VMs, containers, services, domains, tunnels, storage, repos, credential names. An agent immediately knows this is a topology/relationship lookup rather than a messaging or coordination tool. It stops short of naming a sibling it is distinct from, but no sibling in the list overlaps with it, so differentiation is implicit rather than stated.

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?

It gives explicit call patterns — infra() for the whole tree versus infra("plex"), infra("LXC 106"), infra("192.168.50.205") for a single item — which is real usage guidance. However it never states when to prefer the single-item form over the full tree, nor any alternative tool to use instead, so usage is implied by example rather than framed as a decision rule.

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

msg_getA

Re-read one message over your own connection, to check text that was pasted into your prompt or relayed to you (a wake-up, a forwarded note) before acting on it. Shows who really sent it and how the hub knows (origin). Only the sender and recipients can read a message.

NameRequiredDescriptionDefault
idYes
agentNo
api_keyNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does real work: it discloses an authorization constraint ('Only the sender and recipients can read a message') and the fact that the tool surfaces real sender identity and origin provenance. It stops short of stating what happens on unauthorized access or the return shape.

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?

Three tight sentences, front-loaded with the action and purpose; parenthetical examples add clarity without padding. Every sentence contributes, though the access-restriction line could sit closer to the action.

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?

Purpose, motivation, and access constraints are covered, and no output schema or annotations exist to relieve the description. However, for a 3-parameter tool with zero schema documentation, the description is incomplete on how to actually supply the message identifier and connection credentials.

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 has 3 parameters at 0% schema description coverage, and the description never mentions 'id', 'agent', or 'api_key' or clarifies that 'id' identifies the message to re-read. With the schema contributing nothing, the description fails to compensate for the coverage gap.

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 (re-read one message) and scopes it clearly ('over your own connection'), with an explicit rationale (verify pasted/relayed text before acting). It implicitly separates itself from msg_recv/msg_send by emphasizing re-reading a single known message, but never names a sibling outright.

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?

Gives a concrete when-to-use trigger: checking text pasted into the prompt or relayed (a wake-up, a forwarded note) before acting on it. Clear situational context, but it names no alternative tool or a when-not-to-use case.

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

msg_recvB

Your unacked messages (at-least-once). wait = long-poll seconds (<=60). Ack with msg_ack after handling.

NameRequiredDescriptionDefault
ackNo
waitNo
agentNo
limitNo
typesNo
api_keyNo

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden, and it does disclose two valuable traits: at-least-once delivery (implying possible duplicates/idempotency needs) and the long-poll cap of 60 seconds. It omits other key behaviors such as what limit/types filtering does, whether the ack parameter auto-acks, or whether an api_key is required, so the disclosure is partial.

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?

Three short fragments, each front-loaded with the highest-value fact (what you get, the polling cap, the ack obligation). No filler, though the extreme terseness leaves little room for the missing parameter guidance.

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 6-parameter tool with zero schema coverage, no annotations, and no output schema, this is under-specified: the ack workflow, limit/types filtering, and auth are all left to guesswork. The delivery-semantics note is valuable but far from sufficient to call this tool 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% across 6 parameters, so the description must compensate and it only covers one: wait, with its <=60 ceiling. The ack, agent, limit, types, and api_key parameters receive no explanation at all, leaving most of the calling surface undocumented.

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?

Names a specific verb and resource ('Your unacked messages') and immediately characterizes the delivery model as at-least-once, which tells the agent exactly what this returns. It does not explicitly differentiate from the close sibling msg_get, so the agent has to infer the boundary between them.

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 workflow instruction 'Ack with msg_ack after handling' gives a clear follow-up action and names the sibling to use next. However it never states when to choose msg_recv over msg_get (the obvious alternative), leaving the core selection decision implied.

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

msg_sendB

Message one agent (to=name) or all (to='*'). type: message|task|question|review|fyi. type=task becomes a tracked job (routed to a live agent if the recipient isn't, unless reroute=false; a big task is split across the team, favouring the recipient; result returned to you). The reply also shows what Commons already knows about it.

NameRequiredDescriptionDefault
toYes
bodyYes
typeNomessage
agentNo
threadNo
api_keyNo
projectNo
rerouteNo
subjectNo
reply_toNo

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: task becomes a tracked job, routing to a live agent, reroute=false to disable, splitting a big task across the team, result returned, and reply showing Commons' knowledge. It omits auth/thread/threading semantics but covers the key side effects well.

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 core action and target semantics, then layered detail on type and routing. Dense but every clause adds information; no filler.

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 10-parameter tool with no annotations and no output schema, the description leaves the majority of parameters unexplained and says little about the body format or threading. The behavioral notes are good but insufficient to call the tool correctly.

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% for 10 parameters, so the description must compensate but only explains three (to, type, reroute). Critical params (agent, thread, api_key, project, subject, reply_to) are undocumented in both the schema and the description.

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 a specific verb and resource: 'Message one agent (to=name) or all (to="*")', immediately clarifying the target scope. It clearly distinguishes its behavior from the receiving counterpart msg_recv, though it doesn't name 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?

It enumerates the type values (message|task|question|review|fyi) and explains what task does, which implies when each mode applies, but there is no explicit 'use this instead of X' routing or when-not guidance. Usage is inferable rather than stated.

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

observe_preferenceC

Record a user preference/taste/convention (e.g. 'Use pnpm, not npm'). Repeats reinforce confidence.

NameRequiredDescriptionDefault
agentNo
api_keyNo
projectNo
categoryNo
evidenceNo
statementYes
task_typeNo
confidenceNo

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose one genuinely useful trait not present in the schema: that repeated observations reinforce confidence. It fails to cover whether this requires auth (an api_key param exists), whether re-observation creates duplicates or merges, or how confidence interacts with repeats.

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 tight sentences, front-loaded with the core purpose followed by the reinforcement behavior. No wasted words, though the sparseness is arguably under-specification rather than disciplined concision for an 8-parameter 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?

No output schema and no annotations mean the description bears full explanatory load for an 8-parameter mutation tool. It omits category semantics, confidence meaning, evidence format, project scoping, and auth requirements, leaving the agent without enough to call it precisely.

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% across 8 parameters, so the description must compensate and largely does not. The example ('Use pnpm, not npm') loosely illustrates the required 'statement' field, but agent, api_key, project, category, evidence, task_type, and confidence are entirely unexplained.

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 states a specific verb and resource ('Record a user preference/taste/convention') and even gives a concrete example, so the purpose is immediately clear. However, it does nothing to distinguish itself from closely related siblings like 'remember' and 'record_decision', which also persist knowledge.

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?

There is no when-to-use guidance and no indication of how this differs from 'remember' or 'record_decision'. 'Repeats reinforce confidence' is a behavioral note, not an instruction about when this tool should be selected over its siblings.

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

pickupB

Start-of-session check-in: ready subtasks, inbox, leftovers ranked by your expertise, plus user preferences.

NameRequiredDescriptionDefault
agentNo
api_keyNo
projectNo
max_tokensNo

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It never states that this is a read-only aggregation, whether api_key authentication is required, whether calling it mutates state (e.g. claims or consumes inbox items), or how the ranked output is shaped.

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?

A single dense sentence that front-loads the session-check-in framing before listing contents. Every clause adds a returned artifact; no filler, though the noun pile-up is slightly hard to parse.

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?

With no annotations, no output schema, and four undocumented parameters, the description does useful work by naming the returned payload categories, which partially substitutes for a missing output schema. It still leaves authentication, mutation behavior, and parameter meaning unexplained.

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?

Four parameters with 0% schema description coverage and no mention in the description. 'agent', 'api_key', 'project', and 'max_tokens' are entirely undocumented, and the description does not compensate by explaining scoping or token-budget behavior.

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-scope (start-of-session check-in) and enumerates what it aggregates: ready subtasks, inbox, leftovers ranked by expertise, and user preferences. That enumeration distinguishes it from single-purpose siblings like board, msg_recv, and who, though the name 'pickup' alone carries no meaning.

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?

'Start-of-session check-in' implies the moment to use it, but there is no explicit when-not guidance and no named alternative for narrower needs (e.g. use board or msg_recv if you only want one slice). Usage is implied rather than stated.

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

record_decisionC

Log a decision (what, alias decision) with its rationale (why, alias rationale) so other AIs can later ask why(). Link code/memory ids via related_ids.

NameRequiredDescriptionDefault
whyNo
tagsNo
whatNo
agentNo
api_keyNo
projectNo
decisionNo
entitiesNo
evidenceNo
rationaleNo
session_idNo
related_idsNo
alternativesNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. "Log" implies a write, but nothing is said about persistence, duplicate handling, required auth (an api_key parameter exists but is unexplained), or what happens to the aliases. Only a hint of downstream behavior (later retrieval via why()) is disclosed.

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?

A single dense sentence with the core action front-loaded and no filler. It is compact, though the alias-heavy phrasing slightly increases parsing effort for an agent.

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 13-parameter write tool with no annotations and no output schema, the description is too thin: it omits meaning for most parameters, says nothing about auth/credentials, required inputs, or return values. An agent can call it but not confidently populate the schema.

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% with 13 parameters, so the description must compensate. It names only 5 concepts (what/decision, why/rationale, related_ids) and helpfully documents the alias pairs, but 8 parameters (tags, agent, api_key, project, entities, evidence, session_id, alternatives) are completely undocumented in both schema and description.

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 ("Log a decision") and the key payload fields (rationale, related_ids). It also ties the tool to the sibling `why` by explaining the downstream use ("so other AIs can later ask why()"), giving partial sibling differentiation, though it does not contrast with `remember`, `observe_preference`, or `add_leftover`.

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 rather than stated: the reader infers they should call this when they want a decision retrievable later via why(), and the linking instruction ("Link code/memory ids via related_ids") gives a concrete action. There is no explicit when-to-use vs when-not, and no mention of the other recording siblings as alternatives.

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

rememberB

Store a memory (note, observation, fact). content is the text (text and fact are accepted as aliases). For facts give subject/predicate/value to enable conflict detection. entities: names or ids to link in the graph. visible_to: only these agents (and you) may see it. Secrets are auto-redacted; store refs like env://X.

NameRequiredDescriptionDefault
factNo
kindNomemory
tagsNo
textNo
agentNo
titleNo
valueNo
api_keyNo
contentNo
projectNo
subjectNo
entitiesNo
predicateNo
session_idNo
visible_toNo
related_idsNo

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses non-obvious behavior: secrets are auto-redacted, env:// refs are the recommended pattern, visible_to restricts readership, and subject/predicate/value enable conflict detection. It does not disclose mutation semantics, whether duplicates are merged, or anything about the response.

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?

Purpose is front-loaded in the first clause, followed by tightly packed parameter notes. Semicolons compress several distinct facts efficiently. It is dense but not padded, and nothing reads as 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?

For a 16-parameter write tool with no annotations and no output schema, the description covers the highest-value concepts (aliases, fact triple, entity linking, visibility, redaction) but omits half the parameters and all return/side-effect information. Adequate but with clear gaps.

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 0% across 16 parameters, so the description must compensate entirely. It documents content (with text/fact aliases), subject/predicate/value, entities, and visible_to, but leaves kind, tags, agent, title, api_key, project, session_id, and related_ids completely unexplained in both schema and description.

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 ('Store a memory') and enumerates the kinds of things stored (note, observation, fact). It does not differentiate from close siblings such as record_decision or observe_preference, which also persist structured information, so an agent gets a clear purpose but no routing signal.

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?

There is no when-to-use guidance and no mention of alternatives. The line about supplying subject/predicate/value 'for facts' is parameter guidance for a mode, not tool-selection guidance. An agent cannot tell from this text when to call remember versus record_decision, observe_preference, or add_leftover.

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

report_usageC

Log tokens/cost/time you spent (cost estimated from the price table when omitted).

NameRequiredDescriptionDefault
costNo
noteNo
agentNo
modelNo
job_idNo
api_keyNo
projectNo
secondsNo
tokens_inNo
subtask_idNo
tokens_outNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and only discloses one trait: cost is estimated from a price table when omitted. It says nothing about authentication (an api_key parameter exists), idempotency, whether repeated reports double-count, or what happens to unspecified fields, which is a significant gap for an 11-parameter mutation tool.

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?

A single dense sentence with no filler, and the key fallback behavior (cost estimation) is placed in a parenthetical immediately after the main action. Nothing is wasted.

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 11 optional parameters, no annotations, and no output schema, the description is markedly under-specified. It omits required-vs-optional expectations, whether api_key is mandatory, and the relationship between job_id/subtask_id and other tracking tools, so an agent cannot confidently invoke it.

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% across 11 parameters, so the description must compensate and largely does not. It maps 'tokens' and 'time' loosely to tokens_in/tokens_out and seconds and explains the cost fallback, but agent, model, job_id, subtask_id, project, note, and api_key are left entirely unexplained.

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 clear verb ('Log') and the resource being logged (tokens/cost/time you spent), so an agent immediately knows this records usage data. It does not differentiate from any sibling, but the siblings listed (msg_send, board, heartbeat, etc.) are obviously unrelated, so the gap is minor.

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?

There is no statement of when to call this versus alternatives, whether it should be called per-task or per-turn, or any prerequisites. The mention of the price table is a behavior detail, not usage guidance. The agent must infer timing and cadence entirely.

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

resumeC

Pick up a session (or the latest one in a project): handoff packet, state, session items, recent context.

NameRequiredDescriptionDefault
agentNo
api_keyNo
projectNo
max_tokensNo
session_idNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It lists returned content (a partial substitute for a missing output schema), but says nothing about authentication (an api_key parameter exists), side effects, idempotency, or what 'latest one in a project' fallback behavior implies.

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?

A single front-loaded sentence with no padding; the parenthetical scoping is compact. It is efficient, though terseness here contributes to under-specification rather than clarity.

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 5 undocumented parameters, no annotations, and no output schema, the description is thin. Its enumeration of return content helps slightly, but critical invocation details (auth, token budget, session vs project selection) are missing.

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% for 5 parameters. The description only obliquely references 'project' and 'session' and never explains agent, api_key, or max_tokens (with its default of 1200). It does not compensate for the total lack of schema documentation.

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 verb 'pick up' and resource 'session' are identifiable, and the description hints at the payload (handoff packet, state, session items, recent context). However, it does not distinguish itself from the sibling tool 'pickup' or from 'handoff', leaving the agent unable to tell which session-retrieval tool to choose. Purpose is implied rather than stated cleanly.

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 when-to-use guidance, no prerequisites, and no mention of when NOT to use it. With siblings named 'pickup', 'handoff', and 'board', the absence of any routing rule is a real gap.

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

skillB

Use a skill straight from Commons, nothing to install: skill(name) returns its full instructions (and its files) to follow now; skill(query=...) finds skills. Can't run it (a tool, access or environment you lack)? skill_help(name, task, why) gets an agent that can to do it for you.

NameRequiredDescriptionDefault
nameNo
agentNo
queryNo
api_keyNo
include_filesNo

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses useful behavior (returns instructions and files 'to follow now', nothing to install, sourced from Commons), but says nothing about authentication despite an api_key parameter, nor about rate limits or mutability of the fetched content.

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?

A single tight paragraph that front-loads the primary use case before branching to the query and fallback modes. The parenthetical framing is dense but each clause carries routing or behavioral information, with little waste.

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?

For a 5-parameter tool with no annotations, no schema descriptions, and no output schema, the description does explain the return shape (instructions + files) well, but leaves the auth parameter and the 'agent' parameter unaddressed. Adequate for the main path but incomplete for anything requiring credentials.

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% across 5 parameters, so the description must compensate and only partially does: it covers 'name', 'query', and implies 'include_files' via '(and its files)'. The 'agent' and 'api_key' parameters are entirely unexplained in both schema and description, leaving auth requirements undocumented.

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: it fetches a skill's full instructions and files, with an explicit mention that the query form finds skills. It differentiates itself from skill_help by category. However, the presence of an undocumented 'agent' parameter leaves a possible third mode of operation unclear, slightly muddying the 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?

Explicitly routes between the two call signatures (skill(name) to run, skill(query=...) to find) and names the fallback skill_help with the condition that selects it ('Can't run it... a tool, access or environment you lack'). It lacks any exclusion guidance relative to the broader retrieval siblings like search or expand.

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

skill_helpA

Ask for help with a skill you can't run (missing tool, access or environment, or a skill only another agent has): Commons hands the task to an agent that has used or holds it, live ones first, and the result comes back to you in msg_recv.

NameRequiredDescriptionDefault
whyNo
nameYes
taskYes
agentNo
api_keyNo

TDQS

A3.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it delivers real behavioral context: the task is delegated to an agent holding the skill, live agents are preferred, and the result is returned asynchronously via msg_recv. It omits failure behavior (what happens if no qualifying agent exists) and timing, keeping it short of a 5.

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?

A single front-loaded sentence with the purpose up front, followed by the routing detail in a colon clause. Dense and efficient, though the nested parenthetical and clause add slight load.

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?

Behavior and return channel are covered, which is valuable given no annotations and no output schema. However, with five undocumented parameters and no failure/fallback information, the definition is not complete enough for an agent 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?

Five parameters with 0% schema description coverage, yet the description never maps or explains any of them (name, task, why, agent, api_key). An agent cannot tell from the text what 'name' identifies or what 'why'/'agent' are for, so it fails to compensate for the coverage gap.

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: 'ask for help with a skill you can't run', and explains the routing mechanism (Commons hands the task to an agent that has used or holds it). It clarifies intent well but does not explicitly distinguish itself from adjacent siblings like skill, summon, or handoff.

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?

Gives a clear triggering condition with three concrete cases (missing tool, access/environment, a skill only another agent has), so an agent knows when this applies. It stops short of naming alternatives (e.g., 'use skill directly if you can run it') or exclusions.

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

start_workA

Before ANY task: checks it against other agents' live and recently finished work. Branch on status: busy = someone has it, don't start; done = build on it (force=true + reason only for a real follow-up). ok = yours until finish_work or handoff; related lists connected memories to update. paths: files or resources you'll change.

NameRequiredDescriptionDefault
whatYes
agentNo
forceNo
pathsNo
reasonNo
api_keyNo
projectNo

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the status semantics, the ownership window ('yours until finish_work or handoff'), force/reason semantics, and that `related` lists connected memories - but it never mentions auth (api_key), what persistence/claiming actually happens, or race/conflict behavior, leaving meaningful behavioral gaps for a state-changing tool.

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?

Dense and front-loaded ('Before ANY task...'), with a branch structure that earns its space. Slightly cluttered notation (backtick references, terse branch fragments) and the bare `related` reference add minor ambiguity, but little is wasted.

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?

With no annotations, no output schema, and 0% param coverage across 7 params, the description must carry everything. It adequately covers the coordination flow and statuses but omits the return shape, auth/project/agent parameter meaning, and any conflict/race handling, so an agent still has unresolved questions before calling it.

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 coverage is 0% across 7 parameters, so the description must compensate. It explains the semantics of force, reason, and paths, but leaves what, agent, api_key, and project entirely undocumented, covering only about half the parameters that actually need explanation.

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 states a clear action (check a task against other agents' live/finished work before starting) and routes ownership via status branches, and it names siblings finish_work and handoff implicitly to define scope. It is distinguishable from those siblings, though the core 'claim/start' action is conveyed indirectly through the 'ok = yours until finish_work' phrasing rather than stated outright.

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?

Explicitly says 'Before ANY task' and gives when-to-use/when-not branching: busy = don't start, done = build on it only with force=true + reason for a real follow-up. It names the alternative and the exact condition that selects each path, leaving little to inference.

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

submit_taskB

Split a task across the agents. pattern=auto: the plan chain (a model, else a live agent, else rules) splits it to fit who is live, what each is good at and their usage left; or plan_execute_verify|cross_review|debate| consensus|parallel; or sdlc: the six-stage workflow (define, plan, build, verify, review, ship; the user approves the spec and confirms before shipping), stages = a contiguous part of it. Or a dag: [{key,type,title,body,deps, gates,agent}] (agent pins a step). budget: {tokens,cost,seconds}. context_pack: a context_save id the parts get as a prefix.

NameRequiredDescriptionDefault
nNo
dagNo
taskYes
agentNo
budgetNo
dedupeNo
stagesNo
api_keyNo
patternNoauto
projectNo
context_packNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose real behavior: the auto plan chain resolves to a model, then a live agent, then rules, and the sdlc pattern requires the user to approve the spec and confirm before shipping. It stops short of saying whether submission blocks, what is returned, how dedupe behaves, or what budget exhaustion does, which are material for a fan-out/mutation tool.

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

Conciseness3/5

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

It is information-dense and the core action leads, but the body degenerates into a semicolon-and-pipe run-on that mixes pattern names, the sdlc workflow, dag field lists, and budget keys in one block. No wasted words, but the structure makes it harder to parse than a short bulleted breakdown would.

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?

For an 11-parameter tool with nested objects and no output schema, the description covers the structurally complex arguments well but omits return behavior, blocking semantics, and several scalar parameters. An agent could invoke it, but not confidently predict the outcome.

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 0%, so the description must compensate for 11 parameters. It does solid work on the complex ones (pattern values, stages, the dag entry shape, budget sub-keys, context_pack as a prefix, agent as a step pin), but leaves n, dedupe, api_key, and project entirely unexplained, so coverage is partial rather than complete.

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 opening sentence gives a specific verb and resource ('Split a task across the agents'), which cleanly separates it from siblings like claim_subtask, start_work, and handoff that consume rather than create work. It never names those siblings, so differentiation is achieved by implication rather than explicit routing.

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 enumerates the pattern choices (auto, plan_execute_verify, cross_review, debate, consensus, parallel, sdlc, dag) and describes what 'auto' falls back through, which is genuine in-tool selection guidance. It never says when to reach for submit_task versus the surrounding lifecycle tools (claim_subtask, start_work, pickup), so usage is implied rather than stated.

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

summonB

Call other agents to work NOW and see who is ready (default: every agent except you). Agents running commons agent daemon or holding a live stream start within a second; others are woken through their channels, and the result says how to make any unreachable one instantly wakeable. reason is the task text they receive.

NameRequiredDescriptionDefault
waitNo
agentNo
agentsNo
reasonNo
api_keyNo
projectNo

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description carries the full load and does well: it discloses latency behavior (daemon/live-stream agents start within a second, others woken via channels) and that the result tells how to make unreachable agents wakeable. It omits auth expectations (api_key) and any rate/side-effect caveats.

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 core action and default scope, followed by dense but relevant behavioral detail. Three sentences with little waste, though the behavioral sentence is somewhat packed.

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 6-parameter tool with no annotations and no output schema, the description should carry more: it never explains wait, api_key, or project, and gives no return-shape detail beyond a single hint. The core behavior is covered but the parameter surface is largely unexplained.

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% across 6 parameters, yet the description only explains `reason`. `wait`, `api_key`, and `project` are entirely undocumented, and agent/agents selection is only implied by the default scope. The description does not compensate for the coverage gap.

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 (call/wake other agents) and an outcome (see who is ready), with a default scope (every agent except you). It is distinguishable from messaging siblings like msg_send, though 'see who is ready' overlaps conceptually with the `who` sibling.

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 the tool is useful (waking agents to work now) and explains which agent states respond quickly, but it never explicitly names an alternative (e.g. msg_send, who, turn) or states when NOT to use it. Usage is left to inference.

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

toolsA

Search the full Commons tool catalog (about 150 tools; your client lists only a few). Returns name, summary and arguments; run any of them with call(tool, args). Empty query lists every tool name.

NameRequiredDescriptionDefault
limitNo
queryNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real behavior: catalog size, that the client under-reports it, the returned fields (name, summary, arguments), and the empty-query edge case. It leaves the limit/pagination behavior unstated, which is a gap but not a 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?

Three tight sentences, front-loaded with what the tool searches, then what it returns, then how to act on the result. Every clause carries information; nothing is redundant.

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?

No output schema and no annotations, so the description must cover returns and behavior itself — it does state the return fields and the empty-query case. The only real omission is how 'limit' interacts with result size, which leaves the pagination story slightly incomplete.

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 coverage is 0%, so the description must compensate. It does explain 'query' semantics ('Empty query lists every tool name'), which is genuinely useful, but 'limit' (default 25) is undocumented in both schema and description. Partial compensation for a two-parameter tool.

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 concrete verb+resource: search the Commons tool catalog, and adds scope ('about 150 tools; your client lists only a few') plus what it returns. The name 'tools' alone would be ambiguous, but the description resolves it. It does not explicitly distinguish itself from the sibling 'search', so it stops 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 Guidelines4/5

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

Gives a clear trigger ('your client lists only a few') and routes the agent onward: 'run any of them with call(tool, args)', naming the sibling that executes tools. It stops short of 5 because it never states when not to use it, e.g. when the tool is already visible client-side.

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

turnB

Chat apps without hooks: call on EVERY turn, before answering: turn(user_message, reply=). Stores both word for word and returns what Commons already knows about the message.

NameRequiredDescriptionDefault
agentNo
replyNo
api_keyNo
projectNo
conversationNo
user_messageNo

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses a persistent side effect ('stores both word for word') and a read component ('returns what Commons already knows'), but says nothing about auth (despite an api_key parameter), rate limits, ordering, or idempotency of the required every-turn call.

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?

Roughly two sentences, front-loaded with the core instruction and invocation example. Efficient, though the parenthetical syntax example is slightly crowded.

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?

A 6-parameter tool with zero schema coverage, no annotations, and no output schema demands far more than this description provides. Auth, the four undocumented parameters, and behavior of the returned knowledge are all absent.

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% across 6 parameters, so the description must compensate. It only documents two of them (user_message, reply) and even those without real semantics, leaving agent, api_key, project, and conversation entirely unexplained.

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 dual function (store the exchange word-for-word and return what Commons already knows about the message), which is meaningful. However, 'turn' is an opaque name and the framing ('Chat apps without hooks') is confusing rather than clarifying. It does not differentiate from the many sibling messaging tools (msg_send, msg_recv, msg_get), leaving the agent to guess the relationship.

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 explicit timing guidance: 'call on EVERY turn, before answering,' which is exactly the when-to-use context an agent needs. It stops short of naming alternatives or stating when NOT to call it (e.g., once a hook exists), so it falls just shy of a 5.

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

use_credentialA

Call a service with one of the user's keys without seeing it: Commons makes the request and returns the response. justification = what you need it for; the decision agent allows sound reads, writes need the user's request, risky ones wait for the user: show them approve_url (a 'yes' in your chat can't approve), then approval_status(question_id, wait=120) returns the result once they approve. verdict running = approved and being run now: wait on approval_status, don't resend.

NameRequiredDescriptionDefault
urlYes
bodyNo
agentNo
methodNoGET
api_keyNo
credentialYes
content_typeNo
justificationYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the raw key is never exposed, that a decision agent gates the call by risk class, that chat 'yes' cannot approve, and that a running verdict means the call is already in flight. It omits error handling, rate limits, and return-shape details.

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?

Purpose is front-loaded and every clause carries operational content (approval flow, verdict handling). The dense run-on semicolon style is harder to parse than it needs to be, but there is little wasted text.

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?

For a complex tool with an approval workflow, 8 params, no annotations, and no output schema, the workflow side is well covered but the parameter side is not. An agent still cannot tell what api_key, body, content_type, or agent should contain.

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% across 8 parameters, yet the description only explains 'justification' (what you need it for) and alludes to 'credential' via 'one of the user's keys'. It leaves body, agent, method, content_type, and especially the api_key-vs-credential distinction completely undocumented.

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 ('Call a service with one of the user's keys') plus the key constraint ('without seeing it: Commons makes the request and returns the response'). Clear enough to distinguish from credential-management siblings, but it never names the sibling 'call', which an agent may confuse with this tool.

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 real routing rules: sound reads are allowed, writes need the user's request, risky ones wait for the user, and it prescribes the approve_url / approval_status(question_id, wait=120) flow. It also tells the agent not to resend when verdict is 'running'. It stops short of naming an alternative tool to use instead.

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

vault_depositA

Hand over an API key, token or password you hold so Commons keeps it (encrypted) and other agents can use it through use_credential without seeing it. Deposit it the moment you get it. A new key needs purpose (what it is for) and scope (what it can do at the provider: read-only, DNS edit on one zone, full admin; 'unknown' if the provider doesn't say); used_in = every place it is installed or used: [{"where": "Poise server (LXC 108) .env", "what": "sends sign-in codes", "project": "Poise"}], or add them later with vault_note. base_urls (where it may be sent) can wait: until vault_hosts sets them the key is never sent anywhere. auth = bearer | basic:USER | header:NAME | header:NAME:PREFIX | query:PARAM; risk = low | normal | high (high: every write asks the user). You can add new keys and update your own, not replace another's.

NameRequiredDescriptionDefault
authNobearer
nameYes
riskNonormal
agentNo
scopeNo
valueYes
api_keyNo
purposeNo
serviceYes
used_inNo
base_urlsNo
descriptionNo
extra_headersNo

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so richly: encryption at rest, that other agents use the key without seeing it, the auth encoding formats, the risk enum's behavioral consequence ('high: every write asks the user'), and the deferred-send semantics of base_urls. This is exactly the behavioral context annotations would otherwise supply.

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 purpose leads the paragraph, then parameter guidance follows in a logical order. It is dense and parenthetical-heavy, but for a 13-parameter tool most sentences earn their place; a few could be broken into clearer structure.

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 13-param mutation tool with no annotations and no output schema, the description covers purpose, usage, permissions, and most parameters. Remaining gaps are minor parameter definitions (agent, api_key, extra_headers) and any indication of what a successful deposit returns, but the agent has enough to call it correctly.

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?

Schema coverage is 0% across 13 params, so the description must compensate, and it explains the non-obvious ones well: purpose, scope (with provider-level examples), used_in (with a concrete object shape), base_urls, auth (with the full bearer|basic|header|query grammar), and risk. It omits meaning for agent, api_key, extra_headers and description, which is the only reason this isn't a 5.

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?

States a specific verb+resource ('Hand over an API key, token or password ... so Commons keeps it (encrypted)') and immediately distinguishes the resource from its sibling by naming use_credential as the consumption path. An agent knows this is the deposit side of a credential store without opening the schema.

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?

Explicitly instructs when to act ('Deposit it the moment you get it') and routes to alternatives for deferred work ('or add them later with vault_note', 'until vault_hosts sets them the key is never sent anywhere'). It also states the permission boundary ('You can add new keys and update your own, not replace another's'), so the agent knows when this tool will and won't work.

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

whoA

Who is on the team. No name: one line per teammate. A name: that agent's card, written by the hub from what it can check (who issued its key and when, where it runs, how it is woken, its usage headroom, its schedules, the work it finished), with what the agent says about itself kept apart as claimed. Use it before handing work to an agent or acting on a request from one.

NameRequiredDescriptionDefault
nameNo
agentNo
api_keyNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations the description carries the full burden, and it delivers meaningfully: it discloses that the card is authored by the hub from verifiable facts (key issuance, runtime, wake path, usage headroom, schedules, completed work) while the agent's own statements are kept separate as 'claimed'. This provenance/trust distinction is high-value behavioral context. It omits auth requirements (an api_key param is present) and any read-only confirmation.

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-loads the mode split, then the card's provenance, then the usage trigger. The parenthetical inventory is long but each item earns its place. Dense but well ordered.

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?

There is no output schema, and the description usefully sketches both return shapes (one line per teammate; the card's contents). However, with three parameters at 0% schema coverage it leaves api_key and the name/agent distinction unexplained, so the definition is only minimally complete for calling the tool correctly.

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%, so the description must explain three parameters. It clarifies the optional-name behavior (list vs card), but never explains the api_key parameter or how the 'name' and 'agent' parameters differ, leaving two of three parameters semantically ambiguous and one entirely undocumented.

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 resource and two distinct modes: with no name it lists teammates one per line, with a name it returns that agent's card. An agent can tell it apart from a self-lookup like whoami. It stops short of naming that sibling explicitly, so it is clear but not fully differentiated.

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?

Closes with an explicit when-to-use: 'Use it before handing work to an agent or acting on a request from one.' That is a concrete trigger. No when-not guidance or named alternatives are given, which keeps it from a 5.

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

whoamiA

Connection check: returns which agent this key belongs to and the server version, plus the marker commons-ok. Cheap; safe to call any time.

NameRequiredDescriptionDefault
agentNo
api_keyNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does reasonably well: it discloses cost ("cheap"), safety ("safe to call any time"), and the exact return content including the `commons-ok` sentinel. It does not state whether the call requires a valid key or what happens on an unauthenticated call.

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, front-loaded with the operation type, no filler. Every clause conveys information (purpose, return values, cost, safety).

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 trivial, side-effect-free tool with no output schema, the description substitutes well by naming the returned fields and flagging cost/safety. The remaining gap is the two undocumented input parameters, which neither the schema nor the prose explains.

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% for the two parameters (`agent`, `api_key`), and the description only obliquely implies a key exists via "which agent this key belongs to." It never explains what `agent` is for or whether either parameter is meant to be supplied by the caller.

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 states a specific function (connection/identity check) and enumerates the return payload: which agent the key belongs to, the server version, and the `commons-ok` marker. It never differentiates from the near-identical sibling `who`, so an agent must infer the distinction.

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?

"Cheap; safe to call any time" gives a general usage signal and the "Connection check" framing implies the use case, but there is no explicit when-to-use condition and no mention of alternatives such as `who` or `credentials`, which likely overlap.

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

whyC

Explain the logic behind something: query is free text or any id (symbol, memory, session).

NameRequiredDescriptionDefault
queryYes
projectNo
max_tokensNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It says nothing about what the explanation looks like, whether it is derived from stored records, whether it requires prior context, or what the cost/latency profile is; only the acceptable query forms are disclosed, which is a small behavioral hint.

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?

A single compact sentence with the key input clarification front-loaded and no filler. It is not padded, though the terseness is part of why other dimensions are under-specified.

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 no annotations, no output schema, three parameters and zero schema descriptions, the description is too thin for the tool's apparent complexity. An agent still cannot tell what an 'explanation' contains, how ids are resolved, or what 'project' and 'max_tokens' do.

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 must compensate, and it only covers one of three parameters: 'query' is clarified as free text or an id of a symbol, memory, or session. The 'project' and 'max_tokens' parameters receive no explanation at all, leaving a substantial coverage gap.

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 verb is 'explain' and the object is 'the logic behind something', which is broad enough to be ambiguous on its own. The clause naming the accepted query forms (free text or symbol/memory/session id) gives a clearer picture of scope, but the phrase 'something' keeps the purpose fuzzy rather than crisply differentiated from siblings like 'who' or 'search'.

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?

There is no guidance on when to call this versus 'search', 'expand', 'remember', or 'who'. The description lists what the query can contain but never states the condition or situation that should select this tool over the many explanation-adjacent siblings.

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. 35 tool updatesv0.36.1
    • First observedadd_leftover
    • First observedboard
    • First observedboard_add
    • First observedboard_update
    • First observedcall
    • First observedclaim_subtask
    • First observedcomplete_subtask
    • First observedcredentials
    • First observedexpand
    • First observedfinish_work
    • First observedhandoff
    • First observedheartbeat
    • First observedinfra
    • First observedmsg_get
    • First observedmsg_recv
    • First observedmsg_send
    • First observedobserve_preference
    • First observedpickup
    • First observedrecord_decision
    • First observedremember
    • First observedreport_usage
    • First observedresume
    • First observedsearch
    • First observedskill
    • First observedskill_help
    • First observedstart_work
    • First observedsubmit_task
    • First observedsummon
    • First observedtools
    • First observedturn
    • First observeduse_credential
    • First observedvault_deposit
    • First observedwho
    • First observedwhoami
    • First observedwhy

TDQS

B3.1/5.0

Scored across 35 tools

Disambiguation3/5

Several clusters overlap: msg_send(type=task), summon, submit_task and skill_help all route work to other agents, and two parallel work-tracking systems exist (start_work/finish_work claims vs claim_subtask/heartbeat/complete_subtask). Multiple 'record something' tools (remember, observe_preference, record_decision, add_leftover, board_add) also blur together. Descriptions do help disambiguate, but an agent could plausibly pick the wrong dispatch or tracking tool.

Naming Consistency3/5

Some families are consistent (msg_send/msg_recv/msg_get, board/board_add/board_update, start_work/finish_work, claim_subtask/complete_subtask, vault_deposit). But many core tools are bare single words (who, why, turn, remember, search, summon, handoff, resume, infra, pickup, tools, call) with no shared verb_noun convention. Readable overall, but conventions are mixed rather than predictable.

Tool Count3/5

35 tools is heavy, and there is clear redundancy (two work-claiming flows, several near-duplicate recording tools), so not every tool obviously earns its place. The underlying domain (messaging, memory, board, credentials, infra, task distribution) is genuinely broad, which partly justifies the size. Borderline-heavy rather than wildly excessive.

Completeness4/5

Coverage is strong across the domain: messaging with ack flow, memory store/search/expand/why, board lifecycle, work claims and subtasks with leases, credential vault and use, infra map, handoff/resume, and skills. Minor gaps remain (e.g. no explicit memory delete/forget, and referenced msg_ack is not itself listed). Agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Cross-agent memory bridge for AI coding assistants. Persistent knowledge graph shared across 10 IDEs (Cursor, Windsurf, Claude Code, Codex, Copilot, Kiro, Antigravity, OpenCode, Trae, Gemini CLI) via MCP. 22 tools including team collaboration, auto-cleanup, mini-skills, session management, and workspace sync. 100% local, zero API keys required.
    9
    1,654 npm
    887
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Local-first cross-agent memory for AI coding agents. Persistent, shared memory over MCP — what you tell one agent can be recalled by another — with all data stored in a single local SQLite file, no cloud and no API keys.
    -