Lians Agent Memory
OfficialLians Guard
The current-state and completion guard for AI coding agents.
Lians recovers interrupted agent work, rejects stale task state, and blocks
done until the current task is ready for human review.
Your agent can forget the chat. It cannot forget what is finished, what changed, or what still has to pass.
Recover. Resume a bounded current task across supported Claude Code and Codex sessions.
Reject stale state. Bind checkpoints to current repository and task state so old evidence is not silently reused.
Guard completion. Separate measured evidence from an agent's own claims and keep the gate closed while work is missing, unknown, failed, or blocked.
Require review.
READY FOR HUMAN REVIEWis a handoff to a person, never a claim that the work is correct, approved, or safe to deploy.Stay local. The free recovery path needs no Lians account, AI password, or provider API key.
Lians works with your existing AI account and editor. It does not replace your model, Git, CI, repository instructions, or human review.
Related MCP server: midas-memory-mcp
One clear result after every agent session
RECOVERED
Task: Fix OAuth callback handling
Next: Re-run the callback integration test
STALE
Reason: The authentication requirement changed after this checkpoint
BLOCKED
Missing: OAuth callback integration test
Untrusted: "tests passed" was reported by the agent, not measured
READY FOR HUMAN REVIEW
Measured locally: callback tests passed
Measured by CI: required checks passedThe trust model is deliberately strict. measured_local, measured_ci, and
human_confirmed evidence can satisfy a criterion. agent_attested and
inferred_activity records remain useful context but cannot open the review
gate. An agent cannot promote its own checkpoint into a trusted class. Trusted
CI evidence requires an exact GitHub attestation and commit match plus an
interactive check-to-criterion mapping; human evidence requires interactive
confirmation. Read why Lians exists, the full
Lians Guard product contract, and the current market
pressure test.
Try it in two minutes
Choose the AI tool you already use:
Tool | Fastest setup |
Codex app, CLI, or IDE | |
Claude Code | |
Cursor | |
Other MCP clients |
For example, after installing uv, connect Codex with:
codex mcp add lians --env LIANS_MCP_ENABLED_TOOLS=remember,recall,list_memories,correct_memory,forget_memory -- uvx --from "lians-sdk[mcp]" lians-mcpRestart Codex, then save one safe project fact and recover it in a fresh chat.
Local memory is stored in ~/.lians/mcp.db by default. This is the available
free recovery path; the full Guard workflow is currently a developer preview.
Follow the complete quickstart for setup, recovery, correction, deletion, and the Guard preview boundary.
What a fresh coding agent receives
Lians can generate a bounded project handoff instead of replaying a transcript:
Reported complete; verify:
- migrated the orders API to /v2/orders
Still open:
- verify the migration against current Git state
- update documentation
Decisions:
- keep pytest
Changed:
- /v1/orders is stale; use /v2/orders
Next:
- update documentation before touching unrelated UIThe handoff is derived from current Lians state, not a manually maintained summary. Agent-reported work remains visible without being mislabeled as verified completion.
Why this is not another generic memory layer
Native memories are convenient when work stays inside one product. General memory is no longer a scarce category. Lians uses local memory for recovery, then focuses on the expensive gap: current task state and evidence-backed readiness.
The current competitive landscape pressure tests this position against native Claude Code, Codex, Cursor, GitHub Copilot, Entire, Factory, and AI review workflows.
Approach | Best fit | Boundary |
Native tool memory | One AI tool, minimal setup | Usually stays inside that vendor |
| Stable repository instructions | Must be maintained manually |
Transcript replay | Reconstructing one conversation | Large, noisy, and may revive stale decisions |
Free Lians recovery | Resume current project context across supported tools | Requires a local connection to each tool |
Lians Guard | Detect stale state and gate readiness with typed evidence | Team workflow is still in developer preview |
Lians is not claiming that every project needs a separate memory layer. See the honest comparison and decision guide.
Project status
Lians is under active development. Available recovery features and preview Guard features are separated here so the repository does not imply a production guarantee that does not exist yet.
Capability | Status |
Local memory through MCP and Python | Available |
Codex, Claude Code, and Cursor local recovery setup | Available |
Inspect, correct, and confirmed permanent deletion | Available |
Bounded context and signed selection receipts | Available |
Automatic Claude-to-Codex project handoff | Beta |
Typed evidence and evidence-backed task gate | Developer preview |
Local Git workspace fingerprint on checkpoints | Developer preview |
Automatic stale evidence invalidation | In development |
Attested GitHub Actions evidence intake | Developer preview |
Local Guard reporting | Developer preview |
Shared team queue | Planned |
Cross-platform clean-install CI | Required by the new Guard workflow; first hosted run pending |
Guided desktop installer and local control center | Release candidate |
The macOS and Windows desktop builds remain release candidates pending platform signing and notarization. See the desktop preview boundary.
Current evidence
The included Claude-to-Codex continuity fixture recovered 10/10 expected facts, exposed 0 stale facts as current, and produced a 231-token handoff. These are bounded beta results, not a promise that every live coding session extracts perfectly. Run the experiment.
The developing ContinuityBench v0.1 publishes the proposed cross-agent, freshness, correction, erasure, provenance, and boundedness test contract. Its current Lians fixture is evidence for that fixture only; it is not presented as a completed competitor leaderboard.
A separate live test saved a synthetic project fact through Cursor, recalled it in a new Cursor chat and a fresh Claude Code session, and confirmed it was gone after deletion. Read the test method.
The Guard correctness benchmark exercises missing evidence, unknown criteria,
failed constraints, blockers, stale updates, and drift signals. It is a local,
deterministic test of the configured policy, not proof of semantic correctness
or a production outcome. Run packages/lians-easy/benchmarks/task_contract_correctness.py
to inspect the cases.
Build with Lians
Use the local Python SDK inside an application:
pip install "lians-sdk[local]"from datetime import datetime, timezone
from lians import LocalLiansClient
memory = LocalLiansClient(db_path=".lians/memory.db")
memory.add(
agent_id="my-agent",
content="The project uses Python 3.12 and pytest.",
event_time=datetime.now(timezone.utc),
)
result = memory.recall(
agent_id="my-agent",
query="Which Python version and test runner should I use?",
)See the install guide for TypeScript, Go, Java, C, framework integrations, and self-hosting.
Running a class, club, hackathon, or campus developer group? Use the student and community kit. Contributors and package integrators can start with Supported paths and repository status.
Lians also includes tools for project-scoped agent handoffs, signed selection and review receipts, local research and browser briefs, temporal reconstruction, lineage, information barriers, confirmed erasure, and bounded formal checks. These capabilities are useful for advanced or governed deployments but are not required for the starter memory workflow.
Development
git clone https://github.com/Lians-ai/Lians.git
cd Lians
python -m pip install -e ".[dev]"
python scripts/test_all.pyRead CONTRIBUTING.md before opening a pull request. Feature ideas, integration requests, and reproducible bugs are welcome in GitHub Issues.
If Lians helps your workflow, star the repository so other AI-tool users can find it.
License
Apache 2.0. See LICENSE.
Available Tools
9 toolsbacktest_checkA
Detect lookahead bias in a backtest simulation. Scans the agent's memory store and flags every fact the agent couldn't have known at the given simulation date. Returns FUTURE_EVENT (event_time is after the checkpoint) and LATE_REVISION (the revised figure hadn't been published yet) flags. A clean report (is_clean=true) is the proof a risk committee needs.
| Name | Required | Description | Default |
|---|---|---|---|
| simulation_as_of_iso | Yes | ISO-8601 UTC timestamp of the simulation checkpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the scanning mechanism, the two flag types (FUTURE_EVENT, LATE_REVISION), and the is_clean output. This goes beyond a basic summary, though it doesn't state read-only behavior or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, mechanism, output/significance. No fluff, front-loaded with the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 parameter, no output schema), the description covers the essential aspects: what it checks, what flags it returns, and what a clean result signifies. Missing edge cases or error handling, but these are less critical for this 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 100% for the single parameter. The description only references 'given simulation date' without adding detail beyond the schema's ISO-8601 UTC timestamp definition, so it meets the baseline but adds no extra semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Detect lookahead bias') and resource ('a backtest simulation'). It distinguishes itself from memory retrieval siblings by focusing on validation and analysis of memory store contents.
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 context is clear: it's used to produce a clean report for risk committees. It implies when to use it (when validating a backtest) but doesn't explicitly list exclusions or alternatives. Given the specialized nature, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fact_historyA
Return every recorded version of a structured fact ordered by event_time. Query by ticker + metric — ideal for time-series views like 'show me how AAPL EPS evolved over the last four quarters'. Superseded versions are included so you can see the full revision history. Entity normalization: 'Apple Inc.', ISIN 'US0378331005', and 'AAPL' all resolve to the same fact series automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| metric | Yes | Metric name (e.g. eps, price_target, guidance). | |
| ticker | Yes | Ticker symbol, ISIN, CUSIP, or company name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses key behaviors: ordering by event_time, inclusion of superseded versions, and automatic entity normalization (Apple Inc./ISIN/AAPL). It omits limit semantics and error behavior, but the disclosed traits are substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states the core action, the second gives a use case, and the third adds behavioral details. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers the main expectations: what is returned (versions), ordering, superseded handling, and normalization. It does not explicitly describe the response structure or pagination, but for a tool of this complexity it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover ticker and metric, and the description adds entity normalization and time ordering context that clarifies parameter usage. However, the 'limit' parameter remains undocumented in both schema and description, preventing a higher score.
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 ('Return') plus resource ('every recorded version of a structured fact') and distinct behavior ('ordered by event_time'), clearly distinguishing it from sibling tools like recall or remember. It leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context with a concrete example ('show me how AAPL EPS evolved over the last four quarters') indicating it is ideal for time-series views. It does not explicitly name alternatives or when not to use it, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conflictsA
List open conflict flags — cases where two sources reported different values for the same fact at the same event_time. Use this to surface data quality issues before they affect decisions. Returns up to 20 open conflicts with both memory contents so a human or LLM can decide which source to trust.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | open |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses key behavioral traits: returns up to 20 conflicts, includes both memory contents, and is scoped to open conflicts by default. It does not mention side effects or auth, but as a read-only listing tool, this is reasonably transparent.
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 sentences, front-loaded with the core action, and every clause provides useful information (definition, use case, return limit, contents). No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool without annotations or output schema, the description covers the essential aspects: what the tool does, why to use it, and what it returns. It briefly misses explaining the full range of statuses available via the schema, but this is a minor gap given the schema already enumerates them.
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%, and the description adds no meaning to the 'status' parameter beyond echoing 'open' as the default. It does not explain other enum values (accept_a, accept_b, dismissed) or how filtering works, leaving the parameter semantics to the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists conflict flags and defines what constitutes a conflict (two sources reporting different values for the same fact at the same event_time). This specific verb+resource+definition distinguishes it from sibling tools like recall or memory_lineage, which serve different memory-related purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for when to use: 'Use this to surface data quality issues before they affect decisions.' It does not explicitly name alternatives or exclusions, but the purpose is clear and distinct from siblings, making the intended use evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_feedbackA
Record whether a recalled memory was helpful, incorrect, outdated, duplicate, or ignored. Negative feedback flags evidence for review and never silently deletes it.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| signal | Yes | ||
| outcome | No | ||
| memory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: negative feedback flags evidence for review and never silently deletes it. Since no annotations are provided, this adds important context about side effects and safety, though it does not mention what happens with positive feedback or other signals.
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 a single, front-loaded sentence with no redundancy. It efficiently captures the tool's purpose and a critical behavioral constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple feedback-recording tool, the description covers the core purpose and a key behavioral consequence (no silent deletion). No output schema exists, but the tool's return value is not essential for the agent to select and invoke it correctly. Still, a mention of what happens after recording (e.g., confirmation) would make it more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does enumerate the signal enum values, but it fails to explain the meaning of memory_id, note, and outcome. These parameters remain ambiguous, leaving gaps beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Record whether' and clearly lists the signal values (helpful, incorrect, outdated, duplicate, ignored), making it distinct from sibling tools like recall and remember. The resource (recalled memory) is explicit, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used after memory recall ('Record whether a recalled memory...') but does not explicitly state when to use it over alternatives like backtest_check or list_conflicts. No exclusions are provided, leaving usage guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_lineageA
Return the full supersession history of a memory — every prior version of the same fact and the chain of updates that led to the current value. Use when asked 'how did this guidance number evolve over time?' or when investigating why a memory was replaced.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | UUID of any memory in the lineage chain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden. It indicates a read-only style operation by using 'Return', and discloses what is returned (full history, every prior version, chain of updates). However, it doesn't mention limitations, error behavior, or any side effects, so transparency 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?
The description consists of two concise, front-loaded sentences. The first states the action and object, the second provides use cases. No redundant or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers purpose and usage adequately. It explains what is returned and when to use it, though it omits edge-case behavior like invalid IDs or ordering. Given the low complexity, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the parameter memory_id is described in the schema as 'UUID of any memory in the lineage chain'. The tool description adds no further parameter semantics beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Return' and the resource 'supersession history of a memory', with additional detail about every prior version and the chain of updates. This distinguishes it from sibling tools like recall or fact_history by focusing on lineage and supersession.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'how did this guidance number evolve over time?' or 'investigating why a memory was replaced'. This gives clear context, though it does not mention when-not-to-use or alternative tools explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallA
Retrieve the most relevant CURRENT memories for a query. Returns only presently-valid facts — superseded facts are excluded at the DB layer. Call this before answering any question that may be in memory. Use filters={ticker: NVDA} to narrow to a specific instrument.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| query | Yes | ||
| filters | No | Metadata equality filters, e.g. {ticker: NVDA} |
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 clearly explains that superseded facts are excluded at the DB layer and only currently-valid memories are returned, which is valuable behavior beyond the basic 'retrieve' action. It does not cover auth or rate limits, but for a read-only-like tool the core behavior is well disclosed.
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 sentences plus an example, entirely front-loaded and free of fluff. Every clause adds meaning: what it retrieves, the current-validity constraint, when to call it, and how to narrow results.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a retrieval operation with no output schema and simple parameters, the description covers most key aspects: purpose, behavior, usage timing, and a filter example. Missing details are k's effect on result count and return format, but for a tool of this simplicity it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only filters has a description). The description adds a useful example for filters ({ticker: NVDA}), but does not explain k or query beyond the schema. Since k has a default and query is self-explanatory, the compensation is moderate but incomplete.
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 clearly states the tool's purpose: 'Retrieve the most relevant CURRENT memories for a query.' It uses a specific verb and resource, and the emphasis on 'CURRENT' distinguishes it from siblings like recall_at or memory_lineage, which deal with historical or lineage data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Call this before answering any question that may be in memory.' It also provides a concrete filter example. However, it does not explicitly mention when not to use it or directly contrast with alternatives like recall_at or reconstruct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_atA
Retrieve memories that were valid at a specific past point in time. Use for compliance and audit: 'What guidance did we have on 2026-03-01?' Later superseding updates are excluded — this is true point-in-time recall. mem0 and Zep have no bitemporal model with compliance audit stack.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| query | Yes | ||
| as_of_iso | Yes | ISO 8601 timestamp for the point-in-time snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the key behavioral trait: later superseding updates are excluded for true point-in-time recall. It does not explicitly state read-only safety, but 'Retrieve' implies a read operation, and the temporal exclusion is the most critical behavioral aspect.
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 three sentences and front-loads the core purpose. However, the final sentence comparing mem0 and Zep is somewhat promotional and not necessary for using the tool, adding unnecessary length.
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 read-oriented retrieval tool, the description adequately covers the essential temporal semantics and provides a use case. It does not describe return format or pagination, but given the straightforward nature of a memory query, this is acceptable. Overall, it provides sufficient context for correct usage.
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 only 33% (only as_of_iso has a schema description). The description adds no meaningful detail about 'query' or 'k', and merely reinforces the purpose of as_of_iso without providing syntax or format guidance. It fails to compensate for the low schema coverage.
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 clearly states the tool retrieves memories valid at a specific past point in time, with a concrete compliance/audit example. It distinguishes itself via 'true point-in-time recall' and notes that later superseding updates are excluded, making it specific and differentiated from regular recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use for compliance and audit' with an example query, and explains that later superseding updates are excluded, which helps select this tool over others. However, it does not mention alternative sibling tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconstructA
Reconstruct the complete memory state and full audit event trail at a past point in time. Returns every memory valid at as_of plus the timestamped, hashed event log behind them. Use for regulatory audit submissions and trade reconstruction.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional semantic filter to narrow the memory set. | |
| as_of_iso | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It details the return payload (memory state plus timestamped, hashed event log) but does not disclose whether the operation is read-only, requires specific permissions, or has performance implications.
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 sentences, leading with the main purpose and then giving use cases. There is no filler and it is well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description provides a high-level overview but lacks detail on the exact output structure, pagination, error handling, or edge cases such as future dates or missing data. For a complex reconstruction operation, more context would be expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers only 50% of parameters (query has a description, as_of_iso does not). The description clarifies that as_of_iso specifies the point in time for which memories were valid ('valid at as_of'), partially compensating for the schema gap, but it does not add meaning to the query parameter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'reconstruct' and clearly identifies the scope as 'complete memory state and full audit event trail at a past point in time'. It differentiates from siblings like recall_at by emphasizing the inclusion of the hashed event log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states use cases: 'Use for regulatory audit submissions and trade reconstruction.' This provides clear context, but it does not name alternative tools or state when not to use, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberA
Store a financial fact, observation, or decision in persistent memory. Always provide event_time_iso as when the event occurred, not now. Add ticker/metric/entity metadata for precise supersession detection — this lets Lians automatically replace stale guidance numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Provenance: earnings_call, analyst_report, bloomberg, etc. | |
| content | Yes | ||
| metadata | No | Tags: ticker, metric, entity, instrument, cusip, isin. | |
| event_time_iso | Yes | ISO 8601 timestamp of when this event occurred. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does disclose a key behavior—metadata enables automatic replacement of stale guidance numbers—but it doesn't mention return values, side effects, or any destructive potential. Adequate but not comprehensive.
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 sentences, front-loaded with purpose, then immediately gives critical usage guidance. No fluff—every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with 4 params and no output schema, the description covers the essential purpose and parameter semantics sufficiently. It lacks return value details and explicit side-effect disclosure, but is still reasonably complete for typical use.
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 75%, and the description adds meaningful semantics beyond schemas: it explains the event_time_iso field must reflect when the event occurred, not now, and shows how metadata supports supersession. This enriches parameter understanding.
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 clearly states a specific action ('Store a financial fact, observation, or decision in persistent memory') with a clear resource (persistent memory). The verb 'store' distinguishes it from sibling tools like 'recall' and 'reconstruct', which are read operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong guidance on how to use the tool (e.g., event_time_iso semantics, metadata for supersession) but does not explicitly state when to use it vs. alternatives, nor any exclusions or when not to use it. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes: recall vs recall_at are differentiated by temporal scope, and reconstruct provides the audit trail beyond just point-in-time memory. However, memory_lineage and fact_history both show historical versions and could be confused without reading descriptions carefully.
Tool naming is a mix of bare verbs (recall, remember), verb phrases (list_conflicts, backtest_check), and noun phrases (memory_lineage, fact_history, memory_feedback). While all names use lowercase with underscores, the lack of a consistent verb_noun pattern creates a minor inconsistency.
With 9 tools, the set is well-scoped for a memory-management server. Each tool serves a distinct function in the memory lifecycle, from storage and retrieval to audit and quality checks, without unnecessary bloat.
The toolset covers core memory operations (write, read current, point-in-time read), audit trails, conflict detection, and feedback. Minor gaps include no explicit delete or update tool, but the supersession model handles updates implicitly via metadata-aware remembers, so the surface is largely complete.
Maintenance
Related MCP Connectors
Verified memory for AI agents. Signed assertions, billing attestation, session continuity.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent memory for AI agents — verbatim conversations, searchable by meaning.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceLocal-first, encrypted memory for AI agents, with cryptographic forgetting.3Apache 2.0
- AlicenseAqualityAmaintenanceLocal-first, source-traceable memory for AI agents — no LLM at ingest, $0 per message, zero data egress. Gives Claude Code, Cursor, and any MCP client one shared persistent memory with semantic recall, belief revision, selective forgetting, and a provenance guard that blocks acting on stale or unconfirmed memories.2314MIT
- FlicenseNot gradedqualityAmaintenanceLocal-first memory for AI agents with evidence-backed recall, deterministic trust verdicts, self-inspection, and a tamper-evident audit history.3
- AlicenseNot gradedqualityAmaintenanceLocal-first, source-grounded memory for AI agents, with citations, bitemporal history, review-gated corrections, and MCP tools for search and recall.3Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Lians-ai/Lians'
If you have feedback or need assistance with the MCP directory API, please join our Discord server