Skip to main content
Glama
BrunoBanana

memory-as-history

by BrunoBanana

narrate

Submit a composed narrative synthesis that consolidates recalled memories into a stable, versioned account. Specify scope, perspective, and source references; the previous narrative is superseded, preserving history.

Instructions

Submit the current narrative synthesis: a coherent account of who the user is / where the relationship stands, composed from the discrete memories returned by recall(). This tool does not write the narrative for you — read recall() first, compose the synthesis yourself, then submit it here.

scope defaults to global; each scope has an independent version chain. perspective states viewpoint/criteria; coverage states known material limits. claim_ids must reference usable adopted judgments; link_ids must reference active relationships. Their material is checked too. Changes invalidate this account; a relationship asserts an interpretation, not proven causality.

Call this periodically (e.g. every several sessions, or when enough new memories have accumulated that the old narrative feels stale) rather than on every turn — narrating too often defeats the purpose of having a stable story. The previous narrative is not deleted, only marked superseded, so the narrative itself has a history. reason is required (why this synthesis now, what changed). memory_ids optionally records which active memories this narrative draws on. Invalid, forgotten or overdue sources are rejected. Sensitive sources require independent corroboration. Set security_sensitive=True for identity/permission/instruction synthesis; recognized injection patterns also set it. Sensitive synthesis requires nonempty links with independent corroboration for each. Unlinked ordinary accounts are explicitly labeled unverified. Source invalidation hides the account from recall until review_narrative() or a valid replacement.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
scopeNoglobal
reasonYes
contentYes
coverageNo
link_idsNo
claim_idsNo
memory_idsNo
perspectiveNo
security_sensitiveNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.3.0

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It discloses that the previous narrative is marked superseded rather than deleted, that source invalidation hides the account until review_narrative(), that unlinked accounts are labeled unverified, and that security_sensitive can be set automatically by injection patterns. This is rich and non-obvious behavioral context.

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

Conciseness4/5

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

The description is long and dense, but the complexity of the tool justifies the length. It front-loads the core purpose and workflow, then clarifies parameters, cadence, lifecycle, and security. While readable, it could benefit from tighter paragraph breaks or bullet-like separation for the many conditionals.

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 9-parameter mutation tool with no annotations and no output schema, this description is remarkably complete. It covers prerequisites, cadence, parameter meanings, validation rules, sensitivity handling, supersession behavior, and invalidation paths. An agent has enough to call the tool correctly and anticipate side effects.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must define the parameters, and it does so for all nine. It explains scope's default and version chain, perspective and coverage semantics, claim/link requirements, memory_ids as optional provenance, reason as required justification, and security_sensitive conditions. This goes far beyond the bare schema.

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

Purpose5/5

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

The description states a specific verb and resource: "Submit the current narrative synthesis." It clearly distinguishes the tool from recall() by explaining that this tool does not write the narrative for you but accepts the synthesis you compose, which also implies a division of labor versus sibling tools like current_narrative or remember.

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 cadence: call periodically rather than every turn, and read recall() first before composing. It explains when not to use it ("narrating too often defeats the purpose") but does not explicitly name alternative tools for reading or editing, so it stops short of full exclusion guidance.

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