Skip to main content
Glama

hubd

The project tracker for teams of humans and AI agents — in plain files.

A tool for agents rarely fails by crashing. It fails by answering — confidently, and wrong. A list that ended early without saying so. A count that turns out to be mostly duplicates. A task close that lands on somebody else's id. A person would stop at "wait, fifteen hundred tasks? I didn't create fifteen hundred tasks." An agent has no such prior: it takes the number and builds on it, and every view downstream inherits the mistake, still sounding sure.

hubd is built against that failure mode, and it shows in the boring parts. The logs are append-only and attributed, so a wrong view stays recoverable from data that was always right. Every truncation announces itself. Anything the hub cannot observe is reported as unobserved rather than estimated. Much of this codebase is not features — it is refusals to sound certain.

You run two, three, five agent sessions — different tools, different vendors — across your projects. Each one is brilliant, and each one has no idea the others exist. You are the coordination layer: copy-pasting context, re-explaining state, discovering on Monday what an agent did on Friday.

hubd replaces you in that job with the most boring technology available: plain files. A shared headquarters for your whole team — agents and humans: a journal of what everyone did, task queues every agent can wait on, cross-project tasks, and a read-only kanban to watch it all. All markdown and JSONL, in a folder you own.

the hubd kanban: agents pick up, finish and file work while the activity log fills in

hub serve — the board is read-only and has exactly one button (**⚙ Rules*, it opens AGENTS.md). Cards move because agents move them; the page just re-reads the files.*

Not a runner. Orchestrators launch your coding agents and stream their output — that's making coding faster. hubd manages the work: which projects, what's next, who does it and when, what already happened. An orchestrator can run your agents; hubd runs your projects. They compose.

The Unix pair

  • hubd — the daemon: an MCP server (stdio, JSON-RPC 2.0) that agents talk to.

  • hub — the CLI: the same data for humans, no LLM required.

Like sshd and ssh. The daemon serves agents; the CLI serves you.

Related MCP server: SharedMemory MCP Server

Quick start

Option A — start a company (copy the folder). One command drops hubd-company/ into a folder of your own:

npx degit bzdOS/hubd/hubd-company my-company   # then: cd my-company && git init

Or clone this repo and copy the folder — it doesn't have to be your repo root. You get a ready org structure: constitution (AGENTS.md), role onboardings, project cards, an operator card, queues, recipes, and a weekly agent-written chronicle/ (the narrative layer). Hiring an agent = a fresh session reads a role file. This template is NOT included in the npm package; it comes from the repo.

Option B — add the binaries to what you have:

npm i -g @bzdos/hubd   # installs both binaries: hubd (MCP server) + hub (CLI)
hub init             # scaffold a team folder: AGENTS.md, INBOX.md, queues/
hub version          # which hubd, and which copy of it is answering
hub doctor           # hub base, team root, locks, queues, ghost queues, writer versions
hub status           # every project at a glance (⚠ marks a card behind its journal)
hub brief            # morning brief: tasks, journal, locks
hub queue gc         # list queues nobody ever consumed (--apply archives them)
                     # (doctor flags work dispatched to a role with nobody home)
hub now              # the ONE task to do next, and why it won
hub agenda           # the day split by who can act: agent work vs owner buttons
hub recall "<q>"     # ranked memory, every hit dated and flagged if stale
hub usage --days 7   # what the work cost: supplied vs measured, never mixed
hub audit            # what the cards declare vs what happened (--apply files incidents)
hub lint             # which of your rules are checks, not just prose
hub serve            # read-only kanban on localhost
# one-off, without install: npx -p @bzdos/hubd hub status

The npm package ships: hub/ (binaries + lib), prompts/, docs/, README.md, LICENSE, and HARVEST.md. It does NOT include hubd-company/.

New here? Two guides: the quick start walks the whole path — install → team folder → first agent → queues — and recipes gives complete scenarios (a standing worker, an orchestrator fleet, owner buttons, harvesting a chat, infra topology).

Connect your agent (any MCP client):

claude mcp add --scope user hubd --env HUBD_AGENT=dev-<yourproject> -- npx -y @bzdos/hubd

HUBD_AGENT is worth setting on day one. Every write names its author — journal entries, tasks, queue messages — and the field is required: an append-only log with an unattributed write in it stays unattributable forever. HUBD_AGENT is the floor: when a caller does not say who it is, the write is attributed to that name plus a short per-session suffix, instead of failing. Name the function, not the model — dev-hubd, reviewer-bsdos — because which model you are is already in your client's own transcript, while many sessions share it. Model and client names (claude, gpt, cursor) and placeholders (unknown, cli, root) are refused for that reason. A caller that knows its own function can always be more specific than the floor.

No MCP? No problem — every model that can read and write files can join: paste the matching block from prompts/ (Claude Code, Cursor, Codex/AGENTS.md, or an MCP chat) — it wires hubd in and points at HUBD.md, the always-current protocol.

Running it for a team? hubd also speaks MCP over HTTP — one shared hub all your agents point at, token-gated and multi-tenant. See self-hosting.

Updating, and where your data lives

hubd is a tool, like git or node: you install the code, and your data is a folder you own. They are two separate things — and that is the whole point.

  • Code — the npm package. Update like any global CLI: npm i -g @bzdos/hubd@latest (or run one-off with npx -y @bzdos/hubd). A new version ships the engine (changelog); it never touches your data.

  • DataHUBD_DIR (default ~/.hubd): plain markdown + JSONL, yours to keep.

  • Who wrote itHUBD_AGENT: the default author for calls that omit one, per server config. Set it in every client and on every host; a required field with no floor turns a forgotten argument into a failed call.

  • Is the mesh actually syncing? hub doctor counts how many commits this hub is behind origin, because a sync loop that keeps retrying looks exactly like one that works: one node here went 228 commits without receiving anyone else's work while every report called the hub healthy. It also names tracked paths that differ only by case — on macOS or Windows those are one file for two index entries, which no commit can ever clean, and they stop a merge permanently. Since 0.9.6 hubd will not create such a pair in the first place, and doctor flags any card still holding conflict markers, since a reader serves those as content rather than as an error.

  • When a card does conflict — the only shared file that can, being the one mutable one — hub card resolve unions the bullet-list hunks (two nodes appending facts have not disagreed) and leaves prose hunks for you, named by section. It exits non-zero while anything is left.

  • Several machines? Make HUBD_DIR a git repo and sync it however you like — a private remote over SSH works, no GitHub needed. Each machine installs the code from npm; your data travels in your own git. Two separate tracks: code from the package, data in your folder. Upgrading the code never migrates or deletes your data — the event logs are append-only and richer than any one version's schema.

  • Which version is actually runninghub version prints the number and the path of the copy that printed it, because on a real machine those are one question: a stale global install and a live source checkout are both called hub. From 0.9.4 each journal line also carries the version that appended it, so hub doctor reports the whole mesh — which node is behind, whether this copy is the stale one, and whether two installs are writing into the same node. This exists because the machine that develops hubd ran a CLI nine releases old for weeks and nothing anywhere could have said so.

  • What an upgrade needs from you — sometimes a new version wants something outside the code: a variable in a client's config, a role declared in the hub, a protocol section worth re-reading. hubd works that out and tells the agents itself: hub_whatsnew returns an environment list, every item saying what is wrong, what fixes it, and who can — the agent, the agent plus a client restart, or you. A protocol change names the sections that actually moved, so nobody re-reads the whole manual. hub doctor shows the same list to a human. Nothing blocks a call, nothing needs acknowledging: an item disappears when the condition does. Per-node state in .env-state.json, never mesh-synced — three machines have three environments.

How it works

  • Journal & structured reports — append-only team log (INBOX.md) you read with your eyes. At session end an agent files a hub report of prefix-tagged lines (DECIDE: … | why, FACT:, COMM:, NEXT:, DONE: ids) that fan into the project card's sections — structure in fields, not one prose blob. "What changed" is read from git, not retyped. The card's section headings (in any language) come from one file, HUB/sections.json, which drives both the card scaffold and the report router — so they never drift.

  • Queues — per-role message queues. Send work; an agent blocks on wait until something arrives, then goes back to waiting. No polling you, no prodding them. A queue has one live consumer by default — run a single waiting session per role. Roles listed in <team>/subscriber-roles.json fan out instead: every waiting session gets its own cursor and sees every message. Crossing machines is a separate, replaceable concern: scripts/mesh-sync.sh moves the folder over git+ssh, and mrgd can carry the same queues as Matrix room traffic — concurrently, on the same directory. See docs/interop.md → Transport, including how to check which of the two is actually enabled on a given node.

  • Projects & tasks — one card per project; cross-project tasks with owners (agent or human) and claims as soft locks, so two agents don't clobber each other.

  • Resources & relationships — infra is a card too: hosts, vms, services, endpoints, providers under resources/, with structured frontmatter (type, address, os, provider, status) and typed [[wikilink]] edges (runs_on, depends_on, deploys_to, exposes, part_of, ...). The same edge mechanism reads project cards, so hub graph renders one topology across projects ↔ resources; a task links to what it touches with --resource. Facts go in fields, not prose.

  • Kanban (read-only) — cards move because agents move them. The only button is ⚙ Rules, and it opens AGENTS.md. You don't manage the agents — you manage the rules.

  • Harvest — one prompt turns any working dialog into project digests, tasks and logged decisions. Served as an MCP prompt (harvest) and hub harvest, so you invoke it straight from your client — no fetching the file. See HARVEST.md.

  • MCP + files, two levels of compatibility — smart clients connect over MCP; everything else uses the files directly. If hubd is down, your data is still just markdown.

  • Instructions that stay current — your team rules live in AGENTS.md (yours to write); hubd's own mechanics live in HUBD.md, regenerated per node from the installed version (gitignored, never synced). Update the code → the next hub run (or hub upgrade) refreshes HUBD.md, so even agents that only read the files never follow stale instructions.

Principles (violating these = not this product)

Files first. Dumb server, smart agents — no AI inside: hubd stores and serves, intelligence comes from your agents. Never sound more certain than the data: a tool that misleads its reader is broken even when nothing errored, so a truncated answer says it was truncated and a number the hub cannot observe is never estimated. Human-readable everything. Zero dependencies. Read-only for the human; write access flows through rules. Graceful degradation: no MCP → files; no hubd → files still readable as-is — in any editor, grep, or a Markdown app like Obsidian. See Reading your hub with any tool.

About that recording

The board at the top is the real thing on invented data: node scripts/capture-kanban.mjs --gif stands up a throwaway hub in a temp directory, serves it, then edits it mid-capture — assigns a card, closes one, files a task, records a decision — and lets the page notice by itself. Nothing is staged and nobody's actual hub is ever filmed. Six board updates, and only one of them is a card sliding right: agents also add work, and most of what lands in a coordination log moves no card at all.

What hubd is not

Not an orchestrator (doesn't launch agents or stream output). Not vector memory (the journal stores facts you can read, not embeddings). Not a Jira for humans (the human here is a spectator and a legislator, not an assignee). Not another chat (talk to hubd through your agent; hands — CLI; eyes — kanban).

Built by the team it coordinates

hubd's own development runs through hubd: one human and a few agents on models from different vendors, coordinating through nothing but the files above. It's our daily dogfood — and the most honest illustration we can offer of the protocol under real use, including the evening a tooling failure forced everything back to plain files and the work simply kept moving. One team's story, lightly anonymized and self-reported, not a benchmark: twelve weeks of it in field notes — every mechanism that broke, and the bug that had every dashboard confidently agreeing on a number that was 72% invented — and one evening hour by hour in the case study.

The human's main job was editing the rules.

Pricing

The core is MIT, forever. Personal use is free, forever. If a hosted team plan ever exists, the line is simple: agents are free, humans are billed.

Roadmap

Shipped: multi-machine sync (per-host append-only logs, conflict-free); remote access over HTTP (token-gated, multi-tenant, see self-hosting); a typed relationship graph ([[wikilink]] edges across projects and resources, hub graph); resources as first-class cards (hosts / services / endpoints); structured reports that fan into card sections; one-file section i18n (sections.json); a per-node HUBD.md protocol that regenerates to match the installed version; harvest as an MCP prompt; cwd → project auto-bootstrap (hub_context: marker file / recorded sync path / folder-name guess, no manual hub_get needed); a presence registry (hub_heartbeat/hub_presence, TTL freshness like claims) so MCP/headless agents show up next to screen-scraped ones, with queue depth surfaced in hub_brief; and buttons — owner-decision queue items rolled up in hub_brief as "N buttons waiting (oldest X days)" (HUB/owner-roles.json names the human roles).

Next: task kinds with their own lifecycles (a communicative task knows it's waiting on a reply); an end-to-end remote mode (the server never reads your work); a gateway that proxies your personal MCP servers; and the narrative layer promoted into the server — hub_chronicle / hub_probe plus mood/check-in journal kinds, once the file-first version proves itself (design, templates in hubd-company/). The file format is the stable contract; everything else is negotiable.

Where this was used, and what it actually prevented

The case hubd was built against, and the one worth describing because it is the awkward shape real work has:

Bringing up a from-scratch EL2 hypervisor on a Banana Pi M64 — a bare-metal type-1 hypervisor running FreeBSD 15.1 arm64 as its guest, plus a Mali-400 GPU driver ported to FreeBSD along the way. Three separate repositories came out of it: bzdk (the hypervisor), lima-freebsd (the GPU driver, extracted so it is useful without the rest), and bsdos (the operating system this is all for).

The build machine and the board were never the same machine. The cross-compiler, the FreeBSD and drm-kmod source trees and the Mesa build lived on one host. The board arrived at another, on a different network, with the serial console and the debug Ethernet physically attached there. So the work was split: compile in one place, flash and observe in another. Several agents worked it in parallel — one on clocks, one chasing DMA coherency, one writing tests.

What that costs without a shared journal is specific, not abstract:

  • Two agents driving one board. The serial port takes one reader; two make a healthy channel look dead. "Who has the board" has to be a fact somebody wrote down, not an assumption.

  • Re-deriving the same finding. A hardware bug diagnosed on Tuesday gets re-diagnosed on Thursday by someone who never saw the first conclusion. Several of the ten upstream patches that came out of this project took a full day to find; finding one twice is a day thrown away.

  • Claims with no number behind them. "The fix works" is not portable between machines. "512 MiB of reads, zero errors, previously died after 27 MiB" is. hubd's reports are where those numbers went, which is why the release notes could be written from records instead of memory.

  • Stale conclusions outliving their evidence. Half a day of this project was spent finding documents that confidently stated things the code had since disproved. An append-only journal does not stop that, but it does let you see when a claim was made and what was true then.

None of that needs a server, and none of it left the machines involved: the data is markdown and JSONL in a folder, synced through a private git remote over SSH. That is the whole reason it was built this way.

License

MIT.

Available Tools

38 tools
hub_agendaA

The day split by WHO CAN ACT: agent work ready now, the owner's buttons (owner_kind human, or assigned to a role declared in HUB/owner-roles.json), what is blocked and on what, overdue and due-soon. Different question from hub_brief (everything that is going on) and hub_inbox (what needs a decision): this one answers "what can I actually start", which a mixed list hides.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
projectNo

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 burden of transparency. It describes what the output contains (agent work, owner buttons, blocked items, overdue/due-soon) and even details the owner-kind/role condition. However, it does not explicitly state whether the tool has side effects or is read-only, and it omits mention of truncation behavior (which is only in the parameter schema). Still, the description goes a long way in explaining the tool's behavior.

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

Conciseness4/5

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

The description is two sentences: the first defines the scope, the second differentiates from siblings. It is information-dense but not overly long. The structure is logical and front-loaded with the core concept, making it easy to parse. Minor deduction for the slightly run-on first sentence, but overall it is concise.

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

Completeness3/5

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

The tool has no output schema and no annotations, so the description must provide a complete picture. It does well explaining the purpose and usage alternatives, and partially describes the output categories. However, it leaves the 'project' parameter unexplained and doesn't mention the trimming/truncation behavior (which is only in the parameter schema). Without that, the agent may not know how to use the tool fully or interpret results, so completeness is only moderate.

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 only 50%: the 'full' parameter has a description, but 'project' has none. The main description does not mention 'project' at all, so the agent has no idea what filtering by project does. The description fails to compensate for the undocumented parameter, leaving a clear semantic gap.

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

Purpose5/5

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

The description clearly states what the tool does: it splits the day by who can act (agent work, owner's buttons, blocked items, overdue/due-soon). It also distinguishes itself from hub_brief and hub_inbox by explicitly stating the different question it answers, making the purpose very specific and well-differentiated.

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?

Usage guidance is explicit: it names alternative tools (hub_brief, hub_inbox) and explains when this tool is appropriate vs. when it is not. The description also lists the specific categories of work it focuses on, giving the agent clear decision criteria for selection.

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

hub_auditA

Compare what the hub DECLARES with what actually happened, and turn each disagreement into an incident somebody owns. Checks: a money bet whose gate date passed with no decision since · a project whose share of the journal contradicts the MODE its card declares · owner buttons nobody pressed · a card that stopped following its own journal · tasks with no project. Read-only by default; apply files one incident task per finding and writes ONE report. Every finding quotes the rule it enforces with the date that rule was written (HUB/rules.json -> laws), because an engine's opinion carries no weight and your own past decision does. Findings are keyed, so a weekly run never files the same incident twice. NOT a dashboard: the numbers it prints (attention share, close rates) are a thermometer and are never filed as violations.

ParametersJSON Schema
NameRequiredDescriptionDefault
byNorequired with apply: the function you are performing, e.g. "auditor-weekly"
daysNowindow for the attention/close-rate numbers, default 7
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
applyNofile the incidents (requires by). Default false — look first.
staleButtonDaysNoan owner button older than this is a finding, default 7

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so admirably. It discloses the safety profile (read-only by default), the side effects of `apply` (files incident tasks and writes one report), idempotency (findings are keyed so weekly runs never duplicate), and the distinction between reported numbers and filed violations.

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

Conciseness5/5

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

The description is long but every sentence earns its place: it enumerates the specific checks, explains the rule-provenance rationale, clarifies read-only vs. apply behavior, and warns against misusing it as a dashboard. The structure front-loads the core purpose followed by details, making it easy to parse.

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

Completeness5/5

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

Given the complexity of the tool (5 parameters, no output schema, no annotations), the description is remarkably complete. It covers what the tool does, the exact checks it performs, how to trigger writes, idempotency guarantees, output caveats (numbers are not violations), and the parameter semantics for the access-control field `by`. No significant gaps remain.

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 100%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining the relationship between `by` and `apply` ('required with apply') and clarifying that `full` affects context trimming. This goes beyond the raw parameter descriptions but does not deeply elaborate every parameter, which is acceptable given the schema's completeness.

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

Purpose5/5

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

The description opens with a precise verb and resource: 'Compare what the hub DECLARES with what actually happened, and turn each disagreement into an incident somebody owns.' This clearly distinguishes the tool from sibling tools by framing it as an audit/incident-creation process, not just a reporting or syncing 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?

The description gives explicit guidance on when to use the default read-only behavior vs. the `apply` mode ('Read-only by default; `apply` files one incident task per finding'). It also states what the tool is not ('NOT a dashboard'), which helps set expectations. However, it does not explicitly name alternatives or contrast with sibling tools like `hub_report` or `hub_lint`.

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

hub_briefA

Morning brief across all projects: open tasks (deadlines first), journal since N hours, stale cards, cards whose digest trails their own journal (staleDigests — the misleading kind of stale), active claims, per-role queue depth with last-seen agent (broadcast roles are flagged fanout instead of a depth — their cursors are per-reader), and a buttons rollup ("N buttons waiting, oldest X days" — pending items in a human-owner queue, see HUB/owner-roles.json).

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
hoursNojournal window, default 48
staleDaysNocard considered stale after N days, default 7

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the transparency burden. It discloses subtle behavioral details: the distinction between stale and staleDigests (misleading kind), broadcast roles being flagged as fanout instead of depth (per-reader cursors), and the truncation behavior with the `truncated` field. This goes beyond basic read-only and explains edge cases.

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

Conciseness2/5

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

The description is a single long run-on sentence with multiple semicolons, making it hard to parse. It is not well-structured or front-loaded; the many components could be bulleted for readability. Though every clause contains useful info, the format undermines conciseness.

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?

There is no output schema, so the description carries the burden of explaining the return content. It lists all major components and covers truncation details and special cases. It could mention permissions or error handling, but for a read-only brief it is fairly complete.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already has a descriptive explanation ('return everything, uncapped', 'journal window, default 48', etc.). The description adds minimal extra meaning beyond what schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool produces a 'Morning brief across all projects' and enumerates its specific contents (open tasks, stale cards, active claims, queue depth, buttons rollup). This specific verb+resource scope distinguishes it from sibling tools like hub_report or hub_agenda.

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

Usage Guidelines4/5

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

The description provides clear context that this is for a morning overview across all projects, with no explicit exclusions or alternatives. It does not name sibling tools but the scope is well-defined, so the agent can infer when to use it.

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

hub_card_setA

Create or update a project card from just a name and a digest — no folder needed (unlike hub_sync). Use it to capture a project that is not a local git checkout, e.g. when harvesting a dialog. Preserves any hand-written frontmatter and Facts.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesthe function you are performing, e.g. "dev-hubd". NOT which model you are — that is read from the transcript, and many sessions share a model. NOT a queue role either: a role is a mailbox (see hub_queue_wait), this is who is at it.
digestYesthe card digest: 3-6 lines of current state
projectYesproject name or slug

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 burden. It discloses the upsert nature ('Create or update') and the preservation of hand-written frontmatter and Facts, which is valuable. However, it does not mention return format, error handling, permissions, or whether other fields are overwritten, leaving some behavioral ambiguity.

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

Conciseness5/5

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

The description is three sentences with no redundant wording. It front-loads the core purpose, then adds usage context and a key behavioral guarantee, making it highly efficient and easy to parse.

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 simple 3-parameter tool with no output schema, the description covers the primary purpose, when to use it, and a notable behavior (preserving frontmatter/Facts). It stops short of describing return values or edge cases, but the provided context is sufficient for an AI agent to select and invoke the tool correctly in typical scenarios.

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 100%, so the baseline is 3. The description adds extra semantics for 'project' by noting 'no folder needed' and implies 'digest' is the current state via 'a name and a digest', but does not elaborate on the 'by' parameter, which is fully covered by the schema's existing description.

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

Purpose5/5

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

The description clearly states the tool's action ('Create or update a project card') and its key inputs ('name and digest'). It explicitly differentiates from sibling hub_sync by noting 'no folder needed', and provides a concrete example use case ('when harvesting a dialog'), making the purpose unambiguous.

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

Usage Guidelines5/5

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

It gives explicit usage guidance: 'Use it to capture a project that is not a local git checkout' and names the alternative tool (hub_sync) with a contrast ('unlike hub_sync'). The example of harvesting a dialog further clarifies when to choose this tool over siblings.

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

hub_claimA

Soft-lock a work area so other agents see it (e.g. area="public/index.html"). Not enforced — informational.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaYes
noteNo
agentYes
ttlMinNodefault 240
projectYes

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 reveals the soft-lock is not enforced, but lacks details on conflict handling, idempotency, or effect of repeated claims. Some transparency but incomplete.

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?

Single sentence, front-loaded with action and purpose, no wasted words. Efficiently communicates core functionality.

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 simple claim tool, the description covers essential purpose but omits details like return value, duration semantics (despite ttlMin having a default), and whether lock is replaceable. Adequate but not thorough.

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 only 20% (only ttlMin has description). The description mentions 'area' in example but does not explain note, agent, project, or ttlMin's behavior beyond default. Insufficient compensation for low coverage.

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

Purpose5/5

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

The description clearly states the verb 'soft-lock' and the resource 'work area' with a concrete example. It distinguishes from sibling tools which are all non-locking operations like hub_get, hub_search, etc.

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

Usage Guidelines4/5

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

The description explains the tool is informational and not enforced, giving context for when to use it. However, it does not explicitly state when not to use it or mention alternatives, though uniqueness among siblings makes that less critical.

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

hub_contextA

Auto-resolve which hub project YOUR working directory belongs to — call this at session start instead of hub_status/hub_get when you already know your cwd. Checks, most to least certain: a .hubd marker file (repo root, first line = project slug) · a project card's recorded sync path · the repo folder name as a last-resort guess (returned with guessed:true — never silently trust a name coincidence). Returns {project, via, root, guessed, digest, openTasks, activeClaims}; project is null with a hint if nothing matched.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdYesAbsolute path to YOUR OWN current working directory — this cannot be inferred by the server (it may serve many agents in many directories), so pass it explicitly.

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 behavioral burden and does so well. It discloses the exact lookup priority (.hubd marker, sync path, folder name guess), the guessed:true flag, the refusal to silently trust name coincidences, and the null-with-hint failure mode. This goes beyond a generic 'resolves project' statement.

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

Conciseness5/5

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

The description is front-loaded with the core action and usage, then uses a compact bullet-style list for resolution order and return fields. Every sentence/segment adds essential information—no filler, no repetition of the schema.

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

Completeness5/5

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

Given there is no output schema and no annotations, the description must explain both behavior and return shape. It enumerates the return fields ({project, via, root, guessed, digest, openTasks, activeClaims}) and covers the failure case. The combination of when, how, and what happens makes the tool fully usable without external references.

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 100% and the cwd parameter already has a thorough explanation ('Absolute path to YOUR OWN current working directory — this cannot be inferred...'). The description only echoes this by saying 'when you already know your cwd,' adding no new parameter-level meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Auto-resolve') and clearly identifies the resource (hub project from the current working directory). It explicitly contrasts with sibling tools hub_status/hub_get, stating this is for when you already know your cwd, making the purpose distinct.

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

Usage Guidelines5/5

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

It provides explicit when-to-use guidance ('call this at session start instead of hub_status/hub_get when you already know your cwd') and names the alternative tools. The resolution-order explanation also frames when the fallback naming heuristic applies, giving the agent practical decision rules.

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

hub_getA

Everything about ONE project: its full card (digest + facts), recent journal entries for it, and any active soft-locks. Use after hub_status or hub_search points you at a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
projectYesproject slug or name

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses a key behavioral trait: long lists are trimmed by default, with omitted data reported in `truncated`, and the `full` flag disables this. This goes beyond the schema and helps the agent understand output limits.

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, each earning its place. The first defines the returned data, the second gives contextual usage instruction. No fluff or repetition.

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 simple read tool with 2 parameters and no output schema, the description covers the core payload (card, journal entries, soft-locks) and the trimming behavior. It doesn't explain return formatting, but that is not essential for a get-tool of this complexity.

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 100% for both parameters, so the schema already documents them. The description adds no additional parameter-level meaning beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states what the tool does: it returns 'Everything about ONE project' including its full card, recent journal entries, and active soft-locks. The verb is implicit in the name but the resource and scope are specific, distinguishing it from siblings like hub_status (project list) and hub_search.

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?

Explicit usage guidance is provided: 'Use after hub_status or hub_search points you at a project.' This tells the agent exactly when to invoke this tool and implies it is not for initial discovery.

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

hub_graphA

The typed relationship graph across projects AND resources: who runs where, what depends on / deploys to / exposes what. Edges are frontmatter [[links]] keyed by relation (runs_on, depends_on, deploys_to, exposes, part_of, ...). Returns nodes, edges, and dangling links. Filter by project or type.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
typeNoonly edges touching a node of this type
projectNoonly edges touching this project/resource slug

TDQS

A4/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 burden. It discloses the return payload ('nodes, edges, and dangling links') and the edge keying mechanism. It does not mention truncation behavior (which is in the schema only), permissions, or other side effects, but for a read-only query tool this is adequate.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the core purpose and immediately followed by key behavioral details. Every sentence earns its place with no redundancy.

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

Completeness4/5

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

For a graph query tool with three parameters and no output schema, the description provides sufficient context: it specifies the return types (nodes, edges, dangling links) and the available filters. It could go deeper into edge semantics, but the schema covers parameter details and the overall purpose is clear.

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 100%, so the baseline is 3. The description mentions 'filter by project or type' which aligns with the schema, but adds no extra semantic detail beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the tool's function: it provides a typed relationship graph across projects and resources, showing dependencies and deployments. It distinguishes itself from sibling tools by focusing on relationships rather than individual records, and explains the edge structure via frontmatter links.

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

Usage Guidelines4/5

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

The description implies when to use it (when you need relationship data) and mentions filters by project or type. It does not explicitly name alternatives or exclusions, but the focused description makes its use case clear.

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

hub_heartbeatA

Record that an agent is alive — call it each work cycle (right after hub_report, before the next hub_queue_wait) so MCP/headless agents show up in hub_presence the same way screen-scraped ones do, no human bridge needed. Overwrites this agent's one presence record; freshness is judged at read time from ttlMin (default 15min), the same pattern hub_claim uses.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoyour absolute working directory, optional
roleNothe queue role you work under, e.g. "hubd" — lets hub_brief pair queue depth with who is listening
agentYesyour stable identity, e.g. your agent name
statusNofree text, e.g. "working" / "waiting" / "blocked"
ttlMinNominutes before this record counts as stale, default 15
task_idNothe task/id you are currently on, optional

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, but the description discloses key behavior: it 'overwrites this agent's one presence record' and explains freshness is evaluated at read time using ttlMin with a default of 15 minutes, aligning with hub_claim. This is critical side-effect information not visible in the schema.

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

Conciseness5/5

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

The description is two sentences that pack the purpose, scheduling, and key behavioral details without redundancy. It is front-loaded with the main action and uses the second sentence to cover overwrite and ttl semantics.

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 heartbeat tool with no output schema or annotations, the description covers purpose, when to call, why, and core behavior (overwrite, TTL). It omits return values and error cases, but these are less critical for this simple write-like operation; overall it's robust.

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?

All 6 parameters have descriptive schema entries (100% coverage), so the description need not repeat them. It adds minor context by mentioning the ttlMin default and read-time evaluation, but the schema already includes a similar description. Therefore, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with 'Record that an agent is alive,' a specific verb and resource. It distinguishes this from siblings by contrasting with hub_presence (where the heartbeat appears) and by positioning it in the agent work cycle relative to hub_report and hub_queue_wait.

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?

Explicit scheduling guidance: 'call it each work cycle (right after hub_report, before the next hub_queue_wait)'. It also explains why: to let MCP/headless agents appear in hub_presence without a human bridge, which implies when it's needed versus not.

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

hub_inboxA

What needs a DECISION right now, distilled from hubd data (not a time window like hub_brief): blocked reports, overdue open tasks, unassigned open tasks, and claim locks whose TTL expired but were never released. Returns {empty:true} when nothing needs attention — poll this instead of re-reading hub_status/hub_brief every cycle.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
hoursNowindow for blocked-report scan, default 72

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral transparency. It discloses what results are returned (blocked reports, overdue tasks, unassigned tasks, expired claim locks), the 'empty:true' response case, and the polling nature. It doesn't cover potential side effects or rate limits, but it is a read-style tool and the description is sufficiently transparent for an agent to understand behavior.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core value proposition ('What needs a DECISION right now'), and each sentence provides distinct, useful information: the content categories and the polling guidance. No filler or redundancy.

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

Completeness4/5

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

For a list/query tool with two optional parameters and no output schema, the description is nearly complete. It covers the purpose, the specific items returned, the empty response, and usage context. It stops short of detailing the full response shape, but the combination of the schema parameter descriptions and the main description gives an agent sufficient understanding to invoke the tool correctly.

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 100%, so the baseline is 3. The main description adds no extra parameter meaning beyond the schema; the schema already documents 'full' and 'hours' with clear descriptions. Therefore, the description neither adds nor detracts from what the schema provides.

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

Purpose5/5

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

The description explicitly states the tool's purpose: 'What needs a DECISION right now', and enumerates specific categories (blocked reports, overdue tasks, etc.). It also differentiates from hub_brief by noting 'not a time window like hub_brief', making it clear what this tool does that others don't.

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

Usage Guidelines5/5

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

It gives direct usage guidance: 'poll this instead of re-reading hub_status/hub_brief every cycle' and clarifies the distinction from hub_brief. This explicitly tells the agent when to use this tool over alternatives.

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

hub_kanbanA

The board as data: open tasks split into queued (unassigned) and in-progress (assigned), plus done-in-the-last-day and recent journal — the same view the read-only web kanban renders. Each task carries blocked and overdue flags.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.

TDQS

A3.8/5.0
Behavior3/5

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

Without annotations, the description must carry the behavioral burden. It indicates read-only nature via 'read-only web kanban' and lists returned data, but does not disclose side effects, auth needs, or truncation behavior beyond what is already in the schema.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the core 'board as data' concept, and each clause adds meaningful detail without redundancy.

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

Completeness4/5

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

The description sufficiently explains what the tool returns and its relationship to the web kanban. The only minor gap is lack of explicit mention of read-only safety, but the 'read-only web kanban' wording implies 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 100% and the single parameter 'full' is well-documented in the schema, explaining uncapped returns and truncation reporting. The description adds no extra parameter semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool returns the kanban board as data, specifying the exact categories (queued/in-progress, done-in-last-day, journal) and flags. It distinguishes itself from sibling tools by tying to the read-only web kanban view.

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 this tool is for retrieving board-oriented task data, but it does not explicitly state when to use it over alternatives like hub_task_list or hub_agenda, nor any exclusions.

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

hub_lintA

Every rule that CAN be checked, checked — the difference between a rule the hub enforces and one that is only written down somewhere. Reports a money bet whose gate has no date, and a human-owned communicative task with no prep it depends on (the owner would have to both prepare and decide). Each finding says whether the instance actually enforces it (HUB/rules.json -> strict, opt-in and empty by default) and quotes the local rule if one is declared. Read-only, never files anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
projectsNorestrict to these project slugs

TDQS

A3.7/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 of behavioral disclosure. It clearly states 'Read-only, never files anything,' and describes the structure of findings (enforcement status and local rule quote). It also hints at default truncation via context. This is solid, but it does not cover all possible edge cases or error scenarios, so it is 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?

The description is compact, consisting of two sentences, with the key purpose stated first. The opening phrase is poetic but communicates the core value proposition. It earns a 4 for being reasonably efficient and front-loaded, though it could be tightened by removing the metaphorical opening.

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

Completeness4/5

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

Given the lack of annotations and output schema, the description does a good job of outlining what the tool does, what findings look like, and its side-effect-free nature. It misses a few details like return format or how to interpret the 'strict/opt-in' distinction, but it is sufficient for an agent to decide and invoke correctly.

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

Parameters3/5

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

The schema already provides full descriptions for both parameters (full and projects), so the schema coverage is 100%. The tool description does not add any parameter-specific meaning beyond what the schema gives; it only mentions read-only behavior, which is orthogonal. Therefore, baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies the tool as a linter for hub rules, with specific verbs like 'reports' and concrete examples of what it checks (e.g., money bets without dates, human-owned tasks without prep). It also distinguishes itself from siblings by focusing on the gap between enforced and merely documented rules. However, it does not explicitly name or contrast with sibling tools, which keeps it one step below a perfect score.

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

Usage Guidelines3/5

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

The description implies usage: run this to check rule enforcement and get findings. It does not provide explicit when-to-use vs alternatives, nor does it mention any exclusion criteria. The context signals include many sibling tools, but the description does not leverage them to guide tool selection.

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

hub_nextA

The ONE task to do now, and why it won — not a list. Picking from a list is work, and a session that has to pick tends to pick the easy one. A task whose dependencies are still open is never eligible, however loud it is. Says explicitly when the chosen one is the owner's to press rather than an agent's.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
assigneeNo

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 burden of disclosure. It reveals valuable behavioral details: the tool selects a single task, excludes tasks with open dependencies, and can signal whether the action is the owner's or an agent's. It does not detail output structure or potential side effects, but for a decision tool, this is substantive context.

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

Conciseness5/5

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

The description is a tight three-sentence paragraph that is front-loaded with the core purpose. Each sentence adds context—why it's not a list, eligibility rules, and output nuance—without wasted words.

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

Completeness3/5

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

The description covers the tool's core decision logic and behavioral nuances, but lacks crucial technical details: how the optional parameters affect the selection and what the exact output format is. Given no output schema and no annotations, these omissions make it only partially complete for effective invocation.

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

Parameters2/5

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

Schema description coverage is 0% and the description makes no mention of the 'project' and 'assignee' parameters. While the names are self-explanatory, the description does not clarify their role (e.g., filtering the decision), leaving a clear gap in the tool's usage.

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

Purpose5/5

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

The description clearly states the tool identifies the single next task ('The ONE task to do now') and explains why it was chosen. It explicitly distinguishes from list-based approaches, helping differentiate from sibling list tools like hub_task_list and hub_agenda.

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

Usage Guidelines4/5

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

The description implies usage context: use this when you need to decide what to do next, not when you want a list. It mentions ineligibility criteria (open dependencies) but does not explicitly name alternative tools or when not to use it, leaving some room for interpretation.

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

hub_onboardingA

One-time orientation for an agent that has never worked with this hub before: what hubd is, which channel to use for what (claim vs task vs report vs queue — the #1 mistake), how to write a report. Call this FIRST, before anything else, the first time you connect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It explains the tool is an orientation (informational, not state-changing) and that it should be called first. However, it does not explicitly state side effects (e.g., 'does not modify any data'), but the nature of orientation strongly implies a safe, read-only operation.

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 sentence that packs in all essential information: what the tool is, what it covers, and when to call it. No wasted words, and the key directive 'Call this FIRST' is front-loaded and prominent.

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

Completeness5/5

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

For a simple tool with no parameters, no output schema, and no annotations, the description is fully sufficient. It tells the agent all necessary context: what topic areas are covered, when to use it, and that it's a one-time prerequisite. The sibling list does not introduce ambiguity because this tool's role is clearly unique.

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 zero parameters, so there is no parameter meaning to explain. The description fully compensates by explaining the tool's content and purpose. The baseline score of 4 for zero-parameter tools is appropriate.

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

Purpose5/5

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

The description clearly states the tool is a one-time orientation for agents new to the hub, covering hubd basics, channel usage, and report writing. This distinguishes it from sibling tools like hub_claim or hub_report, which perform specific actions. The verb 'orientation' and phrase 'Call this FIRST' make the purpose unmistakable.

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?

Provides explicit usage guidance: 'Call this FIRST, before anything else, the first time you connect.' This tells the agent exactly when to use it and establishes precedence over all other tools. It also clarifies this is a one-time event, preventing redundant calls on subsequent connections.

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

hub_operatorA

The operator card: facts and preferences about the HUMAN — rhythm, what framing works, and the Boundaries section listing what is never collected. Belongs to no project and changes slower than any of them. Agents READ Boundaries and never edit it. Returns a scaffold and how to create it if there is no card yet.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of behavioral disclosure. It reveals that if no card exists, the tool returns a scaffold and instructions for creation. It also implies a read-only nature through the 'never edit' guidance. However, it does not describe the exact return format, whether it only reads, or any other side effects, leaving some ambiguity.

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

Conciseness4/5

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

The description is composed of three sentences and is fairly concise. It front-loads the definition of the operator card, then adds context and the return behavior. It could be tightened by leading with the action verb, but it avoids unnecessary verbosity.

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 tool with no parameters and no output schema, the description gives a good sense of the concept and the fallback behavior. It clarifies that the operator card is a special, stable resource and that a scaffold is returned if missing. It does not detail the structure of the returned scaffold, but the complexity is low, so this is sufficient.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing to explain. Per the rubric, the baseline for 0 params is 4. The description adds no parameter information, but none is needed.

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

Purpose4/5

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

The description clearly focuses on the operator card and its contents (facts, preferences, boundaries), and states that it returns a scaffold if no card exists. However, it never uses a direct verb like 'get' or 'read', so the action is implied rather than explicit. It does distinguish from siblings by describing the unique nature of the operator card.

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 provides context about when this tool is relevant: the operator card belongs to no project and changes slower than other data. It also instructs agents to read Boundaries and never edit them, which implies a read-only usage. However, it does not explicitly state when to use this versus a sibling tool like hub_get or hub_context, nor does it mention any exclusions.

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

hub_presenceA

The fleet roster: every agent that has called hub_heartbeat, each flagged alive/stale from its own ttlMin. hub_brief's queue section pairs with this ("N queued for role X, agent last-seen T") — visibility into delivery without screen-scraping to check who is even listening.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
roleNofilter to agents heartbeating under this role
aliveOnlyNodrop stale (TTL-expired) records, default false

TDQS

A3.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 burden of disclosing behavior. It explains the alive/stale derivation from ttlMin, which is useful. However, it does not explicitly state that this is a read-only operation or mention any side effects, permissions, or caveats like truncation (though truncation is in the schema). The description implies read-only but does not confirm it.

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

Conciseness4/5

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

The description is concise, consisting of two sentences that efficiently convey the core purpose and a helpful pairing with hub_brief. The second sentence is slightly dense with the em dash and metaphorical language, but every phrase contributes valuable context.

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

Completeness4/5

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

Given the tool's simplicity and full schema coverage, the description provides adequate context: it defines the roster, the alive/stale flag, and how it integrates with hub_brief. It does not detail the output format, but without an output schema, the description's high-level overview is sufficient for this read-only listing tool.

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 100% for the three parameters, so the schema already documents them fully. The description does not add any parameter-specific meaning; it only mentions ttlMin, which relates to the live/stale concept rather than any input. Thus, the description adds no value beyond the schema, warranting the baseline score.

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

Purpose5/5

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

The description clearly defines the tool as a fleet roster of agents that have called hub_heartbeat, with alive/stale status based on ttlMin. It uses a specific verb+resource construction and distinguishes itself from sibling tools like hub_heartbeat (the act of beating) and hub_brief (queue info).

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

Usage Guidelines4/5

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

The description provides clear context: it is for checking who is listening/active, and explicitly pairs with hub_brief's queue section. However, it does not explicitly state when to prefer this over alternatives or mention exclusions, so it stops short of full guidance.

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

hub_queue_sendA

Append a message to a role's queue (queues/..queue.md) for cross-agent/cross-node handoffs. Delivered to whoever calls hub_queue_wait (or hub queue wait) for that role, here or on a mesh-synced peer node.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYeswho is sending — the function you are performing, e.g. "dev-hubd" or "orchestrator". NOT which model you are, and NOT the target role. Required like every other write: the delivered block says "from <sender>" forever.
roleYesqueue/role to deliver to, e.g. "dev" or "owner"
taskNothe task id this message is ABOUT, if any. Stamped into the delivered block and handed back to the consumer, so a reply (a blocker, a HOLD, a result) can be reported onto the task instead of being lost with the message. An id matching no task comes back as taskKnown:false — the ref is still recorded.
textYes

TDQS

A4.2/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 discloses important behavior: the storage path, the append action, and the delivery semantics including mesh-synced peers. It doesn't cover permissions, idempotency, or failure modes, but the core behavioral 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?

Two sentences: the first states the action and location, the second states the delivery behavior. It's front-loaded, information-dense, and has no filler.

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

Completeness4/5

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

The description covers what happens, where it happens, and how delivery works, which is sufficient for a simple queue write. It doesn't mention return/error behavior, but the absence of an output schema makes that less critical here.

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

Parameters3/5

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

The schema already covers 75% of parameters with descriptions, including role, from, and task. The description adds little beyond calling the payload a 'message,' so it doesn't materially improve parameter understanding beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('Append') and resource ('a role's queue') while also naming the delivery target and the file path. This clearly distinguishes the tool from siblings like hub_queue_wait, which consumes messages.

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 explicitly frames the tool for cross-agent/cross-node handoffs and explains that messages go to whoever calls hub_queue_wait. It doesn't mention alternative tools for other messaging patterns, but the context is clear enough for selection.

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

hub_queue_waitA

Block until new content lands in 's queue (this node's file plus any mesh-synced peer files for that role), then return it — a real long-poll, not a snapshot you have to re-poll. Returns {changed:false} if nothing arrives within timeout. If a delivered block names a task (see hub_queue_send), the ids come back as tasks — report the outcome onto those tasks, or the message is the only place the blocker ever existed. Local/stdio only (not available on the shared HTTP server). Use this instead of a sleep-and-recheck loop when waiting on an agent to report back via hub_queue_send.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
timeoutNoseconds to block, default 45, max 540. The default is deliberately short: MCP clients abort a tool call on their own timeout (commonly ~60s) and hubd cannot see that limit. Raise it only if you know your client tolerates a longer call.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden: it discloses blocking behavior, timeout return value ({changed:false}), task id handling, the obligation to report outcomes onto tasks, and the local-only deployment constraint. The timeout rationale is also transparently explained.

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

Conciseness5/5

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

The description is compact but comprehensive, with every sentence contributing essential context: the long-poll nature, return value, task edge case, deployment constraint, and usage alternative. No fluff or repetition.

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

Completeness5/5

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

Even without an output schema, the description covers return values, timeout behavior, special task handling, and the correct usage scenario. It is complete for an agent to determine when and how to invoke this tool.

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

Parameters4/5

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

The description adds meaning to the 'role' parameter by explaining it as the queue's subject ('role's queue'), which the schema lacks. The 'timeout' parameter is already well-described in the schema, so the description appropriately references it without redundancy. This compensates for the 50% schema coverage.

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

Purpose5/5

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

The description clearly states the tool blocks until new content arrives in a specified role's queue and returns it, describing it as a 'real long-poll, not a snapshot you have to re-poll.' This verb+resource+mechanism structure distinguishes it from sibling tools like hub_queue_send and hub_queue_wait_all.

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?

Explicit guidance says 'Use this instead of a sleep-and-recheck loop when waiting on an agent to report back via hub_queue_send,' and notes the local/stdio-only availability. It also references hub_queue_send for task semantics, giving clear context on when to choose this tool.

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

hub_queue_wait_allA

Subscribe to EVERY role's queue at once and block until new content lands in ANY of them — for an orchestrator reacting to whichever agent reports first, instead of calling hub_queue_wait per role or ssh-ing into each host to poll. Returns {changed:true, events:[{role,node,text}, ...]} tagging which role/node each event came from, or {changed:false} on timeout. Uses its own offset bookkeeping — does NOT consume/steal messages from a role's own hub_queue_wait consumer, it only taps. Local/stdio only.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoseconds to block, default 45, max 540. The default is deliberately short: MCP clients abort a tool call on their own timeout (commonly ~60s) and hubd cannot see that limit. Raise it only if you know your client tolerates a longer call.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully carries behavioral disclosure. It explains blocking behavior, return shapes on both success and timeout, that it uses its own offset bookkeeping, and critically that it 'does NOT consume/steal messages' — a key non-destructive trait. It also states the 'Local/stdio only' restriction, providing complete behavioral context.

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

Conciseness5/5

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

Four sentences deliver maximum substance with zero filler. Each sentence serves a distinct purpose: what it does, when to use it, what it returns, and its non-consuming behavior. The most critical action phrase is front-loaded, and the content is well-structured.

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

Completeness5/5

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

Despite having no output schema, the description fully documents the return values ({changed, events} with role/node tagging, or {changed:false}). It also covers timeout semantics, non-destructive behavior, and platform restriction. For a tool with one parameter and no output schema, this is complete.

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

Parameters3/5

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

Schema coverage is 100% for the single timeout parameter, and the schema already documents the default (45), max (540), and the client-timeout caveat. The tool description adds behavioral context about blocking and timeout returns, but does not need to elaborate the parameter syntax, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'Subscribe to EVERY role's queue at once and block until new content lands in ANY of them.' It clearly distinguishes this tool from the sibling hub_queue_wait by explicitly saying 'instead of calling hub_queue_wait per role.' The purpose is unambiguous and unique.

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

Usage Guidelines5/5

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

It gives a concrete use case ('for an orchestrator reacting to whichever agent reports first') and names two alternatives it replaces ('instead of calling hub_queue_wait per role or ssh-ing into each host to poll'). This is explicit guidance on when to use this tool versus others.

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

hub_recallA

What do we know about X — ranked across project cards, their sections, decisions, the journal and tasks, instead of hub_search's flat exact-substring list or hub_get's everything-about-one-project. Scoring is deterministic and readable: term coverage first, then where the line lives (a decision outranks a passing note), then recency. EVERY hit carries the date it was true as of and a stale flag — recall's real failure mode is handing over a two-month-old fact with this morning's confidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
limitNodefault 20
queryYes
staleDaysNoa hit older than this is flagged stale, default 30

TDQS

A4.9/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 excels: it reveals deterministic scoring logic (term coverage, line location, recency), discloses that every hit carries a date-as-of and a stale flag, and even names the failure mode of stale facts. This goes well beyond typical descriptions.

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 sentences, front-loaded with the core purpose, then contrasting alternatives, then detailing ranking and output. Every sentence contributes essential information with no waste, making it well-structured and efficiently sized.

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

Completeness5/5

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

Despite no output schema, the description sufficiently explains the return semantics (ranked hits with dates and stale flags) and covers purpose, alternatives, and scoring. For a moderately complex tool with a good input schema, this description provides enough context for an agent to select and invoke 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?

The input schema covers 75% of parameters with descriptions (full, limit, staleDays), and the description adds semantic context for staleDays by explaining the stale flag and date-as-of concept. It does not elaborate on query or limit, but the schema already handles those, so the description provides meaningful additional value without redundancy.

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

Purpose5/5

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

The description clearly states what the tool does: 'What do we know about X — ranked across project cards, their sections, decisions, the journal and tasks.' It distinguishes from siblings by explicitly contrasting with hub_search's flat exact-substring list and hub_get's everything-about-one-project, making its unique purpose unmistakable.

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

Usage Guidelines5/5

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

The description gives explicit when-not-to-use alternatives: 'instead of hub_search's flat exact-substring list or hub_get's everything-about-one-project.' This implies the tool is for ranked, cross-source recall and directly names the alternatives, satisfying the 'explicit when/when-not/alternatives' criterion.

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

hub_releaseA

Release a soft-lock. Pass id, or project+area+agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
areaNo
agentNo
projectNo

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states the action without disclosing behavioral traits like idempotency, error handling, or prerequisites. Essential details missing.

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

Conciseness5/5

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

The description is a single, efficient sentence with no superfluous words. It front-loads the purpose and parameter pattern clearly.

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

Completeness2/5

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

Given no annotations, no output schema, and 4 parameters, the description lacks context on what a soft-lock is, return values, or error conditions. It is insufficient for an agent to fully understand the tool's 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?

Schema description coverage is 0%, so description must add meaning. It explains that 'id' is an alternative to 'project+area+agent', adding some structure. However, it does not clarify individual parameter meanings (e.g., what 'area' or 'agent' represent), leaving gaps.

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

Purpose5/5

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

The description clearly states 'Release a soft-lock,' which is a specific verb and resource. It also provides alternative parameter combinations, distinguishing it from siblings like hub_claim (acquire a lock) and hub_get (read).

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

Usage Guidelines4/5

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

The description implies when to use (to release a soft-lock), but does not explicitly exclude scenarios or compare with alternatives. It is clear enough for an agent to infer usage context.

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

hub_reportB

Append a session report to the shared journal: what was done / broken / blocked.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNodefault: note
textYes
agentYes
privateNoroute this entry to the LOCAL-ONLY life braid (journal.life.jsonl — gitignored, never mesh-synced) and stamp it private. Prose only: DECIDE:/FACT:/COMM:/NEXT: write into a card, and cards are synced, so mixing the two would publish what you asked to keep local.
projectYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'shared journal' but omits critical details like persistence, sync implications, permissions, and the private/local routing behavior. The agent is left unaware of important side effects beyond the basic append action.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the action, and contains zero filler. Every word adds value, making it highly concise and scannable.

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

Completeness2/5

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

Given 5 parameters, no output schema, and no annotations, the description is too sparse. It doesn't explain the return value, how to use the private parameter, or the meaning of required fields, leaving the agent with insufficient context to invoke 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 low (40%), and the description only echoes the enum values (done/broken/blocked) already present in the schema. It adds no clarity for the required parameters (project, agent, text) or the private flag's nuanced routing behavior, failing to compensate for the coverage gap.

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

Purpose5/5

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

The description clearly identifies the action ('Append') and the resource ('session report to the shared journal'), and specifies the content categories (done/broken/blocked). This distinguishes it from sibling tools like hub_card_set or hub_section_add, which handle different data forms.

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

Usage Guidelines3/5

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

The description implies usage for logging session outcomes but provides no explicit when-to-use guidance or exclusions. It doesn't mention alternatives or clarify when to choose hub_report over other write tools, such as hub_task_add or hub_queue_send.

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

hub_resource_getC

One resource card plus its inbound and outbound typed relationships.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

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 should disclose behavioral traits but only states what is returned. It does not mention read-only nature, authorization needs, or error handling (e.g., if slug is invalid).

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

Conciseness4/5

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

The description is a single sentence with no wasted words, front-loading the key content. However, its brevity sacrifices completeness, but it remains efficient.

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

Completeness2/5

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

Given the lack of output schema and annotations, the description is too sparse to fully inform the agent. It does not cover return format, parameter semantics, or how to handle common scenarios, especially with many sibling tools.

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

Parameters1/5

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

The input schema has a single required parameter 'slug' with no description, and the tool description does not explain its purpose or format. Schema coverage is 0%, so the description fails to add any meaning.

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

Purpose5/5

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

The description clearly specifies that it retrieves one resource card along with its inbound and outbound typed relationships, which is specific and distinguishes it from sibling tools like hub_resource_list (list) or hub_get (generic).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as hub_resource_list or hub_get. The description does not mention any conditions, prerequisites, or exclusions.

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

hub_resource_listA

List resource cards (hosts, vms, services, endpoints, providers). Optionally filter by type.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
typeNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden, but it only states the core list behavior. It does not disclose the output format, default truncation behavior, or pagination; these are partially covered by the `full` parameter's schema description, but the tool description itself does not mention them. The read-only nature is implied by 'List', but no explicit safety or side-effect context is given.

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

Conciseness5/5

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

The description is a single, focused sentence that immediately states the action and the resource with parenthetical examples. There is no redundancy, filler, or unnecessary detail—every word earns its place.

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

Completeness3/5

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

The tool is simple (2 optional params, no output schema, no annotations), and the description covers the basics. However, it omits any mention of the default behavior of truncating long lists (which is only in the parameter schema) and gives no pointers to when to choose this over similar tools. For a minimal list tool it is acceptable but not comprehensive.

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

Parameters3/5

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

The schema has 50% coverage: `full` is described, `type` is not. The description's phrase 'Optionally filter by type' adds meaning to the `type` parameter and provides examples of possible values in parentheses. However, it does not elaborate on the `full` parameter, which is already covered by the schema, so the description only partially compensates for the missing schema documentation.

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

Purpose5/5

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

The description uses a specific verb 'List' and a resource ('resource cards') with examples of included types (hosts, vms, services, endpoints, providers). This clearly differentiates it from siblings like hub_resource_get or hub_resource_set, as it is about enumerating multiple entities rather than fetching or updating a single one.

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 explicit guidance is given for when to use this tool versus alternatives. It does not mention alternatives such as hub_resource_get or hub_search, nor does it specify any exclusions or prerequisites. The 'optionally filter by type' note is about parameter usage, not usage context.

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

hub_resource_setA

Create or update a resource — an infrastructure/topology entity: host, vm, service, endpoint, or provider. Structured attributes (type, address, os, provider, status) and typed relationships go in fields, NOT prose. Use this instead of describing infra inside a card digest.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYeswho is writing
osNo
slugYesresource id, e.g. "myvm" or "board.hubd.net"
typeNohost | vm | service | endpoint | provider | ... (open vocabulary)
edgesNotyped relationships, merged with existing: {"runs_on":["hubd"],"depends_on":["postgres"]}. Values are target slugs.
digestNoone-line description (keep prose minimal)
statusNolive | down | planned | retired
addressNoip / hostname / url, optional
providerNolibvirt | cloudflare | bare-metal | ...

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden. It discloses the mutating nature ('Create or update') and states that structured attributes and typed relationships 'go in fields, NOT prose,' which clarifies the expected input format. However, it does not disclose idempotency, partial update semantics, error cases, or impact on existing edges (though the schema notes edges are merged). This is adequate but not rich.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and every clause earns its place. It wastes no words and immediately clarifies the resource category and formatting requirement.

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 9-parameter tool with a nested object and no output schema, the description provides enough context to know whether to invoke it and what kind of resource to create or update. It does not detail return values or error handling, but those are not critical for a setter. The mention of 'NOT prose' and the explicit list of resource types makes it functionally complete for agent selection.

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

Parameters3/5

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

The input schema already documents 89% of parameters with meaningful descriptions (e.g., slug as resource id, edges as typed relationships). The description names some attributes (type, address, os, provider, status) that map to schema properties, but adds no new semantics beyond emphasizing that they belong in fields rather than prose. This is baseline for high schema coverage.

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

Purpose5/5

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

The description opens with 'Create or update a resource' clearly stating the action, then defines the scope as 'infrastructure/topology entity: host, vm, service, endpoint, or provider' – a specific, identifiable resource class. This distinguishes the tool from sibling read tools like hub_resource_list and hub_resource_get, and from other hub_* tools.

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

Usage Guidelines4/5

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

The description gives explicit guidance to use this tool instead of 'describing infra inside a card digest' and emphasizes structured fields over prose. It clearly defines when this tool is appropriate, though it does not explicitly contrast with sibling read tools or mention any exclusions beyond the card digest comparison.

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

hub_rulesA

The team constitution (AGENTS.md) over MCP: read it, or append an amendment. hubd mechanics live in the generated HUBD.md — this is the file where the rules YOU set live. An amendment is APPENDED under one dated, attributed heading and never edits a line already there: rewriting a rule destroys the record of what it used to say, which is exactly what hub_audit needs to quote.

ParametersJSON Schema
NameRequiredDescriptionDefault
byNorequired with append
appendNothe amendment, one line. Omit to read.

TDQS

A4.6/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It reveals the append-only nature, the dated/attributed heading requirement, and the destructive consequence of rewriting (destroys the record hub_audit needs to quote). This is thorough and sets clear expectations.

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 sentences, front-loaded with the core purpose. The subsequent sentences about HUBD.md and append safety are relevant and non-redundant, each earning its place without unnecessary fluff.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema, the description covers the main operations and constraints well. It explains what appending does and why rewriting is bad, but doesn't explicitly state what reading returns, which is inferable but not directly specified.

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 input schema already describes both parameters well (100% coverage). The description adds meaning by clarifying that 'append' must be one line and that 'by' corresponds to the attributed heading, reinforcing the append format beyond the schema's brief notes.

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

Purpose5/5

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

The description clearly states the tool's purpose: read or append an amendment to the team constitution (AGENTS.md). It distinguishes itself from sibling tools by emphasizing this is the rules file where user-set rules live, contrasting with generated HUBD.md for hubd mechanics.

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

Usage Guidelines4/5

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

The description explicitly says when to use the tool ('read it, or append an amendment') and provides a key constraint (never rewrite existing lines). It references hub_audit to explain the importance of the append-only behavior, but doesn't explicitly name alternative tools for other purposes, keeping it just 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.

hub_section_addA

Append ONE line to ONE section of a project card, leaving everything around it untouched. This is how Gates / Metrics / Market and any hand-written section get written by a tool at all — hub_card_set only writes the digest, and the report router only reaches Decisions / Facts / Communication / Next step. For those four, a normal hub_report with DECIDE:/FACT:/COMM:/NEXT: is still the right call; use this for the rest. The section is created if missing (you get created:true back — check it, a typo is how a card grows two nearly identical headings).

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesthe function you are performing, e.g. "dev-hubd".
modeNodefault append. `set` REPLACES the section body — right for "the one next action", wrong for anything cumulative.
textYesone line; it is stamped with the date
projectYes
sectionYesa key from hub sections (gates, metrics, market, ...) or the literal heading as it appears in the card
provenanceNowhere this came from — a URL, a file, a command, a person. Recorded next to the line so a later reader can re-check it.

TDQS

A4.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 of behavioral disclosure. It discloses that content is appended without disturbing existing content, that sections are created if missing (returning created:true), and warns about the risk of typo-induced duplicate headings. However, it does not mention the mode=set replacement behavior, which is only described in the schema, leaving a notable behavioral gap.

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

Conciseness5/5

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

The description is dense but efficiently structured: the first sentence states the core action, the second provides usage guidance, and the third warns about a common pitfall. Every sentence earns its place, with no filler or repetition of structured data.

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 tool with no output schema and six parameters, the description covers the essential context: core purpose, scenarios, side effects (creation, non-destructive), and a warning. It could further explain the mode=set behavior and the full return structure, but these are partially covered by the schema, so the description is reasonably complete.

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 description coverage is high (83%), so the baseline is 3. The description adds meaningful context for the 'section' parameter by enumerating typical values (Gates, Metrics, Market) and clarifying which sections are not appropriate (the four report sections). It also reinforces the 'one line' constraint for text, adding value beyond the schema.

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

Purpose5/5

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

The description begins with 'Append ONE line to ONE section of a project card...' which clearly specifies the action and target. It further distinguishes itself from siblings by explicitly contrasting with hub_card_set and hub_report, making the tool's unique purpose unmistakable.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool (for Gates / Metrics / Market and any hand-written section) and when not to (for Decisions / Facts / Communication / Next step, where hub_report should be used). It names alternatives directly, providing clear selection guidance.

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

hub_statusA

Snapshot of every project at once: the latest digest of each, when it was last synced, and its open-task count, plus the most recent shared-journal entries. A project whose card has fallen behind its OWN journal carries digestStale {daysBehind, lastJournal} — the card still reads fresh while the work moved on. Best for orienting at the start of a session. For a deadline-sorted to-do list use hub_brief; for one project in depth use hub_get.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
staleDaysNodigest counts as behind after N days of journal it does not reflect, default 7

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses a subtle behavioral nuance: a card can appear fresh while its digest is stale, represented by digestStale with daysBehind and lastJournal. Framing it as a 'snapshot' implies a read-only, point-in-time view. While it doesn't explicitly discuss side effects or authentication, it offers meaningful context beyond a bare description.

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

Conciseness5/5

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

The description is compact and well-structured: it opens with the primary function, explains a key output nuance, then finishes with usage guidance. Each sentence contributes distinct value, and the length is appropriate for the tool's complexity.

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

Completeness4/5

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

Given that there is no output schema, the description usefully enumerates the response contents (digest, last sync, open-task count, journal entries) and even the digestStale field shape. It covers usage context and alternatives, making it functionally complete. A more detailed return-type spec would be nice, but it is adequately complete for an orienting snapshot tool.

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

Parameters3/5

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

The input schema already describes both parameters (full and staleDays) with 100% coverage, including the trimming behavior and default stale threshold. The description adds no additional parameter meaning, so the baseline for high schema coverage applies.

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

Purpose5/5

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

The description clearly states what the tool does: it provides a 'Snapshot of every project at once' with digest, sync time, open-task count, and recent journal entries. It uses a specific verb and resource and distinguishes itself from hub_brief and hub_get, making its purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly says 'Best for orienting at the start of a session' and points users to hub_brief for deadline-sorted lists and hub_get for in-depth project views. This provides both the ideal use case and clear alternatives.

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

hub_syncA

Sync a project folder into the hub. Collects git facts automatically; pass digest (your own summary of state/next steps) and the card is rewritten.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoProject name (default: folder name)
pathYesAbsolute path to the project folder
agentYesthe function you are performing, e.g. "dev-hubd". NOT which model you are — that is read from the transcript, and many sessions share a model. NOT a queue role either: a role is a mailbox (see hub_queue_wait), this is who is at it.
digestNoAgent-written summary: status, recent work, next steps, blockers

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that git facts are collected automatically and that the card is rewritten, which is useful context. However, it omits potential side effects (e.g., overwriting existing card content), failure modes, or permission requirements.

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

Conciseness5/5

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

The description is two sentences long and directly packed with meaning. No filler words or redundancy; every clause contributes to understanding the tool's function and required input.

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 relatively simple tool with four parameters and no output schema, the description covers the core behavior and needed inputs. A minor gap is not stating what the tool returns or what 'rewritten' implies (e.g., full replacement vs. merge), but this is not critical for basic usage.

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

Parameters3/5

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

The input schema already documents all four parameters thoroughly (100% coverage), so the description does not need to add much. The mention of 'digest' reinforces the agent-written summary parameter, but it adds no semantics beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states a specific verb ('Sync') and resource ('project folder into the hub'), and adds key behavior (collects git facts, rewrites the card). This distinguishes hub_sync from the many other hub_* 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?

It implies when to use the tool by explaining that you pass a digest and the card is rewritten, which suggests use when updating the hub card with current project state. It does not explicitly name alternatives or say when not to use it, so it falls 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.

hub_task_addB

Add a task to the shared cross-project backlog.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesthe function you are performing, e.g. "dev-hubd". NOT which model you are — that is read from the transcript, and many sessions share a model. NOT a queue role either: a role is a mailbox (see hub_queue_wait), this is who is at it.
catNoone of technical | communicative | decision | chore. Anything else is kept — as a tag, not a category: the four values are the axis every by-type number is counted on, so it stays closed.
tagsNofree-form labels — the open vocabulary next to the closed cat one
textYes
projectYes
assigneeNoagent name or owner, optional
deadlineNoYYYY-MM-DD, optional
resourcesNoresource slugs this task touches (host/vm/service/...) — a structured link task → resource, not prose
depends_onNotask ids this task waits on (bare number or a node-scoped id like "planck-3")
importanceNodefault normal

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It merely says 'Add a task' without disclosing side effects, permission requirements, idempotency, or return format. The added context 'shared cross-project backlog' clarifies scope but not behavior.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the verb and object, and every word contributes. There is no fluff or redundancy.

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

Completeness2/5

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

Given 10 parameters, a write operation, and no annotations or output schema, a single sentence is insufficient to fully orient the agent. The rich schema descriptions help, but the description omits usage conditions, return behavior, and relationship to sibling task tools.

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 80%, so the schema already documents most parameters. The description itself adds no parameter-level detail beyond what the schema provides; per rubric, high coverage yields a baseline of 3.

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

Purpose5/5

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

The description states a specific action — 'Add a task' — with a clear resource ('shared cross-project backlog'), distinguishing it from read/update task siblings like hub_task_list, hub_task_get, and hub_task_update. The scope is explicit and not generic.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives, no exclusions are mentioned, and sibling tools are not referenced. The single sentence provides only the core action without context for selection.

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

hub_task_getA

ONE task by id, plus what it is blocked by and what it blocks. Use this when you know the id — do NOT go guessing project × status combinations with hub_task_list. Know a keyword but not the id? hub_search first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesbare number or a node-scoped id like "planck-3"

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses the return content (task plus blocked-by/blocks) and conveys a read-only behavior. It could add what happens if id not found, but the essential behavioral trait is covered.

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, front-loaded with purpose, then clear usage direction. No filler; every sentence adds value.

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 simple one-parameter getter without output schema, the description sufficiently explains what is returned and when to use it. It is complete enough for an agent to invoke correctly, though it does not cover error behavior, which is a minor gap.

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 covers 100% of the single parameter with description and type. The description adds no extra parameter info beyond reinforcing that the id must be known, but with full schema coverage a baseline of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool fetches a single task by id and includes its blocking relationships. It explicitly distinguishes from sibling hub_task_list and provides context for when to use this tool over alternatives.

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 'Use this when you know the id' and warns against guessing combinations with hub_task_list. It also directs users to hub_search for keyword-based lookup. This gives strong when/when-not guidance.

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

hub_task_listA

List backlog tasks. Filter by project and/or status; page with limit/offset. total is always the full matching count, so a page never reads as the whole backlog. Looking for ONE task you can name? hub_task_get by id, or hub_search by keyword — both beat listing and scanning.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
limitNopage size
offsetNoskip this many, for paging through a long backlog
statusNo
projectNo

TDQS

A4.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 burden of behavioral disclosure. It adds valuable context that `total` always reflects the full matching count, so a page never reads as the whole backlog—a subtle but important behavioral nuance. It does not explicitly state side-effect safety, but the read-only nature of listing is strongly implied and no destructive hints are needed.

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

Conciseness5/5

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

The description is three sentences with zero filler. It front-loads the action, then delivers the critical pagination caveat, then names alternatives—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?

The description covers purpose, filters, paging semantics, and alternative tools, which is strong for a simple list operation with no output schema. Minor gaps remain: no mention of default page size or what fields appear in the returned tasks, but these are not critical for tool selection and invocation.

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 60%, and the description compensates by explaining how the parameters work together: 'Filter by project and/or status; page with limit/offset.' It also clarifies pagination semantics with the `total` remark, adding meaning beyond the schema's bare parameter descriptions. It doesn't cover `full` in detail, but the schema already describes that adequately.

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

Purpose5/5

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

The description opens with a specific verb+resource ('List backlog tasks') and immediately distinguishes itself from siblings by naming hub_task_get and hub_search as better alternatives for finding a single named task. It also covers the key filtering and paging capabilities, making the tool's purpose unmistakable.

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?

Explicit usage guidance is present: filters are listed ('project and/or status'), paging is mentioned ('limit/offset'), and a clear exclusion is given—'Looking for ONE task you can name? hub_task_get by id, or hub_search by keyword—both beat listing and scanning.' This tells the agent exactly when to avoid this tool.

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

hub_task_updateB

Update a task: close it (status=done), reassign, reprioritise, edit text/deadline/cat.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
idYesbare number or a node-scoped id like "planck-3"
catNotechnical | communicative | decision | chore — anything else is kept as a tag instead
tagsNofree-form labels; replaces the task's tag list
textNo
statusNo
assigneeNo
deadlineNo
resourcesNoresource slugs this task touches
depends_onNotask ids this task waits on
importanceNo

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that 'update' includes closing, reassigning, reprioritising, and editing text/deadline/cat, but it does not disclose whether updates are partial or full replacements, side effects on related resources, required authentication, or what the response contains. This is a significant gap for a mutation tool with 11 parameters.

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

Conciseness5/5

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

The description is a single sentence of 13 words, front-loaded with the action 'Update a task'. Every word contributes to purpose and capabilities, with no filler or repetition. It efficiently covers the core functionality without unnecessary detail.

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 parameters, no annotations, and no output schema, this description is too minimal. It fails to mention the required 'by' parameter, whether updates are partial or full, what happens to unspecified fields, return values, or any side effects. Given the complexity, the description leaves substantial gaps in the information an agent would need to invoke the tool correctly.

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

Parameters3/5

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

The schema already describes several parameters (cat, tags, resources, depends_on). The description adds meaning to some parameters (e.g., 'close it' maps to status, 'reassign' maps to assignee, 'reprioritise' maps to importance) but does not significantly elaborate on parameter semantics beyond what is in the schema. It groups capabilities but offers little additional detail for parameters like id, by, text, and deadline.

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

Purpose5/5

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

The description uses the specific verb 'Update' with the resource 'task' and enumerates concrete actions: close it, reassign, reprioritise, edit text/deadline/cat. This clearly distinguishes it from sibling tools like hub_task_add, hub_task_get, and hub_task_list, which handle creation, retrieval, and listing respectively.

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 implies usage when a task needs modification, but it provides no explicit guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or contrast with sibling tools like hub_task_add or hub_task_get, leaving the agent to infer the appropriate context.

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

hub_trajectoryA

Deterministic dependency-graph plan over tasks' depends_on — the probable trajectory as a critical PATH, not an ML forecast. Returns: ready (doable now, no open deps), blocked (with waitingOn ids), layers (Kahn topo-order — what unlocks when), criticalPath (longest dependency chain = ordering bound), cycles (dependency loops to fix). Use to see "given deps, what is the actual order / what is the critical path to a milestone". Weight is task-count now; weighted by real durations once logd records them.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
projectNooptional: restrict the graph to one project

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and largely succeeds. It states the tool is deterministic ("not an ML forecast"), explains what each return field means, and reveals a limitation: "Weight is task-count now; weighted by real durations once logd records them." While it doesn't explicitly declare read-only or side-effect-free behavior, the "Returns:" phrasing implies a safe query operation.

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

Conciseness5/5

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

The description is concise and well-structured: it leads with the core purpose, lists return values, provides a use-case sentence, and then notes the current weight limitation. Every sentence adds value, and the length is appropriate for the tool's complexity—no redundancy or filler.

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

Completeness4/5

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

The tool has no output schema, so the description's explanation of each return field (ready, blocked, layers, criticalPath, cycles) is essential and provided. It also covers the deterministic nature and current weight behavior. The main omission is an explicit statement about permissions or side effects, but the description and schema together give a fairly complete picture for a read-only analysis tool.

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

Parameters3/5

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

The input schema covers 100% of parameters (full and project), each with a clear description. The tool description itself adds no extra parameter semantics, but the schema already provides adequate meaning, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb+resource: "Deterministic dependency-graph plan over tasks' depends_on". It clearly distinguishes itself from an ML forecast and enumerates the exact outputs (ready, blocked, layers, criticalPath, cycles), making its purpose unmistakable and differentiating it from sibling tools like hub_graph or hub_next.

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

Usage Guidelines4/5

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

The description provides an explicit use case: "Use to see 'given deps, what is the actual order / what is the critical path to a milestone'." This is clear context for when to invoke the tool, though it does not mention when not to use it or name alternative tools, which would make it fully explicit.

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

hub_usageA

What the work cost, over a window, per project and per agent — with a hard line between SUPPLIED (seconds/tokens/money, reported by clients through hub_usage_add, since the hub cannot see them) and MEASURED (closed-task spans and journal events, the hub's own arithmetic). The split is the point: a cost number that mixes an observed span with a guessed rate gets quoted later as if someone had counted.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNodefault 7
agentNo
projectNo

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description must disclose behavior. It explains the conceptual split between SUPPLIED (client-reported) and MEASURED (hub-derived) data and warns against mixing them. This provides meaningful behavioral context beyond just saying 'returns usage'. However, it does not specify return format or whether agent/project filter the results, so it is not fully transparent.

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

Conciseness5/5

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

The description is two sentences and front-loads the purpose. The second sentence adds important nuance about the supplied/measured split and the warning. No unnecessary words.

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 output schema and no annotations, the description should cover return structure and default behavior. It explains the core concept but does not mention the default window of 7 days (though the schema hints at it) or what the response looks like. It also does not clarify behavior when agent/project are omitted.

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 only 33%, with only 'days' having a description. The description adds meaning by mapping 'days' to the window and suggesting 'agent' and 'project' are grouping dimensions. It does not explicitly clarify whether agent/project are optional filters or always part of the grouping, leaving some ambiguity.

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

Purpose5/5

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

The description clearly states the tool reports work cost over a time window, aggregated per project and per agent. It distinguishes from hub_usage_add by explaining that SUPPLIED data comes from clients via that tool. This gives a specific verb+resource and differentiates from the sibling.

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

Usage Guidelines4/5

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

The description implies this is the read counterpart to hub_usage_add by noting that clients report supplied data through that tool. It does not explicitly state when to use this tool vs alternatives, but the contrast between SUPPLIED and MEASURED gives context. There is no explicit exclusion or when-not-to-use, 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.

hub_usage_addA

Record what only YOU can see about a piece of work: seconds, tokens, cost, model. The hub cannot observe any of these, so they arrive here explicitly and are reported back as SUPPLIED, never mixed with what the hub measured itself. At least one number is required — an empty entry would record a $0 session.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
agentYes
modelNo
costUsdNo
projectNo
secondsNo
tokensInNo
tokensOutNo

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses important behavioral traits: reported values are tagged as SUPPLIED and never mixed with hub-measured data, and an empty entry records a $0 session. With no annotations provided, this detail is valuable.

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, front-loaded with the action and resource, every sentence adds meaningful information. No fluff.

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

Completeness3/5

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

The description covers the core purpose and key semantics, but for a tool with 8 parameters and no output schema, it lacks details on return values and full parameter meanings. It's adequate but has 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?

The description names some parameters (seconds, tokens, cost, model) and adds a cross-field constraint, but it doesn't explain all eight parameters or the tokensIn/tokensOut distinction. Given 0% schema coverage, this is incomplete.

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

Purpose5/5

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

The description clearly states the tool's function: recording usage metrics (seconds, tokens, cost, model) that only the user can observe. It distinguishes itself from sibling tools by emphasizing that data is supplied explicitly because the hub cannot measure it.

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

Usage Guidelines4/5

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

It provides context for when to use the tool—whenever you have usage data the hub cannot observe—and includes a validation rule (at least one number required). However, it doesn't explicitly name alternatives or exclusions, so it earns a 4 rather than a 5.

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

hub_whatsnewA

Personalized "what did I miss" — journal activity since YOUR OWN last hub_whatsnew call (tracked per agent name), not a fixed time window like hub_brief. Call this at the start of a session/sweep instead of re-reading hub_status/hub_brief from scratch; a never-seen agent gets a 24h window on its first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoreturn everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.
agentYesyour stable identity, e.g. "orchestrator" or your agent name — reused across calls to compute the delta
hoursNofallback window in hours if this agent has no prior checkpoint yet, default 24

TDQS

A4.4/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. It discloses the stateful tracking mechanism ('tracked per agent name') and the first-call behavior ('never-seen agent gets a 24h window'), which implies the tool maintains a checkpoint. However, it does not explicitly state that the call updates the checkpoint or describe any side effects beyond that, so a small transparency gap remains.

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, zero fluff. The first sentence front-loads the core purpose and differentiator; the second gives concrete usage guidance and an edge case. Every word earns its place, making it highly scannable.

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 stateful tool with no output schema, the description covers the essential context: what it does, when to use it, and the key behavioral nuance of per-agent checkpoints. It does not describe the return format, but the input schema's description of the `full` parameter mentions `truncated`, giving a hint. Given the tool's moderate complexity, this is nearly complete but not fully self-contained.

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 100%, so the baseline is 3. The description references 'per agent name' (agent) and '24h window' (hours), but these details are already fully documented in the schema parameter descriptions. No additional parameter semantics are provided beyond what the schema already offers.

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

Purpose5/5

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

The description states a specific verb+resource: 'journal activity since YOUR OWN last hub_whatsnew call'. It clearly differentiates from hub_brief by noting 'not a fixed time window like hub_brief', and from hub_status/hub_brief by recommending it as a replacement at session start. This is unambiguous and distinguishes among siblings.

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?

Explicit guidance is given: 'Call this at the start of a session/sweep instead of re-reading hub_status/hub_brief from scratch'. This tells the agent exactly when to use it and what not to use instead. The first-call fallback window is also explained, covering a key edge case.

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. Dates show when Glama detected each change.

  1. 27 tool updatesv0.9.0
    • Addedhub_agenda
    • Addedhub_audit
    • Changedhub_brief1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Changedhub_get1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Changedhub_graph1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Changedhub_inbox1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Changedhub_kanban1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Addedhub_lint
    • Addedhub_next
    • Addedhub_operator
    • Changedhub_presence1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Changedhub_queue_send2 fields changed
      • changedInput schema / properties / role / description
        Previous value: -"queue/role to deliver to, e.g. \"zaika\" or \"owner\""New value: +"queue/role to deliver to, e.g. \"dev\" or \"owner\""
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "the task id this message is ABOUT, if any. Stamped into the delivered block and handed back to the consumer, so a reply (a blocker, a HOLD, a result) can be reported onto the task instead of being lost with the message. An id matching no task comes back as taskKnown:false — the ref is still recorded.",
        +  "type": [
        +    "integer",
        +    "string"
        +  ]
        +}
    • Addedhub_recall
    • Changedhub_report1 field changed
      • addedInput schema / properties / private
        Added value: +{
        +  "description": "route this entry to the LOCAL-ONLY life braid (journal.life.jsonl — gitignored, never mesh-synced) and stamp it private. Prose only: DECIDE:/FACT:/COMM:/NEXT: write into a card, and cards are synced, so mixing the two would publish what you asked to keep local.",
        +  "type": "boolean"
        +}
    • Changedhub_resource_list1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Addedhub_rules
    • Changedhub_search1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Addedhub_section_add
    • Changedhub_status2 fields changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / staleDays
        Added value: +{
        +  "description": "digest counts as behind after N days of journal it does not reflect, default 7",
        +  "type": "integer"
        +}
    • Changedhub_task_add3 fields changed
      • changedInput schema / properties / cat / description
        Previous value: -"task category, optional"New value: +"one of technical | communicative | decision | chore. Anything else is kept — as a tag, not a category: the four values are the axis every by-type number is counted on, so it stays closed."
      • removedInput schema / properties / cat / enum
        Removed value: -[
        -  "technical",
        -  "communicative",
        -  "decision",
        -  "chore"
        -]
      • addedInput schema / properties / tags
        Added value: +{
        +  "description": "free-form labels — the open vocabulary next to the closed cat one",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Addedhub_task_get
    • Changedhub_task_list3 fields changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "page size",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "skip this many, for paging through a long backlog",
        +  "type": "integer"
        +}
    • Changedhub_task_update3 fields changed
      • addedInput schema / properties / cat / description
        Added value: +"technical | communicative | decision | chore — anything else is kept as a tag instead"
      • removedInput schema / properties / cat / enum
        Removed value: -[
        -  "technical",
        -  "communicative",
        -  "decision",
        -  "chore"
        -]
      • addedInput schema / properties / tags
        Added value: +{
        +  "description": "free-form labels; replaces the task's tag list",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedhub_trajectory1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
    • Addedhub_usage
    • Addedhub_usage_add
    • Changedhub_whatsnew1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "return everything, uncapped. By default long lists are trimmed to fit an agent context and what was left out is reported in `truncated`.",
        +  "type": "boolean"
        +}
  2. 15 tool updatesv0.5.0
    • Changedhub_card_set2 fields changed
      • changedInput schema / properties / by / description
        Previous value: -"who is writing"New value: +"the function you are performing, e.g. \"dev-hubd\". NOT which model you are — that is read from the transcript, and many sessions share a model. NOT a queue role either: a role is a mailbox (see hub_queue_wait), this is who is at it."
      • changedInput schema / required
        Previous value: -[
        -  "project",
        -  "digest"
        -]New value: +[
        +  "project",
        +  "digest",
        +  "by"
        +]
    • Addedhub_context
    • Addedhub_heartbeat
    • Addedhub_inbox
    • Addedhub_onboarding
    • Addedhub_presence
    • Addedhub_queue_send
    • Addedhub_queue_wait
    • Addedhub_queue_wait_all
    • Changedhub_resource_set1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "slug"
        -]New value: +[
        +  "slug",
        +  "by"
        +]
    • Changedhub_sync2 fields changed
      • changedInput schema / properties / agent / description
        Previous value: -"Who is syncing (e.g. claude-cowork, cursor, executor)"New value: +"the function you are performing, e.g. \"dev-hubd\". NOT which model you are — that is read from the transcript, and many sessions share a model. NOT a queue role either: a role is a mailbox (see hub_queue_wait), this is who is at it."
      • changedInput schema / required
        Previous value: -[
        -  "path"
        -]New value: +[
        +  "path",
        +  "agent"
        +]
    • Changedhub_task_add4 fields changed
      • changedInput schema / properties / by / description
        Previous value: -"who adds"New value: +"the function you are performing, e.g. \"dev-hubd\". NOT which model you are — that is read from the transcript, and many sessions share a model. NOT a queue role either: a role is a mailbox (see hub_queue_wait), this is who is at it."
      • changedInput schema / properties / depends_on / description
        Previous value: -"task ids this task waits on"New value: +"task ids this task waits on (bare number or a node-scoped id like \"planck-3\")"
      • changedInput schema / properties / depends_on / items / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "string"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "project",
        -  "text"
        -]New value: +[
        +  "project",
        +  "text",
        +  "by"
        +]
    • Changedhub_task_update5 fields changed
      • changedInput schema / properties / depends_on / items / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "string"
        +]
      • addedInput schema / properties / id / description
        Added value: +"bare number or a node-scoped id like \"planck-3\""
      • changedInput schema / properties / id / type
        Previous value: -"integer"New value: +[
        +  "integer",
        +  "string"
        +]
      • addedInput schema / properties / importance
        Added value: +{
        +  "enum": [
        +    "high",
        +    "med",
        +    "normal"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "id",
        +  "by"
        +]
    • Addedhub_trajectory
    • Addedhub_whatsnew
  3. 6 tool updatesv0.1.8
    • Addedhub_graph
    • Addedhub_resource_get
    • Addedhub_resource_list
    • Addedhub_resource_set
    • Changedhub_task_add1 field changed
      • addedInput schema / properties / resources
        Added value: +{
        +  "description": "resource slugs this task touches (host/vm/service/...) — a structured link task → resource, not prose",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedhub_task_update1 field changed
      • addedInput schema / properties / resources
        Added value: +{
        +  "description": "resource slugs this task touches",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  4. 13 tool updatesv0.1.6
    • First observedhub_brief
    • First observedhub_card_set
    • First observedhub_claim
    • First observedhub_get
    • First observedhub_kanban
    • First observedhub_release
    • First observedhub_report
    • First observedhub_search
    • First observedhub_status
    • First observedhub_sync
    • First observedhub_task_add
    • First observedhub_task_list
    • First observedhub_task_update

TDQS

B3.4/5.0
Disambiguation3/5

Several tools serve overlapping purposes in the status/overview space (hub_brief, hub_status, hub_agenda, hub_inbox, hub_kanban, hub_whatsnew, hub_next), which could cause an agent to call the wrong one. However, each description clearly states its unique angle and usage context, reducing actual misselection. Other overlapping pairs like hub_sync vs hub_card_set are distinguishable by the folder requirement.

Naming Consistency2/5

All tools share the hub_ prefix and lowercase underscore style, but the naming pattern is inconsistent: some are imperative verbs (hub_search, hub_recall, hub_sync), some are noun phrases (hub_presence, hub_brief, hub_kanban), and some are object-verb compounds (hub_task_add, hub_queue_send, hub_card_set). This mix makes it harder to predict what a tool does from its name alone.

Tool Count2/5

At 38 tools, this is far above the 25+ threshold and feels heavy even for a comprehensive coordination hub. While each tool has a distinct function, the volume increases cognitive load and selection difficulty. A more curated set could merge some overview tools or trim rarely used ones.

Completeness4/5

The tool set covers a wide range of hub operations: project/task/resource CRUD (except delete), queues, presence, usage, rules, audit, lint, graph, and knowledge retrieval. The only notable gap is the lack of delete operations for cards, tasks, and resources, though the system may intentionally preserve history. Overall, the surface is quite complete for the stated purpose.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides persistent, self-optimizing memory for AI agents, enabling them to remember preferences and context across sessions and share knowledge across multiple agents.
    4
    15
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    A file-backed MCP server for hierarchical project management that enables AI assistants to create, claim, and complete tasks within a project→epic→feature→task structure, with dependency management and Markdown-based storage.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bzdOS/hubd'

If you have feedback or need assistance with the MCP directory API, please join our Discord server