Skip to main content
Glama

CI CodeQL OpenSSF Scorecard OpenSSF Best Practices License Code of Conduct GitHub Sponsors

A self-improving, verifiable memory layer for AI coding agents.

cogmem learns how you work across sessions so your agent gets more accurate and more autonomous over time: it stops repeating mistakes, keeps a live model of each project, and surfaces the right lesson at the right moment. Every memory is cryptographically signed and tamper-evident, so a poisoned or altered memory can be detected and rejected before it ever steers the agent.

Developed by WritersLogic — local-first recall; your memory and identity key stay on your machine (see Privacy).

Installation

From PyPI

pip install cogmem            # CLI + MCP server + verifiable-memory tools
pip install 'cogmem[recall]'  # add local semantic recall (fastembed)
cogmem init                   # wire the Claude Code hooks + build the index

pip install cogmem gives you the cogmem CLI and the MCP server (cogmem mcp, or uvx cogmem mcp on demand) — the verifiable-memory tools need only the core install. Add the [recall] extra for local semantic recall, then run cogmem init to wire the full learning loop (the SessionStart/UserPromptSubmit/Stop hooks and the index) into Claude Code. cogmem init is idempotent; re-run it any time.

Clone installer (turnkey, with the warm daemon)

The clone installer does everything pip install + cogmem init does, plus sets up the warm recall daemon (launchd/systemd) as a managed service:

git clone https://github.com/writerslogic/cogmem.git
cd cogmem
./install.sh

Or in one line:

curl -fsSL https://raw.githubusercontent.com/writerslogic/cogmem/main/install.sh | bash

install.sh is idempotent — run it again any time to upgrade in place. It sets up the code under ~/.claude/cogmem, a self-contained virtualenv with dependencies, the cogmem CLI on your PATH, the Claude Code hooks, and a warm recall daemon (a launchd agent on macOS, a systemd --user service on Linux). Requires Python 3.12+; semantic recall runs on a local model (fastembed, no external API). Pass --no-daemon or --no-hooks to skip those steps; set COGMEM_HOME to install elsewhere — the CLI, engine, and hooks all resolve it at runtime, so a non-default install keeps its memory and identity fully self-contained.

Related MCP server: Linksee Memory

Custom Installation

Install to a different directory

Set COGMEM_HOME to place cogmem somewhere other than the default ~/.claude/cogmem:

COGMEM_HOME=/opt/cogmem ./install.sh

Or with the one-liner:

curl -fsSL https://raw.githubusercontent.com/writerslogic/cogmem/main/install.sh | COGMEM_HOME=/opt/cogmem bash

The installer copies the code, creates the virtualenv, and symlinks the CLI to ~/.local/bin/cogmem (or wherever COGMEM_BIN points).

CLI path

Set COGMEM_BIN to control where the cogmem CLI symlink is placed:

COGMEM_BIN=$HOME/.cargo/bin COGMEM_HOME=/opt/cogmem ./install.sh

If COGMEM_BIN is not on your PATH, the installer prints a warning. You can always invoke cogmem directly from $COGMEM_HOME/cogmem.

How data directories and identity keys are resolved

At runtime the CLI and engine read COGMEM_HOME from the environment. When it is unset they fall back to ~/.claude/cogmem. All runtime data lives under the vault/ subdirectory:

Path

Purpose

$COGMEM_HOME/vault/identity/agent.key

Ed25519 private key (agent identity, did:key)

$COGMEM_HOME/vault/credentials/

W3C Verifiable Credential storage

$COGMEM_HOME/vault/rules/

Layer-A (always-load) and Layer-B (recall) rules

$COGMEM_HOME/vault/provenance/log.jsonl

Append-only hash-chained transparency log

$COGMEM_HOME/vault/provenance/statements/

COSE_Sign1 SCITT signed statements

$COGMEM_HOME/engine/.venv/

Python virtualenv with dependencies

$COGMEM_HOME/hooks/

Claude Code hook scripts

The identity key is generated on first run (via cogmem status or any engine operation) and persisted at $COGMEM_HOME/vault/identity/agent.key. The corresponding did:key is derived from the Ed25519 public key. Moving or reinstalling cogmem to a new COGMEM_HOME creates a fresh identity unless you migrate the vault/ directory.

MCP client with a non-default install

The standard MCP client configuration works regardless of COGMEM_HOME because the cogmem CLI resolves the environment variable at runtime:

{
  "mcpServers": {
    "cogmem": { "command": "cogmem", "args": ["mcp"] }
  }
}

If the CLI is not on your PATH, use the full path:

{
  "mcpServers": {
    "cogmem": { "command": "/opt/cogmem/cogmem", "args": ["mcp"] }
  }
}

Or prefix with COGMEM_HOME in a shell wrapper:

{
  "mcpServers": {
    "cogmem": { "command": "env", "args": ["COGMEM_HOME=/opt/cogmem", "cogmem", "mcp"] }
  }
}

Quick Start

cogmem status           # health check, metrics, agent DID
cogmem doctor           # end-to-end learning-loop health (daemon, API key, trust, backlog)
cogmem recall "..."     # surface relevant past lessons for a task
cogmem note "..."       # record a decision or finding mid-task
cogmem verify           # verify every memory's credential + the transparency log
cogmem receipt <id>     # inclusion proof that a memory is committed in the signed log
cogmem statement <id>   # COSE_Sign1 SCITT signed statement (verifiable by HMS too)
cogmem trust            # show the trusted agent identity (warns on a key mismatch)
cogmem trust --rotate   # re-anchor trust after an intentional key change
cogmem review list      # approve always-load rules
cogmem mcp              # run the MCP server (stdio) for any MCP client

MCP Integration

Run cogmem as an MCP server and connect any MCP-compatible client:

{
  "mcpServers": {
    "cogmem": { "command": "cogmem", "args": ["mcp"] }
  }
}

Eight tools are exposed: recall, note, status, verify, receipt, tree_head, progress, review_pending, plus read-only resources (the live user model and per-project state).

Claude Code Integration

install.sh wires cogmem into Claude Code automatically (idempotently merged into ~/.claude/settings.json) — no manual invocation required. Five hooks make the memory loop run in the background:

Event

Hook

What it does

SessionStart

cogmem-activate.sh

injects promoted always-load (Layer-A) rules + the self-check

UserPromptSubmit

cogmem-recall.sh

semantic Layer-B recall for the current prompt

PreToolUse(Bash)

cogmem-guard.sh

intercepts known mistakes at the tool-call boundary before they happen

PostToolUse(Edit|Write)

cogmem-context.sh

tracks which files the session is actively editing

Stop

cogmem-capture.sh

captures the session into memory (acquisition + consolidation)

Every hook is strictly fail-open: any error, timeout, or cold daemon injects nothing and never blocks your prompt. The scripts live in ~/.claude/cogmem/hooks/; re-run install.sh (or ./install.sh --no-daemon) to refresh the wiring.

Chat-memory systems (Mem0, Letta, Zep) store and retrieve facts. cogmem is built for coding agents and goes further on three axes:

It learns from outcomes. A feedback loop scores whether a recalled lesson actually helped, refines rules that prove wrong, and retires ones that mislead.

It models its own failure modes. cogmem tracks where the agent tends to go wrong in your work and intercepts known mistakes at the tool-call boundary — before they happen, not afterward.

Its memory is verifiable. Each memory is a W3C Verifiable Credential signed by the agent's did:key, recorded in a tamper-evident, SCITT-style transparency log. Agent memory is an attack surface; cogmem makes it auditable and poison-resistant.

  • Two-layer memory: always-loaded directives (scope-gated, human-approved) plus a semantic recall tail (local cross-encoder reranking, no data leaves the machine).

  • Outcome feedback and self-refinement: memories earn or lose trust based on whether they actually helped; contradicted rules are corrected through a safe pipeline.

  • Self-model and guard: a model of the agent's recurring mistakes, compiled into tripwires that intercept them at the PreToolUse boundary.

  • Project-state model: a living per-project state (goal, claims, open questions, blockers) that gives situational continuity and reasons across time.

  • Cross-project progress narrative: momentum, stalls, and dependencies across projects, surfaced as alerts.

  • Self-regulation: recall thresholds tuned automatically against an eval harness.

  • Verifiable Agent Memory: did:key identity, W3C VC-signed memories, COSE_Sign1 SCITT signed statements (byte-compatible with HMS), a hash-chained transparency log with signed Merkle tree head and RFC 6962 inclusion receipts, optional poison-resistance enforcement. See PROVENANCE.md.

cogmem treats every stored memory as a signed artifact:

  • did:key identity: each agent gets a persistent Ed25519 identity, exposed as a W3C DID.

  • W3C Verifiable Credentials: every memory is signed with eddsa-jcs-2022 Data Integrity proofs.

  • COSE_Sign1 / SCITT signed statements: byte-identical to the envelope format used by holographic-memory and crosstalk — independently verifiable by any of the three implementations.

  • Hash-chained transparency log: append-only JSONL with SHA-256 chaining, a signed Merkle tree head, and RFC 6962-style inclusion receipts.

  • Revocation: every credential carries a W3C Bitstring Status List entry; a demoted or retired memory is revoked in a signed status-list credential.

  • Poison-resistance: altered or injected memories fail verification and are rejected before influencing the agent.

cogmem verify              # check all memories and the log head
cogmem receipt <memory-id> # prove a memory is in the signed log
cogmem revoke <memory-id>  # revoke a memory (Bitstring Status List)
cogmem status-list         # emit the signed revocation status-list credential

See PROVENANCE.md for the full specification.

Verify the C2PA sample yourself:

# examples/c2pa-agent-credential/ is a real signed C2PA manifest
# whose agent identity validates in c2patool
./examples/c2pa-agent-credential/verify.sh

This proves the whole chain: agent identity (cawg.ica.credential_valid) bound to real cognition — a signed cogmem memory and a signed crosstalk reasoning audit, each an independently verifiable Ed25519 COSE/SCITT statement.

Standards alignment

cogmem is built on published standards, and it is precise about where it conforms versus where it is -style (compatible in shape and crypto, short of full profile conformance). The primitives are real Ed25519 signatures over real canonical byte structures — nothing here is mocked.

Standard

What cogmem implements

Status

W3C DID

did:key (Ed25519), did:web (publishes an OKP publicKeyJwk), did:jwk — all with working resolvers

Conformant

W3C VC Data Model 2.0

VC v2 context, credential id, validFrom/validUntil, AgentMemoryCredential / AIAgentCredential / IdentityClaimsAggregationCredential

Conformant; Verifiable Presentations are roadmap

W3C Data Integrity — eddsa-jcs-2022

Ed25519 Data Integrity proof over RFC 8785 JCS canonical bytes (UTF-16 key ordering, literal-UTF-8 strings)

Conformant

W3C Bitstring Status List

Every memory carries a BitstringStatusListEntry; a demoted/retired memory is revoked (GZIP + multibase encodedList) and published in a signed BitstringStatusListCredential

Conformant

IETF COSE (RFC 9052)

Untagged and tag-18 COSE_Sign1, EdDSA (-8)

Conformant; byte-interoperable with the coset-based verifiers in the sibling projects

IETF SCITT

COSE_Sign1 signed statements + an append-only, hash-chained, signed log

SCITT-style. Conformant Signed-Statement headers (CWT_Claims), COSE Receipts, and a Transparency Service distinct from the issuer are roadmap — see below

RFC 6962 Merkle

Signed tree head, inclusion proofs, verification

Conformant proof math; a witness co-signs the tree head for independent transparency

CAWG Identity Assertion (ICA)

IdentityClaimsAggregationCredential in a tag-18 COSE_Sign1 over application/vc, cross-checked against the C2PA SignerPayload

Interoperable with the ICA verifier in c2pa-rs

Toward full SCITT conformance. Three bounded steps, no new cryptography: (1) move iss/sub/content-type from the statement payload into the COSE protected header as CWT_Claims; (2) emit inclusion proofs as COSE Receipts (draft-ietf-cose-merkle-tree-proofs) in the statement's unprotected header; (3) make the external witness a mandatory Transparency-Service role distinct from the issuing agent. Steps 1–2 are re-encoding; step 3 is the architectural one, since a single-party log is a compatible format rather than meaningful transparency.

Privacy

cogmem is local-first by design. Memories, embeddings, and the identity key live on your machine, and semantic recall is fully local — the embedding and reranker models (fastembed) run on-device, so querying your memory never leaves the machine.

The learning pipeline is not local: acquisition, consolidation, the feedback judge, and the project/user-model synthesis send the relevant session transcript to the Anthropic API (ANTHROPIC_API_KEY). That is how rules are extracted and scored. If you need fully-offline operation, run with --no-hooks (recall still works) until a local-model extraction path lands. In short: recall is local; learning calls the API.

Part of the Agent-Provenance Stack

cogmem is one component of the WritersLogic verifiable agent-provenance pipeline — agent identity, memory, reasoning, and signed output, cryptographically bound end to end.

Project

Role

cogmem (this repo)

Agent identity (CAWG credential) + verifiable, tamper-evident memory (COSE/SCITT)

crosstalk

Multi-model orchestrator; signs each turn's reasoning/orchestration audit

holographic-memory

Durable holographic memory store; cross-verifies signed statements and agent identity

WritersProof

C2PA producer: binds identity + memory + reasoning to the signed asset

All four share one substrate — COSE_Sign1 / SCITT signed statements (Ed25519) and W3C DID identity — specified in UNIFIED-PROVENANCE.md.

Security

Found a vulnerability? Please report it privately — see SECURITY.md.

License

Apache-2.0 — see LICENSE.

Available Tools

8 tools
noteNote a MemoryA

Record a decision, finding, or correction into memory mid-task so it can be recalled in future sessions. Returns {ok, noted}. The text is captured as a candidate and deduped against existing knowledge by the background pipeline. Use when the user states a durable preference or you learn something worth keeping; not for transient chatter. To retrieve memories use recall.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe lesson to remember, as one self-contained sentence, e.g. 'The user prefers Conventional Commits with no body.'

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
notedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations are all false, providing no behavioral hints. The description compensates by disclosing that the text is captured as a candidate and deduped against existing knowledge by a background pipeline, and that it returns {ok, noted}. This adds value beyond annotations.

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

Conciseness5/5

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

The description is extremely concise: two sentences plus a usage line. Every sentence adds value, no fluff. Front-loaded with the core purpose.

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

Completeness5/5

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

Given the tool's simplicity (one required parameter, no enums, no nested objects), the description is complete. It explains the return format, the dedup pipeline, and the appropriate use cases. No gaps.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema's parameter description, which already provides good formatting guidance: 'the lesson to remember, as one self-contained sentence, e.g. ...' Thus no additional value from the description's text.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Record a decision, finding, or correction into memory mid-task so it can be recalled in future sessions.' It uses a specific verb 'Record' and resource 'memory', and distinguishes from sibling 'recall' by indicating that this tool is for recording, not retrieving.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: 'Use when the user states a durable preference or you learn something worth keeping; not for transient chatter. To retrieve memories use `recall`.' This tells the agent when to use, when not to use, and names the alternative tool.

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

progressCross-Project ProgressA
Read-onlyIdempotent

Summarize momentum, stalls, and dependencies across the user's projects as a narrative. Returns {narrative}. Use to orient at session start or when the user asks 'where are we'. Read-only synthesis of project-state memory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
narrativeYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint and idempotentHint; the description reinforces that it is a 'read-only synthesis of project-state memory,' consistent with annotations. No contradictions, and adds clarity about the synthetic nature.

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

Conciseness5/5

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

Three sentences, each adding value: purpose, return format, usage. No waste.

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

Completeness5/5

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

With 0 parameters, full annotation coverage, and an output schema present, the description provides sufficient context: what it does, when to use, and its read-only nature. Complete for the tool's complexity.

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

Parameters4/5

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

The tool has 0 parameters, so schema coverage is 100% by default. The description does not need to add parameter info; baseline for 0-param tools is 4.

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

Purpose5/5

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

The description clearly specifies the action: 'Summarize momentum, stalls, and dependencies across the user's projects as a narrative.' It names the resource (project-state) and output (narrative), distinguishing it from siblings like 'status' or 'recall'.

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

Usage Guidelines4/5

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

The description gives explicit usage context: 'Use to orient at session start or when the user asks 'where are we'.' It does not mention when not to use or alternatives, but the guidance is clear and actionable.

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

recallRecall MemoriesA
Read-onlyIdempotent

Surface the most relevant past lessons, decisions, and rules for a task, ranked by semantic similarity. Returns {count, memories:[{id, scope, score, text}]}, where score is rerank confidence (higher = more relevant). Use at the start of a task or whenever unsure how the user wants something done, instead of guessing. Read-only — to save a new memory use note.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoMaximum number of memories to return (1-20). Defaults to 5.
queryYesNatural-language description of the task or question to find lessons for, e.g. 'how does the user want commit messages formatted'.
scopeNoOptional domain filter, e.g. 'rust', 'python', 'universal'. Omit to search every scope.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
memoriesYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds behavioral context: ranking by semantic similarity, return format with score meaning (rerank confidence). No contradictions.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, then structure, then usage. Every sentence is necessary and well-structured.

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

Completeness5/5

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

With output schema present, description adequately covers return format, behavior, and usage. Parameters are fully documented. No gaps.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds value by providing an example for 'query' and explaining that results are ranked, clarifying the purpose of the query parameter.

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

Purpose5/5

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

The description clearly states the tool's action ('Surface') and resource ('past lessons, decisions, and rules'), and distinguishes it from siblings like 'note' (save) and others.

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

Usage Guidelines5/5

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

Explicitly states when to use ('at the start of a task or whenever unsure') and provides a clear alternative ('to save a new memory use `note`').

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

receiptMemory Inclusion ReceiptA
Read-onlyIdempotent

Produce an RFC 6962-style cryptographic proof that a specific memory is committed in the signed transparency log. Returns the inclusion receipt (leaf index, audit path, tree size, signed root). Use to prove to a third party that a memory existed and was logged. Requires the memory's id — get ids from recall.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYesThe id of the memory to prove inclusion for, as returned in a recall result's `id` field.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by specifying the return fields (leaf index, audit path, tree size, signed root) and the dependency on the memory id from 'recall'. No contradictions.

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

Conciseness5/5

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

Two sentences, no wasted words. The first sentence states the main purpose and standard, the second lists return fields and usage context. Efficient and front-loaded.

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

Completeness5/5

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

Given the tool has an output schema (not shown but indicated), the description does not need to explain return values. Input schema is fully described, and the purpose and usage are fully covered. No gaps.

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

Parameters4/5

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

Schema description coverage is 100% with a clear description of 'memory_id'. The description adds context that the id comes from a recall result's 'id' field, which helps the agent understand the required input.

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

Purpose5/5

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

The description clearly states the tool produces an RFC 6962-style cryptographic proof of inclusion for a specific memory, with a specific verb ('produce') and resource (memory in signed log). It distinguishes from siblings like 'recall' and 'verify' by focusing on third-party proof.

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

Usage Guidelines4/5

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

The description explicitly says to use to prove to a third party that a memory existed and was logged, and it requires the memory's id from 'recall'. It does not explicitly mention when not to use or directly compare to sibling 'verify', but the use case is clear.

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

review_pendingList Pending ApprovalsA
Read-onlyIdempotent

List always-load (Layer-A) rules awaiting human approval before they enter the always-on context. Returns {pending}. Use to see what the system wants to promote. Approval itself is a human action via the cogmem review CLI, not this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
pendingYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds context about the layer (Layer-A) and that it returns {pending}, which is beyond the annotations. No contradictions.

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

Conciseness5/5

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

The description is three sentences with no wasted words. It front-loads the main action, then explains return, usage, and boundary. Every sentence adds value.

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

Completeness5/5

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

For a tool with no parameters and an existing output schema, the description is complete. It specifies the scope (Layer-A rules), the condition (awaiting approval), and the return shape ({pending}). No gaps.

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

Parameters4/5

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

There are no parameters, so schema coverage is 100%. Baseline for 0 parameters is 4, and the description does not need to add parameter details.

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

Purpose4/5

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

The description clearly states the tool lists pending approvals for Layer-A rules. It uses specific verb 'list' and resource. However, it does not explicitly differentiate from sibling tools like 'status' or 'verify', though it contrasts with the approval action via CLI.

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

Usage Guidelines5/5

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

The description explicitly says 'Use to see what the system wants to promote' (when to use) and clarifies that approval is a separate human action via CLI, not this tool (when-not). This provides clear usage guidance.

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

statusMemory System StatusA
Read-onlyIdempotent

Report the health of the verifiable-memory system. Returns {agentDid, logEntries, logIntegrity, merkleRoot} — the agent's did:key identity, transparency-log size, its integrity ('ok' or a reason), and the current Merkle root. Use for a fast health/identity check. For a full per-memory credential audit use verify; for the signed log commitment use tree_head.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
agentDidYes
logEntriesNo
merkleRootYes
logIntegrityYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds context about the returned data structure and the tool's role as a fast check. No behavioral traits are hidden, and no contradictions exist.

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

Conciseness5/5

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

The description is concise with three sentences. The first sets purpose, the second details return fields, and the third provides usage guidance—all front-loaded. No unnecessary words.

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

Completeness5/5

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

Given zero parameters, rich annotations, and an existing output schema, the description fully covers the tool's capability and relationship to siblings. It tells what it returns and when to use it, making it complete for an agent to select and invoke.

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

Parameters4/5

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

There are no parameters, so the description naturally adds no parameter information. The schema coverage is 100% (trivially), and baseline for zero parameters is 4. The description does not need to explain parameters.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Report the health of the verifiable-memory system.' It lists the returned fields and distinguishes itself from siblings by specifying that `verify` performs a full audit and `tree_head` gives the signed log commitment.

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

Usage Guidelines5/5

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

Explicit when-to-use guidance: 'Use for a fast health/identity check.' It also explicitly states when not to use and alternatives: 'For a full per-memory credential audit use `verify`; for the signed log commitment use `tree_head`.'

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

tree_headSigned Tree HeadA
Read-onlyIdempotent

Return the current signed Merkle tree head — the log's tamper-evident commitment to every memory so far. Returns {rootHash, treeSize, signature, ...}. Use as the anchor a verifier checks inclusion receipts against, or to detect log forks. Pair with receipt.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootHashNo
treeSizeNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by explaining the output structure (rootHash, treeSize, signature) and the tamper-evident nature. No contradictions.

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

Conciseness5/5

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

Two sentences: first defines and explains, second gives usage directives. No fluff, front-loaded with key information.

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

Completeness5/5

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

With no parameters and an output schema present, the description covers usage, conceptual meaning, and return fields sufficiently. Complete for a simple read tool.

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

Parameters4/5

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

No parameters; schema coverage is 100% via absence. Baseline 4 applies. Description does not need to elaborate on nonexistent parameters.

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

Purpose5/5

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

Clearly states it returns the current signed Merkle tree head and defines it as 'the log's tamper-evident commitment'. Specific verb ('Return') and resource ('signed Merkle tree head'). Differentiates from siblings like 'receipt' and 'verify'.

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

Usage Guidelines5/5

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

Explicitly advises when to use: 'Use as the anchor a verifier checks inclusion receipts against, or to detect log forks. Pair with `receipt`.' Provides context and directs to an alternative tool.

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

verifyVerify All MemoriesA
Read-onlyIdempotent

Cryptographically verify every stored memory's W3C Verifiable Credential and the integrity of the hash-chained transparency log. Returns a summary of memories checked, how many are valid, and any failure reasons. Use to detect tampered or poisoned memories before trusting them. This is the deep audit; status is the lightweight check.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, which is consistent. The description adds context about cryptographic verification, return summary, valid count, and failure reasons. No contradictions. It does not mention potential performance costs, but overall adds value beyond annotations.

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

Conciseness5/5

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

Two sentences: the first explains what the tool does, the second explains when to use it and how it differs from a sibling. No wasted words, front-loaded with the core action.

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

Completeness5/5

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

For a tool with no parameters and an output schema (known from context), the description covers purpose, usage, return summary, and alternatives. It is fully complete for an agent to decide when and how to invoke it.

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

Parameters4/5

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

The input schema has zero parameters, and schema description coverage is 100%. The description adds no parameter details, but none are needed. Baseline score of 4 for zero parameters is appropriate.

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

Purpose5/5

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

The description clearly states the verb ('verify') and the resource (every stored memory's W3C Verifiable Credential and the integrity of the hash-chained transparency log). It explicitly distinguishes from the sibling tool 'status' by contrasting 'deep audit' vs 'lightweight check'.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'Use to detect tampered or poisoned memories before trusting them.' It also names an alternative tool ('status') for a lightweight check, providing clear usage guidance.

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.

  1. 8 tool updatesv2.4.0
    • First observednote
    • First observedprogress
    • First observedrecall
    • First observedreceipt
    • First observedreview_pending
    • First observedstatus
    • First observedtree_head
    • First observedverify

TDQS

A4.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: note saves memories, recall retrieves them, progress summarizes project state, receipt provides cryptographic proofs, review_pending lists pending rules, status reports system health, tree_head returns the Merkle root, and verify performs deep audit. No overlapping functionality.

Naming Consistency5/5

All tool names are lowercase with underscores for compounds (e.g., review_pending, tree_head). They follow a consistent pattern of verbs or noun phrases that clearly indicate the action or output, with no style mixing.

Tool Count5/5

With 8 tools, the set is well-scoped for a verifiable memory system. It covers storing, retrieving, verifying, and monitoring without being bloated or too sparse.

Completeness4/5

The tools provide core operations (create, read, verify, audit). Missing explicit update/delete tools is a minor gap, but this aligns with the system's append-only, tamper-evident design. A tool for exact-match retrieval could be useful, but semantic recall covers most needs.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A different approach from typical persistent-memory MCPs. Instead of a local SQLite + embeddings store, the memory lives as plain files in a .ai-memory/ directory you commit to your repo (facts.jsonl, decisions/\*.md, gotchas.md). Git is the sync layer — what one Claude/Cursor/Cline learns about a repo, the next session (or a teammate's agent) picks up automatically. 5 MCP tools: get_rep
    5
    1
    MIT

Latest Blog Posts

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/dcondrey/cogmem'

If you have feedback or need assistance with the MCP directory API, please join our Discord server