Skip to main content
Glama

recall

Search persistent project memory for past decisions, caveats, and file history before starting tasks to avoid repeating mistakes across AI sessions.

Instructions

Your persistent memory across all AI tools. CALL THIS BEFORE STARTING ANY TASK to check for past caveats (pain records), decisions, and learnings — prevents repeating mistakes across sessions.

Typical usage: recall({ query: "keywords" }) for search, recall({ path: "file.ts" }) for file history, recall() for overview.

WHEN TO CALL: • Before starting any new task or touching a file • When the user mentions "before" / "前に" / "last time" / "remember when" • When an error occurs — check if you've seen it before • When making a decision — check for prior decisions on the same topic

THREE MODES (auto-detected): • Search (default): provide query → returns memories ranked by relevance + heat • File history: provide path → returns complete edit history with user-intent context • Session brief: omit all params → what needs attention (🔴/🟡), where you are on the Map, open loops (proposals / distill queue / friction), top entities. CALL THIS FIRST in a new session. • Locate: where: "" → your position on the Current Truth Map + blast radius (what else moves if you touch this). where: true → auto-locate from recent edits • Dream: dream: true → North Star + orphaned proposals to triage + distill_queue + friction (the full triage session; the brief carries only the counts) • Entity list: overview: true (the old no-arg behaviour)

Works across Claude, GPT, Cursor, Codex, Gemini — one local SQLite file, nothing leaves your machine.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "recall"
  }
}

Input Schema

NameRequiredDescriptionDefault
bandNoFilter by heat band.
kindNoFor overview mode: filter by entity kind.
pathNoFile path or substring. When set, returns file edit history with per-edit user-intent context instead of memory search.
dreamNoReturn the full triage set: North Star, orphaned proposals (each with candidate_id), distill_queue, friction. Resolve proposals with resolve_drift({ candidate_id, action }); rewrite distill items with remember({ memory_id, content }).
layerNoLayer filter. Accepts aliases (decisions/warnings/how/etc.).
limitNoHard cap on results.
queryNoWhat you want to remember. Use keywords, entity names, or FTS5 expressions. Omit for entity overview.
whereNoLocate on the Current Truth Map. A topic string, or true to auto-locate from the files you edited recently. Returns your node, journey stage, blast radius, and the decision behind it.
offsetNoSkip N results (pagination).
distillNoWith dream: how many raw memories to return for rewriting (default 8, max 25). The queue is value-ordered; rule-verdicted items never appear.
explainNoInclude ranking internals (composite, heat, band, momentum, match_reasons, score_breakdown). Off by default so more memories fit the token budget.
projectNoWith where: the Map project slug, when several maps are imported.
altitudeNoFilter by cognitive altitude.
mem_typeNoFilter by memory type.
overviewNoReturn the entity list instead of the session brief when no query is given.
mem_stateNoFilter by lifecycle state.
thread_idNoFilter by thread ID for decision chains.
max_tokensNoToken budget. Default 2000.
entity_nameNoNarrow to a specific entity
max_intentsNoFor file mode: max user-intent snippets. Default 10.
min_memoriesNoFor overview mode: minimum memory count. Default 1.
mark_accessedNoSet false for preview queries.
scope_to_rootsNoFor file mode: filter to client-provided roots.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed24 schema fields changedv0.17.0
    • addedInput schema / properties / altitude
      Added value: +{
      +  "description": "Filter by cognitive altitude.",
      +  "enum": [
      +    "mission",
      +    "strategy",
      +    "architecture",
      +    "implementation"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / band / description
      Previous value: -"Optional — only return memories whose heat_band matches."New value: +"Filter by heat band."
    • addedInput schema / properties / distill
      Added value: +{
      +  "description": "With dream: how many raw memories to return for rewriting (default 8, max 25). The queue is value-ordered; rule-verdicted items never appear.",
      +  "type": "number"
      +}
    • addedInput schema / properties / dream
      Added value: +{
      +  "default": false,
      +  "description": "Return the full triage set: North Star, orphaned proposals (each with candidate_id), distill_queue, friction. Resolve proposals with resolve_drift({ candidate_id, action }); rewrite distill items with remember({ memory_id, content }).",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / entity_name / description
      Previous value: -"Optional — narrow to a specific entity"New value: +"Narrow to a specific entity"
    • addedInput schema / properties / explain
      Added value: +{
      +  "default": false,
      +  "description": "Include ranking internals (composite, heat, band, momentum, match_reasons, score_breakdown). Off by default so more memories fit the token budget.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / kind
      Added value: +{
      +  "description": "For overview mode: filter by entity kind.",
      +  "enum": [
      +    "person",
      +    "company",
      +    "project",
      +    "concept",
      +    "file",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / layer / description
      Previous value: -"Optional layer filter. Accepts aliases (decisions/warnings/how/etc.) as well as canonical names."New value: +"Layer filter. Accepts aliases (decisions/warnings/how/etc.)."
    • changedInput schema / properties / limit / description
      Previous value: -"Optional hard cap on number of memories. Stops at min(max_tokens-budget, limit)."New value: +"Hard cap on results."
    • changedInput schema / properties / mark_accessed / description
      Previous value: -"Set false for preview / listing queries that should not bump heat."New value: +"Set false for preview queries."
    • addedInput schema / properties / max_intents
      Added value: +{
      +  "default": 10,
      +  "description": "For file mode: max user-intent snippets. Default 10.",
      +  "type": "number"
      +}
    • changedInput schema / properties / max_tokens / description
      Previous value: -"Approx token budget. Default 2000. Either max_tokens or limit stops iteration (whichever fires first)."New value: +"Token budget. Default 2000."
    • addedInput schema / properties / mem_state
      Added value: +{
      +  "description": "Filter by lifecycle state.",
      +  "enum": [
      +    "open",
      +    "decided",
      +    "in_progress",
      +    "done",
      +    "stalled",
      +    "parked",
      +    "superseded"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / mem_type
      Added value: +{
      +  "description": "Filter by memory type.",
      +  "enum": [
      +    "question",
      +    "comparison",
      +    "decision",
      +    "work",
      +    "outcome",
      +    "learning",
      +    "note"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / min_memories
      Added value: +{
      +  "default": 1,
      +  "description": "For overview mode: minimum memory count. Default 1.",
      +  "type": "number"
      +}
    • changedInput schema / properties / offset / description
      Previous value: -"Skip this many top results (pagination). Use has_more from prior response to decide next offset."New value: +"Skip N results (pagination)."
    • addedInput schema / properties / overview
      Added value: +{
      +  "default": false,
      +  "description": "Return the entity list instead of the session brief when no query is given.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / path
      Added value: +{
      +  "description": "File path or substring. When set, returns file edit history with per-edit user-intent context instead of memory search.",
      +  "type": "string"
      +}
    • addedInput schema / properties / project
      Added value: +{
      +  "description": "With where: the Map project slug, when several maps are imported.",
      +  "type": "string"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"What you want to remember (free-text, entity name, or FTS5 MATCH expression)"New value: +"What you want to remember. Use keywords, entity names, or FTS5 expressions. Omit for entity overview."
    • addedInput schema / properties / scope_to_roots
      Added value: +{
      +  "default": false,
      +  "description": "For file mode: filter to client-provided roots.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / thread_id
      Added value: +{
      +  "description": "Filter by thread ID for decision chains.",
      +  "type": "string"
      +}
    • addedInput schema / properties / where
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "boolean"
      +    }
      +  ],
      +  "description": "Locate on the Current Truth Map. A topic string, or true to auto-locate from the files you edited recently. Returns your node, journey stage, blast radius, and the decision behind it."
      +}
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
  2. First observedv0.2.0

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description does substantial work: it discloses that modes are auto-detected, that results are ranked by relevance and heat, that storage is a local SQLite file with no data leaving the machine, and that `mark_accessed` defaults to true (state mutation) with a preview opt-out. It stops short of describing empty-result behavior, performance characteristics, or conflicts between simultaneously supplied mode params.

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

Conciseness4/5

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

Front-loaded with the imperative call-to-action and then a scannable mode list. Slightly wasteful: the "THREE MODES" header is wrong for seven bullets, and "CALL THIS FIRST" is asserted twice (task start and new session) with overlapping scope.

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

Completeness4/5

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

For a 23-param, no-annotation, no-output-schema tool, the description covers when to call, how modes are selected, and what each mode roughly returns ("blast radius", "open loops", "ranked by relevance + heat"), which is what an agent needs given no output schema. A few filter-only params and the interplay when multiple mode params are passed simultaneously remain unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the mode-selection logic that ties `query`, `path`, `where`, `dream`, and `overview` together, which the per-param schema strings do not convey as a whole. It loses a point because the mode list is mislabeled "THREE MODES" while enumerating seven, and several params (band, altitude, mem_state, thread_id) get no mention in prose.

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?

Opens with a concrete identity ("your persistent memory across all AI tools") and enumerates the retrieval modes (keyword search, file history, session brief, locate, dream, entity list) so the agent knows exactly which resource it is reaching for. It is clearly distinct from the sibling `remember` (write) and `drift_status` (status) tools.

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?

Contains an explicit WHEN TO CALL list with four concrete triggers, including multilingual cues ("before" / "前に" / "last time") and error/decision moments. It also names the alternative form of the call for each mode, leaving little to inference.

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