Skip to main content
Glama

Yesterday, you and Claude renamed POST /login to POST /session. Today, a fresh session writes a client against the old route. The decision was made; the next session never received it.

Lockstep gives developers and product managers two ways to start independently:

  • Developers: keep accepted decisions across Claude Code sessions and check whether changed code may contradict them.

  • Product managers: turn a product brief into reviewed requirements, track revisions, and copy a useful implementation brief before a developer joins.

  • Teams: share the same ledger, route interface changes to affected services, and retain existing integrations, permissions, and PR enforcement.

For example, accept “exports expire after 24 hours, except internal previews.” A later Claude session receives that decision without another explanation. A PM can trace the requirement to its source, revise it for review, and share its accepted version with a developer.

Start with one real repo or brief. Invite a colleague when there is useful context to share; company-wide onboarding is not required.

npx lockstep-cli onboard

How it compares

Nothing

Slack / docs

CODEOWNERS

Lockstep

Agents learn what other agents decided

❌

Manual

❌

✅ Automatic

Decisions ranked by blast radius

❌

❌

❌

✅ Usage graph

Changes routed to the services that consume them

❌

❌

❌

✅ Dependency graph

"Does anyone use this endpoint?" answered instantly

❌

Manual

Partial

✅ From the graph

Claude Code session continuity

—

Manual

—

✅ Briefings + decision packs

How It Works

Start with your own next session:

You accept: “Use POST /session; POST /login is retired.”
    → Lockstep keeps the accepted decision.
    → Your next Claude session receives it before you start coding.
    → An opted-in check can flag changed code that may contradict it.

A decision is a durable rule or architectural choice that shapes future work. A change is a routine event — captured, but only surfaced when it matters. A PM can establish the same continuity by reviewing requirements from a brief before any code is connected.

As teammates join

The same ledger grows into coordination across developers and repos. For example, a route change in one service can reach the developers whose services consume it:

  Dev A's agent                  Lockstep                       Dev B's agent
  ─────────────                  ────────                       ─────────────
  logs a decision  ───────▶  ┌─────────────────┐
  "auth → /session"          │  Decision ledger │
                             │  Usage graph     │  blast radius
  changes a surface ──────▶  │  Impact ranking  │  decides who
  POST /session              │  Inboxes         │  cares & how much
                             └────────┬─────────┘
                                      │  routes to the services that
                                      ▼  consume the changed surface
                              Dev B's next session begins with:
                              ⚠ [impact 3] auth: /login → /session (binding)
                              → B's agent uses /session before writing a line
  1. Capture — A coding-agent hook diffs the working tree and publishes changes with a canonical surface ID (http:POST /session, proto:auth.v1.Auth/Login). When an agent makes a real decision, it logs it with propose_decision.

  2. Rank — Each decision and change gets an impact score = how many services consume the affected surface (its blast radius). This is what keeps signal high and noise quiet.

  3. Route — Changes fan out to exactly the repos that declared a dependency on the changed surface (lockstep.yaml). The agent can also ask consumers("http:GET /orders/:id") — "does anyone use this?" — and get an answer from the graph instead of pinging a human.

  4. Replay — On session start, each agent receives a briefing of what changed and what's binding since it was last here, highest blast radius first — so it's aware before it acts.

  5. Bind — Cross-cutting decisions (high impact) stay open until an affected team acknowledges them; own-area decisions bind on assertion. A PR-time gate fails any contract change with no binding decision.

Related MCP server: Kage

Quick Start

Choose your starting point: developer or product manager. Both use the full dashboard and the same project history.

Pilot release status: CLI 0.4.0 is published on npm, alongside the matching API and dashboard changes in this repository. Hosted rollout and a real authenticated Claude-session verification are still pending, so the hosted links may run an earlier release. Complete those checks before inviting pilot participants.

For developers

Requires Node.js 20+, Claude Code, a GitHub account, and a Git repo with an origin remote.

cd your-project
npx lockstep-cli onboard
  1. Preview locally. Inspect candidate documentation and proposed Claude configuration changes before approving setup. Select which documents to upload, or skip import and enter a decision manually.

  2. Connect, scan, and review. Sign in with GitHub and connect the intended project. Onboarding runs scan --apply: it writes or merges lockstep.yaml, preserving existing entries, and seeds the graph with detected produced surfaces and matched dependencies. Then review up to five decision proposals. Remaining drafts stay in Review. Imports do not become accepted decisions automatically.

  3. Choose hosted checks separately. Automatic code checks have their own remembered opt-in. Declining them leaves decision continuity available.

  4. Open Claude Code. Approve the project MCP server when prompted. Onboarding distinguishes configured, connected, decisions ready, and agent verified. Use npx lockstep-cli status to inspect configuration and recorded agent verification. Configuration alone is not activation.

  5. Return, share, and invite. Later sessions receive current decisions and relevant updates. Use the dashboard's Preview decision brief → Copy decision brief, or print Markdown with npx lockstep-cli brief. When the scan finds outbound calls with no declared producer and relevant Git history, onboarding also suggests recent contributors to the calling files and prints an invite command.

For example, an unmatched http:POST /billing/charge call in src/checkout.ts can point you to a colleague who recently edited that file. These are leads to ask about the missing dependency, not verified owners; an unmatched call may also target an external service. Confirm the GitHub handle and invite each person you choose:

npx lockstep-cli invite <github-handle>

Suggestions do not send invitations automatically. You can share a useful brief with the colleague first.

npx lockstep-cli onboard --dry-run    # preview without configuring or uploading
npx lockstep-cli check --upload       # explicitly authorize this one working-diff check
npx lockstep-cli check --base main --upload
npx lockstep-cli checks on            # enable automatic hosted checks for this checkout
npx lockstep-cli checks off           # disable them independently of the ledger

For non-interactive runs, authenticate first and use --yes to proceed beyond preview:

npx lockstep-cli onboard --yes --no-docs --disable-checks
npx lockstep-cli onboard --yes --upload-docs --docs CLAUDE.md,docs/adr/auth.md --disable-checks

--yes approves setup; it does not authorize document uploads or enable hosted checks. --no-docs skips documentation import, while --upload-docs explicitly authorizes uploading the selected candidate documents (--docs narrows that selection). Neither skips the repository scan and graph setup. Non-interactive imports remain drafts for dashboard review. Use --enable-checks or --disable-checks to set check consent explicitly; otherwise saved consent is retained.

Checks are advisory and report completed, partial, skipped, or unavailable. Missing providers or applicable rules do not produce a pass. Automatic checks have a six-second API deadline and never block Claude. Raw diff hunks are processed transiently; stored results contain status, decision references, locations, and feedback.

Onboarding respects LOCKSTEP_API_URL and saved API settings; hosted is the default only when neither exists. Generated Claude commands use a version-pinned npm invocation, so a global Lockstep installation is unnecessary. Decision packs stay local and Git-ignored.

For product managers

Start with a brief, without a repo, CLI, or developer. Sign in with GitHub at the dashboard, then:

  1. Create a project. Use Start with one product brief on the dashboard home page. New pilot projects enable the product layer; joining an existing project preserves its settings.

  2. Paste your brief in Sources. Give it a title and, optionally, a feature reference such as feature:private-exports. Save it and inspect the extracted requirements alongside their source evidence. If extraction is unavailable, open the saved brief and use Select requirements manually to choose exact source passages.

  3. Review and ratify. Inspect the source, set its state to active when ready, and edit, reject, or ratify requirements through Review and Decisions. Drafts and questions remain distinct from accepted requirements.

  4. Use the implementation brief. Open the source and choose Preview implementation brief, review the Markdown, then Copy implementation brief. It includes accepted requirements, rationale and source references, drafts, unresolved questions, and recorded concerns. You have a useful handoff before anyone installs Lockstep.

  5. Revise with history. Edit the saved source when the product brief changes. Previous source versions remain available; changed requirements return to review before the accepted brief is regenerated. Pasted briefs are manually maintained, not synchronized with an external document.

  6. Invite a developer when ready. Use Members & Repos to invite their GitHub handle to this exact project. Share the brief and its project/feature connection command. Their Claude sessions can then receive the relevant ratified requirements.

For example, a PM can start with “exports expire after 24 hours; internal previews are exempt; bulk downloads are out of scope.” Review those requirements, leave “Should expiry be configurable?” as an unresolved question, and copy the implementation context before involving engineering.

Once development is connected, use the existing decision, feature, check, and activity views to review recorded context and concerns. Delivered requirements and no recorded concerns do not mean a feature is complete. Useful-concern, false-positive, and intentional-exception feedback does not silently change a decision.

Copying Markdown does not publish it, send a message, or grant access. Dashboard links remain authenticated. A product colleague joining a developer-created project uses the same dashboard and ledger, with no CLI setup.

Join an existing project

After the project owner invites your GitHub handle, sign in again to activate the invitation. Developers connect their repo to the supplied project ID:

npx lockstep-cli onboard --project-id <project-id> --feature feature:private-exports

Omit --feature when no feature is selected. This reuses the project's ledger and history. Each developer installs personal Claude hooks; product colleagues work in the dashboard.

For teams and self-hosting

Existing B2B integrations, roles, review requirements, and GitHub PR checks remain available. The new semantic code checks are advisory; they do not replace the existing contract gate. The individual pilot starts with Claude Code; other adapters are deferred.

Onboarding already runs scan --apply to establish lockstep.yaml and seed the surface graph. When routes or dependencies change, use npx lockstep-cli scan to preview updates and npx lockstep-cli scan --apply to merge and sync them. The standalone command also retries a scan that was incomplete during onboarding. See lockstep.example.yaml. Independent login, init, connect, scan, and pack commands remain available.

git clone https://github.com/lockstep-team-agent/lockstep.git
cd lockstep
cp .env.example .env
docker compose up --build   # Postgres + API (:8080) + dashboard (:3000)

Point the CLI at your server:

npx lockstep-cli login --api http://localhost:8080

For local development with the dev-login bypass enabled, use:

npx lockstep-cli login --api http://localhost:8080 --dev --dev-id 1 --dev-login alice

The API needs an extraction provider (ANTHROPIC_API_KEY, or the existing TYPESAFE_API_KEY provider) for automatic imports, and TYPESAFE_API_KEY for advisory checks. Manual requirements remain usable without extraction. Set LOCKSTEP_CHECKS_ENABLED=0 to disable semantic checking server-side without disabling the ledger or existing B2B PR checks.

For production, configure real GitHub authentication, set NODE_ENV=production and LOCKSTEP_DEV_LOGIN=0, apply migrations, and verify provider configuration, request limits, backups, and both onboarding paths. See DEPLOY.md.

What flows through Lockstep

Object

What it is

Decision

A durable rule or architectural choice. The hero. Impact-ranked, versioned (CAS).

Change

A routine event on a canonical surface. Routed to consumers by blast radius.

Question

A cross-team ask, ideally answered from the ledger before a human is pinged.

Task

Delegated work, fanned out to the assignee's inbox.

Standards & Skills (organizations) — Claude Code pilot

Behind LOCKSTEP_STANDARDS=1 (see DEPLOY.md), an organization can define how agents should work and prove what reached each checkout. This is a Claude Code pilot, not the complete PRD: pausing/resuming a rollout, Codex, enrolling a repo-free PM workspace, readiness checks for a skill's declared tools, owner reassignment and linking supporting decisions in the standard editor, and author-facing conflict flagging are not built yet. The Map graph shows the first page of an expanded domain (the Outline lists everything).

  • Standards & Skills — versioned standards (requirements with stable keys and required/recommended levels), skills authored in Lockstep or imported from a public GitHub repo at an exact commit, and checks (PRD sections, PRD rubric, advisory code review). Published versions are immutable; members draft and propose, owners/admins publish.

  • Rollouts & Adoption — assign exact versions by project, repository, team or person, path and task type; preview the impact before applying; pilot, expand, roll back, retire or withdraw. Adoption reports coverage, installation, session availability, invocation (reported as unobservable where the agent can't show it) and check outcomes separately.

  • In the work — enrolled checkouts (lockstep enroll) receive managed skills in .claude/skills/lockstep-org-*/ (kept out of git, verified by hash, never executed, never overwritten when edited locally). Session briefings list the applicable requirements with exact versions and point to the relevant skills; the copyable project brief carries the same for repo-free PRD work. Exceptions are requested and approved per requirement, bind to the exact published version (a new version needs a new review), and expire on their own.

Agent

Install managed skills

Session availability

Invocation

Checks

Claude Code (verified on 2.1.281)

Yes — .claude/skills/lockstep-org-*/

Yes — which versions a session started with

Unobservable

Code-diff via lockstep check consent; PRD checks in the dashboard

Codex

Not supported yet

—

—

—

Agents & integration

The individual pilot supports Claude Code only, with session-start briefings, MCP tools, local decision packs, and optional completion checks. Explicit CLI/MCP operations remain available if hooks are unavailable. No model calls run after every edit.

The ledger remains vendor-neutral and the existing team integrations are retained. Codex and other individual-onboarding adapters are deferred.

CLI Commands

Use npx lockstep-cli <command> without installing a global binary, or lockstep <command> if installed globally.

Command

What it does

onboard [--project-id <id>] [--dry-run]

Preview inputs, connect, scan the repo, review decisions, and configure Claude

onboard --yes --no-docs

Proceed past setup confirmation and skip documentation import

onboard --yes --upload-docs [--docs <paths>]

Approve setup and document upload; optionally narrow candidates with comma-separated paths

login [--api <url>]

Authenticate with GitHub and optionally save your server

init --vendor claude

Configure Claude independently of onboarding

connect [--project <name>] [--project-id <id>]

Create or join the intended project

scan [--apply] / sync

Preview/apply a dependency manifest, or sync the existing manifest

pack [--check]

Refresh the local decision pack or check its freshness

check [--base <revision>] [--upload]

Check tracked changes against relevant accepted decisions

checks on / checks off

Enable or revoke automatic hosted diff checks

brief

Print a copyable project decision brief

invite <github-handle>

Invite a colleague to the connected project

status / doctor

Inspect configuration, connection, and verification status

uninstall [--dry-run]

Remove Lockstep-managed Claude entries while retaining ledger history

enroll [--yes]

Opt this checkout in to your organization's managed skills (Standards & Skills)

skills [status|sync|restore|keep|accept|decline|unenroll]

Sync or resolve managed org skills; sync also runs at every session start

Project Structure

packages/core/   # Fastify API + PostgreSQL (Drizzle ORM), RLS-isolated, append-only ledger
packages/cli/    # lockstep-cli — onboarding, continuity, advisory checks, MCP server
packages/web/    # Next.js dashboard — briefs, review, decisions, features, team workflows
actions/pr-check # GitHub Action — PR-time reconciliation gate

Learn more

  • Deploy · Contributing · Security · Changelog

  • Built on row-level-security Postgres, an append-only CAS-versioned decision ledger, and vendor-neutral MCP adapters. Self-host with docker compose or deploy to Railway.

License

Apache 2.0 &copy; 2026 Naman Jain

Available Tools

20 tools
ack_decisionA

Acknowledge a decision version. An ack or approve verdict (default ack) moves an open decision to binding. Records your review in the audit trail either way and returns the decision status. Use for a decision proposed by someone else that is awaiting acknowledgement; use propose_decision to create or change one, and decisions to find ids and versions.

NameRequiredDescriptionDefault
verdictNoYour verdict. ack (default) or approve binds an open decision; any other value is recorded but does not bind it.
versionYesThe decision version you are acknowledging, as shown by decisions.
decisionIdYesId of the decision, as returned by decisions or propose_decision.

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 full load and does much of it: it discloses that ack/approve binds an open decision, that the review is recorded in the audit trail regardless of verdict, and that the decision status is returned. It stops short of stating permissions required, idempotency, or what happens when the decision is not open, which keeps it from 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.

Conciseness5/5

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

Three tightly written sentences, zero waste, with the core action and its effect front-loaded before the sibling routing. Every clause earns its place.

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

Completeness4/5

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

For a three-parameter mutation with no annotations and no output schema, the description covers the action, its side effect on decision state, audit recording, and the return value (decision status). Only edge cases such as already-bound decisions or permission requirements are unaddressed.

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 all three parameters are already documented in the schema, including the verdict default and the non-binding case. The description restates the verdict behavior but adds no syntax or format detail beyond the structured fields; baseline 3 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 opens with a specific verb and resource: 'Acknowledge a decision version.' It explicitly contrasts itself with siblings propose_decision and decisions, so an agent can distinguish it without opening any schema.

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

Usage Guidelines5/5

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

It names the exact triggering condition ('a decision proposed by someone else that is awaiting acknowledgement') and routes the agent to alternatives for the adjacent tasks: propose_decision for creating/changing and decisions for finding ids and versions. Nothing is left to inference.

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

ack_inboxA

Mark inbox items as read by id. With no ids, marks every unread item in this session's inbox. Returns the acknowledged count. This only clears inbox items; to respond to a decision use ack_decision, and to reply to a question use answer.

NameRequiredDescriptionDefault
itemIdsNoIds of the inbox items to mark read, as returned by inbox. Omit to mark every unread item.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden and explains the mutation target, the important default-all-unread behavior, the return value, and boundaries versus sibling tools. It does not mention permission requirements or whether marking read is reversible, so it is strong but 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?

Three concise sentences with the core operation front-loaded, followed by default behavior and sibling-tool routing. Every sentence adds useful selection or invocation context.

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 single optional array parameter, no output schema, and no annotations, the description covers the action, default behavior, return value, and alternatives sufficiently for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, so the parameter is already documented. The description reinforces that omitting itemIds marks every unread item and clarifies session scope, but adds no syntax or format detail beyond the schema baseline.

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 and resource: mark inbox items as read by id. It also scopes the no-id behavior to this session's inbox and explicitly distinguishes itself from ack_decision and answer.

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: pass ids to mark specific items, omit ids to mark every unread item. It also names alternatives for related actions, saying to use ack_decision for decisions and answer for questions.

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

answerA

Answer a question from the project's inbox by its questionId. Records the response as an answer, marks the question answered and returns the answer id and status. Use ask to raise a question; answer is only for replying to one. Writes a permanent record; the call does not check that the question is still unanswered, so a second call adds another answer.

NameRequiredDescriptionDefault
responseYesThe answer text, plain prose. Be specific; it is stored and shown to the asker as written.
questionIdYesId of the question to answer, as shown in the inbox item or returned by ask.

TDQS

A4.6/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 load and does it well: it discloses this is a write ('records', 'marks the question answered'), that the record is permanent, and critically that there is no still-unanswered check so repeat calls create duplicate answers. It also states what is returned (answer id and status), covering the non-idempotency risk an agent would otherwise miss.

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?

Four tight sentences, front-loaded with the purpose and effect before the sibling routing and the duplicate-call caveat. No filler, though the return-values clause could be trimmed slightly since it is minor relative to the rest.

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 2-parameter mutation with no annotations and no output schema, the description supplies everything needed: what it does, what it writes, what it returns, when not to use it, and the duplicate-answer hazard. Nothing an agent needs in order to call it correctly is missing.

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 both parameters are already documented in the schema, including what the response text should look like. The description adds only the framing 'by its questionId' and nothing about format or validation beyond that, so the schema is doing the heavy lifting – baseline 3 is correct.

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

Purpose5/5

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

States a specific verb (answer) and resource (a question in the project's inbox), plus the full effect: records the response, marks the question answered, returns the answer id and status. It also explicitly distinguishes itself from the sibling 'ask', so an agent can route without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative ('Use ask to raise a question') and the exclusion ('answer is only for replying to one'), which fully resolves the ask-vs-answer decision. The questionId requirement in the first sentence further anchors when this tool applies.

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

askA

Ask the project a question, optionally tied to a scope. It is delivered to the project's inboxes; urgent flags it. Returns the question id and status. Use for a question that needs a person or another team to reply; try query first, since it searches existing answers without notifying anyone. Replies are recorded with answer.

NameRequiredDescriptionDefault
scopeNoOptional scope reference the question relates to, for example a surface like http:GET /orders/:id. It is recorded as a surface scope. Omit for a project-wide question.
urgentNoTrue to flag the question as urgent in recipients' inboxes. Default false.
questionYesThe question to send to the project, in full sentences with enough context to be answered on its own.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the load and does disclose the key side effect: the question is delivered to recipients' inboxes and urgent elevates it, i.e. this is a notifying write operation. It also discloses the return payload (question id and status). It stops short of stating anything about permissions, rate limits, or whether the call waits for a reply.

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?

Four short sentences, front-loaded with purpose, then mechanics, then the routing decision. Every sentence carries information, though the telegraphic fragments ('urgent flags it', 'Replies are recorded with answer.') read slightly clipped compared with the rest.

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 three-parameter, no-annotation, no-output-schema tool, the description supplies purpose, side effect, return shape, and the full ask/answer loop with the query alternative. Only the synchronous-vs-asynchronous question (does the caller wait for a reply?) is left unaddressed.

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's description already explains scope format, urgent default, and expected question content, so the schema does the heavy lifting. The description only echoes the existence of optional scope and the urgent flag without adding format or constraint detail beyond the schema. 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?

Opens with a specific verb and resource ('Ask the project a question'), then states the delivery channel (project inboxes), the urgent flag behavior, and the return value (question id and status). It is clearly separable from siblings: 'query' is named as the non-notifying alternative and 'answer' as the reply path.

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 routing is given: 'Use for a question that needs a person or another team to reply; try query first, since it searches existing answers without notifying anyone.' It names both the condition for use and the condition that selects the sibling instead, plus points to 'answer' for the reply half of the loop.

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

check_decisionsA

Check the working-tree diff against accepted decisions. Returns status skipped unless hosted diff checks are enabled (lockstep checks on). The optional base is the git ref to diff against. Uploads the diff of tracked changes (untracked files are not uploaded) to the Lockstep server and returns the findings: possible contradictions with accepted decisions, each with file, line and the rule. Findings are advisory; use decisions to read the decisions themselves.

NameRequiredDescriptionDefault
baseNoGit ref to diff the working tree against, for example origin/main. Defaults to HEAD (uncommitted changes only).

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does it well: it discloses that the diff of tracked changes is uploaded to a Lockstep server (untracked files are excluded), that a 'skipped' status is returned unless hosted diff checks are on, and that findings are advisory rather than blocking. These are exactly the side-effect and outcome traits an agent needs before calling.

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?

Four tight sentences, front-loaded with the purpose and scope, then the gating behavior, parameter note, and return shape. The parameter sentence is somewhat redundant with the schema but not wasteful enough to penalize heavily.

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?

Covers the upload behavior, the skipped-status path, the finding shape (file, line, rule), and the advisory nature — all important for a tool with no output schema. Minor gaps remain around required permissions or configuration for enabling lockstep checks, but the agent has enough to act 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 coverage is 100% and the schema already documents `base` with its default of HEAD. The description only restates 'the optional base is the git ref to diff against', adding no format guidance or examples beyond the schema. Baseline 3 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?

Opens with a specific verb+resource: 'Check the working-tree diff against accepted decisions.' It also names the sibling `decisions` for the adjacent read-the-rules task, so the agent can tell the two apart without opening either schema.

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

Usage Guidelines4/5

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

The description gives a clear context (working-tree diff checking) and routes the agent to `decisions` when it wants to read the decisions themselves. It doesn't state explicit when-not-to-use conditions or a workflow point (e.g. before commit), 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.

completeA

Mark a task closed by its taskId. The optional note is accepted but not currently stored. Sets the task to done and closed and returns the status; the call does not check who the assignee is. Use for a task created with delegate.

NameRequiredDescriptionDefault
noteNoOptional completion note. Currently accepted but not stored, so put anything important in notify or answer instead.
taskIdYesId of the task to close, as returned by delegate or shown in the inbox.

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 load and does so well: it discloses that the note is accepted but not stored, that the task is set to both done and closed, that a status is returned, and that no assignee check occurs. Remaining gaps are idempotency (calling twice) and behavior on an invalid or already-closed taskId.

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?

Short and front-loaded: the action comes first, then the note caveat, then the behavior and the routing advice. Slight redundancy with the schema's own note description keeps it from being maximally tight.

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 mutation with no annotations and no output schema, the description covers the write semantics, the no-op parameter, and the return value. Only edge-case behavior (errors, repeat calls) is left unstated.

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 schema already documents both parameters in detail, including that note is not stored. The description largely restates that, adding only the hint to put important content in notify or answer, which is already in the schema text. Baseline 3 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?

States a specific verb and resource ('Mark a task closed by its taskId') and pins the scope to tasks created via delegate, which separates it from sibling tools like ack_inbox or ack_decision. An agent can tell what it accomplishes without opening the schema.

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

Usage Guidelines4/5

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

'Use for a task created with delegate' gives a clear trigger condition tied to a named sibling. It does not say when NOT to use it, e.g. whether it works on tasks from other sources or what to call instead for non-delegated items.

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

consumersA

List the repos that consume a surface, from the declared-dependency graph. Read-only. Only dependencies declared with register_dependency or found by scanning appear. Use before changing a surface to see who is affected; use whoowns for file owners.

NameRequiredDescriptionDefault
surfaceYesSurface to look up, for example http:GET /orders/:id.

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 still declares 'Read-only' and, more valuably, discloses a coverage caveat: only dependencies registered via register_dependency or found by scanning appear, so results may be incomplete. It does not describe behavior for an unknown surface or result ordering, keeping it short of a 5.

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

Conciseness5/5

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

Four short sentences, each carrying distinct information: purpose, safety profile, data-coverage limit, and routing guidance. The core purpose is front-loaded and nothing is repeated.

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 single-parameter read tool with no output schema and no annotations, the description covers purpose, safety, data provenance, and the sibling alternative. It leaves the shape of returned repos (names, paths, relationship metadata) and the empty-result case implicit.

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?

Only one parameter and schema description coverage is 100%, with the schema's own example ('http:GET /orders/:id'), so the schema does the heavy lifting. The description adds conceptual framing (a 'surface' lives in the dependency graph) but no syntax or format detail 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?

States a specific verb and resource ('List the repos that consume a surface') plus the data source ('the declared-dependency graph'), which is enough to distinguish it from siblings like whoowns. An agent can tell what it retrieves without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit usage trigger ('Use before changing a surface to see who is affected') and names the alternative for the adjacent question ('use whoowns for file owners'). Both when-to-use and when-to-use-something-else are covered.

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

decisionsA

List the project's decisions, optionally filtered by scope. Read-only. Returns each decision with its id, scope, status (for example open or binding), version, rule text and review fields. Use query to search by topic instead, and check_decisions to test a diff against decisions.

NameRequiredDescriptionDefault
scopeNoOptional scope reference to match exactly, for example http:POST /session or a repo name. Omit to list every decision in the project.

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 full burden and does well: it declares read-only behavior and enumerates the returned fields (id, scope, status such as open/binding, version, rule text, review fields). It omits pagination/result-size limits and any auth or permission notes, which keeps it short of a 5.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action and scope, followed by return shape and then alternatives. Every sentence carries distinct information with no 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?

There is no output schema, and the description compensates by describing the returned decision fields and their possible statuses. The only meaningful gap for a list tool is pagination or result-size behavior, which is unmentioned.

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 scope parameter is already documented with an example and the omit-to-list-everything behavior. The description only restates that the filter is optional, adding no syntax or matching detail beyond the schema, so baseline 3 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?

States a specific verb and resource ("List the project's decisions") plus the filtering scope, and explicitly names two sibling tools it is not. An agent can distinguish it from query and check_decisions without inspecting any schema.

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

Usage Guidelines5/5

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

Gives explicit routing rules: use query to search by topic, use check_decisions to test a diff against decisions, and omit scope to list everything. Both the alternative and the condition that selects it are stated.

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

delegateA

Create a task from a description, with optional refs. The required to value is the assignee's GitHub login; if no member matches, the task is created with no assignee. Returns the task id and run state. Creates an open task and notifies the assignee through their inbox. Use complete to close it later; use ask instead if you only need an answer.

NameRequiredDescriptionDefault
toYesGitHub login of the assignee, for example octocat. If no member has that login, the task is still created with no assignee.
refsNoOptional JSON with related references (for example decision ids, surfaces or PR links). Stored with the task as given.
taskYesWhat needs doing, as a short title or sentence. Stored as the task title.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the side effect ('notifies the assignee through their inbox'), the lifecycle ('Creates an open task'), the fallback when no member matches the login, and the return shape ('task id and run state'). It does not mention permission/auth requirements or whether repeated delegation creates duplicates, which keeps it below 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?

Front-loaded with the core action, then behavior, then routing in roughly priority order; every sentence carries information. Minor redundancy in re-explaining the assignee fallback already covered by the schema drops it one point.

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 3-parameter mutation tool with no annotations and no output schema, the description covers creation semantics, side effects, assignee fallback, and return values. Only durability/permission concerns are absent, which is a small gap given the tool's simplicity.

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's parameter notes ('required to value is the assignee's GitHub login', 'optional refs') largely restate what the schema already documents, and it adds no format or constraint detail beyond the existing schema text.

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

Purpose5/5

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

States a specific verb and resource ('Create a task from a description, with optional refs') and immediately names the sibling tools it is not (complete for closing, ask for queries). An agent can distinguish it from ask/complete without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes to alternatives with conditions: 'Use complete to close it later; use ask instead if you only need an answer.' That is a clear when-to-use and when-not-to-use split against the two most confusable siblings.

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

get_product_contextA

Return the full product constraints and governed surfaces for a capability, surface or text scope, plus project principles. Constraints are empty when the product layer is off for the project. Read-only. Use before building a feature to learn the product rules for it.

NameRequiredDescriptionDefault
scopeYesCapability reference, surface or free-text scope to fetch constraints for.

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 the full burden: it does useful work by declaring "Read-only" and warning that constraints come back empty when the product layer is off. However, it says nothing about permissions, response shape, or what a "governed surface" item looks like, leaving meaningful behavioral gaps for a query tool.

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

Conciseness5/5

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

Three tight sentences with the return content front-loaded, followed by the empty-result caveat and the usage trigger. Nothing is redundant and every sentence earns its place.

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

Completeness4/5

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

For a single-parameter read with no output schema and no annotations, the description covers what is returned, the empty-state condition, and when to call it. The missing piece is any indication of response structure, which matters slightly given there is no output schema.

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 sole parameter is fully documented there, so the baseline is 3. The description's "capability, surface or text scope" echoes the schema's "Capability reference, surface or free-text scope" without adding format, example, or resolution rules.

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

Purpose4/5

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

States a specific verb ("Return") and a specific resource ("product constraints and governed surfaces ... plus project principles"), which is concrete enough to distinguish it from siblings like check_decisions or set_feature_context. It stops short of explicitly naming a sibling to contrast against, so it is clear but not fully differentiated.

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

Usage Guidelines4/5

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

"Use before building a feature to learn the product rules for it" gives an explicit trigger and timing, which is exactly the context an agent needs. There are no exclusions or named alternatives (e.g., when to prefer check_decisions), 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.

inboxA

List this session's unread inbox items: changes, questions, tasks, decisions and conflicts. Does not mark them read; use ack_inbox for that. Use query instead to search the ledger by topic, and decisions to list decisions.

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, the description carries the behavioral burden and does well by stating "Does not mark them read; use ack_inbox for that," which discloses the key side-effect boundary. It also scopes results to "this session's unread inbox items," but does not elaborate on ordering, freshness, or whether repeated calls have any other effects.

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 tight sentences, front-loading the core purpose and following with behavioral and alternative-use guidance. Every clause earns its place, with no repetition or filler.

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

Completeness5/5

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

Given the tool has no parameters, no output schema, and no annotations, the description is complete enough: it states what is listed, the scope, the non-marking behavior, and sibling alternatives. An agent has sufficient information to invoke it correctly without additional context.

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 are no parameter semantics to document; the baseline for a parameterless tool is 4. The description does not need to compensate for schema gaps because the schema coverage is complete and no inputs exist.

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 and resource: "List this session's unread inbox items" and enumerates the item types (changes, questions, tasks, decisions, conflicts). It clearly distinguishes this tool from siblings by naming ack_inbox, query, and decisions as alternatives for different jobs.

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

Usage Guidelines5/5

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

It explicitly states when not to use this tool: use ack_inbox to mark items read, query to search the ledger by topic, and decisions to list decisions. These are concrete alternatives tied to specific user intents, leaving little ambiguity for an agent choosing among siblings.

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

notifyA

Publish a change to the project's change feed so other teams' agents see it. Use for something that already changed or is about to; use ask to pose a question and propose_decision to record a rule. Optionally tied to a surface (for example http:POST /session) with a contract delta. Risk tier owned publishes immediately; shared and contract changes wait for confirmation. Changes with a surface are delivered to repos that declared a dependency on it. Returns the change id, publish state, delivered count and impact (number of consuming repos).

NameRequiredDescriptionDefault
summaryYesOne-sentence description of what changed, written for other teams' agents.
surfaceNoSurface the change touches, for example http:POST /session. Repos that declared a dependency on it are notified.
diffHashNoOptional hash of the diff this change describes, stored for traceability.
riskTierNoowned (default) publishes immediately. shared and contract wait for confirmation before they are delivered.
verifiedNoTrue if you checked the delta against running code or tests. Default false, recorded as asserted but unverified.
capabilityRefNoCapability or feature reference to attach. Defaults to the one set with set_feature_context.
contractDeltaNoOptional JSON describing the contract change (for example old and new request or response shape). Stored with the change as given.
verifiedAgainstNoWhat you verified against, for example a test name or commit. Only meaningful with verified.

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 well: it discloses the confirmation gating per risk tier, the conditional fan-out to dependent repos, and what the call returns. It stops short of auth/permission requirements, idempotency, or what happens if a waiting change is never confirmed.

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

Conciseness4/5

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

Front-loaded with purpose in the first clause, then alternatives, then gating, then return shape – a sensible order with no filler. It is dense; the surface/delivery sentence partly restates the surface property description, which keeps it from a 5.

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?

Eight parameters but all fully described in the schema, and the description supplies what the schema cannot: the publish lifecycle, confirmation gating, delivery fan-out, and the return payload (change id, publish state, delivered count, impact) despite there being no output schema.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter meaning the schema does not: surface plus contractDelta are 'optionally tied', and a present surface changes delivery behavior to dependent repos. It also reinforces the riskTier default/confirmation split, going beyond the per-field text.

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?

Names a specific verb+resource ('Publish a change to the project's change feed') plus the beneficiary ('so other teams' agents see it'). It also differentiates itself from the two nearest siblings by name, so an agent can choose without opening any schema.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool ('something that already changed or is about to') and routes the two alternative cases to ask and propose_decision. The riskTier sentence further defines the gating condition (owned publishes immediately; shared/contract wait).

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

propose_decisionA

Propose a decision (rule, architecture or principle) for a scope, with optional rationale, rejected alternatives and review date. Uses optimistic concurrency: baseVersion must equal the decision's current version (0 for a new decision), otherwise the call fails with a conflict. Owner-scoped decisions bind immediately; shared or cross-cutting ones stay open until acknowledged.

NameRequiredDescriptionDefault
reviewAtNoISO date when the decision should be revisited, for example 2026-12-01. An invalid date is rejected.
ruleTextYesThe decision itself, stated as a clear rule others can follow.
scopeRefYesIdentifier within that kind, for example http:POST /session for a surface, a repo name, or a topic name.
rationaleNoWhy, in one or two sentences (the ADR context).
scopeKindYesWhat kind of thing the decision is about. Kinds used by the ledger are surface, repo, topic, project, capability, shared and contract; the value is not validated here.
baseVersionYesCurrent version of the decision for this scope, or 0 when proposing a new one. A stale value fails with a conflict; read decisions first to get it.
alternativesNoOptions considered and rejected, one string each.
decisionTypeNoKind of decision. Defaults to rule when omitted.
capabilityRefNoCapability or feature reference to attach. Defaults to the one set with set_feature_context.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses optimistic concurrency, the explicit conflict failure mode, and the binding semantics that differ by scope kind. It stops short of stating permissions/auth needs or what the proposal returns on success.

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

Conciseness5/5

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

Three tight sentences with no filler; the core action comes first, followed by the concurrency constraint and the lifecycle consequence. Every sentence carries information an agent needs.

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 mutation tool with no output schema and no annotations, it covers the risky parts well (versioning, conflicts, binding). The main gap is that nothing is said about what a successful call yields (identifier, resulting version), which an agent may need to follow up.

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 each of the 9 parameters is already documented, including baseVersion's conflict behavior and capabilityRef's default. The description adds only the version-conflict angle already echoed in the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Propose a decision') and enumerates the decision types (rule, architecture, principle) plus the scope it applies to. It is clearly distinguishable from read-side siblings like decisions/check_decisions, though it never names those siblings explicitly.

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

Usage Guidelines4/5

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

Gives concrete preconditions for calling: baseVersion must match the current version, use 0 for a new decision, and a stale value fails with a conflict. It also explains the post-call lifecycle (owner-scoped bind immediately; shared ones stay open until acknowledged), which tells the agent what proposing actually accomplishes.

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

queryA

Search the project's decisions, changes and answered questions for a natural-language question. The optional scope boosts matching results in the ranking rather than filtering them. Returns rows; the calling agent writes the answer. Read-only, nothing is sent to anyone; use ask when the ledger has no answer and a teammate should respond.

NameRequiredDescriptionDefault
scopeNoOptional scope reference (for example a surface, repo or topic) whose matches should rank higher. It does not exclude other results.
questionYesNatural-language question to search for, for example "how do we authenticate service calls?".

TDQS

A4.3/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 and does so well: it declares read-only behavior ('nothing is sent to anyone'), explains that `scope` boosts ranking rather than filtering, and states that it returns rows rather than an answer. It omits anything about result limits, pagination, or index freshness.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the verb and corpus, then the non-obvious scope semantics, then the safety and sibling routing. Nothing is padded or repeated.

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 two-parameter read tool with no annotations and no output schema, the description covers purpose, the counterintuitive ranking behavior, the row-level return shape, the read-only guarantee, and the alternative tool. An agent has everything needed to call it 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 both parameters are already documented. The description's note that scope boosts ranking rather than filtering largely restates the schema's own wording, so it adds little beyond the structured field despite being accurate.

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

Purpose5/5

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

States a specific verb (search) over a specific corpus (decisions, changes, answered questions) for a natural-language question. It also distinguishes itself from the sibling `ask`, which handles the case where the ledger has no answer.

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

Usage Guidelines4/5

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

Explicitly routes the agent to `ask` when no answer exists in the ledger and a teammate should respond, which is a real when-not rule. It gives no guidance relative to the other overlapping retrieval siblings (`check_decisions`, `decisions`), leaving that differentiation implicit.

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

refresh_decision_packA

Download the compiled decision pack and rewrite the generated local decision-pack skill in the working directory. Returns the pack hash, file path, whether the file changed and counts. Writes local files. Call when decisions may have changed and the local skill is stale; it does not change any decision on the server and takes no input.

NameRequiredDescriptionDefault

No parameters

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 the key side effect that it writes local files, plus that it does not mutate server decisions. It also lists return fields, though it does not cover overwrite semantics or error behavior in detail.

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 action, then side effects and return values, then usage condition. Every sentence contributes useful information without unnecessary repetition.

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

Completeness5/5

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

For a no-parameter tool with no output schema, the description is complete enough to call correctly. It explains the local write behavior, expected return fields, and the condition for use.

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

Parameters4/5

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

The tool has zero parameters, and the description explicitly states that it takes no input. This matches the empty schema and avoids ambiguity, fitting the baseline for zero-parameter tools.

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

Purpose4/5

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

The description names a specific action and resource: downloading the compiled decision pack and rewriting the generated local decision-pack skill. It is clear enough to distinguish from a pure decision check, but it does not explicitly differentiate itself from siblings such as sync_skills.

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

Usage Guidelines4/5

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

It gives a clear invocation condition: call when decisions may have changed and the local skill is stale. It also clarifies that it does not change server-side decisions and takes no input, though it does not name alternative tools or explicit when-not-to-use cases.

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

register_dependencyA

Declare that this repo consumes a surface (for example http:GET /orders/:id), so changes to that surface are delivered to this repo. producedRepoId optionally names the producing repo. Repeating the same declaration is harmless. Changes to a declared surface then reach this repo through notify and its inbox. Use consumers to see who depends on a surface.

NameRequiredDescriptionDefault
producedRepoIdNoOptional id of the repo that produces the surface, when known.
producedSurfaceYesSurface this repo depends on, for example http:GET /orders/:id.

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 burden and does disclose key behaviors: declarations are idempotent ('Repeating the same declaration is harmless') and change delivery happens through notify and the inbox. It omits authorization/error behavior and return semantics, so it is strong but not complete.

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 definition is front-loaded and appropriately brief, but it repeats the delivery concept twice ('changes ... are delivered to this repo' and 'Changes ... then reach this repo through notify and its inbox'). That redundancy keeps it from being maximally concise.

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

Completeness4/5

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

For a two-parameter mutation tool with no output schema, the description covers purpose, idempotency, downstream effect, and the inverse sibling tool. It leaves return/confirmation behavior and permission requirements unstated, but the essential calling context is present.

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 both parameters are already documented in the schema. The description restates the optional nature of producedRepoId and repeats the producedSurface example but adds no syntax or validation details beyond the schema. 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 uses a specific verb ('Declare') and resource ('this repo consumes a surface'), gives a concrete example ('http:GET /orders/:id'), and distinguishes the tool from the inverse sibling tool 'consumers'. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

It establishes the context for registering a dependency and points to 'consumers' for the inverse query, but it does not explicitly say when not to use this tool or compare it against notify/inbox alternatives. The guidance is clear but not exhaustive.

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

session_briefingA

Return the continuity briefing for this session: what changed and what is binding, scoped to the current feature context when one is set. Read-only. Call at the start of a session or after being away; use inbox for unread items addressed to you and decisions for the full list.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description still declares 'Read-only' and discloses the conditional scoping behavior tied to feature context, which is the main non-obvious trait. It stops short of describing result shape or what happens when no feature context is set, so the behavioral picture is clear but not complete for a zero-annotation tool.

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

Conciseness5/5

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

Two sentences, front-loaded with the resource and payload, followed by usage and alternatives. Every clause carries information: scope, safety, timing, and sibling routing, with 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?

With no output schema and no annotations, the description must carry the burden, and it largely does by characterizing the briefing contents and scope. The remaining gap is return granularity or format, which an agent cannot infer, though this is minor for a simple read-only briefing call.

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

Parameters4/5

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

There are zero parameters, so the baseline is 4 and there is nothing parameter-level to explain. The description does add relevant context about an environmental input (the current feature context) that changes output, which is a useful substitute for parameter guidance.

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

Purpose5/5

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

States a specific verb and resource ('Return the continuity briefing for this session') and immediately defines the payload as 'what changed and what is binding,' which is far more informative than the tool name alone. It also names the scoping rule (current feature context when set), so an agent knows exactly what it will get.

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?

Gives explicit timing ('at the start of a session or after being away') and routes two related needs to named siblings: inbox for unread items addressed to you, decisions for the full list. This is explicit when-to-use plus alternatives, with no inference required.

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

set_feature_contextA

Set the active capability reference for this session. Writes local state and a feature-context file for the checkout's git remote when one exists. Later notify and propose_decision calls use it unless they pass their own capabilityRef. Call it when starting work on a feature; it changes only local state and never contacts the server.

NameRequiredDescriptionDefault
capabilityRefYesCapability or feature reference to make active for this session.

TDQS

A4.1/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 and largely meets it: it discloses that the tool writes local state plus a feature-context file tied to the git remote, and explicitly states it never contacts the server. It omits what happens when a context already exists (overwrite vs. merge) and whether a remote-less checkout degrades gracefully.

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?

Four short sentences, front-loaded with the action and followed by effects, dependencies, and the trigger condition. Every sentence carries information, though the closing 'changes only local state' partly restates the earlier 'Writes local state'.

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?

One required parameter, no output schema, no annotations: the description supplies the side effects, downstream coupling, and invocation timing an agent needs. Only edge-case behavior on repeat invocation or missing git remote is left unstated.

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 single capabilityRef parameter is already documented in the schema; the description adds only the notion that the value becomes session-active and is inherited by later calls. That is useful context but not syntax or format guidance, so the baseline of 3 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?

States a specific verb and resource: 'Set the active capability reference for this session.' It also delineates scope ('for this session') and distinguishes itself from session-scoped siblings that merely read or refresh state, so an agent can identify it without opening the schema.

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

Usage Guidelines4/5

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

Explicitly says 'Call it when starting work on a feature', giving a clear trigger condition, and explains the downstream relationship to notify and propose_decision (they inherit it unless they pass their own capabilityRef). It stops short of naming when not to call it or how it interacts with refresh_decision_pack, but the usage context is unambiguous.

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

sync_skillsA

Sync managed organization skills into this checkout. Returns not_enrolled unless the checkout was enrolled with lockstep enroll. Installed or updated skills load from the next session. Writes local files in the checkout. Takes no input; use refresh_decision_pack for decisions instead of skills.

NameRequiredDescriptionDefault

No parameters

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 full load and does well: it discloses that this mutates the local checkout ('Writes local files'), that effects are deferred until the next session, and that a not_enrolled status can be returned. It doesn't say whether existing/local skill edits are overwritten or whether the operation is idempotent, which matters for a file-writing tool.

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

Conciseness5/5

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

Four short sentences, zero filler, with the core action front-loaded and the prerequisite, side effect, and alternative following in order of importance. Each sentence carries distinct information.

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 zero-param, no-output-schema mutation tool, the description covers prerequisite, side effects, timing, and the sibling alternative. The remaining gap is what a successful return looks like (counts of installed vs updated skills), which there is no output schema to fall back on.

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?

Zero-parameter tool, so baseline is 4, and the description confirms 'Takes no input,' which matches the empty schema. Nothing further is needed.

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

Purpose5/5

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

States a specific verb (sync) and a specific resource (managed organization skills) into a named target (this checkout). It also explicitly distinguishes itself from a sibling by saying refresh_decision_pack is for decisions, not skills, so an agent can route correctly without opening schemas.

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

Usage Guidelines4/5

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

Gives a hard prerequisite (must be enrolled via lockstep enroll, otherwise not_enrolled) and names an alternative tool for the adjacent use case. What it lacks is a positive trigger telling the agent when in a session to call sync_skills, though 'skills load from the next session' hints it should be early.

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

whoownsA

Return the owners of a file path from the repo's current ownership snapshot (CODEOWNERS). Empty when there is no snapshot or no match. Read-only. Use before asking or delegating to find the right person; use consumers for who depends on a surface.

NameRequiredDescriptionDefault
pathYesRepo-relative file path, for example packages/api/src/routes/orders.ts.

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 behavioral burden, and it does cover the two things an agent most needs: the operation is read-only and the result is empty when there is no snapshot or no match. It stops short of describing the shape of the owner values (users vs. teams, single vs. list) or any permission/snapshot-staleness caveats.

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 short sentences: what it returns, the empty case, the safety profile, then the routing hint. Nothing repeats and the core behavior is front-loaded.

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 one-parameter read tool with no output schema and no annotations, the description covers return semantics and the empty case, which is enough to call it correctly. Only the exact shape of the returned owners is left unspecified.

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% with a single required parameter that is fully documented with an example, so the schema does the work. The description adds only an indirect reminder that the path belongs to the repo, which is baseline-level value.

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

Purpose5/5

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

States a specific verb and resource: return the owners of a file path from the repo's CODEOWNERS snapshot. It also names the adjacent sibling 'consumers' and what that one answers instead, so an agent can distinguish the two without opening schemas.

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?

Gives an explicit when ('use before asking or delegating to find the right person') and an explicit alternative with its selecting condition ('use consumers for who depends on a surface'). Routing between the two tools is fully resolved in the description.

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

Tool Schema Changelog

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

  1. 16 tool updatesv0.1.3
    • Changedack_decision3 fields changed
      • addedInput schema / properties / decisionId / description
        Added value: +"Id of the decision, as returned by decisions or propose_decision."
      • addedInput schema / properties / verdict / description
        Added value: +"Your verdict. ack (default) or approve binds an open decision; any other value is recorded but does not bind it."
      • addedInput schema / properties / version / description
        Added value: +"The decision version you are acknowledging, as shown by decisions."
    • Changedack_inbox1 field changed
      • addedInput schema / properties / itemIds / description
        Added value: +"Ids of the inbox items to mark read, as returned by inbox. Omit to mark every unread item."
    • Changedanswer2 fields changed
      • addedInput schema / properties / questionId / description
        Added value: +"Id of the question to answer, as shown in the inbox item or returned by ask."
      • addedInput schema / properties / response / description
        Added value: +"The answer text, plain prose. Be specific; it is stored and shown to the asker as written."
    • Changedask3 fields changed
      • addedInput schema / properties / question / description
        Added value: +"The question to send to the project, in full sentences with enough context to be answered on its own."
      • addedInput schema / properties / scope / description
        Added value: +"Optional scope reference the question relates to, for example a surface like http:GET /orders/:id. It is recorded as a surface scope. Omit for a project-wide question."
      • addedInput schema / properties / urgent / description
        Added value: +"True to flag the question as urgent in recipients' inboxes. Default false."
    • Changedcheck_decisions1 field changed
      • addedInput schema / properties / base / description
        Added value: +"Git ref to diff the working tree against, for example origin/main. Defaults to HEAD (uncommitted changes only)."
    • Changedcomplete2 fields changed
      • addedInput schema / properties / note / description
        Added value: +"Optional completion note. Currently accepted but not stored, so put anything important in notify or answer instead."
      • addedInput schema / properties / taskId / description
        Added value: +"Id of the task to close, as returned by delegate or shown in the inbox."
    • Changedconsumers1 field changed
      • addedInput schema / properties / surface / description
        Added value: +"Surface to look up, for example http:GET /orders/:id."
    • Changeddecisions1 field changed
      • addedInput schema / properties / scope / description
        Added value: +"Optional scope reference to match exactly, for example http:POST /session or a repo name. Omit to list every decision in the project."
    • Changeddelegate3 fields changed
      • addedInput schema / properties / refs / description
        Added value: +"Optional JSON with related references (for example decision ids, surfaces or PR links). Stored with the task as given."
      • addedInput schema / properties / task / description
        Added value: +"What needs doing, as a short title or sentence. Stored as the task title."
      • addedInput schema / properties / to / description
        Added value: +"GitHub login of the assignee, for example octocat. If no member has that login, the task is still created with no assignee."
    • Changedget_product_context1 field changed
      • addedInput schema / properties / scope / description
        Added value: +"Capability reference, surface or free-text scope to fetch constraints for."
    • Changednotify8 fields changed
      • addedInput schema / properties / capabilityRef / description
        Added value: +"Capability or feature reference to attach. Defaults to the one set with set_feature_context."
      • addedInput schema / properties / contractDelta / description
        Added value: +"Optional JSON describing the contract change (for example old and new request or response shape). Stored with the change as given."
      • addedInput schema / properties / diffHash / description
        Added value: +"Optional hash of the diff this change describes, stored for traceability."
      • addedInput schema / properties / riskTier / description
        Added value: +"owned (default) publishes immediately. shared and contract wait for confirmation before they are delivered."
      • addedInput schema / properties / summary / description
        Added value: +"One-sentence description of what changed, written for other teams' agents."
      • addedInput schema / properties / surface / description
        Added value: +"Surface the change touches, for example http:POST /session. Repos that declared a dependency on it are notified."
      • addedInput schema / properties / verified / description
        Added value: +"True if you checked the delta against running code or tests. Default false, recorded as asserted but unverified."
      • addedInput schema / properties / verifiedAgainst / description
        Added value: +"What you verified against, for example a test name or commit. Only meaningful with verified."
    • Changedpropose_decision9 fields changed
      • addedInput schema / properties / alternatives / description
        Added value: +"Options considered and rejected, one string each."
      • addedInput schema / properties / baseVersion / description
        Added value: +"Current version of the decision for this scope, or 0 when proposing a new one. A stale value fails with a conflict; read decisions first to get it."
      • addedInput schema / properties / capabilityRef / description
        Added value: +"Capability or feature reference to attach. Defaults to the one set with set_feature_context."
      • addedInput schema / properties / decisionType / description
        Added value: +"Kind of decision. Defaults to rule when omitted."
      • addedInput schema / properties / rationale / description
        Added value: +"Why, in one or two sentences (the ADR context)."
      • addedInput schema / properties / reviewAt / description
        Added value: +"ISO date when the decision should be revisited, for example 2026-12-01. An invalid date is rejected."
      • addedInput schema / properties / ruleText / description
        Added value: +"The decision itself, stated as a clear rule others can follow."
      • addedInput schema / properties / scopeKind / description
        Added value: +"What kind of thing the decision is about. Kinds used by the ledger are surface, repo, topic, project, capability, shared and contract; the value is not validated here."
      • addedInput schema / properties / scopeRef / description
        Added value: +"Identifier within that kind, for example http:POST /session for a surface, a repo name, or a topic name."
    • Changedquery2 fields changed
      • addedInput schema / properties / question / description
        Added value: +"Natural-language question to search for, for example \"how do we authenticate service calls?\"."
      • addedInput schema / properties / scope / description
        Added value: +"Optional scope reference (for example a surface, repo or topic) whose matches should rank higher. It does not exclude other results."
    • Changedregister_dependency2 fields changed
      • addedInput schema / properties / producedRepoId / description
        Added value: +"Optional id of the repo that produces the surface, when known."
      • addedInput schema / properties / producedSurface / description
        Added value: +"Surface this repo depends on, for example http:GET /orders/:id."
    • Changedset_feature_context1 field changed
      • addedInput schema / properties / capabilityRef / description
        Added value: +"Capability or feature reference to make active for this session."
    • Changedwhoowns1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Repo-relative file path, for example packages/api/src/routes/orders.ts."
  2. 3 tool updatesv0.1.2
    • Addedcheck_decisions
    • Addedsession_briefing
    • Addedsync_skills
  3. 17 tool updatesv0.1.0
    • First observedack_decision
    • First observedack_inbox
    • First observedanswer
    • First observedask
    • First observedcomplete
    • First observedconsumers
    • First observeddecisions
    • First observeddelegate
    • First observedget_product_context
    • First observedinbox
    • First observednotify
    • First observedpropose_decision
    • First observedquery
    • First observedrefresh_decision_pack
    • First observedregister_dependency
    • First observedset_feature_context
    • First observedwhoowns

TDQS

A3.9/5.0

Scored across 20 tools

Disambiguation4/5

Most tools have distinct resource/action targets, and descriptions explicitly cross-reference alternatives such as query vs ask, inbox vs decisions, and refresh_decision_pack vs sync_skills. Some read-oriented tools (session_briefing, inbox, decisions, query) overlap conceptually but remain distinguishable.

Naming Consistency3/5

Names are mostly lowercase snake_case and readable, but conventions are mixed: some are verb_noun (propose_decision, register_dependency), some are noun-only (inbox, decisions, consumers), and whoowns breaks the underscore pattern. The set is understandable but not predictably uniform.

Tool Count3/5

Twenty tools is heavy for a single MCP server and sits in the borderline 16-25 range. The broad collaboration domain justifies many capabilities, but the surface feels near the upper bound for easy agent selection.

Completeness3/5

Core areas such as decisions, inbox, questions, changes, dependencies, and context are covered, but lifecycle gaps remain: tasks only support delegate and complete without list/get/update, and changes or dependencies lack direct listing/removal operations. These are notable gaps that could force workarounds.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Shared, code-grounded memory for developers and their coding agents. Capture a learning once and the whole team plus every agent recalls it; memory is grounded in your code and stored as git-tracked JSON reviewed in PRs, with citations validated on write and stale memory withheld from recall. Works with any MCP client.
    11
    41
    GPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    Self-hosted Mem0 MCP server integrating Qdrant, Neo4j, and Ollama for semantic memory search, graph entity relationships, and memory management via OpenMemory API.
    6
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Self-hosted decision memory for AI coding agents. Captures decisions with the alternatives you rejected, and warns before an agent re-proposes a rejected approach.
    4
    81
    Apache 2.0