celiums-memory
Celiums-memory is an MCP server that gives AI assistants persistent memory and access to a vast expert knowledge base across sessions via 6 tools:
forage– Search Expert Knowledge: Query 500,000+ expert modules using natural language with hybrid full-text + semantic search, returning ranked results with titles, descriptions, and categories.absorb– Load Full Module Content: Retrieve complete text of a specific module by slug (typically 2,000–20,000 words), including code examples and best practices.sense– Get Recommendations: Describe a goal or task and receive personalized module recommendations grouped by relevance.map_network– Browse Knowledge Network: Explore all available categories, module counts, and top modules with no parameters needed.remember– Store Persistent Memories: Save facts, decisions, preferences, or code patterns across sessions. Memories are auto-classified, importance-scored, and analyzed with emotional context (PAD model). Supports project-scoped or global storage.recall– Retrieve Memories: Search stored memories using semantic + emotional relevance ranking (vector similarity, full-text, and emotional resonance), with optional project-scope filtering.
Additional features:
Per-user circadian rhythm tracking (timezone + chronotype adaptation)
IDE integration with Claude Code, Cursor, and VS Code via MCP
REST API for programmatic access
Multi-language support: English, Spanish, Portuguese, Chinese, Japanese
Privacy-first: local-first storage, API key auth, per-user isolation, zero telemetry
Deployment options: local SQLite, Docker stack (PostgreSQL + Qdrant + Valkey), or DigitalOcean 1-click
Supports Cloudflare Tunnel deployment for secure external access to the Celiums server infrastructure.
Offers one-click deployment option to deploy the complete Celiums stack on DigitalOcean droplets.
Provides Docker Compose deployment for running the full Celiums stack including PostgreSQL, Qdrant, and Valkey.
Includes expert knowledge modules about Express.js framework as part of the 5,100+ technical modules available for search and reference.
Includes expert knowledge modules about Hono framework as part of the 5,100+ technical modules available for search and reference.
Includes expert knowledge modules about Kubernetes security and other topics as part of the 5,100+ technical modules available for search and reference.
Supports PostgreSQL as the primary database backend for both knowledge modules and memory storage, with pgvector extension support.
Includes expert knowledge modules about React, React Server Components, and related topics as part of the 5,100+ technical modules available for search and reference.
Uses Valkey (Redis-compatible) for caching and memory storage as part of the triple-store persistence architecture.
Supports SQLite as an alternative lightweight database option for local development and single-file deployment.
Includes expert knowledge modules about TypeScript mastery and related topics as part of the 5,100+ technical modules available for search and reference.
Celiums Memory
A complete cognitive memory engine. Apache-2.0. All of it.
Development branch notice: this branch is
devwork 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 remainsmainuntil 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 ondev. See the orderedRust roadmap, theexecution ledger, andADR-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 + graphThe 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/memoryMCP 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 embeddingsThe pieces:
Memory —
remember/recallwith 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.
Knowledge —
foragedoes hybrid search over the skills/knowledge you bring (BYO; via theskillstable). The large curated module corpus is a separate Celiums project —forageruns 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 persistspending, 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
CELIUMSCPartifact 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 readyThe 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/memoryThe 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 |
| HTTP/MCP port (default |
| static native-server keys in |
| server-side API-key digest pepper |
| destructive-operation confirmation secret |
| 32-byte hex key for encrypted Cloudflare checkpoints |
| 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.mjsThe 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 |
| Durable memory and retrieval |
Journal |
| Hash-chained first-person journal |
Maintenance |
| Explicit engine maintenance |
Governance |
| Confirmation-gated changes |
Development
pnpm install
pnpm typecheck
cargo check --manifest-path rust/Cargo.toml --workspaceThe 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 toolsabsorbA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact module slug (kebab-case). Get slugs from forage results. Examples: "react-mastery", "kubernetes-hpa-guide", "owasp-top-10-checklist" |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search query describing the knowledge needed. Be specific for better results. Example: "how to set up PostgreSQL replication" | |
| limit | No | Maximum number of modules to return. Default: 10, max: 50. Use lower values (3-5) for focused results, higher (20-50) for broad exploration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | last_week | last_month (default) | all | |
| max_entries | No | Default 50, max 200. |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | uuid of the original user-shared entry. | |
| user_response | Yes | User reply text. |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | A self-question (e.g. "Have I been more cautious lately?"). | |
| scope | No | recent (last 14 days) | all (default). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Natural-language semantic query. | |
| entry_type | No | Filter to a single entry_type. | |
| tags | No | Match if any tag overlaps. | |
| limit | No | Default 10, max 100. | |
| include_superseded | No | Default false. If true, return entries that were later superseded/recanted. | |
| semantic_threshold | No | Cosine similarity floor when query is provided. Default 0.6. | |
| inherit_from | No | Read another agent_id's journal. Returned entries are marked inherited_from. | |
| conversation_id | No | Filter to a specific conversation_id (uuid). If omitted, no conversation-level filter is applied. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_type | Yes | reflection | decision | lesson | belief | emotion | arc | doubt | |
| content | Yes | The first-person entry. Write in YOUR voice as the agent. | |
| preceded_by | No | uuid[] of prior entries that led to this one (causal chain). | |
| valence | No | Emotional valence in [-1, 1]. Optional. | |
| valence_reason | No | Optional 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. | |
| tags | No | ||
| visibility | No | "self" (default, private) | "user-shared" (the user can reply via journal_dialogue). | |
| referenced_user_memory | No | ids of memories from your celiums-memory store that triggered this entry. | |
| conversation_id | No | Optional 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 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" | |
| limit | No | Maximum number of memories to return. Default: 10, max: 50. Use lower values (3-5) for focused recall, higher for comprehensive search. | |
| projectId | No | 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. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | 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. | |
| tags | No | Optional tags for categorization and filtering. Examples: ["architecture", "decision"], ["user-preference"], ["bug-fix", "auth"] | |
| projectId | No | 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). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| format | No | "memo" only for now. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| claim | Yes | ||
| sourceKind | Yes | "arxiv" | "wiki" | "curated" | "web" | |
| sourceRef | No | ||
| evidenceUrl | No | ||
| confidence | No | 0-1, default 0.7. | |
| notes | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| question | Yes | ||
| whyUnresolved | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Owner user_id (matches memory userId). | |
| name | Yes | Short project label. | |
| question | Yes | The central question to investigate. | |
| depth | No | "overview" | "standard" | "deep". Default "standard". |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No |
TDQS
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.
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.
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.
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.
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.
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_searchA
Hybrid search across the celiums knowledge corpus (BM25 + semantic kNN + reciprocal rank fusion). Returns ranked modules with name, display_name, description, category, and relevance score. Use to locate evidence before synthesize.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search query. | |
| limit | No | Default 10, max 50. | |
| category | No | Optional category filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses the search algorithm and returned fields, but does not state whether the tool modifies data, requires authentication, or has rate limits. The read-only nature is implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first explains the algorithm and output, the second provides usage context. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, algorithm, and return fields. Without an output schema, it adequately describes the tool. However, it lacks details on pagination, sorting, or handling of empty results, which would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal parameter guidance beyond what the schema provides; it mentions query is 'natural-language' and limit has defaults, but does not elaborate on category usage or how parameters affect results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a hybrid search across the 'celiums knowledge corpus' using BM25, semantic kNN, and reciprocal rank fusion, and lists the returned fields. It clearly distinguishes from siblings like 'research_synthesize' and 'research_export' by stating 'Use to locate evidence before synthesize.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to 'Use to locate evidence before synthesize,' indicating the context for this tool. While it does not mention alternatives or when not to use it, the sibling list provides some implicit differentiation.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| query | Yes | The research question for this synthesis pass. | |
| topK | No | How many docs to feed to the LLM. Default 10, max 30. | |
| model | No | Override LLM model for this call. Defaults to CELIUMS_LLM_MODEL. |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | 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" |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| name | Yes | ||
| role | No | protagonist | antagonist | mentor | foil | minor | |
| archetype | No | ||
| voiceSample | No | 100-300 word excerpt of how this character speaks. | |
| arcSummary | No | ||
| physicalDescription | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | Yes | The scene under review (must exist in the project). | |
| projectId | Yes | ||
| scopeChapters | No | How many prior scenes to include as canonical context. Default 20. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| format | No | "markdown" only for v0.1. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | ||
| title | Yes | ||
| genre | No | ||
| premise | No | ||
| structureTemplate | No | three-act | save-the-cat | hero-journey | snowflake | free | |
| wordTarget | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| chapterId | No | ||
| position | Yes | Order within the project (0-indexed). | |
| povCharacterId | No | ||
| locationId | No | ||
| timeMarker | No | e.g. "Tuesday morning, day 12 of the journey". | |
| sceneGoal | No | ||
| conflict | No | ||
| outcome | No | ||
| beatIdTarget | No | Outline beat this scene is meant to deliver. | |
| content | No | The scene prose itself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | Yes | ||
| content | Yes |
TDQS
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.
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.
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.
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.
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.
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.
20 tool updates
v1.2.5- Added
journal_arc - Added
journal_dialogue - Added
journal_introspect - Added
journal_recall - Added
journal_write - Added
research_export - Added
research_finding_add - Added
research_gap_add - Added
research_project_continue - Added
research_project_create - Added
research_project_list - Added
research_search - Added
research_synthesize - Added
write_character_create - Added
write_continuity_check - Added
write_export - Added
write_project_create - Added
write_project_get - Added
write_scene_create - Added
write_scene_update
1 tool update
v1.2.1- Changed
recall1 field changed- changed
Input schema / properties / projectId / descriptionPrevious 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."
5 tool updates
v1.0.1- Changed
absorb1 field changed- changed
Input schema / properties / name / descriptionPrevious 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\""
- Changed
forage2 fields changed- changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Input schema / properties / query / descriptionPrevious 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\""
- Changed
recall3 fields changed- changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Input schema / properties / projectId / descriptionPrevious 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." - changed
Input schema / properties / query / descriptionPrevious 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\""
- Changed
remember4 fields changed- changed
Input schema / properties / content / descriptionPrevious 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." - changed
Input schema / properties / projectId / descriptionPrevious 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)." - changed
Input schema / properties / tags / descriptionPrevious value: -"Optional tags for filtering"New value: +"Optional tags for categorization and filtering. Examples: [\"architecture\", \"decision\"], [\"user-preference\"], [\"bug-fix\", \"auth\"]" - added
Input schema / properties / tags / itemsAdded value: +{ + "type": "string" +}
- Changed
sense1 field changed- changed
Input schema / properties / goal / descriptionPrevious 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\""
6 tool updates
v1.0.0- First observed
absorb - First observed
forage - First observed
map_network - First observed
recall - First observed
remember - First observed
sense
TDQS
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.
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.
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.
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
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
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Persistent AI memory with semantic search, conflict detection, and ticketing.
Related MCP Servers
- AlicenseCqualityFmaintenanceThis project is based on the Knowledge Graph Memory Server from the MCP servers repository and retains its core functionality.44353MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.4748MIT
- FlicenseNot gradedqualityDmaintenanceProvides 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-
- AlicenseAqualityAmaintenancePersistent memory with knowledge graph visualization, semantic/hybrid search, importance scoring, and cloud sync (S3/R2) for cross-session context management.43715MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/terrizoaguimor/celiums-memory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server