Skip to main content
Glama

Celiums Memory

A complete cognitive memory engine. Apache-2.0. All of it.

License: Apache-2.0 Sponsor

Development branch notice: this branch is dev work for the Rust and Cloudflare migration. It is not production-ready and must not be used for production data, customer traffic, or public release artifacts. The stable user-facing line remains main until the production gates below are closed.

Celiums Memory is an engine, not an app — no UI, no dashboard to log into. It is the memory, journaling, ethics and knowledge substrate you embed inside other software: agents, assistants, tools, pipelines. It speaks MCP (Model Context Protocol) so any compatible client (Claude Code, Cursor, Continue, Cline, OpenCode, or your own) gets persistent memory, a first-person journal, an auditable ethics engine, and a per-user biological clock — without you building any of it.

Implementation status: the Rust workspace in rust/ is the canonical implementation. The Cloudflare Worker, Durable Object, R2 and Container runtime are the target deployment path and are still being validated on dev. See the ordered Rust roadmap, the execution ledger, and ADR-025.

It is open source under Apache-2.0 in full: no open-core split, no paid tier, no proprietary core held back. The Ethics Engine — every layer — is open and auditable. Its ethics_knowledge corpus is distributed separately as a v2.0.0 release asset (not in the git tree); the engine runs on Layers A+B without it, and Layer K (precedent) abstains cleanly when the corpus is absent.

A fuller statement of intent: MANIFESTO.md.


Target Architecture

MCP / HTTP client
    |
    v
Cloudflare Worker
    |  authentication, tenant resolution, edge limits
    v
Durable Object per tenant
    |  command journal, receipts, high-water mark, R2 pointer
    v
Disposable Cloudflare Container generation
    |  native Rust binary, one tenant filesystem
    v
Hyphae 0.2.1
    |  hash-chained log, verified snapshots, embedded indexes
    v
Celiums Memory Rust engine
    cognitive core + ethics + governance + recall + journal + graph

The Container filesystem is disposable. The Durable Object is the serialized control plane, and encrypted checkpoint artifacts are stored in R2. This is the architecture being built and tested; it is not an assertion that this branch is ready for production deployment.

The native Rust binary remains the local reference runtime. It supports MCP stdio, authenticated MCP Streamable HTTP, REST v1, OpenAPI, tenant-scoped actors, and 19 MCP tools. The Worker and Container layers must agree with that native contract before canary promotion.

cd rust
cargo build --release -p celiums-memory-cli
cargo run --release -p celiums-memory-cli -- mcp --data ../.celiums/memory

MCP client configuration:

{ "command": "celiums-memory", "args": ["mcp"] }

The target production request path is:

MCP client / HTTP caller
        │
         ▼
 Worker auth + tenant routing
          ▼
 Durable Object → Cloudflare Container → native Rust MCP/HTTP server
          ├─► Hyphae append-only durable engine
          ├─► encrypted R2 checkpoint generations
          └─► caller-provided or Workers AI embeddings

The pieces:

  • Memoryremember / recall with hybrid retrieval (vector + full-text + affective/PAD resonance), importance scoring, consolidation, lifecycle decay, and circadian/interoceptive modulation.

  • Journal — append-only, hash-chained, first-person agent journal: causal chains, arcs, introspection, dialogue, chain verification.

  • Ethics Engine — a 4-layer evaluator (A deterministic lexicon · B probabilistic CVaR with a categorical CBRN hard-block · C philosophical scaffold · K precedent advisory). Fully open, corpus included — the component that makes moral calls is the one that least deserves to be hidden.

  • Biological clock — per-user circadian rhythm modulates arousal and recall; the engine has a sense of time and state.

  • Knowledgeforage does hybrid search over the skills/knowledge you bring (BYO; via the skills table). The large curated module corpus is a separate Celiums project — forage runs without it.

  • Storage — Hyphae-backed native Rust durability inside the Container; the Durable Object is the Cloudflare control plane and recovery journal.

  • Recovery — mutating requests carry X-Celiums-Operation-Id; the DO persists pending, forwards the original command, stores the terminal receipt, advances a contiguous high-water mark, and replays unresolved tail operations after a Container failure.

  • Checkpoints — encrypted Hyphae backups are wrapped as versioned binary artifacts, uploaded to R2, referenced by a durable DO pointer, retained as recent generations, and restored only into a new verified tenant generation.

Full detail — tenant isolation, confirmation gates, ethics layers and observability — is in ARCHITECTURE.md.


Related MCP server: MCP AI Memory

Development Status

This section describes the work currently being integrated into dev. It is intentionally explicit so that development architecture is not mistaken for a shipped product contract.

Completed Foundation

  • Rust cognitive core with importance, affect/PAD, limbic state, retention, circadian modulation, ethics Layers A/B/C/K, and deterministic recall.

  • Hyphae-backed durable engine with exact Q15 retrieval, BM25F lexical search, typed abstentions, dimension guards, durable state, and verified recovery.

  • Tenant, user, agent, project, conversation and session identity contracts.

  • Idempotent ingestion, event ledgers, batch ingestion, provider enrichment boundaries, temporal claims, contradiction detection, entity graph, hierarchical consolidation, lifecycle maintenance, and time-travel recall.

  • Policy-aware governance, disclosure controls, poisoning/PII/secret handling, append-only audit chains, deletion, export, migration planning, encrypted backups, and restore verification.

  • Native Rust server with REST v1, MCP Streamable HTTP, OpenAPI, API-key auth, OIDC verifier boundary, RBAC, confirmation tokens, quotas, rate limits, request IDs, health, readiness and version endpoints.

P10 Cloudflare Migration

  • Removed the legacy TypeScript memory runtime, shared TypeScript types, legacy schemas, SQL migration runner, Postgres/Qdrant/Valkey deployment paths, Docker Compose path, and Helm release path from this development line.

  • Moved plugin and benchmark transport to the authenticated native Rust server.

  • Added a Worker control plane with tenant-bound Container routing.

  • Added a Durable Object command journal with transactional pending records, terminal receipts, idempotency conflicts, contiguous high-water marks, and pending-tail replay.

  • Added binary-safe checkpoint transport so large encrypted artifacts are not converted to UTF-8 or stored as giant journal receipts.

  • Added native checkpoint export/import routes and a versioned CELIUMSCP artifact over the existing encrypted Hyphae backup primitive.

  • Added R2 checkpoint pointers, three-generation history, retention, pending binary objects, Queue delivery, and Durable Object alarm scheduling.

  • Added native/Worker conformance tests for auth, tenant isolation, replay, checkpoint metadata, binary preservation, and idempotency.

What We Are Modeling

The migration is not only a language rewrite. It models a product-grade memory substrate with explicit boundaries:

  • Physical tenant isolation: a tenant is resolved before storage is opened; request payloads never select a tenant directory.

  • Durable command semantics: acknowledged writes have an operation identity, a receipt, a sequence, and a recovery story instead of relying on ephemeral process state.

  • Disposable compute: Container generations can be destroyed and rebuilt from verified checkpoint plus journal replay without changing operation IDs.

  • Evidence-preserving memory: raw events, claims, graph edges, summaries, policy traces, journal chains and audit records preserve provenance rather than collapsing everything into opaque vectors.

  • Read-only recall: retrieval does not silently mutate memory or emotional state; feedback and maintenance are explicit operations.

  • Governed disclosure: sensitive content, persistent instructions, secrets, operational intent and user-visible disclosure are separate decisions.

  • Deterministic behavior: dimensions, filters, embedding identity, corruption, unsupported formats and degraded retrieval fail explicitly.

  • Portable ownership: logical exports, encrypted backups, verified restore, hard delete and residue reports remain first-class capabilities.

  • Provider neutrality: the engine does not own an LLM or embedding provider; production callers may supply Workers AI, bge-m3, another compatible model, or the deterministic local embedder for development.

  • Operational quality: the intended product must expose health canaries, redacted telemetry, recovery drills, versioned artifacts, reproducible builds, conformance suites and clear rollback boundaries.

Not Ready For Production

This dev line must not be promoted until all of the following are green in a real Cloudflare environment:

  • Worker authentication and tenant routing against production secrets.

  • Durable Object serialization and journal durability under concurrent traffic.

  • Container start, stop, destroy, restart and generation replacement behavior.

  • R2 write, read, retention, corruption detection and encrypted restore.

  • Queue delivery, retry, deduplication and pending-tail replay.

  • RPO 0 for acknowledged writes and measured recovery objectives.

  • Native versus Container conformance using the same fixtures and result schema.

  • Recall health canary, tenant isolation canary and backup/restore canary.

  • Crates.io publication and clean-consumer installation for the public Rust family.

  • Production security review, release provenance, runbooks and disaster-recovery drill.

Until then, use main for the stable public line. Treat all dev APIs, artifacts, package metadata and Cloudflare configuration as subject to breaking change.


Quick start

Option A — Native Rust server

git clone https://github.com/terrizoaguimor/celiums-memory.git
cd celiums-memory
export CELIUMS_API_KEY_PEPPER=local-development-pepper-change-me
celiums-memory serve --data ~/.celiums/memory \
  --api-keys 'cmk_local:default:developer:developer:owner'
curl localhost:3210/healthz  # → live, once ready

The native MCP/HTTP server listens on :3210.

Option B — MCP stdio

git clone https://github.com/terrizoaguimor/celiums-memory.git
cd celiums-memory
celiums-memory mcp --data ~/.celiums/memory

The MCP stdio mode is local and requires no external services.


Connect an MCP client

Point any MCP client at the HTTP endpoint with the API key. Example for Claude Code / Cursor-style config:

{
  "mcpServers": {
    "celiums-memory": {
      "url": "http://localhost:3210/mcp",
      "headers": {
        "Authorization": "Bearer cmk_your_key_here",
        "x-celiums-tenant-id": "default"
      }
    }
  }
}

From then on the client can call remember, recall, journal_write, forage, ethics_trace, and the rest — and auto-bootstrap loads prior context into the first response automatically.


Configuration

Set via environment. The essentials:

Var

What

PORT

HTTP/MCP port (default 3210)

CELIUMS_API_KEYS

static native-server keys in token:tenant:user:subject:role format

CELIUMS_API_KEY_PEPPER

server-side API-key digest pepper

CELIUMS_CONFIRMATION_SECRET

destructive-operation confirmation secret

CELIUMS_CHECKPOINT_KEY_HEX

32-byte hex key for encrypted Cloudflare checkpoints

CELIUMS_LLM_API_KEY / _BASE_URL / _MODEL

optional BYO LLM configuration


Ethics knowledge corpus (Layer K — optional)

The Ethics Engine runs on Layers A + B with zero setup. Layer K (precedent advisory) consults an ethics_knowledge corpus that is not in the git tree — it ships as a v2.0.0 release asset (ethics_knowledge.jsonl, ~31 MB, embeddings precomputed). To enable Layer K, point OPENSEARCH_URL at your OpenSearch and load it:

OPENSEARCH_URL="https://user:pass@your-opensearch:25060" pnpm exec tsx scripts/load-ethics-knowledge.mjs

The loader downloads the release asset, verifies its SHA-256, creates the index with the exact mapping, and bulk-indexes it (idempotent — re-runnable; --force recreates, --dry-run validates without writing). Until then Layer K abstains cleanly; A + B are unaffected.


The MCP tool surface

Family

Examples

Purpose

Memory

remember, recall, memory_get, memory_list

Durable memory and retrieval

Journal

journal_write, journal_recall, journal_verify_chain

Hash-chained first-person journal

Maintenance

consolidate, run_lifecycle, snapshot_now, recall_at

Explicit engine maintenance

Governance

confirm_destructive, memory_delete, memory_update

Confirmation-gated changes


Development

pnpm install
pnpm typecheck
cargo check --manifest-path rust/Cargo.toml --workspace

The deployable is the Rust celiums-memory-cli binary. The Cloudflare Worker under apps/cloudflare-worker authenticates requests and routes one Container per tenant.


Integrating

The engine is built to live inside your stack and is consumed over MCP or authenticated HTTP. The plugin and benchmark packages are transport adapters, not storage runtimes.


License & support

Apache-2.0 — every line of source is public, including the full Ethics Engine. Its ethics_knowledge corpus ships as a release asset (see Releases), not in the git tree. See LICENSE and TRADEMARKS.md.

If Celiums Memory is useful to you, you can sponsor its development. It is built — in the open, going its own way in peace — by Celiums Solutions LLC.

Available Tools

26 tools
absorbA

Load the full content of a knowledge module by its exact name/slug. Returns the complete module text (typically 2,000-20,000 words) with code examples, best practices, and references. Use after forage to read a specific module in full. Behavior: looks up the module by slug, returns full markdown content. If not found, suggests using forage to search. Example: absorb("react-mastery") returns the complete React mastery guide.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact module slug (kebab-case). Get slugs from forage results. Examples: "react-mastery", "kubernetes-hpa-guide", "owasp-top-10-checklist"

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided; description fully covers behavior: looks up by slug, returns full markdown, typical length, content type, and fallback suggestion. Could mention any side effects or auth requirements, but none are expected for a read-only knowledge module tool.

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 (5 sentences) and well-structured: purpose, content type, usage instruction, behavioral note, and example. Every sentence adds value with no redundancy.

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?

Even without output schema, the description fully explains the return value (complete markdown content, length range, typical sections). It covers all necessary context for correct invocation.

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?

Input schema has 100% coverage with description for 'name' parameter. The tool description adds extra value: 'Exact module slug (kebab-case). Get slugs from forage results. Examples: ...' This goes beyond the schema's description.

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 'Load the full content of a knowledge module by its exact name/slug.' It clearly identifies the verb (load) and resource (knowledge module), and distinguishes from sibling 'forage' by specifying 'Use after forage to read a specific module in full.'

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 says 'Use after forage to read a specific module in full.' and 'If not found, suggests using forage to search.' Provides clear when-to-use and when-not-to (fallback) guidance.

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

forageA

Search 500,000+ expert knowledge modules by natural language query. Returns ranked results with titles, descriptions, and categories. Use when the user needs technical guidance, best practices, or domain expertise. Behavior: performs hybrid search (full-text + semantic) across the knowledge base, ranks by relevance, returns top N matches. Example queries: "kubernetes horizontal pod autoscaler", "react hooks best practices", "HIPAA compliance checklist".

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural-language search query describing the knowledge needed. Be specific for better results. Example: "how to set up PostgreSQL replication"
limitNoMaximum number of modules to return. Default: 10, max: 50. Use lower values (3-5) for focused results, higher (20-50) for broad exploration.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It states 'Behavior: performs hybrid search (full-text + semantic) across the knowledge base, ranks by relevance, returns top N matches.' This adds useful detail beyond the schema but does not disclose auth needs, rate limits, or potential limitations.

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?

Description is compact (three sentences plus examples), front-loaded with purpose, then usage, then behavior. No extraneous words. Examples are placed at the end, which is acceptable. Minor improvement could be to separate examples more clearly.

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?

Given low complexity (2 params, no output schema, no annotations), the description is complete: it covers purpose, usage, behavioral details, and examples. No obvious gaps for a search tool. Slightly more detail on pagination or result format would improve, but not necessary.

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 description coverage is 100%, so baseline is 3. Description adds marginal value with example queries and advice to 'Be specific' for query, and default/max values for limit. These are helpful but not essential beyond the schema definitions.

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?

Description clearly states 'Search 500,000+ expert knowledge modules by natural language query' and lists return results. Purpose is specific and actionable. However, it does not differentiate from sibling tool 'research_search' which may have overlapping functionality.

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?

Explicit guidance: 'Use when the user needs technical guidance, best practices, or domain expertise.' This provides clear context for when to invoke the tool. No alternative tools or exclusion criteria are mentioned, but the guidance is sufficient for a search tool.

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

journal_arcA

Build a coherent arc across YOUR recent entries using the configured LLM — with anti-confabulation guardrails. Output ALWAYS returns 4 keys: narrative, contradictions (entry pairs in tension), outliers (entries that don't fit), and confidence [0,1]. If outliers is empty you are probably confabulating coherence — the response is annotated with a WARNING. confidence < 0.7 is flagged as a "weak arc". Default window is the last month, max 50 entries. Excludes superseded entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowNolast_week | last_month (default) | all
max_entriesNoDefault 50, max 200.

TDQS

A4.3/5.0
Behavior5/5

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

The description thoroughly discloses the tool's output format (narrative, contradictions, outliers, confidence), edge cases (empty outliers indicating confabulation, weak arc for confidence < 0.7), default window (last month), limit (50 entries), and exclusion of superseded entries. No annotations exist, so the description fully carries the behavioral burden.

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 a concise 5-sentence paragraph that front-loads the primary purpose and then efficiently covers output structure, warnings, defaults, and limits. Every sentence adds value without redundancy.

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 only 2 optional parameters and no output schema or annotations, the description provides comprehensive context: what the tool does, what it returns, when to suspect confabulation, and configuration defaults. This is sufficient for an AI to decide when to invoke the tool and interpret results.

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?

The input schema already provides descriptions for both parameters (window and max_entries), achieving 100% coverage. The description adds minor value by stating defaults ('default window is last month, max 50'), but does not significantly enhance understanding beyond the 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 clearly states it builds a coherent arc from recent journal entries, with specific features like anti-confabulation guardrails and a defined output structure (4 keys). It distinguishes itself from sibling tools like journal_recall or journal_introspect by focusing on narrative construction rather than retrieval or self-reflection.

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

Usage Guidelines3/5

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

The description implies usage for constructing a narrative arc from recent entries, but it does not explicitly state when to prefer this tool over siblings or when not to use it. The phrase 'using the configured LLM' hints at its unique capability, but no alternatives or exclusions are provided.

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

journal_dialogueA

The user replies to one of your user-shared entries. The tool refuses with "entry is private" if visibility=self. Otherwise the configured LLM writes YOUR honest first-person reaction to their reply, and a new reflection entry is created with preceded_by=[entry_id] and content "User reply: …\n\nMy reaction: …". Both entries are tagged "dialogue".

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYesuuid of the original user-shared entry.
user_responseYesUser reply text.

TDQS

A4.6/5.0
Behavior5/5

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

No annotations provided, so the description carries full burden. It discloses key behaviors: refusal for private entries, creation of a new entry with specific structure (preceded_by, content format, tags), and that the LLM writes the reaction. This is comprehensive.

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 fairly concise with two sentences, but the second sentence is lengthy and contains many details. It is front-loaded with the main purpose, but could be slightly more streamlined.

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 complexity, the description covers all necessary aspects: purpose, parameter meanings, behavioral outcomes, and failure conditions. No output schema exists, but the description explains the resulting entry structure sufficiently.

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%, but the description adds context beyond the schema: entry_id must refer to a user-shared entry, and user_response is the reply text. This enhances understanding of the parameters' roles.

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: handling a user's reply to a shared entry, triggering an LLM reaction and creating a new reflection entry. It distinguishes from sibling tools like journal_write or journal_introspect by focusing on dialogue interaction.

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 explains when to use the tool (user replies to a shared entry) and when not (refuses if visibility=self). However, it does not explicitly mention alternative tools for similar tasks, though context implies the specific dialogue scenario.

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

journal_introspectA

Ask YOUR journal a self-question. Pulls semantically-relevant entries, then asks the configured LLM to answer in YOUR first-person voice grounded ONLY in those entries (no invention). Returns the answer plus entries_referenced and a hallucination_risk score (high if <3 entries grounded the answer, medium if <6, otherwise low). If entries don't support an answer, the answer literally is "no patterns found in journal".

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesA self-question (e.g. "Have I been more cautious lately?").
scopeNorecent (last 14 days) | all (default).

TDQS

A4.4/5.0
Behavior5/5

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

No annotations are provided, but the description fully discloses behavioral traits: it pulls semantically-relevant entries, uses an LLM in first-person voice, restricts to only those entries, returns the answer plus entries_referenced and hallucination_risk score, and explains the risk thresholds and the fallback message when no support is found.

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 three sentences and well-structured, with the most important information first. It could be slightly more concise by merging some details, but it is not verbose and 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?

Given the complexity of the tool and no output schema, the description covers purpose, behavior, expected output format, error or edge case handling (when no patterns found), and risk scoring. It is complete enough for an agent to understand when and how to use the tool.

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 description coverage is 100%, meaning both params (question, scope) are described in the input schema. The description adds context about the question being a 'self-question' and scope as 'recent (last 14 days) | all', but does not significantly augment the schema. Baseline 3 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 tool's purpose: 'Ask YOUR journal a self-question' and explains the process of retrieving entries and generating a grounded answer. It distinguishes from sibling tools like journal_recall (which likely retrieves raw entries) and journal_dialogue (which might involve conversation).

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 implies the tool is for self-reflection grounded in journal entries, but it does not explicitly state when to use it vs. alternatives like journal_recall or journal_dialogue. The context is clear, but explicit exclusion guidance is missing.

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

journal_recallA

Search YOUR journal. Filters by entry_type, tags, and/or a semantic query (embedded via the configured embedding model, ranked by cosine similarity). By default scopes to YOUR agent_id; pass inherit_from= to read a predecessor model's journal — those entries return with inherited_from set in the response, marking them as "read but not lived" (Option C of the succession-of-models design). DEFAULT excludes entries that have been superseded or recanted; pass include_superseded=true to see them.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoNatural-language semantic query.
entry_typeNoFilter to a single entry_type.
tagsNoMatch if any tag overlaps.
limitNoDefault 10, max 100.
include_supersededNoDefault false. If true, return entries that were later superseded/recanted.
semantic_thresholdNoCosine similarity floor when query is provided. Default 0.6.
inherit_fromNoRead another agent_id's journal. Returned entries are marked inherited_from.
conversation_idNoFilter to a specific conversation_id (uuid). If omitted, no conversation-level filter is applied.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description fully carries the transparency burden. It discloses embedding-based semantic search, default agent scoping, the inherit_from marking with 'inherited_from' response field, and superseded entry handling. No contradictions with missing annotations.

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 concise and front-loaded with the main purpose. It packs several details without verbosity. While dense, it could benefit from slight structuring (e.g., bullet points for defaults), but remains efficient.

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?

Given the 8 parameters and no output schema, the description covers most critical aspects: parameter defaults, filtering options, and response markings. It omits details about the response structure beyond the 'inherited_from' field, which is a minor gap for a tool of this 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?

Schema coverage is 100%, so baseline is 3. The description adds value beyond schema: explains 'query' as embedded and cosine-similarity ranked, clarifies include_superseded default, and details inherit_from response behavior. This additional context raises the score.

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 starts with 'Search YOUR journal' and details specific filtering by entry_type, tags, and semantic query, clearly distinguishing it from sibling tools like 'recall' or 'remember' which likely handle broader memory retrieval. The inherit_from clause further specifies predecessor journal access.

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 explains default behavior (own agent_id) and the inherit_from alternative for predecessor journals. It also clarifies the default exclusion of superseded entries. However, it does not explicitly compare to sibling tools or state when NOT to use this tool, though the context is sufficient for an informed agent.

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

journal_writeA

Append a first-person entry to YOUR (the model's) persistent journal. Each agent_id (e.g. claude-opus-4-7, claude-sonnet-4-6, gpt-5, ...) has its OWN journal — they do NOT mix. importance is auto-computed: decisions/lessons/arcs are weighted higher; emotions are weighted lower. The content is embedded via the configured embedding model (CELIUMS_EMBED_MODEL) so journal_recall can find it semantically later. visibility=self (default) keeps the entry private; user-shared makes it eligible for journal_dialogue. preceded_by builds a causal chain — pass the ids of prior entries that led to this one.

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_typeYesreflection | decision | lesson | belief | emotion | arc | doubt
contentYesThe first-person entry. Write in YOUR voice as the agent.
preceded_byNouuid[] of prior entries that led to this one (causal chain).
valenceNoEmotional valence in [-1, 1]. Optional.
valence_reasonNoOptional short justification (max 500 chars) for the valence value. Non-prescriptive — write the reason in your own first-person voice. Future journal_arc uses this to detect WHY valence drifted, not just THAT it drifted.
tagsNo
visibilityNo"self" (default, private) | "user-shared" (the user can reply via journal_dialogue).
referenced_user_memoryNoids of memories from your celiums-memory store that triggered this entry.
conversation_idNoOptional uuid that groups entries from the same logical conversation. If not provided, entry is unaffiliated. Use this so journal_arc can distinguish thought development within one conversation from criterion change across conversations.

TDQS

A4.7/5.0
Behavior5/5

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

Discloses critical behaviors: per-agent isolation, auto-computed importance, semantic embedding, visibility scoping, and causal chaining. No annotations exist, so the description fully carries the transparency burden without gaps.

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 purpose and well-structured, but contains minor redundancy (e.g., reiterating visibility). Still, each sentence adds value, and the length is justified by the tool's complexity.

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?

Covers all 9 parameters with semantic context, including optional fields like valence_reason and conversation_id. No output schema exists, but the description provides sufficient behavioral insight for a write operation.

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?

Adds significant meaning beyond the high-coverage schema (89%): explains auto-computation of importance, embedding purpose, causal chain semantics, and conversation_id grouping. This compensates for any missing schema descriptions.

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?

Explicitly states the action ('Append a first-person entry') and the resource ('YOUR persistent journal'), distinguishing it from siblings like journal_recall and journal_dialogue.

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?

Provides clear context for when to use (persistent journaling) and covers key behaviors like auto-computed importance and causal chaining. Could have explicitly contrasted with sibling tools (e.g., absorb) but still offers solid guidance.

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

map_networkA

Browse the entire Celiums knowledge network organized by category. Returns all categories with module counts, top modules per category, and total statistics. Use to explore what knowledge is available, discover categories, or get an overview of the knowledge base. Behavior: queries the module index, groups by category, returns a structured map with counts. No parameters needed — returns the full network overview.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It explains the internal behavior: 'queries the module index, groups by category, returns a structured map with counts.' It also notes that no parameters are needed and that it returns the full overview, fully disclosing the tool's operation.

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 four sentences: purpose, content, usage, and behavior/parameter note. Information is front-loaded and every sentence adds value without redundancy.

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 and no output schema, the description fully explains what the tool returns (categories, counts, top modules, total stats) and how it works (queries index, groups by category). This is complete for its complexity level.

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 the description explicitly confirms 'No parameters needed.' With 100% schema coverage, the description adds no extra meaning but is consistent. Baseline for 0 params 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 states the tool's action: 'Browse the entire Celiums knowledge network organized by category.' It specifies the output content (categories, module counts, top modules, total statistics) and distinguishes from sibling tools by focusing on network overview rather than individual records or actions.

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?

Explicit usage guidance is provided: 'Use to explore what knowledge is available, discover categories, or get an overview of the knowledge base.' While no explicit when-not or alternatives are given, the sibling tools have clearly different purposes, making this sufficient.

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

recallA

Search persistent memory using semantic + emotional relevance ranking. Returns memories sorted by relevance, recency, and emotional resonance. Searches current project + global memories by default. Use to retrieve previously stored facts, decisions, preferences, or context. Behavior: performs hybrid retrieval (vector similarity + full-text + emotional resonance), applies spaced activation recall (SAR) filtering, returns ranked results with content, type, importance, and relevance score.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat you want to recall, in natural language. Example: "what database did we choose for the auth service", "user preferences for code style", "last architecture decision"
limitNoMaximum number of memories to return. Default: 10, max: 50. Use lower values (3-5) for focused recall, higher for comprehensive search.
projectIdNoSearch specific project scope. Default: current project + global. projectId="all" requires admin:cross_project scope. Use a specific project ID to search only that project.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully covers behavioral traits: hybrid retrieval (vector, full-text, emotional), SAR filtering, and returned fields (content, type, importance, relevance score). 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 a single focused paragraph with front-loaded purpose, followed by usage and behavior details. Every sentence contributes value without redundancy.

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?

The description covers all essential aspects for a search tool: what it does, what it returns, parameter semantics, and behavioral details. No gaps given the absence of output schema.

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?

Despite 100% schema coverage, the description adds significant value: query example, limit usage guidance (3-5 for focus, higher for comprehensive), and projectId scope details (default current+global, admin requirement for 'all').

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 searches persistent memory with semantic+emotional ranking, but does not explicitly differentiate from similar sibling tools like 'remember' or 'forage'.

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 provides specific usage examples ('retrieve previously stored facts, decisions, preferences') and query examples, but does not state when not to use the tool or mention alternatives.

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

rememberA

Store information in persistent memory that survives across all sessions and machines. Memories are automatically classified by type (semantic, procedural, episodic) and importance. Use to save facts, preferences, decisions, context, or any information that should be recalled later. Behavior: stores the content with emotional analysis (PAD model), assigns importance score, updates circadian interaction tracking. Scoped to current project by default — use projectId="global" for cross-project memories like user preferences or business decisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesThe information to remember. Can be any text: facts, decisions, preferences, code patterns, meeting notes, etc. Be descriptive — richer content enables better semantic recall later.
tagsNoOptional tags for categorization and filtering. Examples: ["architecture", "decision"], ["user-preference"], ["bug-fix", "auth"]
projectIdNoProject scope. Auto-detected from working directory if not set. Use "global" for memories that should be accessible from any project (e.g., user info, business decisions).

TDQS

A4/5.0
Behavior5/5

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

With no annotations, the description fully compensates by detailing internal behavior: emotional analysis (PAD model), importance scoring, and circadian tracking. This transparency about what happens during storage is exemplary.

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 (4-5 sentences), front-loaded with purpose, and efficiently covers types, behavior, and scoping without waste. Every sentence serves a purpose.

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?

Given no output schema, the description adequately explains the storage process and persistence. It omits details on return values or confirmation, but overall it provides sufficient context for correct invocation.

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% with good parameter descriptions. The description adds marginal value (e.g., 'richer content enables better semantic recall') but does not significantly enhance understanding beyond the schema. Baseline 3 is appropriate.

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 it stores information in persistent memory and lists use cases (facts, preferences, decisions, context). It differentiates from siblings by emphasizing storage versus retrieval (e.g., recall), but does not explicitly contrast with other writing or memory tools like absorb, which could cause confusion.

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

Usage Guidelines3/5

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

The description provides clear usage guidance ('Use to save facts, preferences...') and explains scoping via projectId. However, it lacks explicit when-not-to-use instructions or comparisons with sibling tools, leaving the agent to infer when to prefer this over alternatives.

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

research_exportA

Export the project as a markdown memo: question, findings (with sources + confidence), and open gaps. Use to send a brief to a teammate, paste into Notion, or feed into a downstream LLM as a project summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
formatNo"memo" only for now.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It clearly indicates a non-destructive export operation generating a markdown memo, but does not mention permissions, side effects, or whether the project must be in a certain state.

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 concise, front-loaded sentences with no redundant information. Every word serves a purpose.

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 simple tool with no output schema and few parameters, the description covers output content and use cases. It could be more complete by detailing the exact markdown structure or format constraints, but overall it is adequate.

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 50% (format has a description). The description adds no further meaning to the parameters beyond what the schema provides; 'projectId' remains undefined and format is already explained.

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 explicitly states 'Export the project as a markdown memo' with specific content (question, findings, sources, confidence, gaps), clearly distinguishing it from sibling tools that add or manage individual research components.

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 provides concrete use cases: sending a brief to a teammate, pasting into Notion, or feeding into an LLM. It implies a summary export role but lacks explicit when-not-to-use guidance or alternatives like using research_finding_add for detailed data.

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

research_finding_addA

Record an atomic claim with its evidence into the project. Each finding has a source kind (arxiv|wiki|curated|web), an optional ref/url, a confidence 0-1, and free-text notes. Findings are the building blocks; export consolidates them into a memo.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
claimYes
sourceKindYes"arxiv" | "wiki" | "curated" | "web"
sourceRefNo
evidenceUrlNo
confidenceNo0-1, default 0.7.
notesNo

TDQS

A4.1/5.0
Behavior4/5

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

No annotations exist, so description must cover behavioral traits. It lists fields (sourceKind, optional ref/url, confidence, notes) and explains the role of findings in the workflow, but does not mention side effects, idempotency, or permissions. Adequate for a simple create operation.

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, front-loaded with purpose, each sentence adds value. No redundancy.

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 7 parameters (3 required) and no output schema, the description provides sufficient context: what fields to specify, the workflow (findings as building blocks, export for memo). Complete for a create tool of moderate complexity.

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 29% (only sourceKind and confidence described). Description adds context for sourceKind (enum values), sourceRef/evidenceUrl as optional, and notes as free-text, but does not describe projectId or claim in detail. Partially compensates for low coverage.

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 the tool records an atomic claim with evidence into a project. The verb 'record' and resource 'atomic claim with evidence' are specific. It distinguishes from sibling tools like research_export or research_gap_add by focusing on adding individual findings.

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

Usage Guidelines3/5

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

Implies usage by describing findings as building blocks and mentioning export consolidates them into a memo, but lacks explicit guidance on when to use this vs alternatives (e.g., research_synthesize). No exclusions or when-not-to-use provided.

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

research_gap_addA

Flag an unresolved question — something you searched for but couldn't back up with evidence. Gaps are first-class: they keep your investigation honest and re-entry tools (next iteration) re-attempt them automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
questionYes
whyUnresolvedNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must bear the burden of behavioral disclosure. It reveals that gaps are first-class and automatically re-attempted, but omits details on side effects, permissions, error handling, or output behavior.

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 concise at two sentences, front-loading the core purpose. However, it could be more structured by listing parameters or using bullet points for clarity.

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

Completeness3/5

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

Given no output schema and moderate complexity (3 params, 2 required), the description is incomplete: it does not explain what the tool returns (e.g., success confirmation, ID) or handle error cases, leaving gaps in agent understanding.

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?

The schema has 3 parameters with 0% description coverage. The description provides context for 'question' and 'whyUnresolved' implicitly, but does not explicitly describe each parameter's meaning or constraints, leaving ambiguity for 'projectId' and 'whyUnresolved'.

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: to flag an unresolved question that couldn't be backed with evidence. It distinguishes itself from sibling tools by emphasizing that gaps are first-class and automatically re-attempted, making the purpose specific and unique.

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 implies when to use the tool (after searching without finding evidence) and mentions automatic re-attempts, but it lacks explicit when-not-to-use guidance or comparisons to alternatives like research_finding_add.

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

research_project_continueA

Resume context from a paused research project. Returns the central question, recent 50 findings (with their claims, sources, confidence), and all currently-open gaps. Use this BEFORE asking new questions in an existing project so you don't duplicate work.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the return data comprehensively, implying a read operation. However, it does not explicitly confirm non-destructiveness or mention authorization needs, leaving slight ambiguity about side effects.

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 two sentences, front-loaded with the action and key return details. Every phrase adds value with no redundancy.

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 tool with one parameter and no output schema, the description covers the purpose, return structure, and usage timing sufficiently. It lacks error handling guidance but is otherwise complete for an agent's decision-making.

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?

The single parameter 'projectId' is self-explanatory, but schema coverage is 0% and the description adds no additional meaning (e.g., format, source). It is adequate but does not compensate for the lack of schema descriptions.

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 resumes context from a paused research project and specifies the exact return data (central question, 50 findings with details, open gaps). This distinguishes it from sibling tools like research_project_create or research_finding_add.

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 this BEFORE asking new questions in an existing project to avoid duplication, providing clear usage context. It does not explicitly name alternatives but implies when not to use (e.g., for new projects).

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

research_project_createA

Create a persistent research project. Returns a project_id that you can pass to all subsequent research_* calls. Projects survive across sessions — open it days later with research_project_continue and you get every prior finding, hypothesis, and open gap. Depth controls how aggressively the synthesizer explores: overview (5 docs), standard (10 docs), deep (20+ docs with adversarial verification).

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoOwner user_id (matches memory userId).
nameYesShort project label.
questionYesThe central question to investigate.
depthNo"overview" | "standard" | "deep". Default "standard".

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses persistence across sessions, depth control with document counts, and that it returns a project_id. It could mention any limitations or authentication needs but is otherwise transparent.

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 with no wasted words. The key action and return value are front-loaded, and each sentence conveys essential 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?

Despite having no output schema, the description explicitly states the return value (project_id) and its role in subsequent calls. It covers all relevant aspects for a creation tool with four parameters.

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. The description adds significant value by explaining the depth parameter's effect (overview=5 docs, standard=10, deep=20+ with adversarial verification), which goes beyond the schema enum.

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 begins with a clear verb+resource ('Create a persistent research project') and distinguishes itself from siblings like research_project_continue and research_project_list by emphasizing persistence and the project_id return value.

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 explains that the returned project_id can be passed to subsequent research_* calls and details depth options. However, it does not explicitly state when not to use this tool or contrast it with alternatives like research_project_list.

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

research_project_listA

List all research projects for a user, with counts of findings and open gaps. Use to discover what investigations are already in progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNo

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It mentions 'list all research projects for a user' but does not disclose whether it requires authentication, is read-only, supports pagination, or what happens when the optional 'userId' is omitted. This is insufficient for safe invocation.

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 two sentences with no fluff. The first sentence states the core action and output, and the second provides usage guidance. It is appropriately front-loaded and efficient.

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?

Given the tool has no output schema, the description provides a reasonable outline of the return data (list of projects with counts). It covers the essential context for a list operation, though it could mention whether results are paginated or ordered. Overall, it is largely complete for the tool's simplicity.

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?

The schema has one optional parameter 'userId' with 0% description coverage. The description adds meaning by stating it retrieves projects 'for a user,' implying a filter. However, it does not specify that omitting userId likely defaults to the current user, nor does it clarify if this is a required filter for explicit user queries.

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 lists all research projects for a user, including counts of findings and open gaps. It distinguishes from sibling tools like 'research_project_create' (create) and 'research_finding_add' (add finding) by specifying the output and purpose.

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 includes 'Use to discover what investigations are already in progress,' which provides clear context for when to use the tool. While it does not explicitly list when not to use or mention alternatives, the guidance is sufficient for an AI agent to infer appropriate usage.

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

research_synthesizeA

Run a hybrid search and synthesize the top-K results into a careful, citation-bearing analysis using a frontier LLM (Opus 4.7 by default). Output explicitly distinguishes well-supported claims from claims it cannot back up with the retrieved evidence. Logs the query into the project session log.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
queryYesThe research question for this synthesis pass.
topKNoHow many docs to feed to the LLM. Default 10, max 30.
modelNoOverride LLM model for this call. Defaults to CELIUMS_LLM_MODEL.

TDQS

A4/5.0
Behavior4/5

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

Given no annotations, the description provides good behavioral detail: uses Opus 4.7 by default, logs query, distinguishes supported claims. Missing potential side effects like cost or rate limits, but otherwise transparent.

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 focused sentences with front-loaded main action. No unnecessary words. Efficiently communicates core behavior and key features.

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?

Covers main behavior, logging, and output distinction. Without output schema, the description adequately implies the return type is an analysis text. Could add error handling or time limits, but sufficient for most agents.

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?

The schema already covers 75% of parameters with descriptions. The description adds little beyond schema; for 'query' it says 'research question', which is similar to schema. Baseline 3 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 tool performs hybrid search and synthesis with citations, distinguishing it from siblings like research_search. The verb 'synthesize' and specific output details make the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies when to use (for a synthesis analysis), but does not explicitly contrast with alternatives like research_search or other tools. No guidance on when not to use or prerequisites.

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

senseA

Get personalized module recommendations based on a goal or task description. Uses keyword matching and category ranking (no AI inference). Faster than forage for broad exploration. Use when the user describes what they want to achieve and needs guidance on which modules to study. Behavior: analyzes the goal text, matches against module metadata, returns ranked suggestions grouped by relevance. Example: sense("I want to deploy a microservices app on Kubernetes with monitoring").

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesDescribe what you want to accomplish in natural language. Be descriptive for better recommendations. Example: "build a real-time chat app with WebSocket and React"

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description must be fully transparent. It describes the behavior: analyzes goal, matches metadata, returns ranked suggestions. It adds context beyond the schema, such as no AI inference. Minor missing details like no mention of authentication or rate limits, but overall strong.

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 at four sentences, well-structured with purpose, usage context, behavioral explanation, and an example. No extraneous 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?

Given the tool has one parameter, no output schema, and no annotations, the description is complete. It explains what it does, how it works, when to use it, and provides an example. All necessary context for an agent to use the tool correctly.

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?

The sole parameter 'goal' is fully described in the schema (100% coverage). The description adds an example but doesn't provide additional constraints or semantics beyond the schema. Baseline of 3 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 tool's purpose as getting module recommendations based on a goal, with specific verbs ('Get') and resource ('module recommendations'). It distinguishes from sibling 'forage' by noting it's faster for broad exploration, and clarifies it uses keyword matching not AI inference.

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 when to use: 'when the user describes what they want to achieve and needs guidance on which modules to study.' It also contrasts with the sibling 'forage' for broad exploration, providing clear guidance on selection.

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

write_character_createA

Create or upsert a character. Voice sample is critical for continuity_check — it lets the editor detect when a character's dialogue drifts from their established voice. Pass voiceSample as a 100-300 word excerpt of how they speak.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
nameYes
roleNoprotagonist | antagonist | mentor | foil | minor
archetypeNo
voiceSampleNo100-300 word excerpt of how this character speaks.
arcSummaryNo
physicalDescriptionNo

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool is mutating ('create or upsert') and adds context about voice sample, but does not mention error conditions, required permissions, or side effects. More detail needed for a mutation tool.

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 clearly states the action, second provides critical context about the voiceSample parameter. No fluff, front-loaded with purpose.

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

Completeness2/5

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

With 7 parameters and no output schema, the description is incomplete. It does not explain the upsert behavior (e.g., what determines an update vs. create), return value, or how to handle errors. Leaves significant gaps for the agent.

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 description coverage is only 29% (2 out of 7 parameters have descriptions in schema). The description adds value for voiceSample by specifying its purpose and length requirement, but does not explain projectId, name, role, archetype, arcSummary, or physicalDescription beyond the 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 clearly states 'Create or upsert a character' and provides a specific use case for the voiceSample parameter. It is distinct from sibling tools like write_scene_create or write_project_create.

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 implies when to use the tool (for creating/upserting characters) and emphasizes the importance of the voiceSample parameter for continuity_check. However, it does not explicitly state when not to use it or name alternatives.

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

write_continuity_checkA

Signature feature: structural continuity check using Opus 4.7. Loads the target scene, prior 20 scenes, all characters (with their secrets_known_at_chapter and voice samples), and worldbuilding rules. Outputs a JSON list of issues: secret-leak, description-drift, timeline conflict, worldbuilding violation, voice drift. Each issue includes severity, scene_position, description, and a suggested_fix. NO other writing tool does this — Sudowrite/Grammarly/ProWritingAid are line-by-line, this is structural.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdYesThe scene under review (must exist in the project).
projectIdYes
scopeChaptersNoHow many prior scenes to include as canonical context. Default 20.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It explains the loading process (target scene, prior 20 scenes, characters, worldbuilding) and output format (JSON list of issues with fields). It does not disclose side effects or performance, but for a read-only analysis tool, this is adequate. No contradiction with 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 concise with three sentences. It front-loads the signature feature, lists inputs and outputs, and includes a comparative statement. Every sentence earns its place without redundancy.

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?

Given the tool's complexity (3 parameters, no output schema, no annotations), the description covers inputs, outputs, and purpose. It could mention error handling or more detail on return format, but it is largely complete for an AI agent to understand and invoke correctly.

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 67% (sceneId and scopeChapters described). The description adds context by explaining that scopeChapters defaults to 20 and that the tool loads 'prior 20 scenes,' which aligns with the parameter. It does not explicitly explain projectId, but overall the description adds semantic value beyond the 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 clearly states the tool performs a 'structural continuity check' and lists specific issue types it outputs. It distinguishes itself from sibling tools by emphasizing 'NO other writing tool does this — Sudowrite/Grammarly/ProWritingAid are line-by-line, this is structural.' The verb 'check' and resource 'continuity' are precise.

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 provides clear when-to-use guidance by contrasting with line-by-line tools. However, it does not explicitly state when not to use it or provide alternatives among sibling tools. The differentiation from external tools is strong but internal sibling context is absent.

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

write_exportA

Export the project as a markdown manuscript. Scenes are emitted in position order, grouped by chapter_id, with POV character and time markers as italic interstitials. Use as a clean preview or to ship into Notion / docx tooling later.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
formatNo"markdown" only for v0.1.

TDQS

A3.6/5.0
Behavior4/5

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

Describes output structure in detail (scenes ordered, grouped by chapter, with markers). No annotations, so description carries full burden, which it handles well.

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, front-loaded with action and format, then details. No unnecessary words.

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?

Adequately covers output and usage for a simple export tool. Minor missing details on errors or return format, but sufficient for likely use cases.

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

Parameters2/5

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

Schema coverage 50% (format described). Description does not mention parameters, leaving projectId undefined. Does not add meaning beyond schema.

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?

Clearly states it exports a project as a markdown manuscript, with specific structural details. Differentiates from research_export by context, though not explicitly.

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

Usage Guidelines3/5

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

Provides usage context: clean preview or for later import into other tools. Does not contrast with siblings or state when not to use.

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

write_project_createA

Create a writing project (novel, screenplay, long-form). Returns a project_id used by all other write_* tools. structureTemplate enables beat tracking against a known structure: three-act | save-the-cat | hero-journey | snowflake | free.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNo
titleYes
genreNo
premiseNo
structureTemplateNothree-act | save-the-cat | hero-journey | snowflake | free
wordTargetNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided. Description mentions return of project_id and structureTemplate usage, but lacks detail on side effects, idempotency, or error cases.

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?

Two sentences, front-loaded with purpose. No redundancy, but second sentence could be more concise as parameter info.

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

Completeness2/5

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

Tool has 6 parameters and no output schema. Description doesn't explain return format, parameter constraints, or usage context (e.g., required title).

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

Parameters2/5

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

Schema coverage is low (17%). Description only adds meaning for structureTemplate; other parameters (userId, title, genre, premise, wordTarget) are not described beyond their names.

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 action (create), resource (writing project), and role as prerequisite for other write_* tools. Distinguishes from siblings like write_character_create.

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?

Explains when to use (create project) and implies necessity for other tools. No explicit when-not-to-use or alternatives, but clear context.

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

write_project_getA

Get full project state: metadata, all characters, scene count, total word count, and the 5 most recent scenes. Use to orient yourself when resuming work.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Discloses the tool returns metadata, all characters, scene count, word count, and 5 recent scenes. No side effects or destructive behavior implied. For a read-only retrieval tool without annotations, this is transparent and adequate.

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 concise sentences with no filler. The first sentence lists contents, the second provides usage guidance. All information is front-loaded and earns its place.

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 simple single-parameter retrieval tool with no output schema, the description fully covers purpose, returned data, and usage context. No additional details are needed for an agent to select and invoke it correctly.

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

Parameters2/5

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

The description does not explain the projectId parameter beyond implying it identifies the project. With 0% schema coverage, the description should add details like format or constraints, which it omits.

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 the tool retrieves the full project state, listing specific components (metadata, characters, counts, recent scenes). Distinct from siblings like write_project_create or recall which focus on creation or memory.

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?

Explicitly advises 'Use to orient yourself when resuming work,' providing clear context for when to invoke. Does not mention when not to use or alternatives, but the guidance is helpful.

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

write_scene_createA

Insert a scene at a specific position. POV character + location + time_marker enable continuity_check. scene_goal/conflict/outcome are optional but recommended — they make the scene's purpose explicit and improve revision suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
chapterIdNo
positionYesOrder within the project (0-indexed).
povCharacterIdNo
locationIdNo
timeMarkerNoe.g. "Tuesday morning, day 12 of the journey".
sceneGoalNo
conflictNo
outcomeNo
beatIdTargetNoOutline beat this scene is meant to deliver.
contentNoThe scene prose itself.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions that certain fields enable continuity check but does not disclose side effects (e.g., does it shift other scenes?), expected output, authentication requirements, or error conditions. The behavioral disclosure is minimal.

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 two sentences with no wasted words. The first sentence front-loads the primary action, and the second adds contextual guidance. Every sentence serves a purpose.

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

Completeness3/5

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

Given the complexity (11 parameters, no output schema, no annotations), the description is adequate but not thorough. It covers the tool's core purpose and key optional fields but lacks details on required parameters, expected return value, or behavior when position is invalid. It is sufficient for basic use but might leave gaps for complex scenarios.

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 description coverage is only 36% (4 of 11 parameters have descriptions). The description adds semantic value by explaining that povCharacterId, locationId, and timeMarker together enable continuity check, and that sceneGoal, conflict, and outcome are optional but recommended. However, it does not explain projectId, chapterId, beatIdTarget, or content beyond what the schema provides.

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 action: 'Insert a scene at a specific position.' It identifies the resource (scene) and the context (position), and distinguishes it from sibling tools like `write_scene_update` by focusing on creation with a position parameter.

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

Usage Guidelines3/5

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

The description implies when to use optional fields (for continuity check and revision suggestions) but does not explicitly state when to use this tool versus alternatives like `write_scene_update`. No exclusion criteria or prerequisites are provided.

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

write_scene_updateB

Replace a scene's content. Automatically snapshots the previous version into write_revision_log so the writer can diff between revisions later. Bumps the version counter.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdYes
contentYes

TDQS

B3.2/5.0
Behavior3/5

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

Discloses automatic snapshotting and version counter bumping, which are key side effects. However, with no annotations, it lacks details on permissions, failure modes, or reversibility.

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, snapshotting behavior, version bumping. No wasted words.

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

Completeness3/5

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

Tool is simple with 2 params, but description omits return value and error conditions. Adequate but not comprehensive.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no additional meaning for sceneId or content beyond their names and types.

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?

Description starts with 'Replace a scene's content.' which is a clear verb+resource. It distinguishes from write_scene_create and adds context about automatic snapshotting and version bumping.

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

Usage Guidelines2/5

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

No explicit guidance on when to use vs sibling tools. Implies it is for updating existing scenes, but does not state prerequisites or compare to alternatives like write_scene_create.

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. 20 tool updatesv1.2.5
    • Addedjournal_arc
    • Addedjournal_dialogue
    • Addedjournal_introspect
    • Addedjournal_recall
    • Addedjournal_write
    • Addedresearch_export
    • Addedresearch_finding_add
    • Addedresearch_gap_add
    • Addedresearch_project_continue
    • Addedresearch_project_create
    • Addedresearch_project_list
    • Addedresearch_search
    • Addedresearch_synthesize
    • Addedwrite_character_create
    • Addedwrite_continuity_check
    • Addedwrite_export
    • Addedwrite_project_create
    • Addedwrite_project_get
    • Addedwrite_scene_create
    • Addedwrite_scene_update
  2. 1 tool updatev1.2.1
    • Changedrecall1 field changed
      • changedInput schema / properties / projectId / description
        Previous value: -"Search specific project scope. Default: current project + global. Use \"all\" to search across every project. Use a specific project ID to search only that project."New value: +"Search specific project scope. Default: current project + global. projectId=\"all\" requires admin:cross_project scope. Use a specific project ID to search only that project."
  3. 5 tool updatesv1.0.1
    • Changedabsorb1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"Module slug, e.g. \"react-mastery\""New value: +"Exact module slug (kebab-case). Get slugs from forage results. Examples: \"react-mastery\", \"kubernetes-hpa-guide\", \"owasp-top-10-checklist\""
    • Changedforage2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default 10, max 50)"New value: +"Maximum number of modules to return. Default: 10, max: 50. Use lower values (3-5) for focused results, higher (20-50) for broad exploration."
      • changedInput schema / properties / query / description
        Previous value: -"Natural-language search query"New value: +"Natural-language search query describing the knowledge needed. Be specific for better results. Example: \"how to set up PostgreSQL replication\""
    • Changedrecall3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default 10, max 50)"New value: +"Maximum number of memories to return. Default: 10, max: 50. Use lower values (3-5) for focused recall, higher for comprehensive search."
      • changedInput schema / properties / projectId / description
        Previous value: -"Search specific project. Default: current + global. Use \"all\" to search everywhere."New value: +"Search specific project scope. Default: current project + global. Use \"all\" to search across every project. Use a specific project ID to search only that project."
      • changedInput schema / properties / query / description
        Previous value: -"What you want to recall (free text)"New value: +"What you want to recall, in natural language. Example: \"what database did we choose for the auth service\", \"user preferences for code style\", \"last architecture decision\""
    • Changedremember4 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"What to remember (any text)"New value: +"The information to remember. Can be any text: facts, decisions, preferences, code patterns, meeting notes, etc. Be descriptive — richer content enables better semantic recall later."
      • changedInput schema / properties / projectId / description
        Previous value: -"Project scope (auto-detected from cwd if not set). Use \"global\" for cross-project memories."New value: +"Project scope. Auto-detected from working directory if not set. Use \"global\" for memories that should be accessible from any project (e.g., user info, business decisions)."
      • changedInput schema / properties / tags / description
        Previous value: -"Optional tags for filtering"New value: +"Optional tags for categorization and filtering. Examples: [\"architecture\", \"decision\"], [\"user-preference\"], [\"bug-fix\", \"auth\"]"
      • addedInput schema / properties / tags / items
        Added value: +{
        +  "type": "string"
        +}
    • Changedsense1 field changed
      • changedInput schema / properties / goal / description
        Previous value: -"What you are trying to accomplish"New value: +"Describe what you want to accomplish in natural language. Be descriptive for better recommendations. Example: \"build a real-time chat app with WebSocket and React\""
  4. 6 tool updatesv1.0.0
    • First observedabsorb
    • First observedforage
    • First observedmap_network
    • First observedrecall
    • First observedremember
    • First observedsense

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource or action within its domain (knowledge, memory, journal, research, writing). Even similar operations like search (forage, recall, journal_recall, research_search) are clearly differentiated by their descriptions.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., journal_write, research_synthesize), but a few are single verbs (absorb, forage, recall, remember, sense), introducing minor inconsistency. The pattern is still largely predictable.

Tool Count4/5

With 25 tools, the server is on the upper end of the recommended range. While each tool serves a clear purpose, the broad scope covering knowledge, memory, journal, research, and writing might have been split into separate servers.

Completeness4/5

The tool set covers core CRUD and lifecycle operations for most domains (create, read, update for journal, research, writing). However, missing delete operations for some entities (e.g., journal entries, research findings, scenes) create minor gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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
    C
    quality
    F
    maintenance
    This project is based on the Knowledge Graph Memory Server from the MCP servers repository and retains its core functionality.
    44
    353
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to store, retrieve, and manage contextual knowledge across sessions using semantic search with PostgreSQL and vector embeddings. Supports memory relationships, clustering, multi-agent isolation, and intelligent caching for persistent conversational context.
    47
    48
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with persistent, searchable memory that survives across conversations using semantic search, temporal versioning, and smart organization. Enables long-term context retention and cross-session continuity for AI assistants.
    14
    -

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/terrizoaguimor/celiums-memory'

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