ADHD Progress Hub
Summary: ADHD Progress Hub is a self-hosted MCP server that tracks half-finished work threads, project progress, and reminders so coding agents can resume, avoid duplicate work, and nudge you later.
Capabilities:
Session resume & overview —
session_digestbuilds a start-of-session digest (stale/open threads, due reminders, progress wiki snippet);get_overviewgives compact counts, next-up work, and due reminders.Overlap checks —
check_overlapranks existing open threads against a task you're about to start, so you don't redo half-done work.Thread lifecycle —
upsert_threadcreates/updates one finishable outcome;upsert_progresscheckpoints state and syncs PROGRESS.md;pause_threadsaves a concrete resume step;mark_donecloses finished work;dismiss_threadsoft-closes abandoned work.Stale-work triage —
confirm_thread_relevantquiets "still relevant?" prompts,snooze_thread_triagedefers them (default 7 days); neither auto-dismisses.Next-up suggestions —
suggest_next_upsoftly ranks quiet/stale work with resume cues and optional energy or focus-project matching.Project registry —
list_projects,resolve_project(map workspace path → slug),register_workspace(folder → project, optionally with an open thread),upsert_project(title, path, repo, energy, parent nesting, forge targeting).Queued project changes —
rename_projectanddelete_projectqueue requests for human confirmation in/ui;list_pending_actionsshows what's awaiting approval.Reminders —
set_reminder(once/session/daily/random) andlist_reminders(withdue_onlyfor session start).OpenClaw bridge —
push_openclaw_memorysends a compact digest into configured OpenClaw memory for chat nudges away from the IDE.Guidance health —
report_guidance_healthrecords which Hub guidance versions a local client actually verified (rule/skill/agent guidance).Read-only by default — many tools carry
readOnlyHintand descriptions note side effects, so agents can inspect safely before writing.
Provides forge sync capabilities for Gitea: pushes wiki/progress files, mirrors threads as labeled issues, optionally attaches them to project boards, imports existing progress files, and polls cloud-agent issues to create threads.
Provides forge sync capabilities for GitHub: pushes wiki/progress files, mirrors threads as labeled issues, optionally attaches them to project boards, imports existing progress files, and polls cloud-agent issues to create threads.
ADHD Progress Hub
Self-hosted source of truth for half-finished plans, migrations, and setups — so coding agents (Cursor, Codex, Claude Code, …) can check overlap, save progress, and nudge you later.
Inspired by claude-adhd (see ATTRIBUTION.md). This project is tool-agnostic: MCP over Streamable HTTP (plus an optional local stdio transport) + REST, optional OpenClaw notifications, and an optional local transcript indexer (summaries only).
Screenshots
My work with Notes & context (projects rail, docked reader, Summarise):

Now | My work | Progress | Settings |
|
|
|
|
Gallery shots use dummy demo data (including a soft Quiet check-in). More UI detail: Dashboard · Notes & context.
Related MCP server: meridian
Why
You start a Proxmox migration / homelab setup / refactor in Cursor Cloud, continue on a Dev LXC, forget for a week, then rediscover a half-finished chat — or you don’t. The hub keeps:
Threads — open / blocked / done / dismissed work items
Progress wiki —
data/wiki/projects/<slug>/PROGRESS.mdOverlap checks — “am I about to redo something half-done?”
Reminders — once / session / daily / random
OpenClaw bridge (optional) — chat nudges + memory sync when you’re away from the IDE
Quick start
Docker Compose with a published image is the recommended persistent server install. See the full installation guide for a ready-to-copy Compose file, docker run, source/uv, upgrades, backups, reverse proxies, and client-only CLI installs. Every server setting is documented in the environment variable reference. Hub state (SQLite including project tags and scan-line cache, plus ai.json AI settings) lives under /data in the container — mount a named volume or bind there and keep ADHD_HUB_DATA_DIR=/data (see What lives under /data).
Docker from this checkout
The repository Compose file builds the current checkout:
cp .env.example .env # set a real ADHD_HUB_AUTH_TOKEN
docker compose up -d --build
curl -fsS http://127.0.0.1:8787/api/healthFor a released server without a source checkout, use ghcr.io/uniskela/adhd-hub:latest (or a pinned X.Y.Z) as shown in the installation guide.
Run from source with uv
cp .env.example .env # set ADHD_HUB_AUTH_TOKEN
uv sync
uv run adhd-hub serve --host 127.0.0.1 --port 8787Local MCP over stdio
For MCP clients that launch a local subprocess, the same Hub tool catalog can run over stdio:
adhd-hub mcp-stdioGeneric MCP config:
{
"mcpServers": {
"adhd-hub": {
"command": "adhd-hub",
"args": ["mcp-stdio"]
}
}
}Stdio is an optional local mode: it uses the configured Hub data directory and the same MCP tools, but it does not start the REST API, dashboard, or background scheduler. It has no bearer header because the MCP connection is the local child process itself. For a persistent/shared Hub, remote agents, OAuth, dashboard access, and scheduled reminders, keep using adhd-hub serve/Docker and the Streamable HTTP /mcp endpoint.
Published images (only after a manual release-PR merge by uniskela):
:latest,X.Y.Z, andX.Yon the Git tag created for that release (for example0.17.0,0.17)
Releases (Release Please): after uniskela manually merges a PR to main with Conventional Commits (feat:, fix:, feat!:…), Release Please opens or updates a release PR. It never auto-merges that PR. When uniskela manually merges the release PR, Release Please creates vX.Y.Z and then publishes the matching multi-architecture images. The publish workflow has no direct push, PR, or manual trigger. Squash merges use the PR title as the subject (body bullets do not count); keep titles conventional for release-surface work — see AGENTS.md / CONTRIBUTING.md.
Pre-1.0 bumps (see release-please-config.json): fix: → patch, feat: → minor, feat!: / breaking → minor (not 1.0.0 yet).
Documentation, chore, test, and CI-only merges do not open a release PR, even if their subject accidentally starts with feat:. A feature, fix, performance, revert, or explicit breaking-change subject reaches Release Please only when that commit changes a shipped runtime surface (src/, package metadata/lockfile, Dockerfile, or docker-compose.yml). A generated release PR continues through the tag-and-publish step after uniskela manually merges it.
docker pull ghcr.io/uniskela/adhd-hub:latest
docker pull ghcr.io/uniskela/adhd-hub:0.17.0Repo secrets for Docker Hub: DOCKERHUB_USERNAME, DOCKERHUB_TOKEN. GHCR uses GITHUB_TOKEN (packages: write).
Connect Cursor
Marketplace plugin (recommended for Cursor): install adhd-hub-cursorskill (Marketplace once published, or local/dev install of that repo). With a Hub already running, set plugin variables ADHD_HUB_MCP_URL ({base}/mcp) and ADHD_HUB_AUTH_TOKEN, then verify MCP tools and skills. That plugin ships the Hub rule + session/projects/env-check skills with Marketplace wiring; Hub remains the skill source of truth (Cursor plugin skill sync).
Project / CLI connect (monorepos, adhd-hub connect, or non-Marketplace setups): merge adapters/cursor-mcp.json into your MCP config (URL + bearer via ${env:ADHD_HUB_AUTH_TOKEN}), install the rule from adapters/cursor-rule.mdc into .cursor/rules/, and optionally install skills:
# Install from the published repository:
npx skills add uniskela/adhd-hub -g
# Or, while developing an unreleased local checkout:
npx skills add ./skills -gOr use adhd-hub connect … --agents cursor --cursor-rule --skills — see docs/connect.md.
Optional coding companions (i-have-adhd, Graphify, RTK, Superpowers, Context7, agent-browser, Serena): see docs/coding-companions.md. Choose only the tools that fit your workflow; Hub Settings → Agents & install and adhd-hub connect --with-* provide the supported opt-in install paths.
For calm, resumable project notes and plans, use the ADHD-friendly writing guide: one visible Now action, brief context, and a concrete return cue.
Documentation site: uniskela.com/docs/adhd-hub (Zensical via uniskela/.com). A GitHub Pages mirror stays at uniskela.github.io/adhd-hub until the Pages cutover. Preview locally with uv sync --extra dev && uv run zensical serve. The Pages workflow deploys only from main after uniskela merges documentation changes; it does not run for pull requests or manual dispatches.
MCP (recommended persistent/shared transport):
http://<host>:8787/mcpMCP (optional local subprocess transport):
adhd-hub mcp-stdioREST docs:
http://<host>:8787/docsUI:
http://<host>:8787/ui/
MCP tools
Tool | Purpose |
| Compact open threads (goal/focus/next/resume) + reminders |
| Rank open threads vs what you’re starting (goal/title/focus) |
| Map workspace path → project slug |
| Project registry (+ optional forge overrides) |
| Queue rename/delete for /ui confirmation (not applied immediately) |
| See delete/rename requests waiting for you |
| List unfinished work |
| Create/update a thread (one finishable outcome) |
| Update thread state + PROGRESS.md ( |
| Leave a concrete resume step |
| Close a known thread |
| once / session / daily / random |
Optional OpenClaw
Install the Hub skills for OpenClaw:
npx skills add uniskela/adhd-hub -g -a openclawPairing (recommended): In Settings → OpenClaw, click Start OpenClaw pairing, copy the prompt into OpenClaw, then Approve what it submits. OpenClaw never needs ADHD_HUB_AUTH_TOKEN — only the short pairing code. Full steps: OpenClaw connection and alerts.
Manual path: Enable private hooks on the OpenClaw gateway. Then in Settings → OpenClaw, save the webhook or agent URL, bearer token, alert schedule, stale age, cooldown, and alert size. Use Save & send test to verify the route.
The bearer token is encrypted before it is written to the Hub data directory and is never returned to the browser. Environment variables remain available for initial provisioning:
ADHD_HUB_OPENCLAW_WEBHOOK_URL=http://openclaw:18789/hooks/wake
ADHD_HUB_OPENCLAW_TOKEN=<OpenClaw hook bearer token>
# optional richer path:
# ADHD_HUB_OPENCLAW_AGENT_URL=http://openclaw:18789/hooks/agentEnvironment changes require a restart; web UI changes apply immediately. The stale-work job sends OpenClaw one concise, non-nagging reminder and stays quiet when there is no stale work. Keep both services on your LAN or Tailscale. See the OpenClaw guide for details.
Optional transcript indexer
On a machine that has local transcripts (does not upload raw chats — only heuristic summaries):
uv run adhd-hub index --dry-run
uv run adhd-hub indexRoots (override in config.toml [indexer]):
Cursor:
~/.cursor/projects/**/agent-transcripts/**/*.jsonlCodex:
~/.codex/sessions/**/*.jsonlClaude Code:
~/.claude/projects/**/*.jsonl
Homelab / Tailscale
See docs/deploy-homelab.md. Typical pattern: Docker on Proxmox LXC, publish :8787 on Tailscale, point Cursor Cloud + Windows + Dev LXC MCP clients at http://<tailscale-ip>:8787/mcp. When Cloud cannot join Tailscale, use a controlled HTTPS tunnel (Remote MCP access) or the forge mailbox — never anonymous /mcp.
Optional forge sync (GitHub / Gitea)
Open http://127.0.0.1:8787/ui/ after serve / compose. Project-first dashboard: pick a project, do Next up, Settings (token / timezone / forge) stays out of the way. Timezone defaults to your browser local zone on first visit (ADHD_HUB_TIMEZONE / data/prefs.json).
Wiki sync — pushes
INDEX.md+projects/<slug>/PROGRESS.md(primary memory: repo root; otherwise under Wiki path)Board sync — mirrors threads as Issues with labels
adhd-hub+project:<slug>; optionally attaches to a Gitea/GitHub project board idPrimary memory repo — seeds
README.md/AGENTS.md; leave Wiki path blank so files land atprojects/<slug>/(e.g.…/alex/projects/projects/adhd-hub)Import from forge — if the repo already has
projects/*/PROGRESS.md, Settings → Scan for import (or after Sync) offers to register missing projects and pull progress files
Configure in Settings or via ADHD_HUB_FORGE_* env / data/forge.json. Rename/delete projects from the project panel (delete is safe by default — progress/forge files only removed if you opt in).
Note: Hub “wiki” = normal markdown files in the repo (INDEX.md, projects/*/PROGRESS.md). That is separate from Gitea/GitHub’s built-in Wiki feature. Issues show under the Issues tab when board sync works. Projects boards only if you set a project id/number.
Cloud / remote mailbox: enable Import cloud-agent issues (inbox) and set Inbox authors (fail closed: empty allowlist imports nothing). The Hub polls open issues from those usernames that either have the adhd-hub label or a title starting with [ADHD] (Cursor Cloud, Codex/ChatGPT, Claude, etc.), creates threads, then closes them with adhd-hub-synced (never deletes). Title prefix is enough when agents cannot set labels. Optional source:* labels record the tool. Agents should use a short Goal/Focus/Next/Resume body and may append a Made-with footer under ## Attribution. See docs/forge-issue-inbox.md.
PAT permissions: see docs/forge-permissions.md for GitHub (fine-grained + classic) and Gitea scopes.
Privacy
Default store: SQLite + markdown wiki under
data/Auth: REST and MCP accept bearer tokens.
/ui/supports a separate dashboard password, withADHD_HUB_AUTH_TOKENfor initial setup and recovery. Both issue a 12-hour HttpOnly, SameSite=Strict session cookie; credentials are never stored in localStorage. See password setup and recovery. Log out revokes the session. Browser sessions are stored in SQLite (data/browser_sessions.sqlite3) and survive a restart; login throttles stay in process memory. HTTPS sets the Secure cookie flag (configure trusted proxy headers when terminating TLS upstream).Default-token development mode is allowed only with a loopback bind. Set a long random token before binding to
0.0.0.0; generate one withpython -c "import secrets; print(secrets.token_urlsafe(32))". Use HTTPS for remote access.Cookie-authenticated writes require
X-Hub-Request: 1and a matching Origin when present. CLI and MCP clients continue using bearer auth.Settings precedence is process environment, then the first nonempty TOML file (
--config,./config.toml, or~/.config/adhd-hub/config.toml), then.env.ADHD_HUB_PUBLIC_URLsets the externally reachable Hub base URL used for browser/deep links, forge links, install/connect output, and MCP OAuth discovery.Bind
127.0.0.1for local-only, or Tailscale-only — do not expose publicly without a reverse proxy / tunnel terminator and strong token (Remote MCP access)Migrate instances with
/uibackup zip or forge Import (see docs/deploy-homelab.md). Optional passphrase backups use a versioned envelope: new exports are salted scrypt + Fernet (v2); v1 SHA-256 passphrase files still decrypt.
Adapters
Tool | Snippet |
Cursor | Marketplace: adhd-hub-cursorskill; project: adapters/cursor-mcp.json, adapters/cursor-rule.mdc |
Codex | |
Claude Code | |
OpenClaw |
Add Hub guidance to another project
Install a reversible, project-local AGENTS.md section that keeps coding-agent sessions connected to the Hub:
adhd-hub setup /path/to/projectAdd --install-skills to install Hub skills (session, projects, env-check) globally for every skills.sh agent, or pass --skills-source /path/to/adhd-hub/skills while developing locally. Skill installation is opt-in because it changes global skill directories. Use connect --skills --agents ... when you want selected agent targets. See project agent setup.
Connect (one-liner)
With the Hub running and ADHD_HUB_PUBLIC_URL set for remote clients, copy the command from Settings → Agents & install (no server token in the command):
# macOS / Linux / WSL / Git Bash
curl -fsSL http://<hub-host>:8787/install.sh | sh -s -- /path/to/project# Windows PowerShell
irm http://<hub-host>:8787/install.ps1 | iexThe CLI opens your browser (or prints a one-time code). Press Allow this CLI. A session is saved on disk; do not export ADHD_HUB_AUTH_TOKEN into your profile for this step.
Install scripts prefer this Hub's /install/cli-wheel.url (a PEP 427 wheel matching the server), falling back to git+https. Choose agents in Settings → Agents & install (baked into /install.sh and /install.ps1), or pass --agents / ADHD_HUB_CONNECT_AGENTS. Hub alias claude maps to skills.sh claude-code; there is no Cursor-only default. Details: docs/connect.md.
adhd-hub doctor --hub http://<hub-host>:8787 --project /path/to/projectconnect and doctor print a scannable report: outcome banner and Hub URL, then Do next (success) or Fix these (failure). Color is on for a TTY unless NO_COLOR or ADHD_HUB_NO_COLOR is set. Layout: docs/connect.md.
adhd-hub connect merges MCP configs, writes the reversible AGENTS.md block, and can install Cursor rules, global skills, OpenClaw skills, register the project, and scan --find-roots.
To point an already-connected machine at a different Hub (for example localhost → HTTPS):
adhd-hub use-hub https://adhd-hub.example.com --project /path/to/project --agents cursor,codex,claudeRoadmap
The single public roadmap lives in docs/plans/improvement-roadmap.md. GitHub issue #15 is the canonical tracker when current status changes faster than the docs.
Current sequence:
Shipped — Foundation B3 #75 in v0.15.0 via #152: durable activity/event history, live UI invalidation, sync health and history.
Shipped — Wave 6 #52 in v0.16.0 via #159, #160, #161, and #162: heuristic and opt-in local LLM thread scan-lines, project tags, filters, last-touch cues, and organiser suggestions with confirm.
Now — Wave 7 #54: soft stale triage and calm Next-up ranking are on
main; merge/dedupe suggestions and return-cue coaching remain.Next — Wave 8 #55: progress compaction, local search, mobile capture and energy/context modes.
Then: activity insights #72.
Later: shared/discovery surfaces #56.
Deferred/opt-in: Slack/Discord/calendar integrations #20.
Independent maintenance: MCP schema quality #117 and the remaining CI lockfile cleanup #102.
Dashboard comfort
The dashboard includes light/dark/system themes, a focus view, quick task capture, and optional XP, levels, and daily goals. See dashboard preferences.
Development
uv sync --all-extras
uv run pytest
uv run ruff check src testsSee CONTRIBUTING.md.
License
MIT — LICENSE
Brand and rewards
See the brand guide for the logo, colours, and UI patterns. Current optional ranks, badges and shareable progress are documented in dashboard preferences; future public/competitive reward ideas are not part of the active roadmap.
Available Tools
23 toolscheck_overlapARead-only
Find open threads that may overlap a planned task.
Use before starting potentially new work. The query should describe the intended task, and the result is read-only; compare likely matches before creating another thread.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by stating the result is read-only and that the query should describe the intended task. It reinforces the readOnlyHint and clarifies the intended comparison workflow without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the purpose, and the second adds usage and read-only context. No filler or redundant explanation is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search tool with an output schema and annotations, the description covers when to use it, what the query should contain, and the read-only nature. The only minor gap is the unmentioned limit parameter, but the schema provides enough information for a competent agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the meaning of query ("should describe the intended task") but does not mention limit or its effect on result count. Limit semantics are left to inference from the schema's name and default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: "Find open threads that may overlap a planned task." It clearly distinguishes this from sibling tools like list_open_threads by focusing on overlap detection against a planned task, not just listing threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says "Use before starting potentially new work" and advises comparing matches before creating another thread. It does not name sibling alternatives or describe when not to use the tool, but the primary usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_thread_relevantA
Confirm a stale open thread is still relevant (Wave 7 soft triage).
Quiets the “still relevant?” prompt via reminder cooldown. Does not
change status and never dismisses. Use snooze_thread_triage to ask again
later, or dismiss_thread only when the human intentionally abandons it.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key side effects: 'Quiets the “still relevant?” prompt via reminder cooldown' and explicitly states what it does not do ('does not change status and never dismisses'). It does not mention error behavior or return format, but the output schema exists, and the side effects are adequately described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and then efficiently covers exclusions and alternatives. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with an output schema, the description covers purpose, side effects, and alternatives. It does not explain the parameter semantics or error conditions, but given the simplicity and available schema, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It never mentions thread_id, leaving its purpose and format implicit. The tool name and description imply it identifies the stale open thread, but the description does not explicitly explain the parameter, which is a gap given zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Confirm') on a specific resource ('a stale open thread') and places it in context ('Wave 7 soft triage'). It also clearly differentiates from siblings by stating what it does not do ('does not change status and never dismisses').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names alternatives and their conditions: 'Use snooze_thread_triage to ask again later, or dismiss_thread only when the human intentionally abandons it.' This gives clear when-to-use guidance and when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectA
Queue project deletion for human confirmation in /ui.
Nothing is deleted immediately. The flags describe what the confirmed
action should remove; use list_pending_actions to inspect the queued
request before confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| reason | No | ||
| delete_remote | No | ||
| delete_progress | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does well by explicitly stating that deletion is not immediate, that the action is queued for human confirmation, and that the flags only describe what a confirmed action will remove. It does not cover permissions, idempotency, or post-confirmation behavior, but the most critical non-obvious behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and each sentence adds value: the queue behavior, the non-immediate nature, the purpose of flags, and the inspection workflow. There is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deletion-queueing tool with an output schema available, the description is largely complete: it states the action, the confirmation step, and how to inspect pending requests. The main gap is the lack of per-flag parameter explanation, which is important for correct invocation, but the overall workflow context is strong enough to make the tool usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It references 'flags' generically but never explains what delete_remote or delete_progress actually control, nor does it describe the purpose of reason. The parameter names and defaults offer some hints, but an agent cannot reliably understand the semantics of each flag from the description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+context: 'Queue project deletion for human confirmation in /ui.' This clearly distinguishes it from direct or immediate project actions like resolve_project or rename_projectchers. The added detail that nothing is deleted immediately further sharpens the intended action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool: to queue a deletion that requires human confirmation. It also routes the agent to list_pending_actions for inspecting the queued request before confirmation. However, it does not explicitly state when not to use this tool or mention alternatives for direct deletion, so it misses the full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismiss_threadA
Soft-close a thread that should stop without being marked complete.
Use for abandoned, superseded, or no-longer-relevant work. Use mark_done
when the intended outcome was completed, or pause_thread when it will be
resumed later. Prefer confirm_thread_relevant / snooze_thread_triage for
a calm stale-work check — never auto-dismiss from those tools.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It conveys the core behavior (soft-close without marking complete) and distinguishes it from mark_done and pause_thread, but it does not disclose potential side effects like visibility changes, notifications, or reversibility. The description adds some context but lacks deeper behavioral detail expected for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero fluff. The core purpose is front-loaded, and usage guidance is tightly packed. Every sentence earns its place, and the structure reads naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values are covered. The description handles purpose and usage well, but given no annotations and 0% parameter coverage, it misses important details about parameter meaning and side effects. For a tool with only 2 parameters, this is a moderate gap, but the description is still functional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention either parameter (thread_id or note). The agent only has the schema's property definitions, which are minimal (just type and title). The description fails to compensate for the lack of schema documentation, leaving parameter semantics under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Soft-close a thread' and immediately defines the meaning ('stop without being marked complete'). It also explicitly names sibling tools (mark_done, pause_thread, confirm_thread_relevant, snooze_thread_triage) and distinguishes its purpose from each, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use conditions ('abandoned, superseded, or no-longer-relevant work') and when-not-to-use alternatives ('Use mark_done when the intended outcome was completed, or pause_thread when it will be resumed later'). It even warns against auto-dismissing from the stale-work check tools, giving clear routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overviewARead-only
Return a compact, read-only Hub overview for agents.
Includes counts, next-up work, and due reminders. Use session_digest when
you also need project-specific resume context or the progress wiki snippet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'read-only' is redundant but consistent. It adds value by disclosing the output scope (counts, next-up work, due reminders) and the compact nature, which goes beyond the structured annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core purpose and immediately followed by the alternative usage. No filler or repetition, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a read-only overview with no parameters and an output schema exists, the description fully covers what an agent needs to know: what it returns and when to use it instead of a sibling. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters, so the description is not required to explain any. The baseline for no parameters is 4, and the description correctly avoids unnecessary param detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states a specific action (return) and resource (compact, read-only Hub overview), and explicitly lists its contents (counts, next-up work, due reminders). It also names the sibling session_digest, making differentiation straightforward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool versus the alternative: 'Use session_digest when you also need project-specific resume context or the progress wiki snippet.' This directly tells the agent the selection condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_open_threadsARead-only
List unfinished threads without changing them.
Filter by project or energy when narrowing existing work. Use
session_digest when you want a session-start summary with reminders and
resume context instead of the raw thread list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| energy | No | ||
| project_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context such as 'without changing them' (aligning with readOnlyHint) and characterizes the output as a 'raw thread list.' It does not detail pagination or return format, but since an output schema exists, that information is available elsewhere. The description complements annotations without redundancy or contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loading the primary purpose and then providing usage nuance. Every clause earns its place: the read-only guarantee, the filtering hint, and the explicit alternative to session_digest. No redundancy or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read‑only list tool with three optional parameters and an output schema, the description covers the essentials: what it lists, that it is non‑destructive, when to use it, and when to prefer an alternative. It omits nitty‑gritty details like default limit or pagination, but those are covered by the schema and the output schema. The presence of the output schema lowers the burden, making this reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameters. It explicitly mentions filtering by 'project' and 'energy,' which correspond to project_slug and energy, but does not explain the limit parameter or the format of project_slug. Since limit is self-explanatory and energy has an enum, this partial coverage is adequate but not complete. The description adds some meaning beyond the schema's bare titles, but leaves the limit unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'List unfinished threads without changing them.' It specifies the exact scope (unfinished threads) and reinforces read-only behavior, which distinguishes it from mutation siblings like pause_thread or dismiss_thread. The mention of 'raw thread list' further clarifies the nature of the output, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use this tool vs. an alternative: 'Use session_digest when you want a session-start summary with reminders and resume context instead of the raw thread list.' It also advises filtering by project or energy for narrowing work, giving clear situational guidance. This is a model of usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pending_actionsARead-only
List project rename/delete requests waiting for /ui confirmation.
This is read-only and is useful after rename_project or delete_project to
show the operator exactly what remains pending.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the readOnlyHint by stating it is read-only and adds context about pending confirmation workflow state. This goes beyond the annotation by explaining that it surfaces actions awaiting confirmation after a rename or delete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core purpose and immediately follow with the operational context. No wasted words or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, a readOnlyHint annotation, and an output schema present, the description covers everything needed for correct invocation. The post-mutation use case completes the operational picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing the description needs to clarify beyond what the schema already shows. Baseline for zero parameters is satisfied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('project rename/delete requests waiting for /ui confirmation'). This clearly distinguishes the tool from siblings like get_overview, list_projects, and list_open_threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states this is useful after rename_project or delete_project, giving clear context for when to use it. It does not list exclusions or alternative tools, but the intended use case is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsARead-only
List registered Hub projects with open/done thread counts.
Use for project discovery or navigation. This is read-only; use
resolve_project or upsert_project when a project needs to be resolved or
changed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, and the description reinforces that with 'This is read-only', which is somewhat redundant. However, it adds useful behavioral context beyond annotations by stating the return content ('open/done thread counts') and the intended use case. It does not detail ordering, pagination, or error behavior, but given the read-only safety is already covered, this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two sentences with zero filler. The primary action is front-loaded ('List registered Hub projects...'), followed by usage guidance and alternatives. Every sentence earns its place, and the structure is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only list tool: it states what it does, when to use it, and which sibling tools are appropriate for other operations. Since an output schema exists, return values need not be explained. The description could mention the limit parameter or ordering, but those are minor given the tool's simplicity and the presence of schema constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description does not mention the 'limit' parameter at all. As the only parameter, 'limit' is self-explanatory given its integer type, default (100), min (1), and max (500). The schema provides sufficient constraints, but the description's lack of any mention means it does not compensate for the low coverage. Since the parameter is straightforward, this is acceptable but not ideal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List'), the resource ('registered Hub projects'), and the output content ('open/done thread counts'). It also distinguishes itself from sibling tools by explicitly naming 'resolve_project' and 'upsert_project' as the alternatives when a project needs resolution or change, so an agent can easily select the right tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('Use for project discovery or navigation') and explicit when-not-to-use guidance by stating it is read-only and directing the agent to 'resolve_project or upsert_project' for modification tasks. This leaves no ambiguity about situational appropriateness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remindersARead-only
List persisted Hub reminders without changing them.
Prefer due_only=true at session start to surface only reminders that need
attention now. Set include_handled=true only when historical handled
reminders are relevant.
| Name | Required | Description | Default |
|---|---|---|---|
| due_only | No | ||
| include_handled | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'without changing them' statement aligns with and reinforces the readOnlyHint annotation. It adds the 'persisted' qualifier but does not disclose much beyond what annotations already provide; this is acceptable since annotations cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and the core purpose is front-loaded in the first sentence, with parameter guidance following. Minor indentation whitespace is present but does not impede readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the two simple boolean parameters, a readOnly annotation, and an existing output schema that can document return values, the description covers the essential usage decisions. It is sufficiently complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining due_only as surfacing reminders needing attention now and include_handled as relevant only for historical handled reminders. This adds meaning that the bare boolean schemas lack.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a precise resource ('persisted Hub reminders'), and explicitly notes the operation does not change them. This clearly distinguishes it from mutation-oriented siblings like set_reminder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to set due_only=true ('at session start') and when include_handled=true is appropriate ('only when historical handled reminders are relevant'). Though it does not name alternative tools, the guidance clearly frames the intended use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_doneA
Close a specific thread when its finishable outcome is complete.
Use only with a known thread_id after the work is actually finished.
Use pause_thread for unfinished work that will resume later, or
dismiss_thread when intentionally abandoning it. note is an optional
completion note.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It communicates that this is a finalization action for completed work and that note is optional, but it does not disclose whether closing is irreversible, requires permissions, or what side effects occur on the thread state. Sibling contrast with pause_thread implies terminality without making consequences explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: the core action, the usage conditions with named alternatives, and the optional parameter note. Front-loaded with the primary action before routing details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter finalizer, the description covers when to call, what precondition must be met, alternatives, and parameter note semantics. Missing explicit behavioral consequences like reversibility are a small gap, but the output schema exists and operation scope is simple enough that the definition is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds that thread_id must be 'known' and that note is an 'optional completion note, but it does not add meaningful constraints like where thread_id comes from or how note is stored. Coverage is minimal but minimally adequate for two simple parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Close') and resource ('a specific thread') plus the completion condition ('when its finishable outcome is complete'). It distinguishes itself from pause_thread and dismiss_thread by naming them as different intent paths, so an agent can tell this tool apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance on when to use this tool and when not to, including named alternatives and their conditions: pause_thread for unfinished work and dismiss_thread for intentional abandonment. This is model-level routing guidance that goes beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_threadA
Pause unfinished work and save the concrete next action to resume it.
Use when the thread will continue later. This updates its pause/resume
state; use mark_done for completed work or dismiss_thread for work being
intentionally abandoned. Requires the exact thread_id and next_step.
| Name | Required | Description | Default |
|---|---|---|---|
| next_step | Yes | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It transparently states that the tool updates pause/resume state, which is the core side effect an agent needs to know. It does not discuss failure behavior or idempotency, but for a simple state-update tool this disclosure is mostly adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences front-load the primary purpose, then provide usage context, alternatives, and required inputs. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is not required. The description covers purpose, when to use, alternatives, and parameter roles for a simple two-parameter tool, leaving little critical information missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It adds meaning by describing next_step as a 'concrete next action to resume' and requiring an exact thread_id, but it doesn't define thread_id beyond its name or address error cases. It partially compensates but leaves some semantic detail to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('pause thread') and clearly states it saves a concrete next action. It also distinguishes itself from mark_done and dismiss_thread, which are named explicitly as alternatives. This makes the tool's unique role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use condition ('Use when the thread will continue later') and names the alternatives for completed vs abandoned work. It also states the precondition 'Requires the exact thread_id and next_step'. This fully guides selection and invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_openclaw_memoryA
Best-effort push of a short Hub digest into configured OpenClaw memory.
This has an external side effect and depends on the operator's OpenClaw
integration being configured. It sends a compact Hub-generated digest,
not raw chats; project_slug narrows it and note adds short context.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| project_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the operation has an external side effect, is best-effort, and depends on integration configuration. However, with no annotations at all, it leaves unspecified what happens if the integration is missing, whether the push can overwrite previous memory, or whether the operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and stays compact at three sentences. 'Short Hub digest' and 'compact Hub-generated digest' are slightly redundant, but the overall structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two optional parameters and an output schema, so return-value documentation is not necessary. The description covers the operation's purpose, content type, prerequisite integration, side effect, and parameter roles. The main remaining gap is failure behavior when the integration is not configured.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema coverage is 0% and no annotations exist, the description carries the burden of explaining the two parameters. It does so by saying project_slug narrows the digest and note adds short context, which adds real meaning beyond the bare schema. It could specify accepted formats or requiredness more explicitly, but the semantic roles are clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action ('push'), a target ('configured OpenClaw memory'), and a content constraint ('short Hub digest'). It also explicitly rules out raw chats, which helps distinguish it from potential sibling tools like session_digest or memory-write tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is for compact Hub-generated digests, not raw chats, and it requires the operator's OpenClaw integration to be configured. It does not name specific alternatives or articulate explicit when-not-to-use cases beyond raw chats, but the usage context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_workspaceA
Register a local folder as a Hub project in one operation.
Side effect: this persists the workspace/project mapping and, when
create_open_thread=true, also creates a default open thread. Use
resolve_project when you only need to resolve an already-known workspace
or want optional lookup-with-create behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| summary | No | ||
| source_tool | No | mcp | |
| workspace_path | Yes | ||
| create_open_thread | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It explicitly discloses the side effect of persisting the mapping and the conditional thread creation tied to create_open_thread. It could add specifics about idempotency or error cases, but the main behavioral implications are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a clear role: purpose, side effect, and alternative. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a registration tool with an output schema, it covers the core action, side effects, and key alternative, and it mentions the one behavior-affecting parameter. It could be more complete by noting whether registration overwrites existing mappings or requires path validation, but these are not critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only explains create_open_thread's conditional behavior. workspace_path, title, summary, and source_tool receive no semantic explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Register') and resource ('local folder as a Hub project') and clarifies that this is a single combined operation. It distinguishes itself from resolve_project by emphasizing registration and persistence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use resolve_project when only resolution or lookup-with-create is needed, making the boundary between the two tools clear. It also implies this tool is for cases where the workspace/project mapping must be persisted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_projectA
Queue a project rename for human confirmation in /ui.
Use when the project identity should change. This request does not apply
the rename immediately; list_pending_actions shows queued confirmations.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| title | No | ||
| reason | No | ||
| new_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It transparently discloses that the action is queued, not immediate, and requires human confirmation, and points to where pending confirmations appear. It doesn't discuss permissions or reversibility, but for a queued operation, this level of disclosure is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It uses two short paragraphs with clear separation of the primary action and the important caveat about queued confirmations, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters with zero schema coverage and no output schema explanation (though one exists), the description leaves the agent without guidance on parameter specifics. It also omits any prerequisites, such as whether the project must exist or whether the new slug must follow a format. For a tool with this complexity, the description is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description offers no explanation of the parameters (slug, new_slug, title, reason). While parameter names like 'new_slug' are somewhat self-explanatory, the description does not clarify required vs. optional semantics or format expectations, failing to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Queue a project rename for human confirmation in /ui.' It specifies the verb (queue), the resource (project rename), and the target interface (/ui), making the tool's purpose unambiguous and distinct from siblings like upsert_project or delete_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it: 'Use when the project identity should change.' It also provides a critical usage note that the rename is not applied immediately and directs to list_pending_actions for seeing queued confirmations, effectively giving both usage context and an alternative for checking status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_guidance_healthA
Record versions of Hub guidance a local client actually verified.
Call only after the client itself inspected managed markers or ran a local doctor/setup check. The Hub cannot inspect the client's checkout; this tool records the verification result supplied by that client.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | agent | |
| project_slug | No | ||
| workspace_path | No | ||
| cursor_rule_version | No | ||
| session_skill_version | No | ||
| agent_guidance_version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does reveal an important nuance: the Hub cannot independently verify the client's state, so the tool records a client-supplied result. However, it does not mention whether this is a write/overwrite operation, whether it validates input, or what happens if called before verification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, purposeful sentences. The core purpose is front-loaded, the usage condition is immediate, and every sentence contributes meaning without redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and invocation timing, and the presence of an output schema partially compensates for return-value details. Still, an agent is left guessing how to populate source, project_slug, and workspace_path, and whether omitted version fields should be null or filled. It is usable but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the six parameters. The phrase 'versions of Hub guidance' loosely maps to the three version fields, but source, project_slug, workspace_path, and how defaults interact are left undefined. The property names are self-explanatory to a degree, but the description adds too little value for a 6-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Record versions of Hub guidance a local client actually verified' names a specific action and resource, and the scope is clearly limited to locally verified results. It also distinguishes this from other tools by emphasizing the client-side provenance, which no sibling description does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call only after the client itself inspected managed markers or ran a local doctor/setup check' is an explicit precondition, and the explanation that the Hub cannot inspect the client's checkout gives a strong rationale. It lacks a named alternative or an explicit when-not-to-use clause, but the usage context is unusually clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_projectA
Resolve the current Hub project from a workspace path or slug.
Use at session start before session_digest. With create_if_missing=true,
this may create a local project registry entry; set it false when lookup
must be read-only. Use upsert_project for explicit metadata or forge
configuration changes.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| project_slug | No | ||
| workspace_path | No | ||
| create_if_missing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses the potentially mutating side effect ('may create a local project registry entry') and explains how to force read-only behavior. It does not mention error paths or permissions, which is a gap, but the key side effect is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with purpose, and every sentence adds value: usage timing, side effect control, and alternative tool. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, covering return format, so that part is satisfied. The description covers usage timing, side effects, and alternatives, but omits the meaning of 'title', the precedence between path and slug, and failure behavior. For a tool with 0% schema coverage and no annotations, this leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains workspace_path and project_slug as the resolution inputs, and create_if_missing with its effect. However, the 'title' parameter is not mentioned at all, and the precedence or exclusivity of workspace_path vs project_slug is not clarified. Partial coverage, but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Resolve the current Hub project from a workspace path or slug' – a clear verb (resolve), resource (current Hub project), and the two input forms. It distinguishes itself from siblings by explicitly naming 'upsert_project' for metadata changes, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage timing ('Use at session start before session_digest'), clarifies the behavior of create_if_missing and its read-only counterpart, and points to upsert_project as the alternative for metadata changes. This is direct, unambiguous guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_digestA
Build the session-start resume digest for the current work context.
Use after resolve_project. It combines relevant stale/open threads, due
reminders, and the progress wiki snippet; query narrows overlap relevance
and energy can filter work to the operator's current capacity.
Includes a `guidance` object (expected versions + last local verification
status). The Hub cannot inspect the client's checkout — run
`adhd-hub doctor --project` locally (or call `report_guidance_health`
after a local check) so this field becomes meaningful.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| energy | No | ||
| workspace_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It explains what the digest combines, how query and energy alter output, that the Hub cannot inspect the client checkout, and that the guidance field depends on a local verification step. It stops short of explicitly stating whether the call has side effects, though the 'build/combine' framing strongly implies a read-only digest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose in the first sentence, followed by composition/behavior and a focused caveat about the guidance object. Each section earns its place, and the organization makes it easy to skim; the doctor instructions add a little length but are functionally relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be restated. The description covers the prerequisite, digest components, parameter effects for two inputs, and the guidance caveat. However, workspace_path is omitted entirely, and with no annotations the side-effect profile is left to inference, leaving a clear but not fatal completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply parameter meaning. It does for query ('narrows overlap relevance') and energy ('filter work to the operator's current capacity'), but workspace_path is never mentioned, and there is no explanation of null/default behavior. The two explained parameters add real value, but one of the three inputs is left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource — 'Build the session-start resume digest for the current work context' — and enumerates the digest's components (stale/open threads, due reminders, progress wiki snippet). This makes it readily distinguishable from sibling tools like list_open_threads, get_overview, or resolve_project without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the sequencing prerequisite 'Use after resolve_project' and offers a concrete alternative path for making the guidance field meaningful via local doctor or report_guidance_health. It does not spell out when not to use this tool, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_reminderA
Create and persist a Hub reminder.
kind selects once, session, daily, or random scheduling. due_at_iso is an
ISO datetime used for a once reminder when a specific due time is known.
Use list_reminders to read existing reminders without creating one.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | once | |
| message | Yes | ||
| due_at_iso | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates mutation ('Create and persist') and explains scheduling behavior, but it does not disclose any side effects, permissions, or idempotency. For a create tool with zero annotation coverage, this is a moderate gap, though the persistence aspect is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the main purpose front-loaded and parameter details following. Every sentence adds value, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return details are covered. The description provides enough to call the tool correctly: it explains the main purpose, the key parameters, and points to the sibling for reading. Minor omissions like authentication or exact behavior on existing reminders are not critical given the simplicity and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning for two of three parameters: 'kind selects once, session, daily, or random scheduling' and 'due_at_iso is an ISO datetime used for a once reminder.' The 'message' parameter is not elaborated, but it is self-explanatory. The description compensates for the lack of schema documentation on key parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create and persist a Hub reminder.' It also specifies the scheduling kinds and distinguishes itself from list_reminders, which is a sibling that reads rather than creates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells when to use this tool (to create) and when to use the alternative: 'Use list_reminders to read existing reminders without creating one.' This gives clear context and an alternative, fully covering usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snooze_thread_triageA
Snooze stale-thread triage prompts for a few days (default 7).
Soft only — thread stays open. Never auto-dismisses. Use
confirm_thread_relevant when the outcome is still wanted now.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the soft nature ('Soft only — thread stays open'), clarifies it does not auto-dismiss, and mentions the default 7 days. However, it does not state reversibility, idempotency, or any side effects beyond the snooze, but the core behavior is transparent enough for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (three sentences) with no filler. The purpose is front-loaded, followed by the critical 'soft only' caveat and then the alternative. Every sentence adds value and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema and presence of an output schema, the description provides enough for an agent to invoke it correctly: it identifies the target (thread), the delay (days), and the behavioral constraint (soft, non-dismissing). It lacks explicit mention of prerequisites or side effects beyond the immediate action, but these are minor for a snooze operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0%, so the description must compensate. It mentions the default for days ('default 7') and implies thread identity via 'stale-thread', but it does not explicitly explain that thread_id is required or that days is optional with a 1-30 range. The description adds some context for days but leaves thread_id semantics implicit, so it partially compensates for the missing schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('snooze') and names the resource ('stale-thread triage prompts'), clearly indicating a postponement action rather than a resolution. It explicitly contrasts with confirm_thread_relevant, naming the sibling and the condition that selects it, so an agent can distinguish this tool from alternatives 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use this tool ('when the outcome is still wanted now' is the condition for the alternative) and explicitly excludes auto-dismissal ('Never auto-dismisses'). It also provides an alternative tool name (confirm_thread_relevant) for immediate action, giving clear context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_next_upA
Calm cross-project Next-up pick (Wave 7 continuity intelligence).
Soft ranking only — prefers quiet/stale open work with a resume cue,
optional energy match, and optional focus_project_slug to honour focus
mode / drift (stay near the chosen project). Never starts or dismisses
work. Prefer this when focus is off and the human asks “what now?”.
| Name | Required | Description | Default |
|---|---|---|---|
| energy | No | ||
| project_slug | No | ||
| focus_project_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that this is a soft, non-destructive ranking tool that prefers quiet/stale open work and never starts or dismisses work. This gives the agent essential behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by behavioral constraints and a usage cue. Minor rhetorical filler like 'Wave 7 continuity intelligence' does not significantly hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only suggestion tool with an output schema and no required parameters, the description covers purpose, usage context, and safety behavior well. It omits project_slug semantics and fallback behavior when no work matches, but these are not critical for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning for energy ('optional energy match') and focus_project_slug ('honour focus mode / drift'), but project_slug is never mentioned and the energy enum values are not explained. Given 0% schema description coverage, this is partial compensation with a notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific verb ('pick'), a resource ('cross-project Next-up'), and a mode ('soft ranking only'). It also differentiates itself from action-taking siblings by explicitly stating it never starts or dismisses work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to prefer this tool when focus is off and the human asks 'what now?', and explains how focus_project_slug honors focus mode/drift. It does not name specific alternatives or exclusion conditions, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_progressA
Save a checkpoint to active thread state and project PROGRESS.md.
Prefer a known thread_id so the checkpoint cannot land on the wrong
thread. Update structured Goal/Focus/Next/Blocked/Resume only on routine
checkpoints — do not pass ritual content such as "Thread upserted from …".
Reserve content for rare human-meaningful events (decision, blocker note,
ship note). If selection is ambiguous the tool can request a thread_id;
force_new_thread explicitly starts another outcome. Depending on
create_thread_if_missing, a missing thread may be created as a side effect.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| focus | No | ||
| title | No | ||
| content | No | ||
| thread_id | No | ||
| next_steps | No | ||
| resume_step | No | ||
| source_tool | No | ||
| project_slug | No | ||
| blocked_reason | No | ||
| workspace_path | No | ||
| force_new_thread | No | ||
| create_thread_if_missing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it does disclose key side effects: saving to PROGRESS.md, possibly creating a missing thread, and the ability to request a thread_id when selection is ambiguous. It does not mention overwrite/merge semantics or auth requirements, but the main behavioral risks are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then provides compact behavioral rules. It is somewhat dense with multiple directives in a few sentences, but every sentence adds operational value and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 optional parameters and no annotations, the description covers the important usage decisions: thread selection, content discipline, and thread-creation side effects. It does not explain every parameter or return behavior, but the output schema exists and the most consequential behavior is documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning, and it does: thread_id is tied to avoiding wrong-thread checkpoints, content is reserved for rare meaningful events, force_new_thread and create_thread_if_missing are explained. Some parameters like project_slug, workspace_path, and source_tool are not addressed, but the most decision-critical ones are clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence, 'Save a checkpoint to active thread state and project PROGRESS.md', states a specific verb, resource, and destination. It is clear about what the tool does, and the mention of PROGRESS.md hints at its distinct role, though it does not explicitly name a sibling tool it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: 'Prefer a known thread_id', 'Update structured Goal/Focus/Next/Blocked/Resume only on routine checkpoints', and 'Reserve content for rare human-meaningful events'. It also explains decision paths for ambiguous selection, force_new_thread, and create_thread_if_missing, giving an agent actionable routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_projectA
Create or update a project registry entry and its explicit metadata.
Use when setting title, workspace path, repository, energy, parent, or forge
targeting. parent_slug nests under any project (unlimited depth; cycles rejected).
This persists local Hub project configuration; it does not by itself create,
rename, or delete a remote forge repository.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| title | Yes | ||
| energy | No | unknown | |
| repo_url | No | ||
| forge_repo | No | ||
| description | No | ||
| forge_owner | No | ||
| parent_slug | No | ||
| workspace_path | No | ||
| forge_wiki_path | No | ||
| forge_project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states this persists local Hub configuration, does not touch remote forge repositories, and rejects parent cycles. It could additionally explain whether unspecified fields are cleared or preserved on update, but the disclosed behavior is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four focused sentences, front-loaded with the core purpose, followed by usage context and an important boundary. Every sentence adds value and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no schema-level descriptions, and no annotations, the description is reasonably complete: it covers purpose, key parameter intent, side effects, and a critical non-goal. It could be more complete by directing the agent to sibling tools for rename or delete operations, but it is not missing essential call information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It groups parameters by category and adds real meaning for parent_slug via 'unlimited depth; cycles rejected,' but several parameters such as slug, description, forge_owner, forge_wiki_path, and forge_project_id are only vaguely bundled under 'forge targeting'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Create or update a project registry entry and its explicit metadata.' It clearly lists the fields involved and explicitly distinguishes the tool from remote forge repository operations, so an agent can tell it apart from rename_project and delete_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit 'Use when' clause covering the settable fields: title, workspace path, repository, energy, parent, and forge targeting. It does not name alternative sibling tools for local project management, but the remote/local distinction prevents obvious misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_threadA
Create a new finishable work thread or explicitly update one.
One thread should represent one independently finishable outcome, not a
whole project. Pass thread_id when updating a known thread. For routine
checkpoints on active work, prefer upsert_progress so progress notes and
PROGRESS.md stay in sync.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| focus | No | ||
| energy | No | unknown | |
| status | No | open | |
| summary | Yes | ||
| chat_ref | No | ||
| thread_id | No | ||
| next_steps | No | ||
| resume_step | No | ||
| source_tool | No | ||
| project_slug | No | ||
| blocked_reason | No | ||
| transcript_ref | No | ||
| workspace_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the create-vs-update branching via thread_id and the domain rule that one thread equals one finishable outcome. However, it does not explain update merge/replace semantics, persistence side effects, or any auth/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary create/update purpose. The extra guidance about finishable outcomes and upsert_progress earns its place, though the formatting with indentation is slightly loose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter upsert tool with no annotations and no schema descriptions, this description is too thin. It provides good routing and purpose, but an agent cannot confidently populate fields like goal, focus, chat_ref, transcript_ref, or source_tool based on this text. The output schema covers return shape, so that is not a gap, but field-level semantics remain unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 14 parameters with 0% description coverage, so the description must compensate. The only parameter given real meaning is thread_id ('Pass thread_id when updating a known thread'); the required summary field and most other fields receive no clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Create a new finishable work thread or explicitly update one.' It clearly distinguishes the tool from siblings like upsert_progress and mark_done by defining a thread as a single finishable outcome.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool versus alternatives: 'For routine checkpoints on active work, prefer upsert_progress.' It also gives a concrete update condition: 'Pass thread_id when updating a known thread.'
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.
3 tool updates
v0.17.0- Added
confirm_thread_relevant - Added
snooze_thread_triage - Added
suggest_next_up
1 tool update
v0.16.1- Changed
upsert_project1 field changed- added
Input schema / properties / parent_slugAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Parent Slug" +}
20 tool updates
v0.12.0- First observed
check_overlap - First observed
delete_project - First observed
dismiss_thread - First observed
get_overview - First observed
list_open_threads - First observed
list_pending_actions - First observed
list_projects - First observed
list_reminders - First observed
mark_done - First observed
pause_thread - First observed
push_openclaw_memory - First observed
register_workspace - First observed
rename_project - First observed
report_guidance_health - First observed
resolve_project - First observed
session_digest - First observed
set_reminder - First observed
upsert_progress - First observed
upsert_project - First observed
upsert_thread
TDQS
Scored across 23 tools
Tools are grouped into clearly labeled lifecycle actions with explicit cross-references (e.g., dismiss vs. mark_done vs. pause), so most boundaries are clear. A few pairs like upsert_thread vs. upsert_progress and get_overview vs. session_digest could still cause initial misselection, though descriptions mitigate it.
The overwhelming majority follow a verb_noun snake_case pattern with consistent verbs such as list, upsert, dismiss, mark, pause, set, and resolve. Minor deviations like session_digest (noun-only) and mark_done (verb_adjective) keep it from being fully consistent.
23 tools is on the heavy side and sits in the 16–25 borderline range. The breadth is largely justified by covering projects, threads, progress, reminders, triage, health reporting, and memory sync, but a few tools could likely be consolidated without losing clarity.
Project and thread lifecycles are well covered, including creation, update, pause, dismiss, completion, and soft triage. Notable gaps remain: reminders can be set and listed but not updated, deleted, or explicitly marked handled, and there is no direct get-thread-detail tool for a known thread.
Maintenance
Related MCP Connectors
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA local-first MCP server and continuity control plane that helps AI coding tools maintain project state, tasks, and context across sessions, models, and interruptions, with features like session tracking, token-efficient context assembly, and code understanding via Code Atlas.MIT
- FlicenseNot gradedqualityBmaintenancePersistent memory and task coordination for AI coding agents. Tracks sprint items, logs tasks, manages session handoffs, and surfaces HITL requests so you stay in control across single or parallel Claude Code, Codex, Cursor, and Windsurf sessions.-
- AlicenseAqualityAmaintenanceLocal-first shared memory and task coordination for AI coding agents. One Go binary, MCP server, markdown files you own. Hooks for Claude Code and Codex CLI (and their desktop apps).305MIT
- FlicenseNot gradedqualityBmaintenanceCentralized multi-project state & handoff MCP server that lets AI agents save checkpoints in one session and resume in another with minimal token overhead, including git snapshots and code-graph integration.-



