continuity
Переносимое состояние проекта на базе git для длительной AI-работы — в Claude Code, Cursor или в любом инструменте, говорящем на MCP.
Это не инструмент памяти. Инструмент памяти отвечает на вопрос «о чём мы говорили?» Continuity отвечает на другой вопрос: «что верно об этом проекте сейчас, и к чему нельзя прикасаться?»
Почему он устроен именно так
Состояние хранится в виде обычных markdown-файлов, отслеживаемых git. Git и есть журнал событий: история =
git log, откат =git revert, аудит =git blame. Каждое утверждение читаемо человеком, поддаётся диффу и ручному редактированию. Вы просматриваете то, что захватил AI, так же, как просматриваете сгенерированный код — в виде диффа, когда захотите. Никакого шлюза одобрения в момент захвата нет.Два режима хранения, один API. Режим репозитория (
<repo>/.continuity/, находится подъёмом вверх от рабочей директории) подходит для редакторных/агентных инструментов с рабочей директорией проекта, таких как Claude Code. Центральный режим (~/.continuity/projects/<name>/, именованные проекты) подходит для инструментов без рабочей директории проекта, таких как Claude Desktop — вы просто обращаетесь к проекту по имени.Контекст возобновления — это детерминированная проекция этих файлов (никакого LLM на пути чтения) — замороженные ограничения, активные решения с причинами, по которым они заменили более старые, отвергнутые пути, которые не стоит предлагать заново, открытые вопросы и следующий шаг.
Доверие строится на честности, а не на слепой вере. Каждое утверждение несёт
confidence+provenance, поэтому новая сессия знает, что подтверждено, а что выведено AI, и калибруется вместо того, чтобы доверять всему.
Полная архитектура — в DESIGN.md, а обоснование — в poc/.
Related MCP server: KeepGoing MCP Server
Установка (как плагин Claude)
Continuity — это плагин Claude Code, распространяемый как собственный маркетплейс плагинов — этот репозиторий и есть маркетплейс. Он работает везде, где работает Claude Code: в терминале, в десктопном приложении и в вебе. В Claude Code:
/plugin marketplace add vikcena01/ai-continuity-plugin
/plugin install continuity@continuity-marketplaceВсё — встроенный MCP-сервер, навык continuity (авто-возобновление + авто-захват), хук SessionStart и команды /resume /freeze /why устанавливаются вместе. dist/ закоммичен и не имеет зависимостей, так что при установке не нужен шаг сборки.
Локальная разработка
npm install
npm run build # typecheck + bundle to dist/
npm test # build + 69 assertions across four suitesЦикл (CLI)
continuity init "Build Snip, an internal URL shortener"
continuity record-decision "PostgreSQL is the source of truth" --body "ops knows it; volume is modest"
continuity reject "DynamoDB as primary store" --reason "KV overhead unjustified at our volume"
continuity record-constraint "Short codes are exactly 7-char base62" --body "printed in marketing + partner contract"
continuity freeze "7-char base62" # lock an invariant — fuzzy: id OR title substring
continuity resume # <- the compact state a new session gets
continuity why "301" # <- what a decision replaced, and why
continuity resolve "8-char codes" --reject --reason "separate namespace"
continuity list # ids are short: d1k3, c2m9, x1p4, ...
continuity log # the git-backed event logУтверждения получают короткие, удобные для ввода идентификаторы — префикс типа, порядковый номер и двухсимвольный суффикс: d1k3, c2m9, x1p4. Суффикс — это то, что делает параллельную работу безопасной: без него два разработчика, каждый из которых записывает 16-е решение, оба пишут claims/d16.md и сталкиваются при слиянии. freeze / why / supersede / resolve принимают идентификатор или подстроку заголовка. Состояние записывается в claims/ и автоматически коммитится в git при каждом изменении — но никогда не пушится автоматически, поэтому resume предупреждает, когда захваченные коммиты лежат неотправленными.
Закрытие утверждения
resolve — единственный способ, которым утверждение достигает терминального статуса, и причина обязательна — утверждение, которое просто исчезает, ничему не учит следующую сессию:
continuity resolve <id-or-text> --accept --reason "..." # a parked conflict wins
continuity resolve <id-or-text> --reject --reason "..." # it becomes a guardrail
continuity resolve <id-or-text> --close --reason "..." # a settled risk/questionПринятие утверждения, припаркованного против замороженного, дополнительно требует --unfreeze. Замораживание — единственное человеческое действие в модели, поэтому его переопределение должно быть вторым осознанным действием.
Использование в Claude Desktop (MCP)
Любой хост, говорящий на MCP, но не имеющий рабочей директории проекта, может использовать MCP-сервер с именованными проектами. (Примечание: десктопное приложение Claude запускает внутри себя Claude Code, так что полный плагин — хуки, команды, навык — работает там; этот путь для хостов с чистым MCP.) Соберите (npm run build), затем добавьте в claude_desktop_config.json:
{
"mcpServers": {
"continuity": {
"command": "node",
"args": ["/absolute/path/to/ai-continuity-plugin/dist/mcp.js"],
"env": { "CONTINUITY_HOME": "/Users/you/.continuity/projects" }
}
}
}Затем в чате: «создай проект continuity под названием snip» → create_project; «возобнови snip» → resume_context; модель записывает решения/ограничения/отклонения по ходу работы. Вызываемый пользователем промпт resume — это замена авто-возобновления Claude Code для Desktop. Инструменты: list_projects, create_project, resume_context, record_decision, record_constraint, record_rejection, record_open, capture, resolve_claim, freeze_claim, why.
Как плагин Claude Code (бонус)
Этот репозиторий также является плагином Claude Code (манифест в .claude-plugin/plugin.json). Здесь, поверх MCP-сервера, вы получаете то, что Claude Desktop не умеет:
хук SessionStart (
hooks/hooks.json), который автоматически внедряетresume_contextв новых / возобновлённых / пост-компактных сессиях — вам никогда не приходится просить;хук Stop, который выполняет проверку захвата в конце хода, так что решения записываются без того, чтобы кто-то помнил попросить. Два независимых предохранителя (
stop_hook_activeплюс временной троттлинг) делают цикл невозможным;слэш-команды
/resume,/freeze,/why.
Репозиторий также содержит .claude/settings.json, который регистрирует те же хуки против собственного закоммиченного dist/. Коллега, который просто выполняет git clone, получает авто-возобновление и авто-захват без установки чего-либо. Оба хука дедуплицируются на сессию, так что одновременное наличие установленного плагина и клонированного репозитория безвредно.
Формат утверждения
Каждый .continuity/claims/<id>.md:
---
id: d4k7
type: decision # decision | constraint | rejected_alternative | mission | milestone | question | next_action | ...
status: accepted # accepted | frozen | superseded | rejected | open | needs_review | resolved | done
resolution: # set by `resolve`: why this claim was closed
confidence: confirmed # confirmed | tentative | unverified
provenance:
origin: manual
created: 2026-08-04T00:00:00.000Z
supersedes: []
superseded_by: null
depends_on: []
tags: []
---
Postgres is the primary datastore; a Redis read cache may come later.Формат утверждения (контракт)
Как только в чужом репозитории появляются утверждения, формат файла становится контрактом — поэтому он несёт версию:
---
schema: 1 # absent means 1
id: d16k3 # <type prefix><n><2-char suffix>; the suffix keeps concurrent clones from colliding
type: decision # mission requirement decision constraint architecture milestone
# hypothesis experiment risk question next_action rejected_alternative
title: One crisp fact
status: accepted # accepted active frozen open superseded invalidated rejected
# needs_review completed done resolved
confidence: confirmed # unverified tentative confirmed
provenance: { origin: auto, created: ... }
supersedes: []
superseded_by: null
superseded_reason: "" # why the replacement happened — travels with the claim
resolution: "" # why it was closed, set by `continuity resolve`
---
Prose body. The reason, the context, whatever a future session needs.Обещание стабильности. Утверждение, записанное более старой версией Continuity, всегда читается: отсутствие schema означает 1, а более старые формы мигрируют вперёд в памяти без перезаписи ваших файлов. Утверждение, записанное более новой версией Continuity, отвергается по имени, громко, а не полу-парсится — угадывание формы, которую мы не понимаем, — это путь к тихой деградации состояния. continuity migrate перезаписывает файлы в текущей схеме, когда вы хотите явную версию на диске.
Просмотр захваченного
Захват автономен, поэтому защита в том, что вы можете видеть, что было записано:
continuity review # semantic diff: what appeared, changed status, or was edited — and why
continuity review --accept # mark it reviewedОн ловит и ручные правки, и записи инструментов, а контекст возобновления сообщает вам, когда есть ожидающие изменения.
Статус
v1.0 — детерминированное ядро + CLI + MCP-сервер + плагин Claude Code. Версионированные файлы утверждений, безопасные к коллизиям идентификаторы, нечёткий поиск, бюджетная проекция возобновления, журнал событий на git и 124 проверки в семи наборах (npm test).
Работает сегодня:
Автономный захват, управляемый хуком Stop в конце каждого хода — а не памятью модели.
Реконсилятор за каждым пакетным захватом: дедупликация, суперсессия с сохранением родословной и замороженный предохранитель, который паркует всё, что противоречит замороженному утверждению, как
needs_review, вместо применения.Глагол
resolveдля закрытия того, что припарковал реконсилятор, и для закрытия рисков/вопросов, когда они урегулированы.
Известные ограничения, отслеживаемые как утверждения в собственном .continuity/ этого репозитория: проверка захвата в хуке Stop троттлится максимум до одного раза за 10 секунд, поэтому решение, принятое в очень быстром обмене, всё ещё может быть пропущено (q3); а надёжное извлечение статуса из беспорядочных сессий остаётся открытым техническим риском (q2).
Знак
C, нарисованная одной непрерывной дугой — нить, которая выживает между сессиями, — завершающаяся узлом, единственным захваченным утверждением. assets/icon.svg — тот же знак на скруглённой плитке для аватара или фавиконки; assets/logo-light.svg и assets/logo-dark.svg — логотип-слово, выбираемый через prefers-color-scheme, так что обе темы GitHub работают.
Лицензия
MIT — см. LICENSE. Copyright (c) 2026 Vikash.
Available Tools
12 toolscaptureCapture batchA
Apply a BATCH of claim operations in one call, through the reconciler. Prefer this over several record_* calls when a turn produced more than one thing. The reconciler enforces what you should not be trusted to enforce yourself: a near-identical claim is skipped rather than duplicated, superseding archives the old claim with the reason instead of deleting it, and anything that would contradict a FROZEN claim is parked as needs_review for a human rather than applied. Append-only: nothing is removed, so the worst case is a claim you later supersede. Call resume_context first so you know existing ids and which claims are frozen.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | The batch. Ops are applied in order against state that is re-read between each, so a supersede can target something added earlier in the same batch. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral semantics beyond the annotations: near-identical claims are skipped rather than duplicated, superseding archives the old claim instead of deleting it, frozen-claim contradictions are parked for human review, and the operation is append-only. This goes well beyond the annotations, which only indicate mutation and non-idempotence, and directly shapes how an agent should reason about effects.
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 dense but every sentence adds operational value: purpose, usage guidance, reconciler semantics, safety guarantee, and prerequisite. It front-loads the core action and differentiator before explaining behavior. No filler undermines the message.
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 prerequisites, batching rationale, side-effect behavior, and safety boundaries, making the tool callable with good judgment. The main gap is that it does not describe the return/response shape, especially per-operation outcomes like applied, skipped, parked, or rejected. Given no output schema, a brief note about what the call returns would make it fully 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?
The input schema already covers all parameters at 100%, so the baseline is 3. The description adds useful context beyond the schema, such as the dedupe-skip behavior, the append-only guarantee, and the need to call resume_context first to resolve ids and frozen states. It does not repeat parameter syntax, which is appropriate given the schema's richness.
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 ('Apply a BATCH of claim operations'), a resource ('claim operations'), and a process ('through the reconciler'). It also distinguishes itself from sibling record_* calls by emphasizing batch scope. The title alone is vague, but the description resolves that ambiguity completely.
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 over several record_* calls when a turn produced more than one thing, giving a clear selection criterion. It also provides a prerequisite: call resume_context first so the agent knows existing ids and frozen claims. This is actionable, concrete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate projectAIdempotent
Create or initialize a named project in the central store. Creates a directory and an initial git commit. Safe to call on a name that already exists: existing claims are left untouched, so it is effectively idempotent. For central mode only — hosts with no project directory. Inside a git repo, state belongs in the repo instead, which the continuity init CLI sets up.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short kebab-case project name. Becomes the directory under ~/.continuity/projects and the handle passed as `project` to every other tool. | |
| mission | No | One sentence on what the project is for. Rendered as the resume context's title, so a future session sees it first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark idempotentHint=true and destructiveHint=false, and the description adds concrete behavioral detail: what gets created (directory, initial git commit), that existing claims are untouched, and that the tool is not appropriate inside an existing git repo. This goes well beyond 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?
Three sentences with a clear progression: action/effect, safety behavior, usage constraint. Each sentence earns its place, though the idempotency statement is slightly expanded by rephrasing what the annotation already conveys.
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 two-parameter create tool with good annotations and no output schema, the description covers the essential context: side effects, idempotency, mode restriction, and the alternative setup path. Minor gap: no explicit statement of what the tool returns or signals on success, but that is not critical for 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?
Schema description coverage is 100% — both parameters are well documented in the schema itself. The description does not add new parameter-level meaning but also does not need to; the baseline of 3 applies.
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 ('Create or initialize'), resource ('named project in the central store'), and concrete effects ('Creates a directory and an initial git commit'). Clearly distinguishable from sibling tools like list_projects or capture, which serve entirely different purposes.
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 limits usage to central mode ('hosts with no project directory') and names the alternative ('continuity init CLI') for git-repo contexts. Also explains that calling on an existing name is safe, removing ambiguity about idempotent re-invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
freeze_claimFreeze claimAIdempotent
Mark a claim frozen: an invariant that must never change. This is the one deliberate lock in the model, so call it ONLY when the user explicitly asks for something to be locked — never on your own initiative. Once frozen, autonomous capture can no longer supersede it: a contradicting claim is parked for human review instead. Overriding it later requires resolve_claim with unfreeze, which is also an explicit human decision. Idempotent: freezing an already-frozen claim changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Claim id (for example c1) or a unique substring of its title — 'why' and 'freeze' both accept either. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the idempotentHint annotation, the description reveals consequential behavior: freezing prevents autonomous capture from superseding the claim, routes contradicting claims to human review, and requires resolve_claim with unfreeze to override. These are meaningful behavioral details not inferable from the schema or annotations alone.
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 tight and every sentence carries weight: definition, strict usage guard, consequence, override path, and idempotence. It is front-loaded with the core purpose and no filler or repetitive content.
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 consequential mutation tool with no output schema, the description covers the full call decision: when to use it, what effect it has on future captures, how contradictions are handled, and how to reverse it. Combined with the complete schema, an agent has enough to invoke it 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 100%, so the schema already explains id and project, including the substring matching behavior for id. The description adds context about what a 'claim' is but does not add parameter-level guidance beyond what the schema provides, so a baseline 3 is appropriate.
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 ('Mark a claim frozen') and defines what frozen means: an invariant that must never change. It also differentiates itself from siblings by calling this 'the one deliberate lock in the model' and referencing resolve_claim for unfreezing, so an agent can distinguish it from capture or record_constraint.
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 explicitly when to invoke the tool ('ONLY when the user explicitly asks for something to be locked') and when not to ('never on your own initiative'). It also points to the alternative for undoing the operation later: resolve_claim with unfreeze, which is also an explicit human decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsARead-onlyIdempotent
List the named projects in the central store (~/.continuity/projects). Read-only; writes nothing. Use it when the user names a project you have not seen, or to check whether central mode holds any state at all. Inside a repo that has .continuity/ this is usually irrelevant — that state is found from the working directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's 'Read-only; writes nothing' is non-contradictory repetition. It adds useful behavioral context by clarifying the tool only inspects the central store and does not incorporate working-directory state, which is valuable beyond 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?
Three sentences, each earning its place: the first states the action and target, the second reinforces safety and when to use it, and the third scopes out the main alternative context. No filler or 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?
For a simple, parameterless list tool, the description fully covers what an agent needs: the source of data, the read-only safety profile, the conditions for invocation, and the context in which it should be avoided. The absence of an output schema is acceptable because the behavior 'List the named projects' sufficiently implies the return shape.
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 the baseline is 4. The description correctly avoids inventing parameter details and instead explains what the tool operates on, which is sufficient for a parameterless 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 description names a specific verb ('List'), a specific resource (named projects in the central store), and the exact location (~/.continuity/projects). It also distinguishes this tool from working-directory-based state, making its purpose unmistakable even among 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?
Explicitly states when to use it: when the user names an unseen project or when checking whether central mode holds any state. It also states when it is usually irrelevant (inside a repo with .continuity/), giving clear guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_constraintRecord constraintA
Append a constraint that future work must respect. Same persistence as record_decision: one file, one commit, append-only. A constraint is a boundary rather than a choice — 'ids stay short and typeable' rather than 'we chose X'. Use freeze_claim only if the user wants it to become unchangeable.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Why the constraint exists. Kept short — it is re-read every session. | |
| title | Yes | The boundary, phrased as a rule future work must satisfy. Appears verbatim in every future resume context. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal this is a non-read, non-idempotent operation, and the description adds concrete behavioral detail beyond that: 'one file, one commit, append-only.' This tells the agent what the side effect looks like 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?
Three sentences with no filler. The core action is front-loaded, persistence behavior is stated compactly, and the sibling distinction is placed at the end. 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?
For a 3-parameter tool with full schema coverage, the description provides the essential behavioral context and sibling guidance. It does not describe the return value, but there is no output schema and the tool's side-effect model is already clear enough 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?
Schema description coverage is 100%, and the schema already explains title, body, and project with meaningful guidance. The description does not repeat or add parameter-level semantics, so it earns the baseline score rather than higher.
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 ('Append a constraint that future work must respect') and clearly distinguishes constraints from decisions by defining them as boundaries rather than choices. It also references freeze_claim as the closely related sibling, so an agent can disambiguate without opening other 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 gives an explicit routing instruction: 'Use freeze_claim only if the user wants it to become unchangeable.' It also positions the tool relative to record_decision via the persistence note, making the when-to-use call unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_decisionRecord decisionA
Append a decision the user has settled. Writes one markdown file plus a git commit; nothing is overwritten or removed, so a mistaken entry is corrected by superseding it rather than by editing. The decision then appears in every future resume context. Capture autonomously as you observe it — no permission needed — but only for things a future session could not re-derive; skip restatements and progress narration.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | The reasoning behind it. Keep it short: bodies are re-read in every future session and count against the resume budget. | |
| title | Yes | One crisp fact, phrased as a statement. This exact text appears in every future resume context, so make it self-contained. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. | |
| confidence | No | 'confirmed' when the user stated it plainly; 'tentative' when you inferred it. Defaults to tentative, which is the honest default for an inference. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavior beyond annotations: writes a markdown file plus a git commit, nothing is overwritten or removed, the decision appears in every future resume context, and no permission is needed. These details enrich the minimal readOnly/destructive hints without contradicting them.
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 with no filler. The primary action is front-loaded, and each sentence adds meaningful context: what it writes, safety properties, and usage criteria. Highly concise and well structured.
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?
Covers the core aspects an agent needs: action, side effects, when to use, and correction mechanism. Missing some details like output format or error conditions, but with full schema coverage and no output schema, it is sufficiently complete 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 fully describes all four parameters (100% coverage), so the baseline is 3. The tool description itself does not add extra parameter meaning beyond what the schema already provides.
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 and resource: 'Append a decision the user has settled.' It clearly identifies the tool's function and distinguishes it from the record_* siblings by focusing on decisions, though it does not explicitly contrast with alternatives like record_constraint.
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 guidance: 'Capture autonomously as you observe it — no permission needed — but only for things a future session could not re-derive; skip restatements and progress narration.' This tells an agent when to invoke it and what to avoid, though it does not name alternative tools for other record types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_missionRecord missionAIdempotent
Set or replace the project's mission — the single line rendered at the top of every resume context, which is what a fresh session reads first. Creates it if none exists. Replacing an existing mission REQUIRES a reason, and supersedes rather than overwrites: the previous mission is archived as a claim with the reason, because a strategic pivot is exactly what someone asks 'why did this change?' about later. Setting the identical text is a no-op. Use this rather than capture with type mission; use create_project instead only when the project does not exist yet.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Optional elaboration. Rendered under the heading, so keep it to a sentence. | |
| title | Yes | The mission in one line, phrased as what the project is for. Appears as the resume context's heading, so make it self-contained. | |
| reason | No | Why the mission is changing. Required only when replacing an existing mission; omitted on first set. Travels with the superseded claim. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key behaviors: creation if none exists, replacement requiring a reason, superseding rather than overwriting, archival of the previous mission as a claim, and no-op on identical text. These details are consistent with the idempotentHint=true and destructiveHint=false annotations, and they add meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: purpose, core behavior, edge cases, and routing to alternatives all appear in a logical order without redundant phrasing. Every sentence contributes either a behavioral rule or selection guidance.
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 tool with four parameters and no output schema, the description is complete: it covers the core operation, edge cases, required inputs for replacement, store/repo behavior, and sibling-tool selection. No critical information an agent needs to call this tool correctly 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?
Input schema coverage is 100% with solid per-parameter descriptions, so the baseline is 3. The description adds value by clarifying when reason is required, how the project parameter is resolved in a repo, and that the previous mission travels as a claim with the reason, which enriches the meaning of reason and project beyond the schema 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 and resource: 'Set or replace the project's mission', then defines exactly what the mission is (the single line at the top of every resume context). It clearly distinguishes this tool from siblings by naming capture and create_project as alternatives, so an agent can select it confidently.
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 guidance: use this rather than capture with type mission, and use create_project instead only when the project does not exist yet. It also states the required-reason rule for replacement and the project-omission rule inside a repo, leaving no ambiguity about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_openRecord open itemA
Append an open question, risk, milestone or next action. These are recorded with status 'open', so they keep surfacing in the resume context until closed with resolve_claim. Only one milestone and one next_action show at a time — recording a new next_action does not retire the old one, so supersede it via capture when direction changes.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Detail a future session needs. Keep it short — the next_action body is rendered in the resume header. | |
| type | Yes | question: something undecided. risk: something that could go wrong. milestone: the current goal. next_action: where to resume. | |
| title | Yes | The question, risk, goal or next step in one line. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=false, readOnlyHint=false, idempotentHint=false, and openWorldHint=false, which establishes this as a non-destructive non-idempotent write. The description adds valuable behavioral context beyond annotations: items persist with status 'open', a new next_action does not retire the old one, and body length is constrained because it renders in the resume header. It could mention the exact overwrite/supersession mechanics more explicitly, but the description meaningfully extends the annotation signal.
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 dense sentences with zero filler. The core purpose is front-loaded, behavioral constraints follow, and the supersede guidance is placed last. Every clause earns its place — the body-rendering note, the one-at-a-time display rule, the non-retirement warning, and the resolve_claim relationship all convey distinct, non-redundant information. Nothing could be cut without losing meaning.
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 that annotations already declare the write-operation profile and the schema covers 100% of parameters, the description covers the essential agent needs: what to record, how items behave over time, and what alternatives exist. It is slightly pessimistic to require more given no output schema exists and the tool is simple (4 flat params, no nesting). A small gap is that it doesn't state what the return value is or confirm success, but for a simple append-style tool this is minor.
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 coverage is 100%, so the schema already documents all four parameters thoroughly, including the enum values and their meanings in the type property. The description adds marginal value by clarifying the body's rendering impact ('rendered in the resume header') and the next_action display behavior, but most parameter semantics are already in the schema. Baseline 3 is appropriate when the schema carries the weight.
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 precise verb and resource: 'Append an open question, risk, milestone or next action.' It enumerates the exact item types, clearly distinguishing this from sibling tools like record_decision, record_constraint, and record_rejection. The status 'open' semantics and relationship to resolve_claim are made explicit, so an agent can tell this tool apart from its siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: these items keep surfacing in resume context until closed with resolve_claim, and it warns about the one-milestone/one-next-action display behavior. It also names the alternative approach ('supersede it via capture when direction changes') for retiring an old next_action, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_rejectionRecord rejectionA
Append an alternative that was considered and rejected, together with the reason. It is then listed under 'Do NOT revisit' in every future resume context, which is the point: it stops the same idea being re-proposed months later. Append-only, like the other record_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The rejected approach, stated as the thing someone might otherwise propose. | |
| reason | Yes | Why it was rejected. Required, because the reason is what prevents it being re-proposed — a bare rejection teaches a future session nothing. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no protective annotations, the description carries the burden and does well: it discloses append-only behavior, persistence across future resume contexts, and the permanent 'Do NOT revisit' classification. This goes beyond what 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences with no filler. The core action is front-loaded, and the behavioral consequence is explained in the second sentence.
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 an append-only record tool without an output schema, the description covers what the tool does, its lasting effect, and how it groups with sibling record_* tools. Missing a note on return value or idempotency, but neither is critical 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?
Schema description coverage is 100%, and the schema already explains title, reason, and project in detail. The description restates the conceptual pairing of the rejection and reason but adds no new parameter-level meaning beyond the schema.
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 ('Append'), a distinct resource (an alternative that was considered and rejected), and the unique outcome (listed under 'Do NOT revisit'). The purpose is immediately clear and does not rely on the title.
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: use it for rejected alternatives so they are not re-proposed. It does not explicitly name record_decision or record_constraint as alternatives or state when not to use it, but the semantic boundaries are inferable from the stated purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_claimResolve claimADestructive
Close a claim, recording WHY. Two uses. (1) A claim parked as needs_review by the reconciler: action 'accept' makes it win, superseding whatever it conflicted with, or 'reject' turns it into a guardrail so it is never re-proposed. (2) An open risk, question or next_action that has been dealt with: action 'close' moves it to resolved, or done for a next_action or milestone. The reason is mandatory — a claim that simply vanishes from the resume context teaches a future session nothing. Nothing is deleted; closing archives. Accepting a claim parked against a FROZEN one additionally requires unfreeze, because breaking a frozen invariant is the user's decision: ask them first.
| Name | Required | Description | Default |
|---|---|---|---|
| claim | Yes | Claim id, or a unique substring of its title. | |
| action | No | Parked claims must say accept or reject; anything else defaults to close. accept applies only to a parked claim. | |
| reason | Yes | Why it is being closed. Required — this is the part a future session reads, and it is surfaced by the 'why' tool. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. | |
| unfreeze | No | Only to accept a claim parked against a FROZEN one. Requires the user's explicit go-ahead; without it the call is refused rather than silently overriding the invariant. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark destructiveHint=true and readOnlyHint=false, the description adds substantial behavioral detail: 'Nothing is deleted; closing archives,' accept 'superseding whatever it conflicted with,' reject turns the claim into a guardrail 'so it is never re-proposed,' and accepting against a FROZEN claim is 'refused rather than silently overriding.' This goes well beyond what the annotations convey and clarifies the exact nature of the destructive action.
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 dense but every sentence earns its place. It uses 'Two uses' as a clear structural marker, front-loads the core action, and then covers each call pattern, the mandatory reason, archival behavior, and the frozen-claim caveat without fluff. The length is justified by the tool's real complexity.
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 tool with two call patterns, a three-value enum, and a frozen-claim edge case, the description is complete. It covers accept, reject, and close, explains the mandatory reason, states that nothing is deleted, and specifies when unfreeze is required. Since all parameter details are in the schema and there is no output schema, nothing an agent needs to invoke this correctly 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?
Schema description coverage is 100%, with all five parameters already documented, so the baseline is 3. The description reinforces that reason is mandatory and that unfreeze requires explicit user consent, but it does not add parameter-level meaning beyond what the input schema already provides. It correctly emphasizes the reason's purpose for future sessions, but that is contextual rather than new parameter semantics.
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: 'Close a claim, recording WHY.' It then enumerates two distinct uses — parked claims (accept/reject) and open risks/questions/actions (close) — which clearly separates it from siblings like record_rejection, record_open, and freeze_claim. This is far beyond a tautology and gives an agent a precise mental model.
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 guidance: parked needs_review claims take accept or reject, while dealt-with open items take close. It also adds an exclusion ('accept applies only to a parked claim') and a frozen-claim precondition requiring the user's go-ahead. However, it never names sibling tools as alternatives, so an agent must infer when record_decision or record_rejection would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_contextResume contextARead-onlyIdempotent
Return the current project state as a deterministic projection: mission, milestone, next step, frozen constraints, active decisions each annotated with the reason it replaced its predecessor, rejected alternatives, parked conflicts, and open questions. Read-only; writes nothing. Call this FIRST when starting work on an ongoing project and honour it — frozen items and rejected alternatives are authoritative, not suggestions. No model runs in this path, so the same state always yields the same text. Output is budgeted to roughly 16KB and states explicitly when it had to trim.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: determinism ('No model runs in this path, so the same state always yields the same text'), output budgeting (roughly 16KB with explicit trim notice), and 'Read-only; writes nothing' reinforcing readOnlyHint. No contradiction with the provided 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?
Dense but each sentence earns its place — purpose first, then safety/determinism guarantees, then usage authority, then budget behavior. Slightly long but tightly packed with non-redundant information.
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?
No output schema exists, so the description carries the return contract explicitly by enumerating every field in the projection and the trim behavior. For a single-optional-parameter read tool this is complete; nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the optional project parameter including the .continuity/ discovery fallback. The description adds no param detail, which is fine since the schema carries the full burden; baseline 3 applies.
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?
Specific verb ('Return') plus a clearly enumerated resource: project state as a deterministic projection listing mission, milestone, next step, frozen constraints, active decisions, rejected alternatives, parked conflicts, and open questions. This fully distinguishes it from the record_*/create_* mutation siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Call this FIRST when starting work on an ongoing project' and gives authority rules ('frozen items and rejected alternatives are authoritative, not suggestions'). It doesn't name alternatives by exclusion, but the contrast with sibling write tools is implied clearly enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whyWhyARead-onlyIdempotent
Explain a claim's history. Read-only; writes nothing. Returns the claim's current title and status, then one line per predecessor it replaced with the reason recorded at the time, then its closing reason if it has been resolved. A claim that replaced nothing says so explicitly ('supersedes nothing — original decision') rather than returning an empty result, so a blank answer always means the lookup failed, never that the history is empty. Accepts a claim id or a unique substring of its title; an ambiguous substring returns the candidate ids instead of guessing, and no match says so. Call it before re-opening anything that looks settled — the answer is often that it was already decided, reversed once, and why, which is the difference between a considered change and re-litigating a closed question.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Claim id (for example d4) or a unique substring of its title. Substrings are matched case-insensitively against both id and title, so a distinctive few words are usually enough. | |
| project | No | Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description details the return sequence, the explicit 'supersedes nothing' behavior, the blank-result meaning, and the ambiguity/no-match handling. This is substantial behavioral disclosure that helps an agent interpret results correctly.
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 longer than minimal but every sentence adds value: purpose, return format, edge cases, input semantics, and usage context. It is front-loaded and well-organized, though a few clauses could be tightened without losing meaning.
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?
There is no output schema, so the description correctly carries the burden of explaining return values and failure modes. It covers current title/status, predecessor lines, closing reasons, empty-history semantics, lookup failure, and ambiguity. For a read-only lookup tool, 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?
The input schema already documents both parameters fully (100% coverage), and the description adds meaningful semantics: substring matching is case-insensitive, ambiguous substrings return candidate ids, and no match is reported explicitly. This goes beyond the schema and prevents incorrect assumptions.
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 'Explain a claim's history,' a specific verb and resource, and clarifies it is read-only. It clearly separates this tool from the write-oriented siblings like record_decision, freeze_claim, and resolve_claim, and from list_projects.
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 guidance: 'Call it before re-opening anything that looks settled' and explains why the history matters. It does not name alternatives or state when not to use it, but the context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v1.3.0- Added
record_mission - Changed
why1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Claim id or a unique substring of its title."New value: +"Claim id (for example d4) or a unique substring of its title. Substrings are matched case-insensitively against both id and title, so a distinctive few words are usually enough."
10 tool updates
v1.1.1- Changed
capture10 fields changed- changed
Input schema / properties / ops / descriptionPrevious value: -"Batch of capture ops."New value: +"The batch. Ops are applied in order against state that is re-read between each, so a supersede can target something added earlier in the same batch." - added
Input schema / properties / ops / items / properties / body / descriptionAdded value: +"Detail a future session needs. Keep short — re-read every session." - added
Input schema / properties / ops / items / properties / confidence / descriptionAdded value: +"'confirmed' only when the user stated it plainly." - added
Input schema / properties / ops / items / properties / conflicts_with / descriptionAdded value: +"Flag that this claim contradicts an existing one, by id or title. If that claim is frozen, this one is PARKED for review instead of applied." - added
Input schema / properties / ops / items / properties / old / descriptionAdded value: +"supersede only: the claim being replaced, by id or unique title substring. If it cannot be resolved uniquely the op is skipped with a note." - added
Input schema / properties / ops / items / properties / op / descriptionAdded value: +"add: a new claim. reject: a rejected alternative, which becomes a guardrail. supersede: replace an existing claim, keeping its lineage." - added
Input schema / properties / ops / items / properties / reason / descriptionAdded value: +"For reject: why it must never be re-proposed. For supersede: why the old claim was replaced. This reason travels into future resume contexts." - added
Input schema / properties / ops / items / properties / title / descriptionAdded value: +"One crisp fact. Also the dedupe key: a live claim with the same normalised title is skipped." - added
Input schema / properties / ops / items / properties / type / descriptionAdded value: +"Claim type: decision, constraint, architecture, question, risk, milestone, next_action, requirement, hypothesis, experiment, mission, rejected_alternative. Unknown types are REJECTED with a note rather than coerced. Defaults to decision for add." - changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory."
- Changed
create_project2 fields changed- added
Input schema / properties / mission / descriptionAdded value: +"One sentence on what the project is for. Rendered as the resume context's title, so a future session sees it first." - added
Input schema / properties / name / descriptionAdded value: +"Short kebab-case project name. Becomes the directory under ~/.continuity/projects and the handle passed as `project` to every other tool."
- Changed
freeze_claim2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Claim id (for example c1) or a unique substring of its title — 'why' and 'freeze' both accept either." - changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory."
- Changed
record_constraint3 fields changed- added
Input schema / properties / body / descriptionAdded value: +"Why the constraint exists. Kept short — it is re-read every session." - changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory." - added
Input schema / properties / title / descriptionAdded value: +"The boundary, phrased as a rule future work must satisfy. Appears verbatim in every future resume context."
- Changed
record_decision4 fields changed- added
Input schema / properties / body / descriptionAdded value: +"The reasoning behind it. Keep it short: bodies are re-read in every future session and count against the resume budget." - added
Input schema / properties / confidence / descriptionAdded value: +"'confirmed' when the user stated it plainly; 'tentative' when you inferred it. Defaults to tentative, which is the honest default for an inference." - changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory." - added
Input schema / properties / title / descriptionAdded value: +"One crisp fact, phrased as a statement. This exact text appears in every future resume context, so make it self-contained."
- Changed
record_open4 fields changed- added
Input schema / properties / body / descriptionAdded value: +"Detail a future session needs. Keep it short — the next_action body is rendered in the resume header." - changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory." - added
Input schema / properties / title / descriptionAdded value: +"The question, risk, goal or next step in one line." - added
Input schema / properties / type / descriptionAdded value: +"question: something undecided. risk: something that could go wrong. milestone: the current goal. next_action: where to resume."
- Changed
record_rejection3 fields changed- changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory." - added
Input schema / properties / reason / descriptionAdded value: +"Why it was rejected. Required, because the reason is what prevents it being re-proposed — a bare rejection teaches a future session nothing." - added
Input schema / properties / title / descriptionAdded value: +"The rejected approach, stated as the thing someone might otherwise propose."
- Changed
resolve_claim5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Parked claims must say accept or reject; live claims default to close."New value: +"Parked claims must say accept or reject; anything else defaults to close. accept applies only to a parked claim." - changed
Input schema / properties / claim / descriptionPrevious value: -"Claim id, or a title substring."New value: +"Claim id, or a unique substring of its title." - changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory." - changed
Input schema / properties / reason / descriptionPrevious value: -"Why it is being closed. Required — this is what a future session reads."New value: +"Why it is being closed. Required — this is the part a future session reads, and it is surfaced by the 'why' tool." - changed
Input schema / properties / unfreeze / descriptionPrevious value: -"Only to accept a claim parked against a FROZEN one. Requires the user's explicit go-ahead."New value: +"Only to accept a claim parked against a FROZEN one. Requires the user's explicit go-ahead; without it the call is refused rather than silently overriding the invariant."
- Changed
resume_context1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory."
- Changed
why2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Claim id or a unique substring of its title." - changed
Input schema / properties / project / descriptionPrevious value: -"Named project (central store). Omit inside a Claude Code repo."New value: +"Named project in the central store. Omit inside a repo that has .continuity/, where state is found by walking up from the working directory."
11 tool updates
- First observed
capture - First observed
create_project - First observed
freeze_claim - First observed
list_projects - First observed
record_constraint - First observed
record_decision - First observed
record_open - First observed
record_rejection - First observed
resolve_claim - First observed
resume_context - First observed
why
TDQS
Each record_* tool targets a distinct claim type, and capture, freeze_claim, resolve_claim, and why have clearly separate roles. The only mild overlap is between the batch capture path and the individual record_* tools, but the descriptions explain when to prefer each.
Most tools follow a consistent verb_noun pattern: list_projects, create_project, record_decision, freeze_claim, resolve_claim. The exceptions are 'capture' and 'why', which break the pattern but are still short and memorable rather than chaotic.
Twelve tools is well-scoped for a persistent project-memory server. Each tool covers a distinct operation in the claim lifecycle—recording, reading, freezing, resolving, and explaining—without obvious redundancy.
The set covers the core lifecycle: create/list projects, record all claim types, batch capture, freeze, resolve/close, and inspect history. Minor gaps exist, such as no general claim search or project deletion, but resume_context and why provide workable paths for most needs.
Maintenance
Related MCP Connectors
Project memory for coding agents: requirements, decisions, code graph and delivery telemetry.
1Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
Git-backed platform for skills, tools, and context for AI agents
Durable, shareable and governed project memory with smart triage and explicit project composition.
Related MCP Servers
- AlicenseBqualityDmaintenanceGives AI coding assistants persistent memory, safety controls, and project awareness by tracking coding sessions, protecting critical files from modifications, and managing approval workflows with automatic changelog generation.1918MIT
- AlicenseNot gradedqualityFmaintenanceProvides AI coding assistants with persistent project memory by capturing development checkpoints during git commits, branch switches, and inactivity. It enables seamless task resumption through tools that retrieve session history, momentum, and synthesized re-entry briefings.213MIT
- AlicenseAqualityCmaintenanceEnables AI coding assistants to access grounded, branch-scoped codebase context via semantic search, git tracking, change ledger, and structured feature management with Project Tracks.191MIT
- AlicenseNot gradedqualityBmaintenanceProvides a memory layer for AI coding agents with Git-powered version control, enabling automatic tracking of prompts, context, and code diffs.192MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vikcena01/ai-continuity-plugin'
If you have feedback or need assistance with the MCP directory API, please join our Discord server