Skip to main content
Glama

Task Runner

Memory for your coding agent. It remembers decisions, pitfalls and conventions between sessions. It also runs multi-step work as a task list.

Task Runner is one package with four parts:

  • an MCP server with 19 tools (works in any MCP client, over stdio or HTTP),

  • a Claude Code plugin that wires the server, a session briefing and a skill together,

  • a mod for Claude Code: a live side panel, memory toasts, task progress, reminders and a time report,

  • a dashboard with a graph view, a time report and a rules editor,

  • an optional server (a Cloudflare Worker) that holds the same data for several machines.

The data lives where the MCP server runs. With the default install that is one SQLite file on your machine, and nothing is sent anywhere. If you sign in to your own server, every machine reads and writes the server's database instead.

Install

/plugin install task-runner --marketplace MrMirhan/task-runner

From a shell:

claude plugin install task-runner --marketplace MrMirhan/task-runner

You need Node.js 22.13 or newer. Start a new session. The plugin adds:

Part

What it does

MCP server

The memory, task, time and rules tools.

Session briefing

At session start, a hook puts the most important facts of the project in the agent's context. The agent does not need to call a tool to get them.

Skill

Tells the agent when and how to use the tools.

Panel (/brain)

/brain auto on opens it at the start of every session, /brain auto off stops that (off by default). Shows this session: time spent by you and the agent, prompts, file edits, commits, and what the session saved to memory. Other tabs show tasks, notes, the graph, search, the week's time and your rules. Updates while the agent works.

/recall <words>

Search memory without using a model turn.

/remember <text>

Save a note.

/worklog [week]

Time spent by you and the agent, per project and task.

/taste [on|off]

What was learned about how you want things; turn learning on or off for this session.

/rules

Show the rules in force. /rules approve <id> and /rules reject <id> decide a proposal.

Toasts

Show what the agent remembers, links or forgets.

Progress line

Shows task progress above the prompt while a task group is open.

Commit notes

Saves a short note for each git commit the agent makes. No model call.

Reminder

After many edits or a commit with nothing saved, adds one line to your next prompt.

No prompts

The plugin approves its own memory tools, so they never stop to ask. clear_tasks still asks.

Each of the last five rows has a switch in the plugin settings.

Other MCP clients

Add the server to the client configuration:

{
  "mcpServers": {
    "task-runner": { "command": "npx", "args": ["-y", "task-runner-mcp"] }
  }
}

The server finds the project from its working directory. If your client starts servers in another directory, set TASK_RUNNER_PROJECT:

{
  "mcpServers": {
    "task-runner": {
      "command": "npx",
      "args": ["-y", "task-runner-mcp"],
      "env": { "TASK_RUNNER_PROJECT": "my-project" }
    }
  }
}

Other clients do not get the briefing, the panel or the slash commands. The tools and their instructions work everywhere.

Related MCP server: engram

How the agent uses it

  1. The briefing shows the top facts for the project and for you.

  2. The agent calls recall for details. Search ignores accents and matches word starts, in any language.

  3. While it works, the agent calls remember for durable facts and link to connect them. save_memory is for notes about the session.

  4. A wrong fact is fixed with correct_fact. Every fact has a date.

  5. For long work, the agent calls create_task_group, then loops get_next_task and complete_task.

Tools

Tool

Purpose

recall

Search entities, facts and notes.

remember

Create an entity or add facts to it. scope: "global" is for facts about you.

link

Connect two entities.

correct_fact

Replace or retire one fact.

what_do_i_know

One entity with facts, relations and neighbors.

forget

Retire an entity.

save_memory, get_context

Session notes.

graph_stats

Counts, orphan entities and (with check) stale items.

create_task_group, get_next_task, complete_task, get_task_status, clear_tasks

The task loop.

worklog

Time by you and the agent per project and task, for a period.

rules

Show your standing rules, or propose a new one. The agent cannot change rules; you approve.

taste

Show, record or forget the preferences learned from what you said. They apply at once.

set_context, list_projects

Override or inspect the project. Rarely needed.

Entity types: preference, decision, pattern, file, concept, tool, pitfall, convention. Relations: uses, depends_on, conflicts_with, part_of, prefers_over, decided_against, relates_to, supersedes.

Projects

The project key comes from the first match in this list:

  1. the TASK_RUNNER_PROJECT environment variable,

  2. a .task-runner.json file in the repository root: { "project": "my-project" },

  3. a project already stored for the same folder,

  4. the git remote, as owner-repo in lowercase (so clones and worktrees agree),

  5. the folder name.

Commit .task-runner.json when a team wants one key for everybody.

Worktrees and copies share the project key. A linked git worktree (for example an Orca workspace) uses the key of its main checkout. A plain copy of the folder keeps the git remote, so it gets the same key. Every folder a project was seen in is remembered.

What stays separate:

Thing

How

Session

Each agent session runs its own server process with its own folder and branch.

Worktree or branch

Task groups belong to the branch that made them. get_next_task and the panel show only the groups of the current branch. Notes carry a branch:<name> tag, and scope: "branch" hides a note from other branches.

Project

Entities, facts and notes are shared by every worktree of the project, so a lesson learned in one worktree is there in the next.

You

scope: "global" facts show in every project.

Time tracking

Task Runner reads your Claude Code session transcripts and tells you how long you worked, how long the agents worked, and on what. It needs no hook and no setup, and it works on the history you already have.

npx task-runner-mcp worklog                      # this week, all projects
npx task-runner-mcp worklog --today --detail     # plus what you asked and what was saved
npx task-runner-mcp worklog --last-week --format md > week.md
npx task-runner-mcp worklog --month --project . --format csv   # this project, for a spreadsheet

Ask the agent too: "how long did I work on the checkout feature this week, and what did we do?" The worklog tool answers from the same data.

How the numbers are made:

Number

Meaning

You

The time before each prompt you typed (reading, thinking, typing). A wait longer than 5 minutes counts as 5; longer is a break.

Agent

The time agents worked between your prompts. A pause longer than 15 minutes counts as 15. Parallel sessions add up, so this can exceed the clock.

Wall clock

Every minute with any activity, counted once. This is the number to compare with a calendar.

A task is a branch. A ticket key in the branch name (feat/SHOP-1182-login gives SHOP-1182) is the task label, and the prefix tells feature from fix. Work on main or without a branch has its own rows. A session that starts in a plain folder is charged to the repository whose files it edits.

Next to the time you see what you asked first, how many prompts and file edits it took, the commit notes, the notes you saved on that branch and the task groups. The Time tab of the panel (/brain) and the dashboard show the same report.

Settings (flags, or the environment variables in brackets):

  • --human-cap <minutes> and --ai-cap <minutes> change the two caps above. Changing them recomputes the history.

  • --exclude "app-*,scratch" [TASK_RUNNER_WORKLOG_EXCLUDE] hides projects. * is a wildcard. Use it for tools that run agent sessions on their own.

  • worklog pending lists time not yet reported. After you copy it to a time-tracking system, run worklog exported <project> <branch> so it is not reported twice.

The first run reads every transcript of the period and can take a minute for a heavy week. After that only changed files are read. The result is stored in the same database as the memory: on a signed-in machine, the server's, so the report covers every machine. Claude Code removes old transcripts after some weeks, so run a report before they go; the stored numbers stay.

Taste

Task Runner learns how you want things from what you say, and every later session follows it. There is no approval step and nothing to write by hand.

  • When a message carries a directive, a correction or a preference ("always…", "don't…", "bundan sonra…", "too long"), the mod checks it in the background after the turn. The check is one model call over the session's own cached context, so the agent's work is not interrupted. A message without such words costs nothing.

  • A preference counts from the first time you say it. Saying it again makes it firmer. A different wish on the same point replaces the old one, and taking it back drops it.

  • Each preference has a scope: you everywhere, the organization, or one project.

  • The agent is told what was learned with your next prompt, and new sessions get the list at start.

  • Preferences live in the same database as the memory: on a signed-in machine, on your server, so all machines share them.

/taste lists what was learned. /taste off stops learning for the current session, and /taste on starts it again. In a session that has already run, /taste on also reads what you said so far. The Taste tab of the panel lists the preferences with a button to forget each one. The taste plugin setting turns learning off by default.

From the command line: task-runner-mcp taste, and task-runner-mcp taste forget <id>. Other MCP clients get the taste tool and the list at session start, but no automatic learning.

Rules

Standing instructions for the agent, set once, injected at the start of every session. You do not write a CLAUDE.md in every repository or on every machine.

Scope

Applies to

Everywhere

every session

Device

one machine ("use brew", "no GUI here")

Organization

every repository of one owner (the git remote owner, acme for github.com/acme/shop)

Project

one project

Project on a device

one project on one machine

The sections arrive in that order. When two disagree, the later one wins. The repository's own CLAUDE.md still loads as usual.

npx task-runner-mcp rules set "Reply in the language I write in."            # everywhere
npx task-runner-mcp rules set --org "Commit messages follow Conventional Commits."
npx task-runner-mcp rules set --project "Never edit the billing module."
npx task-runner-mcp rules set --device "Use brew, not apt."
npx task-runner-mcp rules edit --project       # open the document in $EDITOR
npx task-runner-mcp rules                      # what this folder gets, and from where

A document holds 4,000 characters at most and the sections of one session add up to 8,000. Keep rules short and imperative: they cost tokens in every session.

The agent can read the rules with the rules tool and can propose a rule when you state a lasting preference or correct it twice. A proposal waits. You approve or reject it in the panel (/brain, Rules tab), with /rules approve <id>, on the web page, or with task-runner-mcp rules approve <id>. Nothing the agent proposes is active before that, because an active rule reaches every future session.

Several devices: one server

On one machine everything lives in the local database. With several machines, run the server in server/ as a Cloudflare Worker. It holds the memory, the tasks, the time records and the rules, and it serves the dashboard. Every machine signs in once with the same key.

npm run build:dashboard            # the web page the Worker serves
cd server && npm install
npx wrangler deploy                # creates a new Worker named task-runner
npx wrangler secret put TASK_RUNNER_KEY      # paste a long random key: openssl rand -hex 24

On each machine:

npx task-runner-mcp login https://task-runner.<your-subdomain>.workers.dev

The command asks for the key. To keep it out of your shell history do not pass --key; type it at the prompt, pipe it in, or set TASK_RUNNER_REMOTE_KEY. The key is saved in ~/.task-runner/remote.json (readable by you only). task-runner-mcp logout goes back to the local database. The local data is not copied to the server; move it with export before login and import after.

After login, the plugin's MCP server, the session hook, the panel and the CLI use the server. The time report reads the transcripts on each machine and uploads only the per-minute totals; the transcripts stay on the machine. The session hook waits a few seconds at most and then uses the last rules it saved, so a slow network never blocks a session. Each machine has an id and a label (the host name; change it with rules rename-device).

Open the Worker address in a browser and enter the key to see the graph, the notes, the time report and the rules, preview what a project gets on a device, review proposals and rename devices.

An MCP client can also connect to the server directly, without the local server: see server/README.md. Moving a server from before 1.0 is described there too.

Keep in mind:

  • The key opens your memory and edits the instructions of every agent on every machine. Make it long and random, keep it out of repositories and rotate it with wrangler secret put.

  • The Worker refuses a key shorter than 24 characters. Add Cloudflare rate limiting or Access in front of it if you want more.

  • The data is stored on Cloudflare. Do not let the agent store secrets.

  • login refuses http:// addresses other than localhost.

Command line

npx task-runner-mcp doctor                       # check the installation
npx task-runner-mcp dashboard --open             # graph and notes in your browser
npx task-runner-mcp export --out backup.json     # all data as JSON
npx task-runner-mcp export --format markdown --out vault   # one file per entity, [[wiki links]]
npx task-runner-mcp import backup.json
npx task-runner-mcp projects                     # list projects
npx task-runner-mcp projects merge old-key new-key --yes
npx task-runner-mcp forget "Some entity"
npx task-runner-mcp note "Free text note"

The markdown export opens in Obsidian or any editor.

Data and privacy

  • The database is ~/.task-runner/memory.db. Set TASK_RUNNER_DB for a file, or TASK_RUNNER_HOME for a folder.

  • Without login the plugin never opens a network connection. The local dashboard listens on 127.0.0.1 only and refuses other hosts and origins.

  • The reminder adds a line to your next prompt that only the agent reads. Switch it off with the nudge setting.

  • Do not let the agent store secrets. The skill tells it not to, but nothing filters the text.

  • Back up with export. Do not put the database in a cloud-synced folder; SQLite and file sync do not mix.

Develop

npm install
npm run check          # type check and tests
npm run build          # bundle to dist/cli.js (committed: the plugin runs it)
npm run build:dashboard   # rebuild the web UI into dist/dashboard
claude plugin validate .
claude plugin test .   # mod tests
claude --plugin-dir .  # try the plugin in a session

Layout:

src/core      store, schema, search, rules, REST and RPC handlers (no Node APIs)
src/mcp       tool definitions, server, session scope
src/http      the server as one web-standard handler: /mcp, /api/rpc, /api/*
src/node      node:sqlite driver, project detection, local or remote backend
src/cli       command line, session hook, local dashboard server
src/worklog   transcript reader and time report
server        the Cloudflare Worker
hooks         the mod (register.tsx) and the SessionStart hook
skills        the skill
dashboard     Next.js source of the web UI

Moving from the hosted version before 1.0

Before 1.0 Task Runner was only a hosted Cloudflare Worker. server/wrangler.legacy.jsonc upgrades such a Worker in place: the stored data is copied into the current schema on first use and the old keys keep working. See server/README.md.

The tool set changed:

Old

New

create_project

create_task_group

fail_task

complete_task with status: "failed"

get_task_summary, get_task_result

get_task_status (add task_id for one task)

add_facts

remember on an existing name

consolidate

graph_stats with check: true

search_memory

recall (all_projects: true to search every project)

clean

clear_tasks (it no longer deletes memory)

parse_task_list

removed

License

MIT

Available Tools

19 tools
clear_tasksClear tasksA
Destructive

Delete one task group, or all task groups of this project. Memory is not touched.

NameRequiredDescriptionDefault
task_groupNoOmit to clear every group

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=false, so the safety profile is known. The description adds useful non-obvious scope context ('memory is not touched', project-level scoping), but it never states what happens to the tasks contained in a deleted group or whether the deletion is reversible — the most important behavioral question for a destructive tool.

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

Conciseness5/5

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

Two short sentences, scope statement first and the non-obvious memory caveat second. Nothing is wasted and the critical information is front-loaded.

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

Completeness3/5

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

A single optional param with full schema coverage and destructive annotations lowers the bar, and the memory caveat helps. Still, for an irreversible bulk delete the description omits the fate of contained tasks and any confirmation/irreversibility note, leaving a meaningful gap.

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

Parameters3/5

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

Schema coverage is 100% and the schema itself says 'Omit to clear every group'. The description restates the same semantics at a slightly higher level but adds no format, constraints, or examples beyond the schema.

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

Purpose5/5

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

States a specific verb (Delete) and resource (task groups), including both granularities: a single group or all groups in the project. 'Memory is not touched' cleanly differentiates it from memory-deleting siblings like forget.

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

Usage Guidelines3/5

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

The two operating modes are implied by 'one task group, or all task groups of this project,' and the memory caveat hints at when a sibling is the better choice. However, no alternative tool is named and there's no guidance on prerequisites such as whether tasks in a group must be completed first.

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

complete_taskFinish a taskA

Record the outcome of a task: done with its result, or failed with the reason. Elapsed time is measured automatically.

NameRequiredDescriptionDefault
resultYesThe result, or the failure reason when status is failed
statusNoDefault done
task_idYese.g. task-001
task_groupNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already disclose that this is a non-readonly, non-destructive, closed-world mutation. The description adds useful behavioral context that elapsed time is measured automatically, but it omits whether completion is idempotent, whether re-completing a finished task overwrites the prior result, or whether authorization constraints apply.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the action and outcome, and every sentence adds useful information: the done/failed distinction and automatic elapsed-time measurement.

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

Completeness3/5

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

For a four-parameter mutation with no output schema, the description covers the core outcome semantics and an automatic timing behavior. It remains incomplete about task_group, repeat completion behavior, and any side effects, so it is adequate but not fully sufficient.

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

Parameters3/5

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

Schema description coverage is 75%, so the schema already documents result semantics, status enum and default, and task_id format. The description adds only a small amount by restating that 'result' holds the result or failure reason depending on status; the undocumented task_group parameter is not explained in either place.

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

Purpose4/5

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

The description states a specific verb and resource ('Record the outcome of a task') and clarifies the two terminal modes (done with result, failed with reason). It is clearly a write operation, distinct from read-oriented siblings like get_task_status, but it does not explicitly name or contrast with any sibling.

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

Usage Guidelines3/5

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

Usage is implied: call this when a task finishes or fails, supplying its outcome. There is no explicit guidance on when not to use it, whether it can be called multiple times for the same task, or how it relates to siblings such as get_task_status or clear_tasks.

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

correct_factCorrect a factA
Destructive

Replace a wrong or outdated fact (by the id recall and what_do_i_know show), or retire it by omitting new_fact.

NameRequiredDescriptionDefault
fact_idYes
new_factNoReplacement; omit to just invalidate

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare this is a destructive, non-read-only mutation, so the safety profile is covered structurally. The description adds that omitting new_fact retires the fact, but does not discuss reversibility, invalid ids, or permissions beyond what the schema and annotations provide.

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

Conciseness5/5

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

A single compact sentence front-loads the replacement action and follows with the retirement variant. There is no redundant or wasted text.

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

Completeness4/5

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

For a simple two-parameter destructive mutation with annotations covering destructiveness, the description covers the main behavioral choices and the id source. It leaves minor gaps around irreversibility and error behavior but is otherwise sufficient.

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

Parameters4/5

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

Schema coverage is only 50%, with fact_id undocumented in the schema, but the description explains that fact_id comes from recall or what_do_i_know. It also explains that omitting new_fact invalidates the fact, adding useful meaning alongside the schema's own note.

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

Purpose4/5

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

The description gives a specific verb and resource: replacing or retiring a fact, with the retirement mechanism stated. It references recall and what_do_i_know as the source for the fact id, but does not explicitly distinguish the tool from the sibling forget.

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

Usage Guidelines4/5

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

It clearly states when to use it: for a wrong or outdated fact, or to retire one by omitting new_fact. It also points to recall and what_do_i_know for obtaining the id, though it does not explicitly say when to prefer forget over correction.

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

create_task_groupCreate a task groupA

Split work into ordered tasks, from markdown ('## Task 1: Title' sections) or a tasks array. Then loop get_next_task, do the task (ideally in a subagent), complete_task.

NameRequiredDescriptionDefault
nameYesGroup name
tasksNo
replaceNoOverwrite an existing group that has progress
markdownNo
system_promptNoShared instructions returned with every task

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=false, destructiveHint=false, so the safety profile is partly covered. The description adds genuinely behavioral content beyond that: the consumption loop and the subagent execution model. It does not surface that the replace option overwrites a group that already has progress, which is the one risky behavior an agent should know about.

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

Conciseness5/5

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

Two sentences, front-loaded with the creation action and input formats, then the workflow. No wasted words.

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

Completeness3/5

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

For a 5-parameter mutation with no output schema, the description omits what is returned (group identifier? task list?) and whether the created group needs to be referenced later. The workflow hint helps, but return-value and replace-semantics gaps keep it at minimum-viable-plus.

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

Parameters4/5

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

Schema coverage is 60%, and the two undocumented parameters (markdown, tasks) are exactly the ones the description explains, including the '## Task 1: Title' heading format. It adds little about replace and system_prompt, which the schema mostly covers (replace) and leaves thin (system_prompt: 'Shared instructions returned with every task' is in the schema).

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

Purpose5/5

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

States a specific verb and resource ('Split work into ordered tasks' creating a task group) and names the two accepted input formats. It is clearly distinguishable from the task-consuming siblings (get_next_task, complete_task), which it references as downstream steps.

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

Usage Guidelines4/5

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

The second sentence explicitly prescribes the follow-up workflow: loop get_next_task, do the task (ideally in a subagent), complete_task. That is strong usage context, though it never says when to choose this over alternatives like clear_tasks or which input format (markdown vs tasks array) to prefer in which situation.

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

forgetForget an entityA
Destructive

Retire an entity with its facts and relations. It stops appearing in searches; the data stays in the database.

NameRequiredDescriptionDefault
nameYes
entity_typeNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds valuable context beyond that: the operation is a soft retire, the entity and its relations stop appearing in searches, and the underlying data remains in the database. It does not address permissions, reversibility, or cascade limits, but the key behavioral trait is disclosed.

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

Conciseness5/5

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

Two compact sentences with the operation and its effect front-loaded. Every sentence adds information without repetition.

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

Completeness3/5

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

For a two-parameter soft-delete tool with no output schema, the behavioral explanation is solid. However, the complete absence of parameter semantics and any note on reversibility or permission requirements leaves meaningful gaps for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0% for both parameters, so the description must compensate but does not. It never mentions the required 'name' parameter or the optional 'entity_type' enum, leaving the agent to rely entirely on raw schema types.

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

Purpose4/5

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

The description uses a specific verb ('Retire') and resource ('an entity with its facts and relations'), making the operation's scope clear. It does not explicitly contrast itself with siblings like 'remember' or 'correct_fact', but the core action is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied by 'Retire an entity' and the note that it stops appearing in searches, but there is no explicit guidance on when to choose this over alternatives such as 'correct_fact' or 'remember'. No exclusions or prerequisites are stated.

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

get_contextGet session notesA
Read-only

Recent saved notes for this project (project-wide notes plus the current branch and PR). Long notes are clipped unless full is set.

NameRequiredDescriptionDefault
fullNoReturn whole notes instead of the first 600 characters
typeNo
limitNoDefault 25

TDQS

A3.6/5.0
Behavior4/5

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

The annotations declare the safety profile (readOnlyHint true, openWorldHint false), so the description's job is to add context, which it does: it discloses that long notes are clipped unless full is set and that results span project, branch, and PR. It does not mention ordering or token/size budgets, but the core behavioral traits are covered.

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

Conciseness5/5

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

Two sentences, zero filler. The resource and scope come first, followed by the clipping caveat, so the agent front-loads the most decision-relevant information.

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

Completeness4/5

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

There is no output schema, so the description should hint at the return shape, which it does: a list of recent notes, possibly truncated. It lacks detail on ordering and on whether task/issue entries are interleaved, but for a three-optional-parameter read tool this is close to sufficient.

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

Parameters3/5

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

Schema coverage is 67%, so the baseline is 3. The description reinforces the full-flag interaction with clipping but only restates the schema's 'first 600 characters'; the type parameter has no description in the schema and gets no explanation here beyond the enum values being self-descriptive.

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

Purpose4/5

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

The description names a specific resource (recent saved notes) and a precise scope: project-wide notes plus the current branch and PR. That scope statement separates it from generic memory lookups like recall or what_do_i_know, although the verb itself is only implied by the tool name.

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

Usage Guidelines2/5

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

The description never says when to call it rather than recall, what_do_i_know, or worklog, and it gives no exclusions or prerequisites. An agent must infer from the scope phrase alone that this is the lightweight 'what happened recently on this branch' lookup.

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

get_next_taskNext taskA

Claim the next pending task and mark it running. A task running for over 30 minutes counts as abandoned and is offered again.

NameRequiredDescriptionDefault
task_groupNoDefaults to the latest group

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false), and the description adds real value on top: the 30-minute abandonment/retry rule is a non-obvious behavioral trait an agent could not get from structured fields. It does not cover failure behavior when no pending task exists, which keeps it below 5.

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

Conciseness5/5

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

Two tight sentences, zero filler, with the core action front-loaded and the exception rule second. Nothing could be removed without losing information.

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

Completeness3/5

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

For a non-idempotent claim operation with no output schema, the description should say what comes back (task fields? an ID for later complete_task?) and what happens when the queue is empty. Neither is covered, leaving a meaningful gap for an agent wiring this into a workflow.

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

Parameters3/5

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

Schema coverage is 100% and the single task_group parameter already carries its own description ('Defaults to the latest group'). The tool description adds no additional semantics about what a group is or how selection interacts with the default, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource — 'Claim the next pending task and mark it running' — which clearly distinguishes it from siblings like get_task_status (read status) and complete_task (finish work). It stops short of explicitly naming those siblings, so it doesn't reach the top band.

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

Usage Guidelines3/5

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

The claim-based verb implies the worker-pickup use case, but the description never states when to use this versus get_task_status or complete_task, nor any preconditions (e.g., must a task group exist first). Usage is inferable but not guided.

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

get_task_statusTask statusA
Read-only

Summary counts and every task's status for a group; with task_id, that task in full including its result or error.

NameRequiredDescriptionDefault
task_idNo
task_groupNoDefaults to the latest group

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds that the per-task mode includes the result or error payload, which is genuine behavioral context. It does not disclose behavior for an unknown/expired task_id, task_group defaults beyond the schema note, or output volume.

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

Conciseness5/5

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

One front-loaded sentence stating the default behavior first and the task_id variant second, with zero filler. The semicolon split mirrors the two modes cleanly.

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

Completeness3/5

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

There is no output schema, so the description must carry return-shape information, and it only sketches 'summary counts' and 'result or error' without detail. Error paths (missing task_id, unknown group) are unaddressed, leaving meaningful gaps for a two-mode tool.

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

Parameters4/5

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

Schema coverage is only 50%, and the description compensates for the undocumented task_id by explaining its effect: it switches from group summary to a full single-task record including result or error. task_group's default is already handled by the schema. Minor gap: no format/ID-source hints.

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

Purpose4/5

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

States a specific resource (task status) and both operating modes: group-level summary counts plus per-task status, or, with task_id, one task in full. It is clear what the tool retrieves, though it never names or contrasts sibling task tools like get_next_task or complete_task.

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

Usage Guidelines3/5

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

'with task_id, that task in full' gives a clear conditional for the two modes, which is useful. But there is no explicit when-to-use guidance versus the many sibling task tools (get_next_task, clear_tasks, complete_task), nor exclusions or prerequisites.

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

graph_statsGraph healthA
Read-only

Counts of entities, relations, facts and notes, orphan entities (no relations) and the top entities. With check: also old low-importance entities and notes, and file entities whose path no longer exists.

NameRequiredDescriptionDefault
checkNoAlso list cleanup candidates
max_age_daysNoAge threshold for check, default 90

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered by structured data. The description adds genuine context beyond that: what check enumerates (old low-importance entities, stale notes, file entities whose path no longer exists), which is the kind of behavioral detail an agent cannot get from annotations.

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

Conciseness5/5

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

Two sentences, no filler, and the default return content is front-loaded ahead of the conditional check behavior. Every clause carries information.

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

Completeness4/5

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

With no output schema, the description correctly enumerates the returned metrics, which is the essential missing piece. Minor gaps remain: 'top entities' does not say how many or by what ranking, and the counts' scope (whole graph vs project) is unstated.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully expands 'check' beyond the schema's terse 'Also list cleanup candidates' by naming the actual cleanup categories. max_age_days is left entirely to the schema, which is acceptable given full coverage.

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

Purpose5/5

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

States a specific verb (counts) and resource (graph: entities, relations, facts, notes, orphans, top entities), and the 'With check' clause clarifies the extended mode. No sibling tool covers graph health, so it is unambiguously distinguishable.

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

Usage Guidelines3/5

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

The 'With check:' clause implies when to enable the extended mode, but there is no explicit guidance on when to call graph_stats at all versus other tools, nor any exclusions. Usage is left to be inferred from the name and the word 'health'.

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

list_projectsList projectsA
Read-only

Projects that have memory, newest first. Rarely needed: the current project is detected.

NameRequiredDescriptionDefault
limitNoDefault 20
queryNoFilter by key or path substring

TDQS

A3.5/5.0
Behavior3/5

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 real context beyond that: results are limited to projects with memory and sorted newest first, and the current project is auto-detected. It says nothing about pagination or result shape, but with annotations present a 3 is appropriate.

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

Conciseness4/5

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

Two very short sentences with the scope and ordering front-loaded and no filler. The second clause ('the current project is detected') is slightly cryptic about who does the detecting, but it is efficient overall.

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

Completeness4/5

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

For a simple read-only listing tool with two optional, fully documented parameters and no output schema, the description covers scope, order, and when the call is unnecessary. Only minor gaps remain, such as what fields a project entry contains.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'limit' (default 20, max 100) and 'query' (key or path substring filter) documented in the schema. The description adds no syntax or filtering detail beyond that, so the schema is doing all the parameter work — baseline 3.

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

Purpose4/5

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

The description states the resource (projects) and adds meaningful scope — only projects that have memory — plus ordering (newest first), which distinguishes it from a generic project listing. It doesn't restate a verb explicitly, relying on the name for 'list', but the scoping makes the intent unambiguous.

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

Usage Guidelines3/5

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

'Rarely needed: the current project is detected.' signals that this tool is normally unnecessary because the current project is inferred, which is implied usage guidance. However, it never names the alternative (e.g., get_context) or states the condition under which listing is actually warranted, leaving the agent to infer it.

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

recallRecallA
Read-only

Search memory by keywords: graph entities with their dated facts, linked entities as related, and matching notes. Matching ignores accents, finds word starts and stems, and falls back to parts of words; it is not meaning-based, so search with the words, synonyms and both languages the facts would use. Includes global facts. Start work with this.

NameRequiredDescriptionDefault
limitNoDefault 10
queryYes
entity_typeNo
all_projectsNoSearch every project, not just this one

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint true, openWorldHint false), and the description goes further by disclosing matching behavior — accent-insensitive, word-prefix and stem matching, parts-of-word fallback, and that it is not meaning-based. It also notes global facts are included, which materially affects result expectations. It stops short of describing result volume or ranking.

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

Conciseness4/5

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

Three dense sentences, front-loaded with what the tool returns and followed by matching semantics and usage advice; every sentence carries information. The 'Start work with this' directive would land better at the front than buried at the end, but nothing is wasted.

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

Completeness4/5

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

For a search tool with no output schema, the description adequately characterizes the return shape (entities with dated facts, related entities, notes) and the matching model an agent must understand to get useful results. Only the entity_type filter remains unexplained, a minor gap in an otherwise self-sufficient definition.

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

Parameters3/5

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

With only 50% schema coverage, the description does compensate for the undocumented required 'query' parameter by explaining how to formulate it (words, synonyms, both languages). However, the 'entity_type' parameter with its eight enum values is never addressed, and the relationship of 'all_projects' to the stated 'Includes global facts' scope is left implicit.

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

Purpose4/5

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

The description names a specific verb and resource ('Search memory by keywords') and spells out what the result set contains: graph entities with dated facts, linked entities as related, and matching notes, plus global facts. It does not explicitly differentiate itself from plausible siblings such as what_do_i_know or get_context, which keeps it off a 5.

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

Usage Guidelines4/5

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

It gives clear entry-point guidance ('Start work with this') and explains the query strategy needed because matching is lexical, not semantic ('search with the words, synonyms and both languages the facts would use'). That is actionable context, though no explicit 'use X instead when Y' routing against the sibling tools is provided.

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

rememberRememberA

Create or update a knowledge-graph entity and add facts to it (an existing name is extended, duplicates are skipped). One fact per item, under 1000 characters; the name stays short. Add keywords so later searches find it. Entities named in the facts are linked automatically, and facts that seem to contradict a stored one come back as possible_conflicts. Scope 'global' is for facts about the user that hold in every project.

NameRequiredDescriptionDefault
nameYes
scopeNo
summaryNo
keywordsNoOther words a later search might use: synonyms, abbreviations, the term in the user's language. Search has no meaning-based matching, so these matter
importanceNo0-1; defaults by type (pitfall .8, convention .75, decision .7 ... file .4)
entity_typeNoDefault concept
observationsNoFacts about the entity

TDQS

A3.7/5.0
Behavior4/5

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

With annotations only declaring the safety profile (not read-only, not destructive), the description supplies the real behavioral context: existing entities are extended rather than replaced, duplicates are skipped, entity names appearing in facts are auto-linked, and contradictory facts surface as possible_conflicts. That last point is valuable output-shape information absent from annotations. It stops short of stating permission or size-failure behavior beyond the 1000-character limit.

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

Conciseness4/5

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

A single front-loaded paragraph that opens with the core action and then layers constraints and side effects. Every sentence carries a distinct constraint or behavior; only the scope sentence could arguably be folded in more tightly.

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

Completeness4/5

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

For a 7-parameter mutation tool with no output schema, the description covers merge semantics, deduplication, conflict reporting, auto-linking, size limits, and scope meaning, which is most of what an agent needs. The absence of any mention of summary or entity_type semantics is the remaining gap.

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

Parameters3/5

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

Schema coverage is 57%, so the description needs to compensate for gaps and partly does: it constrains observations (one fact per item, under 1000 characters), explains keywords as search vocabulary because search has no semantic matching, and defines the 'global' value of scope. The name parameter's brevity is mentioned but summary and entity_type receive no description-level clarification.

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

Purpose4/5

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

States a specific verb and resource: create or update a knowledge-graph entity and add facts to it. The create-or-update semantics are spelled out (existing name extended, duplicates skipped), so the agent knows exactly what the call does. It does not differentiate itself from siblings like save_memory, correct_fact, or link, which keeps it from a 5.

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

Usage Guidelines3/5

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

Gives operative guidance within the tool: one fact per item, keep names short, add keywords so search finds it later, and use scope 'global' for user facts that span projects. However, it never says when to pick this over save_memory, correct_fact, or link, so the alternative-selection gap remains.

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

rulesUser rulesA

The user's standing rules for this project, organization and device, as injected at session start. action 'show' returns them. action 'propose' queues a rule the user explicitly asked to make standing; the user approves it in the panel, the web page or the CLI. Preferences you pick up from the conversation go to the taste tool instead. Never propose secrets or one-off instructions.

NameRequiredDescriptionDefault
modeNoFor propose. Default append
textNoFor propose: the rule, short and imperative
scopeNoFor propose. global: everywhere. device: this machine. org: the organization of this repo. project: this project. project_device: this project on this machine.
actionYes
reasonNoFor propose: why, so the user can judge it

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false with destructiveHint=false; the description adds the crucial lifecycle detail that a proposed rule is queued and requires user approval in the panel, web page, or CLI rather than taking effect immediately. It also flags a safety exclusion (no secrets). It stops short of saying what 'show' returns or how approved rules affect later sessions.

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

Conciseness4/5

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

Four sentences, front-loaded with what the resource is before the action semantics and the exclusions. Dense but no filler; the 'action show ... action propose' parallel is easy to scan. Slightly compressed phrasing ('as injected at session start') takes a moment to parse.

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

Completeness4/5

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

With no output schema, the definition still conveys the propose workflow, approval step, and scope of the rule set, which is what an agent needs to choose an action. It never says what 'show' returns (full list, per-scope breakdown, formatting), which is the one real gap for a read action with no output schema.

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

Parameters3/5

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

Schema coverage is 80% and the schema already documents scope semantics, mode default, text length, and reason. The description only ties action values to outcomes ('show' returns them, 'propose' queues), adding little on scope or mode beyond the enum descriptions. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

Names the resource precisely ('the user's standing rules for this project, organization and device') and enumerates the two verbs via action values: 'show' returns them, 'propose' queues a new rule. It also distinguishes the tool from the nearby sibling by name ('Preferences ... go to the taste tool instead'), so an agent can route without opening the schema.

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

Usage Guidelines5/5

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

Explicit when-to-use conditions: propose only for 'a rule the user explicitly asked to make standing'. Explicit when-not and alternatives: conversational preferences go to the taste tool, and 'Never propose secrets or one-off instructions'. This is the strongest dimension of the definition.

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

save_memorySave a noteA

Save a session note (what was done, decided or found) for this project. Use remember for durable facts; use this for narrative.

NameRequiredDescriptionDefault
tagsNoComma-separated
typeNoOne of task_completed, decision, note, change, issue, discovery; anything else is stored as a note. Default note
scopeNoDefault project: visible from every branch
titleNoOne-line summary; derived from the content when omitted
contentYesDetails

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare this is a non-destructive, non-open-world write, so safety is covered. The description adds the qualitative nature of what lands in storage (narrative session note vs durable fact), which is genuinely useful. It doesn't say whether notes are later retrievable via recall/what_do_i_know or how they interact with correct_fact/worklog, so a 3 is right.

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

Conciseness5/5

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

Two short sentences with zero waste, and the core purpose comes first ahead of the sibling disambiguation. Nothing to trim.

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

Completeness4/5

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

For a five-parameter, single-required-field write tool with annotations and no output schema, the definition is nearly sufficient. The one missing piece is the read-side pairing — telling the agent that saved notes surface through recall/what_do_i_know — which would close the loop with a very crowded sibling set.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already explains tags, type, scope, title and content; baseline 3 applies. The description adds only a loose mapping from 'done, decided or found' to the type enum values, which is marginal but nonzero added meaning.

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

Purpose5/5

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

States a specific verb and resource ('Save a session note') and defines the payload semantically ('what was done, decided or found'). It also names the sibling it is not (remember), so an agent can separate the two note-writing tools without reading either schema.

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

Usage Guidelines5/5

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

Gives an explicit routing rule: 'Use remember for durable facts; use this for narrative.' That names the alternative and the condition that selects it, which is exactly the decision an agent has to make among the memory siblings. The only gap is that it doesn't mention which tool reads these notes back (recall/what_do_i_know), but the write-side choice is fully covered.

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

set_contextSet project contextA
Idempotent

Override the auto-detected project, branch or PR for this session. Optional: the project is detected from the working directory, so call it only to correct the scope.

NameRequiredDescriptionDefault
prNoPR number
branchNo
projectNoProject key; omit to keep the detected one
project_nameNoHuman-readable name
project_pathNoAbsolute project path

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-read-only, idempotent, non-destructive, closed-world. The description adds the trait annotations cannot express: the override applies "for this session" and is normally unnecessary because scope is auto-detected. It does not say whether the override can be cleared or how it interacts with later detection, a minor remaining gap.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and scope, followed immediately by the deferral guidance. No filler and nothing duplicated from the structured fields.

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

Completeness4/5

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

For a five-optional-parameter session setter with no output schema, the description supplies the essential mental model (detected by default, override to correct). It leaves unaddressed whether the override persists across sessions or how a partial override merges with detected values.

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

Parameters3/5

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

Schema description coverage is 80%, so the schema already documents pr, project and project_name; the description only restates that project/branch/PR are the settable dimensions. It adds no guidance on project_name vs project_path or which fields drive detection, and branch carries no schema description at all.

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

Purpose4/5

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

Uses a specific verb ("Override") plus the exact resource scope ("project, branch or PR for this session"), which is far more informative than the bare name. It implicitly complements the sibling get_context (read) by being the write/override counterpart, though it does not name any sibling explicitly.

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

Usage Guidelines4/5

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

Explicitly states the default path (auto-detection from the working directory) and the narrow condition for calling it: "call it only to correct the scope." That is a clear when-to-use/when-not signal, short only of naming an alternative tool by name.

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

tasteLearned preferencesA

How the user wants things, learned from what they said: style, workflow, wording, tools. They are injected at session start and apply at once, with no approval. action 'show' lists them with ids. action 'learn' records what a message taught: 'new' for a wish not seen before, 'reinforce' when they say an existing one again, 'refine' when they adjust it, 'replace' when they now want something different on the same point, 'drop' when they take it back. Write each rule as a general, short instruction (one step more general than the message, never their words as a log). scope 'global' for how they work everywhere, 'org' for this organization, 'project' for this codebase. In Claude Code the panel learns these by itself; call learn when the user asks you to remember how they want something. Never store secrets or people's private data.

NameRequiredDescriptionDefault
idNoFor forget
itemsNoFor learn
actionYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false. The description adds real context beyond that — preferences are injected at session start and apply immediately with no approval — which is the key behavioral trait an agent needs. It also states a hard constraint against storing secrets or private data. It does not describe what happens to existing entries when a rule is replaced or dropped, so depth is moderate.

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

Conciseness4/5

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

Front-loaded with the core identity before action and scope detail, and nearly every clause carries operational information. It runs long and mixes several concerns into single sentences (the learn action list is dense), but there is little true filler.

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

Completeness4/5

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

With no output schema, the description covers what show returns (a list with ids) and covers the mutation model, scope levels, and content rules for learn. For a 3-parameter tool with one required enum, an agent has enough to invoke it correctly. Edge behavior on replace/drop of existing entries is the only notable omission.

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

Parameters4/5

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

Schema coverage is 67%, and the description fills the meaningful gaps: it defines what each learn action value means, explains scope as global vs org vs project, and instructs how to phrase the rule field ('general, short instruction, one step more general than the message'). That is genuine added meaning over the enum in the schema. The maxItems cap and id-on-forget detail are left to the schema.

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

Purpose4/5

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

Opens with a specific framing — a learned preference store covering style, workflow, wording, tools — and enumerates the three actions (show/learn/forget) with what each does. An agent can tell this holds durable user preferences. It doesn't explicitly distinguish itself from sibling memory tools like save_memory, remember, or rules, which keeps it from a 5.

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

Usage Guidelines4/5

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

Gives a concrete trigger: 'call learn when the user asks you to remember how they want something', and clarifies that in Claude Code the panel learns automatically. The learn sub-actions (new/reinforce/refine/replace/drop) each carry a plain-language condition. It stops short of telling the agent when to prefer this over save_memory or remember.

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

what_do_i_knowEntity detailB
Read-only

Everything about one entity: dated facts, direct relations and neighbours up to two hops away.

NameRequiredDescriptionDefault
nameYes
entity_typeNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real value with the two-hop traversal boundary, which bounds cost and result size, but says nothing about behaviour when the entity is missing or how the traversal is capped.

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

Conciseness4/5

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

A single dense sentence that front-loads the resource ('one entity') and enumerates the return contents, with zero filler. Slight gap: an opaque tool name that the description never echoes or clarifies.

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

Completeness3/5

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

With no output schema, the description usefully sketches the return shape (facts, relations, neighbours) which is a genuine plus. However, for a two-parameter lookup tool with zero schema coverage, the omission of any parameter meaning or not-found behaviour leaves it only minimally complete.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions the parameters. It does not say whether name must be exact or case-sensitive, nor what entity_type disambiguates (the enum values suggest it narrows the lookup, but this is unexplained).

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

Purpose4/5

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

The description states exactly what the tool returns: dated facts, direct relations, and neighbours up to two hops for a single entity. Scope and depth are precise, though it lacks an explicit verb and never distinguishes itself by name from siblings such as recall or get_context.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus recall, get_context, or rules. The agent must infer that this is the deep-lookup tool while recall is presumably a lighter search, and there are no stated preconditions or exclusions.

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

worklogTime reportA
Read-only

How long the user and the agent worked, per project and task (a branch or ticket), for a period. Read from the session transcripts. Use it to answer 'how much time did I spend on X this week' or 'what did I do this week'. Agent time adds up across parallel sessions; wall time counts each minute once.

NameRequiredDescriptionDefault
toNoYYYY-MM-DD, with range custom
fromNoYYYY-MM-DD, with range custom
rangeNoDefault week (Monday to Sunday)
detailNoInclude what was asked and the notes and commits per task
projectNoA project key, or 'current'. Default: every project

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, it discloses the data source (session transcripts, not a timesheet DB) and non-obvious computation semantics: agent time sums across parallel sessions while wall time counts each minute once. Those are exactly the details that change how an agent interprets the numbers, and they are not derivable from any structured field.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is measured, then the data source, then the intended use, then the two time-accounting rules. Every sentence carries distinct information and nothing is repeated from the schema.

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

Completeness4/5

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

With five optional parameters, no output schema, and safety already covered by annotations, the description supplies the essential model: measurement unit, grouping, source, and the agent-vs-wall-time distinction. What it omits is the shape of the returned report (fields per task, how totals are grouped or sorted), which an agent must infer despite there being no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so range/from/to/detail/project semantics are already documented in the schema itself. The description only adds the implicit grouping notion ('per project and task') and the period framing; it contributes no extra format, precedence, or defaults beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

The description states precisely what is measured (time worked by the user and the agent), at what granularity (per project and task, i.e. branch or ticket), over what scope (a period), and from what source (session transcripts). No sibling tool overlaps with time reporting, so no explicit differentiation is needed, though the phrasing is a resource statement rather than a verb+resource construction.

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

Usage Guidelines4/5

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

It gives two concrete example questions that select this tool ('how much time did I spend on X this week', 'what did I do this week'), which makes the intended call context unambiguous. There are no exclusion rules or named alternatives, but none of the sibling tools compete with this capability, so the guidance is practically complete.

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

Tool Schema Changelog

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

  1. 19 tool updatesv1.2.0
    • First observedclear_tasks
    • First observedcomplete_task
    • First observedcorrect_fact
    • First observedcreate_task_group
    • First observedforget
    • First observedget_context
    • First observedget_next_task
    • First observedget_task_status
    • First observedgraph_stats
    • First observedlink
    • First observedlist_projects
    • First observedrecall
    • First observedremember
    • First observedrules
    • First observedsave_memory
    • First observedset_context
    • First observedtaste
    • First observedwhat_do_i_know
    • First observedworklog

TDQS

B3.4/5.0

Scored across 19 tools

Disambiguation3/5

The memories cluster (save_memory / remember / correct_fact / recall / get_context / what_do_i_know) has real boundary overlap, though most descriptions explicitly cross-reference each other to steer selection. The pair 'rules' vs 'taste' is the weakest split: both are standing user preferences injected at session start, differing only in approval flow. Task tools themselves are clearly distinct.

Naming Consistency3/5

Most names are snake_case verb_noun (create_task_group, get_next_task, complete_task, clear_tasks, correct_fact), which is readable and mostly predictable. But several are bare nouns (rules, taste, worklog, graph_stats) and one is a question phrase (what_do_i_know), so the pattern breaks down noticeably.

Tool Count3/5

19 tools is at the heavy end for a server named 'Task Runner' whose actual task surface is only four tools (create_task_group, get_next_task, complete_task, get_task_status). The remainder spans memory/knowledge graph, rules, taste, and worklog, so the count feels large relative to the advertised scope.

Completeness4/5

Memory has near-full lifecycle (remember, link, recall, what_do_i_know, correct_fact, forget, graph_stats) and the task loop (create, next, complete, status, clear) is workable. Gaps remain: no way to update/reopen/delete a single task, no note edit or delete, and rules support only show/propose with no withdraw path. Agents can work around these, so it stays above mid.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides durable project context for coding agents, including project maps, session history, and explicit memories, all stored locally.
    15 npm
    7
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides persistent project memory for AI coding agents, enabling context retention across sessions via event logging, briefing generation, and querying.
    MIT