easy-agent-mem
Uses Obsidian-native storage and export, generating Markdown knowledge docs with wiki-links and YAML frontmatter and building project knowledge graphs under agent-mem-output/.
agent-mem

Automatic context compression and persistent memory for AI coding agents.
agent-mem saves coding decisions, constraints and session context so you can continue work across chats. Search previous decisions, check whether their supporting files have changed, and carry relevant context into your next session.
Why Use agent-mem
Preserve critical context between chats and sessions
Reduce token waste from repeating project history
Keep technical decisions and blockers traceable
Generate a searchable Obsidian-native knowledge graph from code + memory
Related MCP server: SuperBased Observer
Core Features
Save decisions, constraints and blockers with their sources and supporting files
Check saved decisions for changed or missing evidence
Retrieve relevant context with citations and a token budget
Keep memory separate across repositories, branches, worktrees and sessions
Resume sessions with durable handoffs and explicitly share selected records
Track review findings, fixes, verification results and failed approaches
Export structured memory to Markdown or Obsidian
Smart
watchmode with file + git + idle detectionOne-paste handoff prompts (Groq-powered, optional)
Cross-IDE context migration (
agent-mem migrate) for Cursor, Claude (VS Code), and OpenCodeObsidian-first storage with wiki-links and YAML frontmatter
Local fallback mode (
.agent-memory/) when Obsidian is not configuredgraphcommand builds project knowledge docs from code + memory + chat contextCall graph extraction — tracks which functions call which across the codebase
Multi-language extraction — Python (AST) + TypeScript/JavaScript (tree-sitter, optional)
MCP session gate — warns agents that skip
query_memorybefore summarizingClaude Code enforcement hook —
UserPromptSubmithook auto-injects memory context every promptBenchmark command —
graph benchmarkmeasures extraction Precision/Recall/F1 against ground truthTerminal UI —
agent-mem tuiopens an interactive status/memory/benchmark dashboardIncremental graph parse cache for faster rebuilds on unchanged files
Installation
pip install easy-agent-mem
# Install 0.8.0 from GitHub
pip install "git+https://github.com/atharvavdeo/agent-mem.git@v0.8.0"Optional extras:
pip install 'easy-agent-mem[tui]' # terminal UI (agent-mem tui)
pip install 'easy-agent-mem[multilang]' # TypeScript/JavaScript extraction via tree-sitter
pip install 'easy-agent-mem[mcp]' # MCP server support
pip install 'easy-agent-mem[context] @ git+https://github.com/atharvavdeo/agent-mem.git@v0.8.0' # token countingQuick Start
agent-mem init
agent-mem configure-groq # optional for enrich/watch handoff generation
agent-mem migrate --dry-run cursor .
agent-mem watch # start automatic handoff modeAfter initialization, use agent-mem status to verify storage mode, graph output readiness, and Groq configuration status.
How To Use (Practical Flows)
1) First-Time Setup
agent-mem init
agent-mem status
agent-mem setup-vscode # optional if you want .vscode/mcp.json generated directly
agent-mem configure-groq # optional, enables watch handoff and graph enrich2) Import Context From Other IDE Chats
agent-mem migrate --dry-run cursor .
agent-mem migrate --full cursor claude .3) Generate Project Knowledge Graph
agent-mem graph build --compact
agent-mem graph build --compact --enrich4) Automated Handoff Watcher
agent-mem watch --dry-run --once
agent-mem watch5) MCP / IDE Integration Helpers
agent-mem print-mcp-json
agent-mem serve --force-stdio # only for debugging MCP startup manuallyKnowledge Graph (agent-mem graph)
Generate Obsidian-native docs into agent-mem-output/:
agent-mem graph buildUse optional flags:
agent-mem graph build --compact
agent-mem graph build --enrich
agent-mem graph build --compact --enrich
agent-mem graph build --exclude-file-pattern "tests/*" --exclude-file-pattern "**/migrations/*.py"Graph Flags
Flag | Description |
| Trims long concept/function lists, keeps dashboard/report complete, and writes full lists to |
| Adds inferred concepts/relationships via Groq; deterministic graph output is still generated if enrichment fails |
| Excludes files by glob pattern; repeatable and useful for tests/generated/vendor paths |
Migration (agent-mem migrate)
Bring context from other IDE chat stores into your current project memory.
What It Does
Extracts recognizable chat sessions from Cursor, Claude (VS Code), and OpenCode
Compresses extracted context into agent-mem structured summary format
In
--fullmode, saves summary to memory and generates a one-paste handoff promptWrites portable markdown backups under
.agent-memory/migrations/Supports safe simulation with
--dry-run
Examples
agent-mem migrate
agent-mem migrate cursor .
agent-mem migrate --extract-only cursor claude .
agent-mem migrate --full cursor claude .
agent-mem migrate --dry-run cursor .
agent-mem migrate --full cursor .
agent-mem migrate --dry-run --full cursor claude opencode .Modes
--extract-only: extract + backup only (default for direct CLI usage)--full: extract + save summary to memory + generate handoff + backup--dry-run: no file writes, prints preview summary/handoff output
Commands Overview
Setup and Configuration
Command | Description | Example |
| Interactive first-time setup for storage + IDE instruction files + MCP config hints |
|
| Re-run instruction + MCP config setup for current project |
|
| Write |
|
| Print MCP JSON block for manual paste into IDE config |
|
| Save Groq API key and optional model |
|
| Show storage mode, graph readiness, and Groq status |
|
Memory and Continuity
Command | Description | Example |
| Save a structured session summary into memory |
|
| Update compact active handoff context file |
|
| Print starter block for a fresh follow-up chat |
|
| Search saved memory for relevant context |
|
| Save a decision, constraint or blocker from JSON |
|
| List private and explicitly shared records |
|
| Find decisions affected by changed files |
|
| Retrieve relevant context with citations and a token budget |
|
| Save the current session checkpoint |
|
| Resume a saved session in a new chat |
|
| Share a selected record across linked worktrees |
|
| Export session memory to Markdown |
|
| Record a finding, dismissal, fix, verification or failed approach |
|
| Retrieve review history and failed approaches |
|
Migration
Command | Description | Example |
| Extract and convert IDE chat history into summaries/handoff/backups |
|
Graph
Command | Description | Example |
| Generate knowledge graph notes and dashboard |
|
| Measure extraction Precision/Recall/F1 against fixture ground truth |
|
Terminal UI
Command | Description | Example |
| Open interactive terminal dashboard (Status / Memory / Benchmark tabs) |
|
Watch Mode and Handoff Automation
Command | Description | Example |
| Monitor repo activity and generate handoff prompts automatically |
|
| Trigger one immediate handoff generation without waiting for file events |
|
MCP Server
Command | Description | Example |
| Start MCP stdio server (normally launched by IDE, not by hand) |
|
Storage Modes
Obsidian Mode
If Obsidian is configured, notes are written under:
Memory/Agent-Mem/for session and active context notesagent-mem-output/for graph notes
Local Fallback Mode
If Obsidian is unavailable, memory is written to:
.agent-memory/active.md.agent-memory/memory.md.agent-memory/engineering/for structured session records
Set AGENT_MEM_STORAGE_DIR to use a different local directory for structured memory.
What's Fixed in 0.8.0
Change | Use case |
Separate MCP connection state | Keep simultaneous agent sessions independent |
Durable session handles | Reconnect to the same saved session after restarting |
Evidence freshness checks | Review decisions when their supporting files change |
Latest review-result tracking | Show a newer failure instead of an outdated passing result |
Scoped session exports | Keep exports from different branches and sessions separate |
Atomic memory writes | Preserve saved context across interrupted writes |
Improved path handling | Preserve file paths containing spaces in summaries and handoffs |
Credential redaction | Remove configured secrets from stored context |
Project Links
PyPI: easy-agent-mem
GitHub: atharvavdeo/agent-mem
License
MIT
Available Tools
11 toolscheck_decisionsC
Flag changed or missing evidence without rewriting decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| changed_files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. The phrase 'without rewriting decisions' usefully implies decisions are not mutated, but it is silent on whether anything is written, what 'flag' produces, and whether a session must already exist. That is thin behavioral disclosure for a tool with zero annotation coverage.
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?
It is a single front-loaded sentence with no filler, which is structurally clean. However, the brevity comes at the cost of under-specification rather than economical communication.
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 tool with no annotations and no output schema, the description should explain what a 'flag' looks like in the response and how the decision/evidence matching works. Neither is present, leaving the agent unable to predict the result of a call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, and the description only obliquely gestures at changed_files via 'changed ... evidence'. Nothing explains what session_id does, that it defaults to empty, or whether an empty value scopes to a default session.
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 verb 'Flag' and object 'changed or missing evidence' give a rough sense of intent, but the core resource, decisions, is only implied by the tool name rather than the prose. It does not differentiate itself from siblings such as record_decision or get_review_memory, so an agent must infer that this cross-checks recorded decisions against a set of files.
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?
There is no when-to-use guidance, no prerequisites, and no mention of any alternative tool. The agent is left to guess whether this should run before a review, after files change, or in place of record_review_outcome.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_review_memoryC
Retrieve findings, dismissals, fixes and failed approaches without promoting them to proof.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| session_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one real behavioral trait: retrieved items are not promoted to proof, i.e. the call is non-validating and does not mutate review state. It says nothing about scoping defaults (both params default to empty string) or what the response looks like, so the disclosure is partial.
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?
A single front-loaded sentence with the retrieval content up front and the non-promotion caveat trailing it; nothing is padded. The phrase 'promoting them to proof' is somewhat domain-jargony and would benefit from a short gloss.
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 undocumented, optional parameters, no annotations, and no output schema, the description should at minimum explain what goal/session_id scope and roughly what shape the findings come back in. It explains neither, leaving the agent to guess at default behavior when both params are omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%: 'goal' and 'session_id' have only titles and empty-string defaults. The description does not mention either parameter, so an agent cannot tell whether 'goal' scopes retrieval, filters by goal text, or is merely a label, nor what session_id defaults to when omitted.
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 ('Retrieve') and enumerates the resource contents (findings, dismissals, fixes, failed approaches), so an agent knows what it will get back. It does not name any sibling (e.g. query_memory, check_decisions) to sharpen the boundary, which keeps it short of a 5.
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?
There is no explicit when-to-use guidance, no prerequisites, and no named alternative. The clause 'without promoting them to proof' hints that this is the raw-retrieval counterpart to a validating/recording tool, but the agent must infer that among ten siblings on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_handoffC
Return the durable session handle needed to resume private memory in a new connection.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | Continue this project | |
| session_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses only that the returned handle is 'durable' and enables cross-connection resumption. It says nothing about whether calling it mutates or creates server-side state, whether the handle is sensitive/credential-like, whether it expires or is single-use, or what happens if the passed session_id is unknown.
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?
A single sentence with the purpose front-loaded and no filler; nothing is redundant. It is appropriately sized for what it says, though the terseness is a symptom of missing content rather than efficient compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and two undocumented optional parameters, the description is the only explanatory channel and it under-delivers: it does not state what the returned handle looks like or how to use it, nor how the defaults on 'goal' and 'session_id' behave. For a tool whose whole point is producing a token for later reuse, that usage contract should be spelled out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, and the description provides no compensating meaning for either. It never explains what 'goal' influences (both params are optional with defaults) or how 'session_id' selects a prior session versus establishing a new one, leaving an agent to guess the semantics of both fields.
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 + resource ('Return the durable session handle') and adds the purpose clause 'needed to resume private memory in a new connection', which tells an agent what the artifact is for. It does not, however, distinguish this from siblings such as session_status or list_recent_sessions, and 'handle' remains an ambiguous noun (token? ID? opaque blob?).
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 phrase 'to resume private memory in a new connection' implies the triggering situation, so usage is inferable rather than absent. There is no explicit when-not guidance, no mention of what to do if a session already exists in this connection, and no named alternative among the ten sibling memory tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_contextC
Get whole-record context with citations, constraints, freshness and explicit budget overflow.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| session_id | No | ||
| token_budget | No | ||
| changed_files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it only partially does so. "Citations, constraints, freshness and explicit budget overflow" hints at returned content and at what happens when the token budget is exceeded, but says nothing about permissions, read-only nature, truncation behavior, or cost — all left to inference.
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?
One sentence with no filler is commendably compact and the scope hint comes first. The compactness comes at the cost of clarity, though: the sentence is a stack of bare noun phrases rather than a readable statement of behavior.
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 four-parameter tool with zero schema coverage, no annotations, and no output schema, this fragment is not enough to call it correctly. The agent knows roughly what topic the result covers but not how parameters shape it or what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters (goal, session_id, token_budget, changed_files), yet the description explains none of them. The word "budget" faintly gestures at token_budget, but the relationship between changed_files and what context is returned — arguably the core selection logic — is never stated.
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?
"Get whole-record context" gives a verb and an object, but "whole-record" is undefined jargon — the agent cannot tell whether this returns a file, a session, a decision log, or an assembled bundle. Nothing in the sentence distinguishes it from siblings like get_session_handoff or query_memory, which also sound like context retrieval.
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?
There is no when-to-use guidance at all: no conditions, no exclusions, and no named alternative among the ten sibling tools. The agent must guess whether this replaces or complements query_memory and get_session_handoff.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_sessionsC
List legacy notes and summaries visible to this caller; never other private sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| session_id | No | ||
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It says results are limited to what the caller can see, which is a genuine visibility constraint, but it doesn't state ordering (why 'recent'), pagination, permissions, or what 'legacy' implies about freshness. A read tool is low risk, but the description leaves core behavior unexplained.
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?
One sentence, front-loaded with the action and scope. It is compact with no padding, though the wording is slightly confusing ('legacy notes and summaries' vs the tool name) rather than maximally clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three parameters at 0% schema description, no annotations, and an output schema. Even allowing that the output schema covers returns, the description fails to explain the parameters, the meaning of 'recent', or how it differs from sibling session tools, which is too little for a three-parameter listing tool.
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 0%, so the description must compensate and it says nothing about count, session_id, or project_name. An agent cannot tell whether session_id filters to one session, whether project_name scopes the listing, or what count defaults to (the schema shows 3 but gives no meaning). This is the biggest gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource is 'List legacy notes and summaries', which is specific, but the tool is named list_recent_sessions and the name promises 'recent sessions' while the description talks about 'legacy notes and summaries'. That mismatch leaves the agent guessing which artifact it actually gets. The scope qualifier 'visible to this caller' is useful but the core object is muddled.
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?
No guidance on when to use this versus siblings such as get_session_handoff, session_status, or query_memory, which all touch session data. The 'never other private sessions' clause is an exclusion but about data visibility, not about when to pick this tool. The agent gets no routing signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_memoryB
Load saved memory before work. Explicit session IDs enable durable scoped continuity.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| session_id | No | ||
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds that explicit session IDs enable "durable scoped continuity," but it does not state whether the operation is read-only, how query matching works, what happens if session_id is omitted, or whether there are permission or rate-limit concerns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences and front-loads the core purpose before the session-ID detail. There is no repetition or wasted wording, though "durable scoped continuity" is somewhat jargon-heavy and could be clearer.
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?
An output schema exists, so the description need not explain return values. But with no annotations, 0% schema description coverage, and several sibling memory/session tools, the definition is too sparse: it does not clarify query semantics, project_name usage, or how to choose this tool over alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only implies the role of session_id through "durable scoped continuity"; the required project_name and query parameters are not explained at all.
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: "Load saved memory," and adds a timing cue, "before work." It is clear enough to understand the tool's basic purpose, but it does not differentiate it from siblings such as get_review_memory or get_session_handoff.
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 phrase "before work" gives a clear usage context, telling the agent when this tool is appropriate. However, it provides no exclusions, prerequisites, or guidance about when to use an alternative memory/session tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_decisionC
Save a sourced decision/constraint/blocker. Sharing and supersession are explicit.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | decision | |
| text | Yes | ||
| scope | No | session | |
| topic | No | ||
| source | Yes | ||
| status | No | proposed | |
| session_id | No | ||
| supersedes | No | ||
| evidence_files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It indicates a save operation and mentions explicit sharing and supersession, but does not disclose persistence scope, permission requirements, duplicate handling, or what happens when source/evidence_files are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the primary action front-loaded. The wording is efficient and avoids filler, though it is arguably too sparse given the tool's parameter count.
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?
This is a complex 9-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage. The description does not explain the required evidence_files or source semantics, nor the many optional fields, leaving an agent unable to invoke it reliably.
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?
With 9 parameters and 0% schema description coverage, the description must compensate heavily, but it adds little. It implies kind values (decision/constraint/blocker) and the presence of a supersedes field, yet leaves scope, session_id, status, topic, source, and evidence_files essentially unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Save') and resource ('decision/constraint/blocker'), making the core action clear. It does not distinguish this tool from siblings like check_decisions or share_memory_record, so it is clear but lacks sibling differentiation.
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 phrase 'Sharing and supersession are explicit' hints that sharing/supersession require deliberate fields, but there is no guidance on when to use this tool versus check_decisions, share_memory_record, or record_review_outcome. It also gives no when-not conditions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_review_outcomeC
Record review/failure evidence. Commands are stored data; verification is caller-reported.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| text | Yes | ||
| scope | No | session | |
| reason | No | ||
| result | No | ||
| source | Yes | ||
| status | No | observed | |
| command | No | ||
| reopens | No | ||
| conditions | No | ||
| related_id | No | ||
| session_id | No | ||
| external_id | No | ||
| evidence_files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden, and the second sentence does disclose one genuinely useful trait: command strings are persisted as inert data rather than executed, and verification status is caller-asserted rather than server-validated. That is real value beyond structured fields. However, nothing is said about persistence scope, what happens on duplicate records, whether entries are mutable or reopenable (the `reopens` parameter hints at state changes), or what the caller gets back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler and the core action front-loaded, so nothing is wasted. The problem is under-specification rather than verbosity: at this size for a 14-parameter mutation tool, the terseness costs more than it saves.
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?
Fourteen parameters, zero schema descriptions, no annotations, and no output schema mean the description is the sole carrier of context, and two sentences cannot cover it. Key facts an agent needs — accepted `kind` values, whether `scope: session` versus other scopes changes behavior, what `reopens` does, and whether evidence_files must exist on disk — are all absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 14 parameters, including four required ones (kind, text, source, evidence_files), so the description is the only possible source of meaning — and it explains none of them. "Commands" loosely gestures at the `command` field and "verification is caller-reported" at `status`/`result`, but `kind`, `scope`, `reopens`, `related_id`, `external_id`, and `conditions` remain entirely opaque.
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 gives a verb ("Record") and a loosely named resource ("review/failure evidence"), but the resource doesn't map cleanly to the tool name's "review outcome" and the 14-parameter surface suggests a much broader record type than "evidence." An agent cannot tell from this text whether the tool logs a review verdict, a test failure, or both, nor how it differs from siblings like record_decision or check_decisions.
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?
There is no when-to-use guidance, no prerequisites, and no mention of the obviously related siblings (get_review_memory, record_decision, check_decisions) that an agent would need to choose between. The only implicit cue is that this is a write path versus the read-oriented get_review_memory, which the agent must infer entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_statusC
Check the memory-loaded state of this session only.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. 'Check' implies a read-only probe, but it never confirms side-effect-free behavior, permissions/auth needs, or cost, and gives no hint about what 'loaded' versus 'not loaded' states mean in practice.
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?
A single short sentence with the scope qualifier front-loaded at the end of the clause; nothing is wasted. It is perhaps too terse rather than verbose, but structurally clean.
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?
An output schema exists, so return values need not be explained, but for a tool whose only argument is ambiguous against its own 'this session only' framing, the description does not resolve the tension. The semantics of the loaded/unloaded state and the role of session_id are both left for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so nothing documents the single session_id parameter, which has a default of '' and is not required. The description's 'this session only' actively muddies this: it is unclear whether session_id selects another session or whether an empty value means the current one.
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 concrete verb ('Check') and a concrete target ('the memory-loaded state of this session'), which is more specific than a restatement of the name. The phrase 'this session only' begins to differentiate it from siblings such as get_session_handoff or list_recent_sessions, though what 'memory-loaded state' actually means is left implicit.
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 word 'only' hints at a scope restriction, but no sibling is named as the alternative for checking other sessions, and no when-to-use/when-not-to-use conditions are stated. An agent must guess whether get_session_handoff, list_recent_sessions, or query_memory is the right call for a non-current session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_to_obsidianC
Save a durable summary. MCP/explicit sessions are isolated; direct legacy calls keep Markdown behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | ||
| session_id | No | ||
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does not meet it. "Durable" signals persistence and the second sentence flags that session type changes storage behavior, but overwrite semantics, permissions, and the meaning of "keep Markdown behavior" are all left undefined.
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?
At two sentences it is appropriately short and the core action is front-loaded. The second sentence, however, is compressed into unexplained internal jargon, so the brevity comes at the cost of comprehension rather than from efficiency.
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 presence of an output schema means return values need not be described. Still, for a write/persist tool with zero annotations, no parameter documentation, and an opaque statement about session isolation, the description leaves out too much for an agent to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, so the description must compensate and does not. It never explains project_name's role as a target or destination key, nor the semantics of session_id (including its empty-string default), even though session scoping is the one behavioral distinction it raises.
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 phrase "Save a durable summary" gives a verb and resource, so the basic action is legible. But it never says what is being summarized, where the summary lands (Obsidian is only implied by the tool name), or how it differs from siblings such as record_decision or share_memory_record.
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?
There is no explicit when-to-use or when-not-to-use guidance and no named alternative among the ten sibling tools. The clause about MCP/explicit sessions vs. legacy calls hints at a branching condition, but an agent cannot determine from it when this tool is the correct choice.
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.
11 tool updates
v0.8.0- First observed
check_decisions - First observed
get_review_memory - First observed
get_session_handoff - First observed
get_task_context - First observed
list_recent_sessions - First observed
query_memory - First observed
record_decision - First observed
record_review_outcome - First observed
session_status - First observed
share_memory_record - First observed
summarize_to_obsidian
TDQS
Scored across 11 tools
Most tools have clearly distinct scopes: retrieval (query_memory, get_task_context, get_review_memory, get_session_handoff), writing (record_decision, record_review_outcome, summarize_to_obsidian), and session inspection (session_status, list_recent_sessions). There is some adjacency among the three retrieval tools and between session_status and get_session_handoff, but the descriptions give enough signals (citations/budget vs. raw memory vs. review findings vs. session handle) to pick correctly.
Predominantly consistent verb_noun snake_case (record_decision, query_memory, get_review_memory, check_decisions, list_recent_sessions). Minor deviations exist: session_status is a bare noun phrase with no verb, and summarize_to_obsidian adds a preposition plus a backend-specific name, which is less predictable than the rest.
Eleven tools is well within a healthy range and each maps to a concrete memory-lifecycle action (record, query, verify, share, summarize, handoff, inspect session). No redundant near-duplicates bloat the surface.
Core read/write paths for decisions, review evidence, sharing, summaries, and session handoff are covered. However, there is no explicit delete/forget/prune or supersede operation for a memory system where stale or private data must be removed, and check_decisions flags problems without any tool to resolve them, leaving dead ends.
Maintenance
Related MCP Connectors
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenancePersistent memory MCP server that remembers decisions and context across coding sessions, automatically logging and surfacing relevant knowledge as you work.116 npmMIT
- FlicenseNot gradedqualityAmaintenanceLocal MCP server that lets your AI coding agent query its own cross-tool project history - file/command freshness, past test failures, cost & token spend, cache status, and session handoff - over stdio, 100% local, no telemetry.51-
- AlicenseAqualityAmaintenanceMCP server that gives coding agents persistent, verified memory of codebase decisions, conventions, and skills, with evidence-based claims that are re-checked via git hooks and human-gated review. Enables memory search, propose/approve, chat harvesting, and critique across MCP-compatible tools.21112 npm1MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that provides offline-first, persistent memory for AI coding assistants. It captures project decisions and conventions into a local SQLite database and syncs them to tool-specific memory files like CLAUDE.md and AGENTS.md.15 npmMIT