Cuba-Memorys
Cuba-Memorys
Persistent memory for AI agents — A Model Context Protocol (MCP) server that gives AI coding assistants long-term memory with a knowledge graph, neuroscience-inspired algorithms, and anti-hallucination grounding.
19 tools with Cuban soul. Sub-millisecond handlers. Mathematically rigorous.
v0.7.0 — 10 algorithmic improvements + 19 bug fixes + comprehensive audit. PageRank blend (preserves Hebbian/BCM learned importance), hybrid verify (trigram + embedding fusion), ONNX concurrency semaphore (Little's Law), sigmoid entropy routing (replaces step function), word-level session boost, weighted Hebbian neighbor diffusion, exponential coverage saturation, O(n) entropy counting. Fixed: hash embeddings corrupting DB, centrality normalization, cache LRU, jornada race condition, 6 MCP schemas. Removed blake3 dependency. 68 tests, 0 clippy warnings, 0 tech debt.
Demo
Related MCP server: remembrallmcp
Why Cuba-Memorys?
AI agents forget everything between conversations. Cuba-Memorys solves this:
Stratified exponential decay — Memories fade by type (facts=30d, errors=14d, context=7d), strengthen with access
Hebbian + BCM metaplasticity — Self-normalizing importance via Oja's rule with EMA sliding threshold
Hybrid RRF fusion search — pg_trgm + full-text + pgvector HNSW, entropy-routed weighting (k=60), temporal filters, tag filters, compact format
Knowledge graph — Entities, observations, typed relations with Leiden community detection and Adamic-Adar link prediction
Anti-hallucination grounding — Verify claims with graduated confidence + Bayesian calibration over time
Episodic memory — Separate temporal events (Tulving 1972) with power-law decay I(t) = I₀/(1+ct)^β (Wixted 2004)
Contradiction detection — Scan for semantic conflicts via embedding cosine + bilingual negation heuristics
Prospective memory — Triggers that fire on entity access, session start, or error match ("remind me when X")
Contextual Retrieval — Entity context prepended before embedding (Anthropic technique, +20% recall)
REM Sleep consolidation — Autonomous stratified decay + PageRank + auto-prune + auto-merge + episode decay
Graph intelligence — PageRank, Leiden communities, Brandes centrality, Shannon entropy, gap detection
Session awareness — Provenance tracking, session diff, importance priors per observation type
Error memory — Never repeat the same mistake (anti-repetition guard + pattern detection)
Comparison
Feature | Cuba-Memorys | Basic Memory MCPs |
Knowledge graph with typed relations | Yes | No |
Exponential importance decay | Yes | No |
Hebbian learning + BCM metaplasticity | Yes | No |
Hybrid entropy-routed RRF fusion | Yes | No |
KG-neighbor query expansion | Yes | No |
GraphRAG topological enrichment | Yes | No |
Leiden community detection | Yes | No |
Brandes betweenness centrality | Yes | No |
Shannon entropy analytics | Yes | No |
Adaptive prediction error gating | Yes | No |
Anti-hallucination verification | Yes | No |
Error pattern detection | Yes | No |
Session-aware search boost | Yes | No |
REM Sleep autonomous consolidation | Yes | No |
Multilingual ONNX embeddings (e5-small) | Yes | No |
Episodic memory (power-law decay) | Yes | No |
Contradiction detection | Yes | No |
Prospective memory triggers | Yes | No |
Bayesian confidence calibration | Yes | No |
Link prediction (Adamic-Adar) | Yes | No |
Auto-tagging (TF-IDF) | Yes | No |
Contextual Retrieval (Anthropic) | Yes | No |
Temporal search filters | Yes | No |
Zero-config Docker auto-setup | Yes | No |
Write-time dedup gate | Yes | No |
Contradiction auto-supersede | Yes | No |
GDPR Right to Erasure | Yes | No |
Graceful shutdown (SIGTERM/SIGINT) | Yes | No |
Installation
PyPI (recommended)
pip install cuba-memorysnpm
npm install -g cuba-memorysFrom source
git clone https://github.com/LeandroPG19/cuba-memorys.git
cd cuba-memorys/rust
cargo build --releaseBinary download
Pre-built binaries available at GitHub Releases.
Quick Start
Zero configuration required — just install and add to your editor. Cuba-memorys automatically provisions a PostgreSQL database via Docker on first run.
Prerequisite: Docker must be installed and running.
npm install -g cuba-memorys
claude mcp add cuba-memorys -- cuba-memorysThat's it. On first run, Cuba-memorys will:
Detect that no database is configured
Create a Docker container with PostgreSQL + pgvector
Initialize the schema automatically
Start serving 19 MCP tools
npm install -g cuba-memorysAdd to your MCP config (.cursor/mcp.json, .windsurf/mcp.json, or .vscode/mcp.json):
{
"mcpServers": {
"cuba-memorys": {
"command": "cuba-memorys"
}
}
}No DATABASE_URL needed — auto-provisioned via Docker on first run.
If you already have PostgreSQL with pgvector, set the environment variable:
{
"mcpServers": {
"cuba-memorys": {
"command": "cuba-memorys",
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/brain"
}
}
}
}Optional: Multilingual ONNX Embeddings
For real multilingual-e5-small semantic embeddings (94 languages, 384d) instead of hash-based fallback:
./rust/scripts/download_model.sh # Downloads ~113MB model
export ONNX_MODEL_PATH="$HOME/.cache/cuba-memorys/models"
export ORT_DYLIB_PATH="/path/to/libonnxruntime.so"Without ONNX, the server uses deterministic hash-based embeddings — functional but without semantic understanding. With ONNX, Contextual Retrieval prepends [entity_type:entity_name] to content before embedding for +20% recall.
The 19 Tools
Every tool is named after Cuban culture — memorable, professional, meaningful.
Knowledge Graph
Tool | Meaning | What it does |
| Alma — soul | CRUD entities. Types: |
| Cronica — chronicle | Observations with semantic dedup, PE gating V5.2, importance priors by type, auto-tagging (TF-IDF top-5 keywords), session provenance, contextual embedding. Also manages episodic memories (episode_add/episode_list) and timeline view. |
| Puente — bridge | Typed relations. Traverse walks the graph. Infer discovers transitive paths. Predict suggests missing relations via Adamic-Adar link prediction. |
| Ingesta — intake | Bulk knowledge ingestion: accepts arrays of observations or long text with auto-classification by paragraph. |
Search & Verification
Tool | Meaning | What it does |
| Faro — lighthouse | RRF fusion (k=60) with sigmoid entropy routing, pgvector, temporal filters ( |
Error Memory
Tool | Meaning | What it does |
| Alarma — alarm | Report errors. Auto-detects patterns (>=3 similar = warning). Fires prospective triggers on error match. |
| Remedio — remedy | Resolve errors with cross-reference to similar unresolved issues. |
| Expediente — case file | Search past errors. Anti-repetition guard: warns if similar approach failed before. |
Sessions & Decisions
Tool | Meaning | What it does |
| Jornada — workday | Session tracking with goals, outcomes, session diff (what was learned), and previous session context on start. Fires prospective triggers. |
| Decreto — decree | Record architecture decisions with context, alternatives, rationale. |
Cognition & Analysis
Tool | Meaning | What it does |
| Reflexion — reflection | Gap detection: isolated entities, underconnected hubs, type silos, observation gaps, density anomalies (z-score). |
| Hipotesis — hypothesis | Abductive inference: given an effect, find plausible causes via backward causal traversal. Plausibility = path_strength x importance. |
| Contradiccion — contradiction | Scan for semantic conflicts between same-entity observations via embedding cosine + bilingual negation heuristics. |
| Centinela — sentinel | Prospective memory triggers: "remind me when X is accessed / session starts / error matches". Auto-deactivate on max_fires, expiration support. |
| Calibrar — calibrate | Bayesian confidence calibration: track faro/verify predictions, compute P(correct|grounding_level) via Beta distribution. Closes the verify-correct feedback loop. |
Memory Maintenance
Tool | Meaning | What it does |
| Zafra — sugar harvest | Stratified decay (30d/14d/7d by type), power-law episode decay, prune, merge, summarize, pagerank, find_duplicates, export, stats, reembed (model migration with versioning). Auto-consolidation on >50 observations. |
| Eco — echo | RLHF feedback: positive (Oja boost), negative (decrease), correct (update with versioning). |
| Vigia — watchman | Analytics: summary, enhanced health (null embeddings, active triggers, table sizes, embedding model), drift (chi-squared), Leiden communities, Brandes bridges. |
| Forget — forget | GDPR Right to Erasure: cascading hard-delete of entity and ALL references (observations, episodes, relations, errors, sessions). Irreversible. |
Architecture
cuba-memorys/
├── docker-compose.yml # Dedicated PostgreSQL 18 (port 5488)
├── server.json # MCP Registry manifest
├── pyproject.toml # Maturin (bindings = "bin") — PyPI wheel
├── package.json # npm wrapper
└── rust/ # v0.7.0
├── src/
│ ├── main.rs # mimalloc + graceful shutdown (SIGTERM/SIGINT)
│ ├── lib.rs # Shared types and utilities
│ ├── protocol.rs # JSON-RPC 2.0 + REM daemon (4h cycle)
│ ├── db.rs # sqlx PgPool (10 max, 600s idle, 1800s lifetime)
│ ├── setup.rs # Zero-config Docker PostgreSQL auto-provisioning
│ ├── schema.sql # 8 tables, 20+ indexes, HNSW
│ ├── constants.rs # Tool definitions, thresholds, importance priors
│ ├── handlers/ # 19 MCP tool handlers (1 file each)
│ ├── cognitive/ # Hebbian/BCM (hebbian.rs), PE gating V5.2
│ │ # (prediction_error.rs), dual-strength learning
│ │ # (dual_strength.rs), Shannon entropy (density.rs)
│ ├── search/ # RRF fusion (rrf.rs), confidence (confidence.rs),
│ │ # LRU cache (cache.rs)
│ ├── graph/ # Brandes centrality (centrality.rs), Leiden
│ │ # communities (community.rs), PageRank (pagerank.rs)
│ └── embeddings/ # ONNX multilingual-e5-small (contextual embedding,
│ # spawn_blocking, hash fallback)
├── scripts/
│ └── download_model.sh # Download multilingual-e5-small ONNX (~113MB)
└── tests/ # 55 unit + 13 smoke testsPerformance: Rust vs Python
Metric | Python v1.6.0 | Rust v0.7.0 |
Binary size | ~50MB (venv) | 7.6MB |
Entity create | ~2ms | 498us |
Hybrid search | <5ms | 2.52ms |
Analytics | <2.5ms | 958us |
Memory usage | ~120MB | ~15MB |
Startup time | ~2s | <100ms |
Dependencies | 12 Python packages | 0 runtime deps |
Database Schema
Table | Purpose | Key Features |
| KG nodes | tsvector + pg_trgm + GIN indexes, importance, bcm_theta |
| Facts with provenance | 9 types, versioning, |
| Typed edges | 5 types, bidirectional, Hebbian strength, ON CONFLICT dedup |
| Error memory | JSONB context, synapse weight, pattern detection |
| Working sessions | Goals (JSONB), outcome tracking, session diff |
| Episodic memory | Tulving 1972, actors/artifacts TEXT[], power-law decay (Wixted 2004) |
| Prospective memory | on_access/on_session_start/on_error_match, max_fires, expiration |
| Bayesian calibration | claim, confidence, grounding_level, outcome (correct/incorrect) |
Search Pipeline
Reciprocal Rank Fusion (RRF, k=60) with entropy-routed weighting:
# | Signal | Source | Condition |
1 | Entities (ts_rank + trigrams + importance) |
| Always |
2 | Observations (ts_rank + trigrams + importance) |
| Always |
3 | Errors (ts_rank + trigrams + synapse_weight) |
| Always |
4 | Vector cosine distance (HNSW) |
| pgvector installed |
5 | Episodes (ts_rank + trigrams + importance) |
| Always |
Post-fusion pipeline: Dedup -> KG-neighbor expansion -> Session boost -> Score breakdown -> GraphRAG enrichment -> Token-budget truncation -> Compact format (optional) -> Batch access tracking
Filters: before/after (ISO8601 temporal), tags (keyword), format (verbose/compact)
Mathematical Foundations
Built on peer-reviewed algorithms, not ad-hoc heuristics:
Stratified Exponential Decay (V4)
importance_new = importance * exp(-0.693 * days_since_access / halflife)Stratified by observation type: facts/preferences=30d, errors/solutions=14d, context/tool_usage=7d. Decision/lesson observations are protected (never decay). Episodic memories use power-law: I(t) = 0.5 / (1 + 0.1*t)^0.5 (Wixted 2004). Importance directly affects search ranking (score0.7 + importance0.3).
Hebbian + BCM — Oja (1982), Bienenstock-Cooper-Munro (1982)
Positive: importance += eta * throttle(access_count, theta_M)
BCM EMA: theta_M = max(10, (1-alpha)*theta_prev + alpha*access_count)V3: theta_M persisted in bcm_theta column for true temporal smoothing.
RRF Fusion — Cormack (2009)
RRF(d) = sum( w_i / (k + rank_i(d)) ) where k = 60Entropy-routed weighting via smooth sigmoid (Jaynes 1957 MaxEnt):
t = sigmoid(2.0 * (entropy - 2.75))
text_w = 0.7 - 0.4*t (keyword-heavy → balanced → semantic-heavy)
vector_w = 0.3 + 0.4*t (always sums to 1.0)Replaces V2 step function which had 40% relative jumps at thresholds.
PageRank Blend — Brin & Page (1998)
importance_new = 0.3 * rank_normalized + 0.7 * importance_existingMin-max normalized ranks blended via convex combination (α=0.3). Preserves Hebbian/BCM/RLHF accumulated importance instead of overwriting. Uniform distribution guard: skips blend when all ranks are equal (no structural signal).
Other Algorithms
Algorithm | Reference | Used in |
Leiden communities | Traag et al. (Nature 2019) |
|
PageRank + blend | Brin & Page (1998) |
|
Brandes centrality | Brandes (2001) |
|
Adaptive PE gating | Friston (Nature 2023) |
|
Shannon entropy | Shannon (1948) |
|
Chi-squared drift | Pearson (1900) | Error distribution change detection |
Power-law forgetting | Wixted (2004) |
|
Contextual Retrieval | Anthropic (2024) |
|
Adamic-Adar | Adamic & Adar (2003) |
|
Episodic/Semantic | Tulving (1972) |
|
Bayesian calibration | Beta distribution |
|
Configuration
Environment Variables
Variable | Default | Description |
| — | PostgreSQL connection string (auto-provisioned via Docker if not set) |
| — | Path to multilingual-e5-small model directory (optional) |
| — | Path to libonnxruntime.so (optional) |
|
| Log level filter |
Docker Compose
Dedicated PostgreSQL 18 Alpine:
Port: 5488 (avoids conflicts with 5432/5433)
Resources: 256MB RAM, 0.5 CPU
Restart: always
Healthcheck:
pg_isreadyevery 10s
How It Works
1. The agent learns from your project
Agent: FastAPI requires async def with response_model.
-> cuba_alma(create, "FastAPI", technology)
-> cuba_cronica(add, "FastAPI", "All endpoints must be async def with response_model")2. Error memory prevents repeated mistakes
Agent: IntegrityError: duplicate key on numero_parte.
-> cuba_alarma("IntegrityError", "duplicate key on numero_parte")
-> cuba_expediente: Similar error found! Solution: "Add SELECT EXISTS before INSERT"3. Anti-hallucination grounding
Agent: Let me verify before responding...
-> cuba_faro("FastAPI uses Django ORM", mode="verify")
-> confidence: 0.0, level: "unknown" — "No evidence. High hallucination risk."4. Memories decay naturally
Initial importance: 0.5 (new observation)
After 30d no access: 0.25 (halved by exponential decay)
After 60d no access: 0.125
Active access resets the clock — frequently used memories stay strong.5. Community intelligence
-> cuba_vigia(metric="communities")
-> Community 0 (4 members): [FastAPI, Pydantic, SQLAlchemy, PostgreSQL]
Summary: "Backend stack: async endpoints, V2 validation, 2.0 ORM..."
-> Community 1 (3 members): [React, Next.js, TypeScript]
Summary: "Frontend stack: React 19, App Router, strict types..."Security & Audit
Internal Audit Verdict: GO (2026-03-28)
Check | Result |
SQL injection | All queries parameterized (sqlx bind) |
SEC-002 wildcard injection | Fixed (POSITION-based) |
CVEs in dependencies | 0 active (sqlx 0.8.6, tokio 1.50.0) |
UTF-8 safety |
|
Secrets | All via environment variables |
Division by zero | Protected with |
Error handling | All |
Clippy | 0 warnings |
Tests | 68 passing (55 unit + 13 smoke) + 49 E2E |
Licenses | All MIT/Apache-2.0 (0 GPL/AGPL) |
Dependencies
Crate | Purpose | License |
| Async runtime | MIT |
| PostgreSQL (async) | MIT/Apache-2.0 |
| Serialization | MIT/Apache-2.0 |
| Vector similarity | MIT |
| ONNX Runtime (optional) | MIT/Apache-2.0 |
| HuggingFace tokenizers | Apache-2.0 |
| Global allocator | MIT |
| Structured JSON logging | MIT |
| O(1) LRU cache | MIT |
| Timezone-aware timestamps | MIT/Apache-2.0 |
Version History
Version | Key Changes |
0.7.0 | 10 algorithmic improvements: PageRank blend (α=0.3, preserves Hebbian/BCM), hybrid verify (trigram+embedding fusion), ONNX semaphore (Little's Law), sigmoid entropy routing (Jaynes MaxEnt), word-level session boost, weighted Hebbian neighbors (Collins & Loftus), exponential coverage saturation, O(n) entropy. 19 bug fixes: hash embeddings corrupting DB (×5), centrality /2, cache LRU, jornada TOCTOU, alarma self-match, 6 schema mismatches. Removed blake3 dependency. MCP Registry publish fixed. npm postinstall version sync. 68 tests, 0 clippy, 0 tech debt. |
0.6.0 | Contextual Retrieval (+20% recall), importance priors, score breakdown, compact format (~35% fewer tokens), session provenance/diff, semantic dedup, auto-tagging (TF-IDF), Adamic-Adar link prediction, bulk ingest (cuba_ingesta), enhanced health metrics, partial indexes, embedding model versioning. Auto Docker PostgreSQL setup. 19 tools, 56 tests. |
0.5.0 | Temporal reasoning (before/after/timeline), contradiction detection (cosine + negation heuristics), prospective memory triggers (centinela), Bayesian calibration (calibrar), abductive inference (hipotesis), gap detection (reflexion). 18 tools. |
0.4.0 | Multilingual embeddings (e5-small, 94 languages), episodic memory (Tulving 1972, power-law Wixted 2004), stratified decay (30d/14d/7d by type), E2E tests in CI with PostgreSQL. 15 tools. |
0.3.0 | Deep Research V3: exponential decay replaces FSRS-6, dead code eliminated, SEC-002 fix, embeddings storage on write, GraphRAG CTE fix. 13 tools. |
0.2.0 | Complete Rust rewrite. BCM metaplasticity, Leiden communities, Shannon entropy, blake3 dedup. |
1.0-1.6 | Python era: 12 tools, Hebbian learning, GraphRAG, REM Sleep, token-budget truncation. |
License
CC BY-NC 4.0 — Free to use and modify, not for commercial use.
Author
Leandro Perez G.
GitHub: @LeandroPG19
Email: leandropatodo@gmail.com
Credits
Mathematical foundations: Oja (1982), Bienenstock, Cooper & Munro (1982, BCM), Cormack (2009, RRF), Brin & Page (1998, PageRank), Traag et al. (2019, Leiden), Brandes (2001), Shannon (1948), Pearson (1900, chi-squared), Friston (2023, PE gating), Tulving (1972, episodic memory), Wixted (2004, power-law forgetting), Adamic & Adar (2003, link prediction), Anthropic (2024, Contextual Retrieval), Wang et al. (2022, E5 embeddings), Malkov & Yashunin (2018, HNSW), Jaynes (1957, MaxEnt sigmoid routing), Robertson (1977, score fusion), Collins & Loftus (1975, spreading activation).
Available Tools
62 toolscuba_alarmaB
Report errors immediately. Auto-detects patterns (≥3 similar = warning). Hebbian: similar errors get boosted for easier retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Context: {file, function, stack_trace, line} | |
| project | No | Project name (default: 'default') | |
| error_type | Yes | Error category: TypeError, ConnectionError, etc. | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| error_message | Yes | Full error message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious behavior: clustering of similar errors into warnings at ≥3 occurrences and reinforcement of similar errors for retrieval. It still omits whether this is a persistent write, what auth/permissions are needed, and what the call returns.
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 terse fragments, action front-loaded with behavioral detail trailing. No wasted words, though the telegraphic style leaves gaps that fuller sentences could close.
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 5-parameter mutation tool with no annotations and no output schema, the description covers the reporting act and emergent clustering behavior but leaves persistence, permissions, and return behavior unstated.
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% and the nested context object is documented, so the schema carries the parameter load. The description adds no field-level meaning of its own; baseline 3 applies.
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?
States a clear verb+resource ('Report errors') and adds two behavioral traits (pattern auto-detection, Hebbian boosting). However, it never distinguishes itself from its obvious sibling memory_alarma, which an agent must choose between.
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?
'Report errors immediately' gives a weak timing hint but no when-to-use vs. memory_alarma, no prerequisites, and no exclusion conditions. The agent gets no routing guidance among the many cuba_*/memory_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_almaA
CRUD knowledge graph entities (concepts, projects, technologies, patterns, people). Auto-boosts neighbors on access. For transient info use cuba_cronica instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entity name (unique identifier) | |
| action | Yes | Operation to perform | |
| new_name | No | New name for update action | |
| entity_type | No | Type: concept, project, technology, person, pattern, config |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It goes beyond CRUD by stating 'Auto-boosts neighbors on access,' which is a notable behavioral trait. However, it does not detail what happens on delete or any authorization needs.
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: first states purpose and resource, second adds behavioral trait and sibling alternative. Every sentence earns its place, with no wasted words. Front-loaded with key 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 no output schema, the description could mention what the tool returns (e.g., the entity object). However, for a CRUD tool with clear input schema, the description is largely complete for invocation. The auto-boost behavior is a nice addition.
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 context that entity_type can be one of the listed types, but for most properties, the schema's descriptions are already sufficient. The description does not add significant new meaning 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 'CRUD knowledge graph entities (concepts, projects, technologies, patterns, people)', which specifies the verb (CRUD) and resource (knowledge graph entities). It distinguishes itself from sibling cuba_cronica by noting that tool is for transient info.
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 provides a usage guideline: 'For transient info use cuba_cronica instead.' This tells the agent when not to use this tool and what alternative to choose, which is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_archivoB
Tamper-evident audit log: append-only, SHA-256 hash chain, UPDATE/DELETE blocked at the PostgreSQL trigger level.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit for verify/tail (default 10000 / 20) | |
| action | Yes | append: add an event. verify: walk the hash chain and detect tampering. tail: read recent events. | |
| payload | No | Arbitrary JSON payload (for append) | |
| event_action | No | Event type (for append) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does disclose key traits: append-only, SHA-256 hash chain, and UPDATE/DELETE blocked at the PostgreSQL trigger level. It does not cover auth requirements or rate limits, but it gives useful tamper-evidence context beyond the schema.
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 compact sentence that front-loads the tool's core property. It wastes no words, though it could have used one clause to name the actions.
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 schema fully describes the four parameters and action enum, but there is no output schema and no annotations. The description explains the audit-log guarantees but omits what each action returns and any permission or operational constraints, leaving it only minimally complete for a multi-action 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%, so the enum actions, payload, event_action, and limit are already well documented in the schema. The description adds no additional parameter meaning, which is the baseline expectation when the schema does the heavy lifting.
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 what the resource is (a tamper-evident audit log) but not what the tool actually does as a command. It does not mention the append/verify/tail operations, so an agent must open the schema to learn the tool's verbs, and it does not distinguish this tool from the sibling memory_archivo.
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?
There is no guidance on when to use this tool versus alternatives such as memory_archivo or the other cuba/memory siblings. The description gives no conditions, prerequisites, or routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_artefactoB
Shared versioned artifacts between agents on the same daemon (and peers). put requires base_version (optimistic concurrency); lock is a short lease. Alias: memory_artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | patch: substring to replace once | |
| path | No | Logical path, e.g. notes/plan.md | |
| limit | No | list limit | |
| action | Yes | Artifact operation | |
| prefix | No | list: path prefix filter | |
| content | No | Full content for put | |
| replace | No | patch: replacement | |
| ttl_seconds | No | lock lease length (default 60) | |
| base_version | No | Required for concurrent-safe put; omit or 0 to create |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It does usefully disclose the optimistic-concurrency contract on put and that lock is a short lease, which is real behavioral context. However, it omits permission/auth needs, lease expiry consequences, and what patch/watch_hint/unlock actually do.
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 dense sentences, front-loaded with the resource definition followed by the two sharpest behavioral caveats. No filler or redundant restatement of the schema.
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 9-parameter, 7-action tool with no annotations and no output schema, the description explains only put and lock. The semantics of list, get, patch, unlock, and especially the non-obvious watch_hint are never touched, leaving the agent under-informed about most operating modes.
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 the schema already documents all nine parameters with enums and defaults. The description's mention of base_version and ttl/lease semantics largely restates what the schema already carries, so baseline 3 is correct.
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?
States a specific resource and scope: 'Shared versioned artifacts between agents on the same daemon (and peers)', plus the alias memory_artifact. An agent knows this is an artifact store, though it does not distinguish itself from any of the many sibling memory_* / cuba_* tools.
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?
Gives narrow action-level guidance: put needs base_version for optimistic concurrency, lock is a short lease. But with seven enum actions (list/get/put/patch/lock/unlock/watch_hint), it never says when to use one versus another or versus a sibling store, leaving most routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_calibrarA
Bayesian confidence calibration: track verify predictions, mark outcomes, compute P(correct|level). Closes the feedback loop between faro verify and eco correct.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results for history (default 20) | |
| action | Yes | stats/history: past predictions. resolve: mark a verify_id correct/incorrect. trust: per-source Beta(α, β) credibility, updated by resolve outcomes. metrics: Brier score + Expected Calibration Error + reliability diagram. | |
| outcome | No | Whether the verify prediction was right (for resolve) | |
| verify_id | No | Verify log UUID (for resolve) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole burden. It usefully discloses a side effect — that trust scores are Beta(alpha,beta) credibilities 'updated by resolve outcomes' — and distinguishes read actions (stats/history/metrics) from write actions (resolve), but says nothing about permissions, persistence, or reversibility of resolve/trust updates.
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 dense sentences, purpose first, relationship second, with no filler. Every clause carries 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?
For a four-parameter, multi-action tool with no output schema and no annotations, the description adequately conveys the workflow and what metrics/trust represent. It stops short of describing result shapes for stats/metrics, but nothing critical for correct invocation is missing.
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% and the action enum already explains each mode, so the baseline is 3. The description adds little parameter detail beyond restating the calibration concept, though it does clarify the causal link between resolve and trust.
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?
States a specific verb+resource: track predictions, mark outcomes, compute P(correct|level), and names the calibration purpose explicitly. It is clear what the tool does, but it never distinguishes itself from its sibling memory_calibrar, which appears to be the same concept in a different namespace.
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 names the upstream/downstream relationship ('closes the feedback loop between faro verify and eco correct'), which implies when to use it, but gives no explicit when-to-use or when-not guidance and no distinction from memory_calibrar or cuba_eco.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_callA
Invoke any MemoryIndustry tool by name — including the ones not pre-loaded in this session. Discover them first with cuba_tools (use detail='full' to see the exact arguments). Goes through the same dispatcher as a direct call, so behaviour is identical.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | The tool's own arguments, exactly as its schema declares them | |
| tool | Yes | Tool name, e.g. cuba_zafra |
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 usefully discloses that the call routes through the same dispatcher as a direct call so behaviour is identical, which is real behavioral context. However, it says nothing about error behaviour for unknown tool names or side-effect/auth implications, leaving gaps for a no-annotation 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?
Three tight sentences, front-loaded with the core purpose followed by the discovery path and the behavioral guarantee. Every sentence earns its place 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 dispatcher with a fully-described 2-param schema and no output schema, the description covers what the tool does and how to find arguments. It is nearly complete, though it omits error handling for invalid tool names or malformed args.
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 both parameters are already documented in the schema, establishing the baseline of 3. The description adds only a pointer (use cuba_tools detail='full' for exact arguments) rather than richer semantics for 'args' or 'tool'.
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?
States a specific action (invoke any tool by name) with an explicit scope (including tools not pre-loaded in this session), which cleanly differentiates it from the concrete sibling tools. An agent immediately understands this is a generic dispatcher.
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 names the discovery alternative (cuba_tools) and the exact condition/setting (detail='full' to see the precise arguments). This is direct when-to-use guidance with a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_centinelaC
Prospective memory: triggers that fire on entity access, session start, or error match. 'Remember to remind me about X when Y happens.'
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | create: define a trigger. list: show triggers. delete: remove one (trigger_id). check: evaluate now. | |
| message | No | Reminder message to surface when triggered | |
| max_fires | No | Max times to fire (default 1, -1 for unlimited) | |
| expires_at | No | ISO8601 expiration datetime | |
| trigger_id | No | Trigger UUID (for delete) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| condition_type | No | When to fire. on_session_start with the other session's name as entity_pattern is also the cross-session note channel: fires once (max_fires) the next time that session starts, carrying who left it. | |
| entity_pattern | No | Entity name or pattern to match |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It restates the firing conditions that the condition_type enum already covers, but discloses nothing about persistence, permissions, or what happens on repeated fires beyond what the schema already says. For a stateful mutation tool this is thin.
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 short sentences, front-loaded with the core concept and followed by a clarifying analogy. Efficient with no obvious filler, though the second sentence is illustrative rather than informational.
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?
There is no output schema, and the description does not explain the overall action workflow (create/list/delete/check) or what check/list return. The rich parameter schema partially compensates, but for an 8-parameter mutation tool with no annotations, the prose leaves meaningful gaps.
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 the schema already documents all 8 parameters well (including the detailed allow_secret explanation). The description adds no parameter-level meaning beyond the schema, which is the expected baseline when the schema does the heavy lifting.
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 names a specific concept (prospective memory) and enumerates the trigger conditions (entity access, session start, error match), with a concrete usage analogy. It is clear what the tool does, but it never differentiates itself from the many similarly-named siblings (memory_centinela, cuba_alarma/cuba_vigia, cuba_eco), so an agent cannot easily tell which radar-style tool to pick.
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 quoted example ('Remember to remind me about X when Y happens') illustrates the intent but gives no explicit when-to-use guidance, no exclusions, and no named alternative among the ~50 siblings. The agent must infer that this is the reminder/trigger tool from concept alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_contextoA
Visible context window for the agent: working memory + agent notes (exact Mcp-Client-Id) + artifact index + recall of this session's recent writes (then WM mentions, then importance). Call at the start of a turn; call cuba_cronica add BEFORE editing. Alias: memory_context.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_chars | No | Max serialized size (default 12000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the composition and prioritization order of the returned recall (recent writes, then WM mentions, then importance), which is real behavioral information. However, it says nothing about side-effect profile, whether the call mutates session state, or what happens when budget is exhausted.
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-loads the resource, then the usage directive, then the alias. Three sentences, no filler, though the parenthetical ordering clause makes the first sentence heavier than it needs to be.
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?
No output schema exists, so the description correctly compensates by describing what the returned context contains and in what priority order. Combined with the 100%-documented parameter, an agent has enough to invoke it, with only the side-effect profile missing.
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%, with budget_chars documented as 'Max serialized size (default 12000)', so the baseline is 3. The description adds no further semantics about the budget parameter, and for a single-parameter tool that is acceptable but not additive.
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?
States a concrete resource — the agent's visible context window — and enumerates its ingredients (working memory, agent notes keyed by Mcp-Client-Id, artifact index, recent-write recall). This is specific enough to distinguish it from sibling memory tools, though the enumeration is dense and the 'alias: memory_context' note blurs rather than sharpens the boundary.
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?
Gives explicit timing ('call at the start of a turn') and a named alternative action for a related need ('call cuba_cronica add BEFORE editing'). It stops short of stating when not to call it, but the routing guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_contradiccionB
Detect semantic contradictions between observations of the same entity. Uses embedding cosine distance + negation heuristics. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Contradiction detection action | |
| entity_name | No | Entity to scan (omit to scan top entities by observation count) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses read-only nature and method used, but lacks details on return format, error handling, or behavior when no contradictions are found. Partial transparency.
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?
Extremely concise: two sentences front-load the purpose and key behavioral trait (read-only). 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?
No output schema and description does not explain return values or response format. For a tool involving contradiction detection with embedded methods, the description is insufficient for an agent to fully anticipate 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?
Schema description coverage is 100% with adequate parameter descriptions. Tool description adds no extra parameter semantics beyond method context, so baseline score 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?
Description clearly states the verb 'detect' and resource 'semantic contradictions between observations'. It specifies the method (embedding cosine distance + negation heuristics) and explicitly notes it's read-only, distinguishing it from sibling tools.
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 guidance on when to use this tool versus siblings or when not to use it. The 'read-only' note implies safety but does not provide context for selection among alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_cronicaB
Attach facts/lessons/decisions to entities. Also manages episodic memories (specific events with actors/artifacts) via episode_add/episode_list. Timeline view shows chronological history. Auto-creates entity if not found. Dedup gate blocks near-duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to perform. episode_add stores a temporal event; episode_list retrieves events. timeline shows chronological observations+episodes. | |
| actors | No | People/agents involved in episode (for episode_add) | |
| source | No | Who/what created this observation | |
| content | No | Observation or episode text | |
| artifacts | No | Files/resources affected in episode (for episode_add) | |
| entity_name | No | Entity to attach observation/episode to | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| observations | No | Array of {entity_name, content, observation_type?, source?} objects (for batch_add, max 100) | |
| observation_id | No | Observation UUID (for delete action) | |
| observation_type | No | Type of observation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but does disclose two important behavioral traits: auto-creation of missing entities and a dedup gate that blocks near-duplicates. It still omits mutation/destructive behavior, authentication requirements, reversibility, and return behavior, so it is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five short sentences and front-loads the core purpose before covering episodic memories, timeline, auto-creation, and deduplication. Each sentence carries useful information, though the action coverage is somewhat fragmented rather than systematically organized.
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 7-action, 10-parameter memory tool with no annotations and no output schema, the description covers the main observation attachment, episodic memory, timeline, auto-creation, and dedup concepts. It leaves out explicit treatment of delete, list, and batch_add actions, but the schema's 100% coverage compensates for those gaps.
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 the schema already documents all 10 parameters thoroughly, including enums and nested batch objects. The description only names episode_add, episode_list, and timeline actions and adds no syntax or format detail beyond what the schema provides, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Attach facts/lessons/decisions to entities') and extends that to episodic memories and timeline views. The purpose is clear, but it does not explicitly distinguish this tool from the many similarly named sibling memory tools such as memory_cronica.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions that episodic memories are managed via episode_add/episode_list and that timeline shows chronological history, which gives some action-level context. However, it provides no guidance on when to choose this tool over alternatives like memory_cronica or when to use add vs batch_add vs delete, so the agent must infer usage from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_decretoC
Record and query architecture/design decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search text (for query action) | |
| title | No | Decision title (for record) | |
| action | Yes | Decision action | |
| chosen | No | Option chosen | |
| context | No | Why this decision was needed | |
| rationale | No | Why this option was chosen | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| alternatives | No | Options considered |
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. The schema's allow_secret description does disclose a real behavioral trait (credential detection and verbatim clear-text storage), but that appears in the schema, not the description. The description itself says nothing about persistence, secret-refusal, or that records are searchable/exportable — significant gaps for an un-annotated 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?
Single short sentence, front-loaded, no filler. It underspecifies rather than overexplains, so conciseness is fine even though content is thin.
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?
Eight parameters, a three-way action enum, no annotations, no output schema, and a credential-handling behavior with real safety consequences — the description should at least route between record/query/list and warn what recording persists. It doesn't, leaving the agent reliant entirely on schema text.
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 the baseline is 3. The description adds no parameter-level meaning beyond what the schema already documents per-field (query text, title, alternatives, allow_secret, etc.).
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?
States a verb pair ('record and query') and resource ('architecture/design decisions'), which is clearer than a bare name. However, it doesn't distinguish itself from the sibling memory_decreto or from other memory_*/cuba_* decision-adjacent tools, leaving an agent to guess which of the 50+ siblings handles decision records.
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 when-to-use guidance, no prerequisites, no mention of when to pick this over memory_decreto or cuba_cronica. The 'action' enum (record/query/list) is the only hint of use-case branching, and it lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_ecoB
RLHF feedback: positive boosts importance (Oja's rule), negative decreases, correct updates content. Also the quarantine gate: 'pending' lists memories withheld from search because they came from untrusted text, 'promote' makes one retrievable, 'quarantine' withdraws one. The gate covers observations, episodes and errors — pick which with 'kind'.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Target UUID for promote/quarantine when kind is episode or error. For kind=observation use observation_id. | |
| kind | No | Which table promote/quarantine acts on. Default 'observation'. An import quarantines whatever carried a credential, and cuba_sync writes episodes and errors too: without the matching kind those rows would stay stored and permanently unreachable. Ignored by positive/negative/correct, and by pending, which always returns all three. | |
| limit | No | Max rows for the 'pending' listing (default 20, max 200) | |
| action | Yes | Feedback type, or a quarantine transition: promote/quarantine flip one memory's retrievability; pending lists everything currently withheld, in three lists (quarantined, quarantined_episodes, quarantined_errors), each row tagged with its kind. | |
| correction | No | New content (for correct action) | |
| entity_name | No | Target entity | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| observation_id | No | Target observation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains that positive/negative use Oja's rule to boost or decrease importance, that correct overwrites content, that 'pending' lists withheld memories from untrusted text, and that promote/quarantine flip retrievability. It also notes the gate covers observations, episodes and errors. What is missing is the reversibility of promote/quarantine, whether feedback is idempotent, and any error conditions. Strong but not complete.
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 long block that mixes two unrelated functional areas (RLHF feedback and quarantine transitions) without headings or bullets, and it front-loads the RLHF part before the gate. It is not padded, but the structure makes it hard to scan and the opening sentence assumes the reader already knows what 'cuba_eco' is.
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 an 8-parameter tool with no annotations and no output schema, the description covers the main behaviors: how feedback changes importance, how corrections replace content, and how the quarantine gate filters, promotes and quarantines across three kinds. It does not describe the pending return format in detail beyond naming the three lists, and it does not state what the tool returns for other actions, but the schema elsewhere is fully documented and this is close to sufficient.
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 the schema already documents every parameter including the enum semantics and the kind selection. The description adds context that 'kind' exists to target observations, episodes or errors and that pending ignores it, but this largely repeats what the schema descriptions already state. Baseline 3 is appropriate when the schema does the heavy lifting.
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 names two distinct capabilities (RLHF feedback and a quarantine gate) with specific actions, but the tool name 'cuba_eco' provides no hint and the description begins mid-thought. It is possible to reconstruct the tool's purpose from the text plus the action enum, but the description itself is vague about the overall scope (is this one tool or two merged together?) and does not distinguish it from siblings like memory_eco or cuba_centinela.
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?
There is no explicit when-to-use guidance. The description explains what each action does but never states when to choose positive vs correct, or when to use pending before promote. The sibling list is long and no alternative tool is named for any scenario. Usage is implied only by action semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_expedienteB
Search past errors/solutions. Use 'proposed_action' as anti-repetition guard: warns if similar approach previously failed.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search text for errors | |
| project | No | Filter by project | |
| resolved_only | No | Only return errors with solutions | |
| proposed_action | No | Anti-repetition: describe what you plan to do. Returns warning if similar approach failed before. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that the tool returns a warning if a similar approach failed before (via 'proposed_action'), but with no annotations provided, it fails to disclose other behavioral traits such as read-only status, required permissions, or potential side effects. The behavioral transparency 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?
Two sentences, front-loaded with purpose, no unnecessary words. Every sentence adds value—the first states what the tool does, the second gives a key usage hint. Excellent conciseness.
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 is brief and lacks details about return values, result ordering, pagination, or error handling. While the tool has a moderate number of parameters (4), the lack of output schema and limited context means the description is minimally complete for an effective search 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?
The input schema already provides full descriptions for all 4 parameters (100% coverage). The description adds a brief usage note about 'proposed_action,' but it does not provide additional meaning beyond what the schema already states. 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: 'Search past errors/solutions.' It uses a specific verb and resource, making it distinct from vague descriptions. However, it does not explicitly differentiate from siblings like cuba_remedio (which might also deal with errors/solutions), but the purpose is still clear.
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 a specific usage tip for the 'proposed_action' parameter, but it lacks any guidance on when to use this tool versus alternative tools (e.g., cuba_remedio or cuba_cronica). No mention of context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_faroA
Search memory BEFORE answering to ground responses. Returns grounding scores. Mode 'verify' checks claims against evidence (confidence: verified/partial/weak/unknown). Session-aware: boosts results matching active session goals. Supports temporal filtering. Optional MMR diversification, OOD abstention and an exact tiktoken-based token budget.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode (default: hybrid). 'verify' checks if claim is grounded. | |
| tags | No | Filter observations by tag keyword (exact match against auto-extracted tags) | |
| after | No | ISO8601 datetime — return results created after this time | |
| limit | No | Max results (default 10, max 50) | |
| query | Yes | Search text | |
| scope | No | Where to search (default: all) | |
| before | No | ISO8601 datetime — return results created before this time | |
| format | No | Response format. compact (DEFAULT): abbreviated keys — e=entity, c=content, t=type, i=importance, s=score. 71% fewer tokens (798 vs 2787 at limit=10, measured). verbose: full key names, only when you need every field. | |
| rerank | No | Cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3. Auto-enabled when CUBA_MODE=completo, or when this build has a real GPU provider active (CUDA/DirectML compiled in AND a working device). Off by default everywhere else, even with the model on disk: on CPU it costs 60-110s and blows the search budget. Explicit true/false always wins; run `memory-industry doctor` to see which reason applies here. | |
| diversify | No | Post-RRF MMR pass that penalizes near-duplicates among top-K. Default false. | |
| max_tokens | No | Token budget for results (default 5000). Counted exactly via tiktoken cl100k_base. | |
| mmr_lambda | No | MMR balance — 1.0 pure relevance, 0.0 pure diversity. Default 0.7. | |
| abstain_ood | No | Abstain (return empty results with abstain_reason) when the query is out-of-distribution via Mahalanobis distance. Default false. | |
| associative | No | Multi-hop expansion: seeds spreading activation from query-matched entities and pulls in observations on graph-connected entities that no lexical/vector signal surfaced. Additive — never lowers a base hit. Default false. | |
| enable_bm25 | No | Enable BM25 (ts_rank_cd) as third RRF signal alongside text + vector. Catches queries with rare terms that dense embeddings miss. Default true. | |
| ood_threshold | No | Mahalanobis distance threshold for abstention. Defaults to sqrt(chi2_0.99(d)), which scales with the embedding dimension (~21.25 for d=384). Override only if you calibrated on your own corpus. | |
| include_unscoped | No | When a project is active, rows with project_id NULL are hidden. Set true to include that leftover corpus. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses meaningful behavior: grounding scores, verify-mode confidence levels, session-aware boosting, temporal filtering, and optional MMR, OOD abstention, and token budgeting. It does not cover auth requirements or default operational details like the compact response format, which are left to the schema.
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 front-loaded with purpose and is reasonably sized for a 17-parameter tool. It uses multiple short sentences to cover distinct features, though it could be slightly tighter.
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 complex search tool with no output schema and 100% schema coverage, the description provides enough context to understand the main modes and optional behaviors. It mentions returning grounding scores, but does not elaborate on the return shape, which is acceptable given the detailed parameter 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?
Schema description coverage is 100%, so the baseline is 3. The description mentions mode verify, temporal filtering, diversification, OOD abstention, and token budget, but these largely restate or lightly expand on what the schema already documents, adding little parameter-specific meaning beyond the structured fields.
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 a specific verb and resource: searching memory to ground responses. It clearly explains the tool's role in retrieval and grounding, though it does not differentiate itself from sibling tools such as memory_faro or cuba_contexto.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear contextual guidance: search memory BEFORE answering to ground responses. It does not explicitly name when not to use the tool or which alternatives to prefer, but the timing guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_forgetA
GDPR Right to Erasure: cascading hard-delete of an entity and ALL references across observations, relations, errors, and sessions. IRREVERSIBLE. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to proceed (safety gate) | |
| entity_name | Yes | Entity name to erase completely |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully covers behavioral traits: it states the operation is 'cascading', 'hard-delete', 'IRREVERSIBLE', and lists affected areas (observations, relations, errors, sessions). No contradictions 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?
Two sentences, zero filler. First sentence states the action and scope; second sentence emphasizes irreversibility and a precondition. Every word is purposeful.
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 destructive tool with no output schema, the description provides ample context about the effect and prerequisites. It could mention the return value (e.g., success/error), but the warnings make it largely sufficient.
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 clear descriptions for both parameters. The description adds the safety requirement 'Requires confirm=true' but does not significantly enhance understanding beyond schema. Baseline score 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 uses specific verbs ('cascading hard-delete') and clearly identifies the resource ('entity and ALL references across observations, relations, errors, and sessions'). It distinguishes itself from sibling tools like 'cuba_receta' or 'cuba_archivo' by focusing on complete erasure.
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 mentions 'GDPR Right to Erasure' as a use case and highlights the need for 'confirm=true', but does not explicitly state when not to use it or compare it to alternatives among siblings. Clear context but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_hipotesisA
Abductive inference: find plausible causes of an observed effect. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hypotheses to return (default 10, max 50) | |
| action | Yes | explain: traverse causal relations backwards from `effect`, ranked by path_strength × importance. | |
| effect | Yes | Entity name representing the observed effect | |
| max_depth | No | Max causal chain hops (default 3, max 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose a key behavioral trait, 'Read-only', which is valuable safety context. However, it omits the backward-traversal/ranking behavior, depth limits, and result-count capping that shape what the agent gets back.
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 short sentences with zero waste; the core purpose leads and the read-only qualifier follows. Nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only inference tool with no output schema and no annotations, the description covers purpose and safety but says nothing about the shape of the returned hypotheses (ranking, count, depth) or about the backward traversal mode already documented only in the 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?
Schema coverage is 100%, so the schema already documents action, effect, limit, and max_depth with defaults and the ranking formula. The description adds no parameter meaning beyond that, so baseline 3 applies.
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?
States a specific verb+resource: 'find plausible causes of an observed effect', and names the inference type (abductive). An agent can tell it produces candidate causes rather than a stored hypothesis (contrast with the memory_hipotesis sibling), though it never names that sibling 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?
Usage is implied by 'observed effect' input, but there is no explicit when-to-use, when-not-to-use, or guidance on choosing this over memory_hipotesis or cuba_reflexion/cuba_contradiccion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_ingestaA
Bulk knowledge ingestion. 'ingest': array of {entity_name, content, observation_type} items. 'parse': split long text by paragraphs + heuristic classify. 'auto_extract' (v0.11): the calling client's LLM extracts salient durable facts from a turn/conversation via MCP Sampling ($0, no API key) and ingests them — the automatic-extraction that mem0/Zep have. All routes share the dedup/PE-gating/embedding pipeline; none delete.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Raw text: paragraphs to split (parse) or a turn/conversation to extract facts from (auto_extract) | |
| items | No | Array of {entity_name, content, observation_type?} objects (for ingest action, max 200) | |
| action | Yes | Ingestion mode. Default 'ingest' is the fast raw path (no LLM). 'parse' splits long text. 'auto_extract' is opt-in LLM extraction via MCP sampling — do not use it as the default write. | ingest |
| untrusted | No | Set when the text came from somewhere you do not control (a fetched page, a pasted document, a third party). Everything extracted lands quarantined — stored and inspectable via cuba_eco action=pending, but withheld from cuba_faro until promoted. Default false. | |
| entity_hint | No | Optional main-subject hint for auto_extract (biases entity_name) | |
| entity_name | No | Entity to attach parsed observations to (for parse action) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| supersede_conflicts | No | v0.11 (auto_extract): when a new fact replaces/contradicts an existing related one, ask the judge and mark the old observation superseded (knowledge-update; never deletes). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden and does so: it discloses the shared dedup/PE-gating/embedding pipeline, that no route deletes, that untrusted content lands quarantined and is withheld from cuba_faro until promoted (inspectable via cuba_eco action=pending), that allow_secret stores verbatim in clear and is globally searchable/exportable, and that supersede_conflicts marks old observations superseded rather than deleting them.
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?
Dense but front-loaded: the action breakdown comes first, followed by pipeline behavior, with no filler sentences. Some jargon ("PE-gating", "v0.11") assumes prior context and the middle sentence is packed, but every clause carries 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?
With no annotations and no output schema, the description supplies the safety and side-effect context an agent needs (quarantine, credential refusal, non-deletion, supersession). Given the complexity of 8 parameters and three modes, it is nearly complete; it stops short of describing failure/return behavior for long-running bulk ingests.
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 the schema already documents all 8 parameters, including the action enum and the untrusted/allow_secret/supersede_conflicts semantics. The description's action breakdown largely restates what the schema parameter descriptions already say, so it adds only marginal value over structured data — baseline 3.
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?
Opens with a specific verb+resource ("Bulk knowledge ingestion") and then decomposes the three actions with what each does, so an agent can tell ingest (raw), parse (paragraph split + classify) and auto_extract (LLM sampling extraction) apart. It does not explicitly name or differentiate from the sibling namespaces (memory_ingesta, etc.), which keeps it short of a 5.
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?
Gives explicit routing guidance per action: 'ingest' is the fast raw path, 'parse' splits long text, and 'auto_extract' is opt-in with a clear prohibition ('do not use it as the default write'). It also states the condition for the untrusted flag (text you do not control) and for allow_secret (only to override a false credential match).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_jornadaB
Track working sessions with goals and outcomes. v0.8: optional 'project' arg binds the session to a named project (upserts in brain_projects); subsequent handlers will scope reads/writes to that project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Session name (for start) | |
| goals | No | Session goals (for start) | |
| action | Yes | Session action | |
| outcome | No | Session outcome (for end) | |
| project | No | v0.8: project name to bind this session to (created on first use). Omit to keep session global. | |
| summary | No | What was accomplished (for end) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. |
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 does disclose real behavior: the project arg upserts into brain_projects and future handlers will scope reads/writes to that project. But it says nothing about persistence, permissions, or what 'end' does to a session, leaving significant behavioral 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?
Two sentences, front-loaded with the core purpose before the version-specific detail. Efficient, though the 'v0.8' versioning preamble is mildly meta and could be trimmed.
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?
This is a 7-parameter, 4-action dispatch tool with no annotations and no output schema, yet the description never explains the actions that drive the tool. An agent must open the schema to learn that 'start', 'end', 'list' and 'current' exist and what each requires, which is a substantial completeness gap.
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 the baseline is 3. The description's project note largely restates what the schema description for 'project' already says ('created on first use', 'omit to keep session global'), so it adds little meaning beyond the structured fields.
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?
States a specific verb+resource: 'Track working sessions with goals and outcomes.' An agent understands the domain immediately. However, it offers no differentiation from the obvious sibling memory_jornada, so an agent cannot tell from the description which of the two session-tracking tools to pick.
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?
There is no when-to-use guidance, no mention of the start/end/list/current lifecycle, and no routing to or away from memory_jornada. The only conditional content is about the optional 'project' arg, which is schema-level detail rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_juezA
LLM-judge for semantically-conflicting observations in the ambiguous cosine-similarity band (0.6-0.8), where heuristics miss vocabulary-different conflicts. Verdicts are cached in brain_judgments.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | judge_pair: decide on two given observation ids. scan_entity: pull ambiguous pairs for an entity and judge each. | |
| max_pairs | No | Max pairs to escalate per call (default 5; controls LLM cost) | |
| entity_name | No | Entity to scan (for scan_entity) | |
| observation_a | No | UUID of first observation (for judge_pair) | |
| observation_b | No | UUID of second observation (for judge_pair) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses two side effects: that this is an LLM-backed (costly) operation and that verdicts are cached in brain_judgments. It does not state permissions required, cost bounds, or whether cached verdicts are reused/overwritten, leaving meaningful gaps for a mutating, LLM-invoking 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 tight sentences with no filler, and the core purpose and the similarity band are front-loaded. The phrasing is dense but every clause contributes 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?
There is no output schema and no annotations, so the description should do more of the explanatory work. It names the cache destination but never describes what a verdict returns or its shape, and the two actions are only clarified in the schema. Adequate to route a call but incomplete for a judge tool without structured output.
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 the schema already documents all five parameters including the action enum and max_pairs cost control. The description adds no syntax or format detail beyond that. Baseline 3 is appropriate when the schema does the heavy lifting.
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 a specific verb and resource: an LLM-judge that resolves semantically-conflicting observations in a defined cosine-similarity band. It clearly positions itself against heuristics ('where heuristics miss vocabulary-different conflicts'), which aids differentiation. It stops short of naming any actual sibling tool (e.g., memory_juez or cuba_contradiccion), so selection vs. siblings remains inferential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete triggering condition: use when observations fall in the ambiguous 0.6-0.8 band and vocabulary-different conflicts would evade heuristics. That is clear when-to-use context. It offers no explicit when-not-to-use or pointer to an alternative tool, so it does not reach the top of the scale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_pizarraA
Working memory buffer (v0.9, Baddeley 1992): a TTL-bounded scratchpad orthogonal to episodic and semantic memory. Use for inter-step plan state during long-horizon agent tasks, tentative observations, cross-tool-call reminders inside one session. Auto-expire by ttl_seconds; bulk-purged by cuba_zafra REM cycle.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional tag for filtering on read/clear | |
| action | Yes | Working-memory operation | |
| content | No | Content to store (for write) | |
| ttl_seconds | No | Time-to-live in seconds (default 3600) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the TTL auto-expiry lifecycle and that cuba_zafra's REM cycle bulk-purges entries. It omits write/overwrite semantics and read/clear behavior, but the credential-refusal behavior is covered in the schema.
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 dense sentences, front-loaded with the definition and followed by usage and lifecycle. The 'v0.9, Baddeley 1992' citation is mildly ornamental but does not bloat the text.
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 5-param tool with no annotations and no output schema, the description supplies purpose, when-to-use and lifecycle. It could say more about the write/read/clear actions and what a read returns, but the schema covers the parameters adequately.
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 the baseline is 3; the schema already documents tag, action enum, content, ttl_seconds and allow_secret in detail. The description only echoes ttl_seconds expiry, adding little parameter meaning beyond structured fields.
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?
States a specific resource ('working memory buffer... TTL-bounded scratchpad') and explicitly positions it relative to siblings by calling it 'orthogonal to episodic and semantic memory'. An agent can distinguish it from the many memory_* tools without opening any schema.
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?
Gives concrete use cases: 'inter-step plan state during long-horizon agent tasks, tentative observations, cross-tool-call reminders inside one session'. Clear context for when to reach for it, though it does not explicitly name a sibling as the alternative or state when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_pre_compactA
Compaction-survival protocol: persist and restore a session summary across /compact.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | snapshot: before /compact, persists a dense markdown summary (observations, decisions, unresolved errors, pending embeddings, goals) for the active session. restore: after /compact, retrieves the latest snapshot and re-injects it into context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It explains the core persist/restore behavior and the survival purpose, but does not disclose side effects, storage semantics, whether snapshots overwrite previous ones, or what exactly happens during restore beyond re-injection. This is adequate but incomplete for a stateful session 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 a single, front-loaded sentence with no wasted words. It states the protocol name and core operation immediately, and every phrase contributes to understanding what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with a fully documented schema, the description covers the essential idea. However, with no output schema and no annotations, it should clarify return behavior for restore and differentiate from the sibling memory_pre_compact tool. The core is present, but important routing and output context is missing.
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 action parameter has 100% schema description coverage, including detailed enum semantics for snapshot and restore. The tool description adds the conceptual 'compaction-survival' framing but no additional parameter syntax or format details beyond what the schema already provides, so the baseline score of 3 applies.
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 a specific protocol and verb pair: persist and restore a session summary across /compact. It is clear what the tool does, but it does not differentiate itself from the sibling memory_pre_compact tool, leaving some ambiguity about which one an agent should choose.
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 phrase 'across /compact' implies the usage window (before and after compaction), and the schema's action enum explains snapshot vs. restore timing in more detail. However, the description itself gives no explicit when-to-use guidance, no alternatives, and no exclusions relative to memory_pre_compact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_proyectoB
Project scoping (v0.8): isolate memories per project so multiple projects sharing one DB don't bleed into each other. Active project is bound to the current session (cuba_jornada start --project NAME). Legacy NULL project_id rows are hidden while a project is active unless faro include_unscoped=true or you backfill them.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Destination name (for rename/merge) | |
| name | No | Project name (for switch/stats/rename source/backfill) | |
| action | Yes | Project action. backfill assigns every NULL project_id row to `name` (dry-run unless confirm=true). | |
| confirm | No | backfill only: write the assignment. Default false (dry-run). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the visibility rule that legacy NULL project_id rows are hidden while a project is active unless faro include_unscoped=true or a backfill is run – genuinely valuable state behavior. It omits, however, the side effects and reversibility of the mutating actions (rename, merge, backfill), any permission requirements, and what switching projects does to the current session.
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 dense sentences with the core concept front-loaded and the visibility caveat appended efficiently. It is jargon-heavy (v0.8, cuba_jornada, faro include_unscoped) but every sentence carries information and there is no padding.
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 seven-action tool with no annotations and no output schema, the description covers the conceptual model and one important visibility caveat, but it does not describe the semantics or effects of the individual actions (switch, rename, merge, stats) beyond what the schema enum already encodes, leaving an agent to infer operational behavior.
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 the schema already documents all four parameters including the backfill/confirm semantics. The description adds the session-binding context but otherwise does not extend parameter meaning beyond what the schema provides, making the baseline 3 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 conveys the resource and intent – project scoping that isolates memories per project – and explains the mechanism (active project bound to session via cuba_jornada start --project NAME). However, it does not explicitly state that this tool exposes the project management operations (list/current/switch/rename/merge/backfill), which the agent only learns from the schema enum, and it does not differentiate itself from the sibling memory_proyecto.
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 context in which project scoping matters (multiple projects sharing one DB) and explains how the active project is established, but it never states when to call this tool versus alternatives like cuba_jornada or memory_proyecto, nor which action to reach for under what circumstance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_puenteC
Create edges between entities (uses, causes, implements, depends_on, related_to). 'traverse' explores connections, 'infer' does transitive reasoning (A→B→C), 'predict' suggests missing links via Adamic-Adar. Relations strengthen with use (Hebbian).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to perform. 'predict' uses Adamic-Adar to suggest missing relations. | |
| persist | No | For predict: write the suggestions to brain_relations as provenance='predicted' (relation_type related_to) instead of only returning them. Default false — read-only. | |
| max_depth | No | Max hops for traverse/infer (default 3, max 5) | |
| to_entity | No | Target entity name | |
| entity_name | No | Entity name for predict action (Adamic-Adar link prediction) | |
| from_entity | No | Source entity name | |
| start_entity | No | Start point for traverse/infer | |
| bidirectional | No | If true, relation goes both ways | |
| relation_type | No | Relation: uses, causes, implements, depends_on, related_to. Also used by predict+persist to pick the type for the persisted edge (default related_to). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions 'Relations strengthen with use (Hebbian)' but does not explain what that means for the agent (e.g., automatic persistence, side effects). Critically, the delete action is omitted entirely, leaving a major behavioral gap unaddressed.
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 short (two sentences) and front-loaded, but it omits the delete action entirely. This conciseness comes at the cost of completeness. Every sentence is functional, but the omission is a critical gap.
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 9 parameters, multiple actions, no output schema, and no annotations, the description is moderately complete. It covers create, traverse, infer, and predict, but misses delete and does not explain how bidirectional, persist, or max_depth interact with the overall behavior. The Hebbian mention is vague.
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. The description adds some context (e.g., Hebbian strengthening and Adamic-Adar for predict), but this largely duplicates what's already in the action parameter description. It does not significantly deepen understanding of individual parameters 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 states 'Create edges between entities' but the tool also includes delete, traverse, infer, and predict actions. The first sentence is misleading as it implies only creation. It lists the relation types and explains other actions, but fails to mention delete, making the purpose incomplete.
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 guidance is provided on when to use this tool versus its siblings (e.g., cuba_vigia, cuba_proyecto). The description details when to use each action within the tool (traverse vs infer vs predict), but does not help an agent choose between this and other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_recetaA
PROCEDURAL MEMORY: how things are DONE here — bring up the dev services, run the test suite, deploy, migrate. The other tools remember what is TRUE; this one remembers what to DO, so an agent stops rediscovering it every session. Ranked by reliability, not by how often it is read: report the outcome with action='outcome' after running one, or the memory learns nothing. A recipe that keeps failing is worse than none, because it is trusted.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Procedure name, e.g. 'levantar el entorno de desarrollo' | |
| limit | No | Max results | |
| query | No | For action=search | |
| steps | No | Ordered steps: [{do: '...', run: 'comando'?, expect: 'qué debe pasar'?}] | |
| action | Yes | search: find by meaning. get: fetch by exact name. add: store/update (re-adding the same name edits it, keeping its track record). outcome: record success/failure — this is what teaches it. | |
| success | No | For action=outcome: did it work? | |
| trigger | No | WHEN this applies — the IF half. e.g. 'cuando hay que levantar los servicios de mapupita-web' | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| verification | No | How you know it actually worked | |
| preconditions | No | What must already be true before starting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses genuinely non-obvious behavior: ranking is by reliability rather than read frequency, and the memory only learns from action='outcome' reporting. The caveat that a persistently failing recipe is worse than none is a real behavioral warning. It does not cover permissions, what delete destroys, or result limits.
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 conceptual framing is front-loaded and the actionable 'report the outcome' instruction follows immediately. The concluding aphorism about failing recipes is slightly rhetorical but reinforces the stakes rather than padding, so it mostly 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 10-parameter tool with no annotations and no output schema, the description adequately explains the mental model and the critical feedback loop, and the schema carries full parameter documentation. Return-shape details for get/search are left implicit, which is a minor gap given no output schema exists.
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 the parameter baseline is 3. The description adds meaning on top by singling out action='outcome' as the teaching mechanism and implying the reliability semantics that the enum alone does not convey, warranting a modest bump.
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 names the resource (procedural memory / recipes for how things are done) and gives concrete examples (bring up dev services, run tests, deploy, migrate). Critically, it distinguishes itself from siblings with 'The other tools remember what is TRUE; this one remembers what to DO,' so an agent can route between the two memory families without reading both schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit operational guidance — report the outcome with action='outcome' after running a recipe or 'the memory learns nothing' — and frames when this tool is the right choice versus the fact-memory siblings. It stops short of saying when NOT to use it (e.g. for exploratory or non-reproducible steps), so it lacks full exclusion coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_reflexionB
Analyze the knowledge graph for structural gaps. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | analyze: the only action. Reports isolated entities, underconnected hubs, type silos, observation gaps (missing decisions/lessons), and statistical density anomalies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the key trait 'Read-only', which is genuinely useful safety information, but says nothing about output shape, cost, or side effects beyond that. The read-only claim is also largely implied by the schema's 'Reports...' wording, so the added value is modest.
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 the purpose and ending with the safety trait. Nothing is wasted or padded.
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 single-parameter, read-only analysis tool the definition is nearly sufficient: the schema's enum description enumerates what the analysis reports (isolated entities, hubs, silos, observation gaps, density anomalies), which effectively covers the return content despite there being no output schema. The main missing piece is any guidance on when to use it versus its siblings.
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% and the single 'action' enum is fully documented in the schema itself, including what the analysis reports. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
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?
States a specific verb ('Analyze') and resource ('the knowledge graph') with a clear scope ('structural gaps'). It is clear what the tool does, but it does not distinguish itself from the sibling memory_reflexion, which likely performs the analogous analysis over 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?
No when-to-use context, no prerequisites, and no alternatives are named. The many sibling tools (cuba_* / memory_* pairs) make routing ambiguous, and the description offers no help in choosing this one over memory_reflexion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_remedioB
Mark an error as resolved with solution. Cross-references similar unresolved errors.
| Name | Required | Description | Default |
|---|---|---|---|
| error_id | Yes | UUID of the error to solve | |
| solution | Yes | Solution that fixed the error | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. |
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 does disclose a meaningful side effect — that similar unresolved errors are cross-referenced — but says nothing about permissions, reversibility, or whether the resolution is broadcast/persisted elsewhere, and the sensitive allow_secret behavior is only covered in the schema.
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 short front-loaded sentences with no filler; the action comes first and the side effect second. It is efficiently sized, if a little terse for a mutation tool.
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 no annotations and no output schema, the description should say more about what happens on success and what the cross-referencing returns. It covers the core mutation but leaves the agent guessing about the response and about failure modes.
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 error_id, solution, and allow_secret are already fully documented including the credential-refusal warning. The description adds no parameter-level detail beyond what the schema provides; 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 gives a concrete verb+resource: marking an error as resolved with a solution, plus the cross-referencing side effect. That is far clearer than the opaque tool name 'cuba_remedio', though it does nothing to distinguish this from the many similarly cryptic siblings (memory_remedio, cuba_alarma, etc.).
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?
There is no when-to-use or when-not-to-use guidance, and no alternative tool is named. The agent must infer that this is the call to make after fixing a problem, with nothing saying how it relates to the sibling remedio/alarma tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_syncA
Git-friendly export/import of the knowledge graph between machines that share no database. export/import/diff/status work on a local directory, ./.memory-industry/ by default and otherwise as the dir parameter describes; pull/notify/fetch/conflicts/resolve talk to a peer over HTTP with CUBA_PEER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | resolve only: the conflict id from action=conflicts | |
| dir | No | Directory override. Without it: $CUBA_SYNC_DIR if set, else ./.memory-industry/ — or ./.cuba-memorys/ on a repo that already has that older directory | |
| url | No | fetch only: the peer's base address, e.g. https://brain.example.net | |
| keep | No | resolve only: which text stays current (default 'both', which loses nothing) | |
| peer | No | fetch only: which peer to pull from (default 'default') | |
| limit | No | pull only: max files per page | |
| scope | No | Export scope: active project only (default) or all data | |
| action | Yes | export/import/diff/status: local bundle round-trip. pull: return the bundle in the response instead of writing it, for a peer to fetch. notify: tell a peer what changed. fetch: pull a peer's bundle over HTTP and import it. conflicts/resolve: list and settle rows two machines disagree about. | |
| offset | No | pull only: index of the first bundle file to return | |
| confirm | No | Required when the import's tombstones would delete more than 10% of this machine's observations and at least 25 rows | |
| node_id | No | notify only: self-asserted id of the sending node | |
| summary | No | notify only: what changed, in at most 2000 characters | |
| conflict | No | How to resolve a row that exists on both sides (default merge; merge and skip keep local content, overwrite takes the incoming version) | |
| node_name | No | notify only: readable name of the sending node | |
| manifest_hash | No | notify only: the bundle hash this notice refers to | |
| with_embeddings | No | Include embeddings (default false on export, true on pull) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it usefully discloses the auth requirement (CUBA_PEER_TOKEN) and the default working directory, and the schema itself documents the destructive-import guard (tombstone threshold + confirm). However, the description never warns that import can delete observations, which is the highest-risk behavior for this 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, no filler, with the core purpose front-loaded and the action taxonomy immediately following. Efficient for a nine-action tool.
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 16-parameter, nine-action tool with no output schema, the description covers the purpose, the local/remote split, and the auth requirement — enough to select and call it. The main omission is any statement about import's destructive potential, which the schema only implies.
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 every parameter, enum, and default is already documented in the schema. The description's action-grouping sentence adds framing but no parameter detail beyond what the schema provides; 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?
States a specific resource ('export/import of the knowledge graph') and its distinguishing context ('between machines that share no database'). It does not, however, differentiate itself from the sibling memory_sync, so an agent comparing the two gets no explicit contrast.
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?
Groups the nine actions into two behavioral families — local-directory actions (export/import/diff/status) versus peer-over-HTTP actions (pull/notify/fetch/conflicts/resolve) — which tells an agent which mode applies. It gives no when-not guidance or comparison to sibling sync tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_toolsA
Find MemoryIndustry tools and load their schemas ON DEMAND. The server exposes 31 tools; under CUBA_TOOL_PROFILE=lean only the everyday core is pre-loaded and the rest live here. Search by capability ('audit', 'decay', 'contradiction', 'session'), then call what you find with cuba_call. detail='names' is cheapest, 'full' returns the exact argument schema.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Filter by capability — matches tool names and descriptions. Omit to list everything. | |
| detail | No | names: just the names. summary (default): name + description. full: the complete JSON Schema, which is what you need to call the tool correctly. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it discloses the server's 31-tool count, the lean profile behavior, that query matches names and descriptions, and that detail='names' is cheapest while 'full' returns exact argument schemas. It lacks auth/rate-limit notes, but for a read-only discovery tool this is strong context.
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 compact and front-loaded: purpose first, then environmental context, then usage pattern, then detail-level guidance. Every sentence adds useful information without repetition.
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 2-parameter discovery tool with no output schema, the description covers the essential context: why the tool exists, how to search, how detail levels affect results, and what to do with found tools. It could mention output limits or empty-result behavior, but the definition is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema by giving concrete capability search examples ('audit', 'decay', 'contradiction', 'session') and characterizing detail='names' as cheapest and 'full' as the exact call 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 states a specific verb (find/load) and resource (MemoryIndustry tools and their schemas), and explains that the tool exposes non-preloaded tools on demand. An agent can immediately tell this is a discovery/schema-loading tool rather than a direct memory operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains when the tool is needed: under CUBA_TOOL_PROFILE=lean, only the core is preloaded and the rest must be found here. It also routes the agent to cuba_call for invocation after discovery, though it does not explicitly discuss when to bypass this tool or how it differs from the sibling memory_tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_vigiaC
Knowledge graph analytics: summary, health, drift, communities, bridges, structural.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | summary: counts + token estimate. health: staleness, entropy, DB size. drift: chi-squared on errors. communities: Leiden clustering. bridges: betweenness centrality. structural: harmonic + closeness centrality + k-core ranking (backbone identification). |
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 of behavioral disclosure. It never says whether the metrics are read-only, computationally expensive (Leiden clustering and betweenness centrality are heavy), whether they mutate graph state, or what latency to expect.
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?
It is a single short line, which is efficient, but roughly half its content is a bare enumeration that duplicates the enum values already present in the schema. It is under-specified rather than truly concise.
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 sole input parameter is fully documented by the schema, so the input side is covered. With no output schema and no annotations, the description leaves the return shape and operational cost of these analytics unstated, which is a real gap for a multi-mode analytics 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% and the enum's per-value descriptions are far richer than the description text (e.g. 'Leiden clustering', 'harmonic + closeness centrality + k-core ranking'). The description merely restates the enum keys, adding no meaning beyond the schema, so the baseline 3 applies.
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 names the domain (knowledge graph analytics) and lists the six metric modes, so an agent can tell roughly what kind of tool this is. However, it is a noun fragment with no verb and no indication of what the tool actually returns or does with the graph, and it does not differentiate this from sibling analytics/supervision tools like cuba_centinela or cuba_calibrar.
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?
There is no statement of when to reach for this tool versus alternatives, no prerequisites, and no mention of the large family of cuba_* siblings that perform adjacent analyses. The agent must infer usage entirely from the metric names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_whoamiA
Identify this MCP client against the MemoryIndustry daemon: client id, project, session, node, LLM, graph-db, resource plan. Alias: memory_whoami.
| 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 must carry behavioral disclosure. It lists useful output fields and the identity-check purpose, but does not explicitly confirm that the operation is read-only, side-effect-free, or what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that identifies the tool's function and key return fields. The alias note at the end is short and earns its place by cross-referencing the sibling name.
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 no-argument, read-only diagnostic tool with no output schema, the description is nearly complete: it states the purpose, lists the returned identity fields, and provides the alias. Only explicit usage guidance is missing.
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 tool has zero parameters, and the description correctly does not discuss parameter semantics. Per the rubric, a no-parameter tool has a baseline of 4 for this dimension.
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 a specific verb and resource: 'Identify this MCP client against the MemoryIndustry daemon.' It lists the identity fields returned, making the tool's scope clear. It does not differentiate from most siblings beyond noting the memory_whoami alias, so it stops short of a 5.
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?
There is no explicit when-to-use or when-not-to-use guidance. The alias note helps an agent recognize the equivalent memory_whoami tool, but no conditions or alternatives are described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cuba_zafraC
Memory maintenance, scoped to the active project: decay, prune, merge, summarize, pagerank, find_duplicates, export, reembed, decay_episodes.
| Name | Required | Description | Default |
|---|---|---|---|
| c | No | Power-law c parameter for decay_episodes (default 0.1) | |
| beta | No | Power-law β exponent for decay_episodes (default 0.5) | |
| action | Yes | decay: stratified exponential decay by type. prune: deletes low-importance observations, dry-run unless confirm=true. merge: deduplicates similar entities. summarize: replaces an entity's observations with compressed_summary. stats: counts. pagerank: personalized importance ranking. find_duplicates: lists near-duplicate pairs. export: writes a JSON dump. reembed: re-encodes with the current model. decay_episodes: power-law decay on brain_episodes. | |
| confirm | No | prune only: actually delete. Without it, prune returns a dry-run plan (would_prune, by_project) and deletes nothing — read the plan first, the default threshold reaches a large share of a mature corpus. | |
| threshold | No | Importance threshold for prune (default 0.1) | |
| batch_size | No | Max observations to re-encode in reembed (default 500) | |
| entity_name | No | Entity to summarize (for summarize action) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| halflife_days | No | Global halflife override for decay (overrides per-type stratification) | |
| compressed_summary | No | Compressed text replacing observations (for summarize) | |
| similarity_threshold | No | Similarity threshold for merge (default 0.8) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet 'maintenance' hides that several actions (prune, decay, merge, reembed) mutate or delete data. It says nothing about reversibility, confirmation requirements, or the dry-run default for prune, all of which matter for an unannotated multi-action 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?
A single front-loaded sentence establishes purpose and scope before the action list, with no filler. The action enumeration partially duplicates the schema enum, costing a point.
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 ten-action dispatcher with destructive operations, no annotations, and no output schema, the description is too thin: it omits safety posture, confirmation behavior, and any differentiation from the parallel memory_zafra sibling. An agent would need to open the schema to understand the tool at all.
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% and each parameter is thoroughly documented in the schema (including confirm's dry-run semantics and allow_secret's credential refusal), so the description adds nothing beyond listing action names already present in the enum. Baseline 3 applies.
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 names a resource (memory) and a scope (the active project) and enumerates the nine operations the tool performs, so an agent can tell it is a maintenance dispatcher rather than a read/write CRUD tool. It falls short of a 5 because the opaque name 'cuba_zafra' is never explained and it does not distinguish itself from the near-identical sibling memory_zafra.
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?
'Scoped to the active project' is the only contextual hint; there is no statement of when to reach for this tool versus its siblings (cuba_zafra vs memory_zafra) or which of the ten actions fits a given situation. Action-level guidance lives only in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_alarmaA
[alias of cuba_alarma] Report errors immediately. Auto-detects patterns (≥3 similar = warning). Hebbian: similar errors get boosted for easier retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Context: {file, function, stack_trace, line} | |
| project | No | Project name (default: 'default') | |
| error_type | Yes | Error category: TypeError, ConnectionError, etc. | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| error_message | Yes | Full error message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose non-obvious traits: auto-pattern detection with a ≥3-similar warning threshold, and Hebbian boosting of similar errors for retrieval. It still omits whether the record persists, side effects, or the return shape, but it adds real behavioral context beyond the raw schema.
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 tight sentences, front-loaded with the alias and purpose, then the two behavioral notes. No filler; every clause conveys information an agent can act on.
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 5-parameter, nested-object tool with no annotations and no output schema, the description covers the distinctive behaviors but leaves open what the call returns and whether/how the error is stored. Adequate but with clear gaps given the tool's 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 description coverage is 100%, including detailed guidance on allow_secret and the context object shape, so the schema does the heavy lifting. The description adds nothing about parameter semantics, making the baseline 3 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?
States a specific verb and resource ('Report errors immediately') and flags that this is an alias of cuba_alarma, so an agent knows it duplicates that sibling. It does not differentiate itself from the broader error/history siblings like memory_expediente or memory_remedio, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The imperative 'Report errors immediately' implies the usage context (capture an error as it occurs), but there is no explicit when-to-use versus when-not, and no named alternative for related needs. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_almaA
[alias of cuba_alma] CRUD knowledge graph entities (concepts, projects, technologies, patterns, people). Auto-boosts neighbors on access. For transient info use cuba_cronica instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entity name (unique identifier) | |
| action | Yes | Operation to perform | |
| new_name | No | New name for update action | |
| entity_type | No | Type: concept, project, technology, person, pattern, config |
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, and it does disclose a non-obvious side effect: neighbors are auto-boosted on access. Beyond that it says nothing about mutation semantics (delete reversibility, permission requirements, whether update overwrites unspecified fields), leaving meaningful behavioral gaps for a write-capable 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?
Three compact sentences, front-loaded with the alias/identity and the core CRUD purpose, then the side effect, then the alternative-tool escape hatch. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter CRUD tool with no output schema and full schema coverage, the description covers what it operates on, a key side effect, and one routing rule. It is nearly complete but omits return-shape expectations and per-action behavioral differences that an agent calling delete or update would benefit from.
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% and every parameter is documented inline (name, action enum, new_name, entity_type), so the description need not carry parameter detail. It adds only the loose mapping of entity types to the entities it manages, which is largely redundant with the entity_type schema 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?
States a specific verb set (CRUD) and resource (knowledge graph entities) and enumerates the entity types it operates on. It also declares itself an alias of cuba_alma and routes transient-data callers to cuba_cronica, so an agent can place it relative to siblings without opening the schema.
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 names the alternative tool (cuba_cronica) and the condition selecting it (transient info). That covers one important when-not case, but there is no guidance on when to prefer create vs update vs get, or when to use the alias rather than cuba_alma.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_archivoA
[alias of cuba_archivo] Tamper-evident audit log: append-only, SHA-256 hash chain, UPDATE/DELETE blocked at the PostgreSQL trigger level.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit for verify/tail (default 10000 / 20) | |
| action | Yes | append: add an event. verify: walk the hash chain and detect tampering. tail: read recent events. | |
| payload | No | Arbitrary JSON payload (for append) | |
| event_action | No | Event type (for append) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers real behavioral substance: append-only semantics, SHA-256 hash chain tamper detection, and UPDATE/DELETE blocked at the PostgreSQL trigger level. It does not cover permissions, whether verify returns a boolean or a chain report, or cost of walking a large chain.
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?
A single dense sentence with the alias qualifier first and the defining behavioral traits front-loaded. Nothing is wasted or padded.
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 4-parameter, no-annotation, no-output-schema tool, the description explains the storage model well but is silent on what verify/tail actually return and on limits of the chain walk. An agent knows what the store is but not fully what a call yields.
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% with the action enum, limit, event_action and payload all documented inline, so the schema already does the heavy lifting. The description adds no parameter-level detail beyond what is in the schema, which is the baseline 3 case.
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 names a specific resource — an append-only, tamper-evident audit log — and the alias note ('alias of cuba_archivo') tells an agent this duplicates a sibling, aiding routing. The verbs (append/verify/tail) live only in the schema, so the description itself does not state the operations, keeping it short of a 5.
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?
There is no guidance on when to choose this tool, when not to, or which sibling action replaces it other than the bare alias note. The action enum in the schema implies three modes but the description never frames them as usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_artifactB
[alias of cuba_artefacto] Shared versioned artifacts between agents on the same daemon (and peers). put requires base_version (optimistic concurrency); lock is a short lease. Alias: memory_artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | patch: substring to replace once | |
| path | No | Logical path, e.g. notes/plan.md | |
| limit | No | list limit | |
| action | Yes | Artifact operation | |
| prefix | No | list: path prefix filter | |
| content | No | Full content for put | |
| replace | No | patch: replacement | |
| ttl_seconds | No | lock lease length (default 60) | |
| base_version | No | Required for concurrent-safe put; omit or 0 to create |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the optimistic-concurrency contract for put and the leased nature of lock, but omits what happens on a version conflict, whether lock blocks other writers, and any auth or persistence scope beyond 'same daemon'. Partial but genuinely additive.
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 compact sentences, front-loaded with the resource definition, then the two most consequential behavioral clauses, then the alias. Dense and free of filler, though the alias parenthetical is slightly awkwardly placed.
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 nine-parameter, seven-action tool with no annotations and no output schema, the description covers the versioning and lease mechanics but leaves action semantics (especially watch_hint and unlock) unexplained. Adequate but with clear gaps 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 description coverage is 100%, so the schema already documents all nine parameters (including base_version's 'omit or 0 to create'). The description's summary that put 'requires base_version' slightly overstates the schema, which allows omission for creation. Baseline 3 applies since the schema does the heavy lifting.
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?
States the core resource and model clearly: shared, versioned artifacts between agents on the same daemon and peers. It does not enumerate the seven actions, nor does it distinguish itself from the many similarly named sibling alias tools (cuba_artefacto, memory_archivo, cuba_pizarra), so an agent still needs the schema to know what operations exist.
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?
Gives two action-specific conditions ('put requires base_version', 'lock is a short lease') but no when-to-use vs. alternative guidance, no prerequisites, and no explanation of the remaining actions (get, list, patch, unlock, watch_hint). Usage is implied by the action enum rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_calibrarB
[alias of cuba_calibrar] Bayesian confidence calibration: track verify predictions, mark outcomes, compute P(correct|level). Closes the feedback loop between faro verify and eco correct.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results for history (default 20) | |
| action | Yes | stats/history: past predictions. resolve: mark a verify_id correct/incorrect. trust: per-source Beta(α, β) credibility, updated by resolve outcomes. metrics: Brier score + Expected Calibration Error + reliability diagram. | |
| outcome | No | Whether the verify prediction was right (for resolve) | |
| verify_id | No | Verify log UUID (for resolve) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It hints that 'resolve' marks outcomes (a mutation of stored prediction state) and that the tool persists calibration data across calls, but it says nothing about permissions, reversibility of a resolve, or persistence scope. Useful but incomplete for a state-mutating feedback 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 tight sentences with the purpose front-loaded after the alias tag, and no redundant restatement of the schema. Slightly diluted by the bracketed alias metadata, but otherwise 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?
For a five-action tool with no output schema and no annotations, the description conveys the overall purpose but not the return shape of stats/trust/metrics or the effect of resolve. The schema covers action semantics, so nothing critical is missing, but the behavioral gaps remain.
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% and every parameter (action enum, outcome, verify_id, limit) is already documented in the schema, so the description adds no syntax or format detail beyond it. Baseline 3 is appropriate when the schema does the heavy lifting.
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 names specific operations (track verify predictions, mark outcomes, compute P(correct|level)) and identifies the two siblings it bridges, faro verify and eco correct, so an agent can place it in the workflow. It is clear but the '[alias of cuba_calibrar]' prefix adds disambiguation noise rather than purpose detail, keeping it just short of 5.
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?
'Closes the feedback loop between faro verify and eco correct' implies the context in which this tool belongs, but there is no explicit when-to-use or when-not, and no statement of which action to pick. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_callA
[alias of cuba_call] Invoke any MemoryIndustry tool by name — including the ones not pre-loaded in this session. Discover them first with cuba_tools (use detail='full' to see the exact arguments). Goes through the same dispatcher as a direct call, so behaviour is identical.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | The tool's own arguments, exactly as its schema declares them | |
| tool | Yes | Tool name, e.g. cuba_zafra |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that the call 'goes through the same dispatcher as a direct call, so behaviour is identical', which reassures about equivalence. However, it says nothing about error behavior for unknown tool names, argument validation failures, or any side effects, leaving notable gaps for a mutation-capable meta-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?
Three tight sentences with no filler; the alias note and the core dispatch capability are front-loaded, followed by the discovery instruction. Efficient, though the bracketed alias prefix is slightly awkward as an opener.
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?
There is no output schema, so return values need not be explained, and the description notes behavior is identical to a direct call. For a 2-parameter dispatcher with a nested args object, this is largely complete; only failure modes for bad tool names are unaddressed.
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 both parameters are already documented in the schema. The description adds only the hint that detail='full' reveals 'the exact arguments', which is a mild supplement rather than new syntax or format guidance. Baseline 3 is appropriate when the schema does the heavy lifting.
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?
States a specific verb and resource: 'Invoke any MemoryIndustry tool by name — including the ones not pre-loaded in this session.' This clearly identifies it as a generic dynamic dispatcher, and it names its relationship to cuba_call (alias) and cuba_tools (discovery path). It does not fully distinguish itself from the many sibling memory_* tools, but the dispatcher role is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow: discover tools first with cuba_tools using detail='full' to see exact arguments. This tells the agent when this tool is appropriate (calling tools not pre-loaded). It stops short of stating when NOT to use it, e.g., preferring a direct pre-loaded tool when available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_centinelaA
[alias of cuba_centinela] Prospective memory: triggers that fire on entity access, session start, or error match. 'Remember to remind me about X when Y happens.'
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | create: define a trigger. list: show triggers. delete: remove one (trigger_id). check: evaluate now. | |
| message | No | Reminder message to surface when triggered | |
| max_fires | No | Max times to fire (default 1, -1 for unlimited) | |
| expires_at | No | ISO8601 expiration datetime | |
| trigger_id | No | Trigger UUID (for delete) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| condition_type | No | When to fire. on_session_start with the other session's name as entity_pattern is also the cross-session note channel: fires once (max_fires) the next time that session starts, carrying who left it. | |
| entity_pattern | No | Entity name or pattern to match |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the firing conditions (entity access, session start, error match), which is the core behavioral trait, but says nothing about persistence across sessions, what happens on expiry, authorization needs, or limits beyond the schema's own field notes.
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 tight sentences with zero filler, routing metadata (alias) front-loaded and the purpose plus example immediately after. Every clause 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 an 8-parameter tool with no output schema and no annotations, the description covers the purpose and trigger semantics adequately, and the schema documents parameters and actions thoroughly. The gap is that the four actions (create/list/delete/check) and the tool's persistence model are left entirely to the 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?
Schema description coverage is 100% and the parameter descriptions are unusually rich (enum meanings, allow_secret credential warning, cross-session note channel), so the baseline is 3. The description adds only conceptual framing ('when Y happens') and no details 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?
States a specific resource and behavior: 'Prospective memory: triggers that fire on entity access, session start, or error match.' The example ('Remember to remind me about X when Y happens') nails the mental model. It only partly differentiates from siblings, noting it is an alias of cuba_centinela but not what the alias relationship implies for selection.
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 quoted use case implies when to reach for it, but there is no explicit when/when-not framing and no routing to alternatives such as memory_remedio, memory_alarma, or memory_pre_compact. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_contextA
[alias of cuba_contexto] Visible context window for the agent: working memory + agent notes (exact Mcp-Client-Id) + artifact index + recall of this session's recent writes (then WM mentions, then importance). Call at the start of a turn; call cuba_cronica add BEFORE editing. Alias: memory_context.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_chars | No | Max serialized size (default 12000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose useful behavior: the composition and ranking order of the window ('recent writes, then WM mentions, then importance'). However, it says nothing about permissions, side effects, idempotency, or cost of calling it, so the behavioral picture is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The alias is front-loaded, then content, then usage, in a tight block with no filler. The parenthetical ranking clauses are dense but informative. Slightly crowded, but every clause carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-style context-retrieval tool with no output schema and one well-documented parameter, the description explains what the caller gets back and when to invoke it. It is complete enough to call correctly, missing only edge behavior like truncation or empty-window 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 description coverage is 100%, so budget_chars is already documented in the schema. The description adds no additional meaning about the budget parameter, so the baseline 3 applies.
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 names the resource (the visible context window) and enumerates its exact contents: working memory, agent notes, artifact index, and recall of recent writes. It also flags itself as an alias of cuba_contexto, which helps an agent reconcile the duplicate. It is specific, though it never uses a clear retrieval verb like 'returns' or 'loads'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Call at the start of a turn') and a related-tool instruction ('call cuba_cronica add BEFORE editing'). That is real when-to-use guidance with a named alternative, but it stops short of stating when NOT to use it or how it differs from the many other memory_* retrieval siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_contradiccionA
[alias of cuba_contradiccion] Detect semantic contradictions between observations of the same entity. Uses embedding cosine distance + negation heuristics. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Contradiction detection action | |
| entity_name | No | Entity to scan (omit to scan top entities by observation count) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose two useful traits: the method (embedding cosine distance + negation heuristics) and that the tool is read-only. However, it says nothing about runtime cost, scope limits, or the shape of results.
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 tight fragments, zero padding, and the core purpose is front-loaded before the implementation note and the read-only flag. Every clause carries 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?
No output schema exists, so the description would ideally sketch what a scan returns (contradiction pairs, confidence, etc.), and it does not. For a simple two-parameter read-only scan it is minimally adequate but leaves the result shape opaque.
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%, and the schema already explains both `action` and the omit-to-scan-top-entities behavior of `entity_name`. The description adds no syntactic or semantic detail beyond that, so the baseline 3 applies.
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?
States a specific verb and resource: 'Detect semantic contradictions between observations of the same entity.' The bracketed alias note (['alias of cuba_contradiccion']) also distinguishes it from the sibling cuba_contradiccion, so the agent knows the two are functionally the same.
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?
Usage is only implied: the agent can infer you call it when you want contradictions found, and the alias note hints it is interchangeable with cuba_contradiccion. There is no explicit when-to-use, when-not-to-use, or prerequisite statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_cronicaB
[alias of cuba_cronica] Attach facts/lessons/decisions to entities. Also manages episodic memories (specific events with actors/artifacts) via episode_add/episode_list. Timeline view shows chronological history. Auto-creates entity if not found. Dedup gate blocks near-duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to perform. episode_add stores a temporal event; episode_list retrieves events. timeline shows chronological observations+episodes. | |
| actors | No | People/agents involved in episode (for episode_add) | |
| source | No | Who/what created this observation | |
| content | No | Observation or episode text | |
| artifacts | No | Files/resources affected in episode (for episode_add) | |
| entity_name | No | Entity to attach observation/episode to | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| observations | No | Array of {entity_name, content, observation_type?, source?} objects (for batch_add, max 100) | |
| observation_id | No | Observation UUID (for delete action) | |
| observation_type | No | Type of observation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden but does add real behavioral context: auto-creation of missing entities, a dedup gate blocking near-duplicates, and the differentiation of episode vs timeline storage. It says nothing about destructive delete semantics, batch limits, or the credential-refusal/allow_secret exposure behavior that matter for a mutating multi-action 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?
Four tight sentences, front-loaded with the alias and the core operation, then the episodic/timeline additions and two behavioral caveats. No filler, though the alias-first framing arguably wastes the opening clause.
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 7-action tool with 10 parameters, no annotations, and no output schema, the description sketches the shape but leaves delete, list, and batch_add behavior unspecified and gives no return-value or pagination context. Adequate as a minimum-viable overview, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 10 parameters including enum values for action, source, and observation_type. The description adds only loose mapping of episode_add/episode_list/timeline to the action enum, which the schema itself restates — 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?
Names a concrete verb+resource ('Attach facts/lessons/decisions to entities') and enumerates the additional functions (episodic memories, timeline view). The alias note points to cuba_cronica, which is a sibling, but nothing states how this differs functionally from memory_remedio, memory_expediente, or cuba_cronica beyond the alias equivalence.
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?
Usage is implied rather than directed: the description explains that episode_add/episode_list handle events and timeline gives chronological history, so an agent can infer when to pick each action. It never says when to prefer this tool over the many memory_*/cuba_* siblings, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_decretoC
[alias of cuba_decreto] Record and query architecture/design decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search text (for query action) | |
| title | No | Decision title (for record) | |
| action | Yes | Decision action | |
| chosen | No | Option chosen | |
| context | No | Why this decision was needed | |
| rationale | No | Why this option was chosen | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| alternatives | No | Options considered |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and it discloses essentially nothing: not that records persist and are searchable/exportable, not that the secret heuristic can refuse input, not that this is a lightweight alias. The allow_secret schema text carries the one real behavioral signal, not the description.
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?
One compact bracketed alias note plus a single verb-resource sentence; front-loaded and free of padding.
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 an 8-parameter tool with no annotations and no output schema, the description is too thin: it never enumerates the three actions, never explains persistence or retrieval scope, and leaves the agent to reconstruct intent from the schema alone.
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 every parameter including allow_secret and its implications is already documented in the schema. The description adds no parameter-level meaning, which is the expected baseline when the schema does the heavy lifting.
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?
Names a specific verb pair (record/query) and resource (architecture/design decisions), and discloses it is an alias of cuba_decreto, which helps an agent reason about duplicate siblings. However it omits the third supported action 'list', so the purpose statement is not fully accurate.
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?
There is no guidance on when to record versus query, when to use list, or how this differs from related siblings like memory_proyecto or memory_contradiccion. The agent must infer usage entirely from the action enum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_ecoA
[alias of cuba_eco] RLHF feedback: positive boosts importance (Oja's rule), negative decreases, correct updates content. Also the quarantine gate: 'pending' lists memories withheld from search because they came from untrusted text, 'promote' makes one retrievable, 'quarantine' withdraws one. The gate covers observations, episodes and errors — pick which with 'kind'.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Target UUID for promote/quarantine when kind is episode or error. For kind=observation use observation_id. | |
| kind | No | Which table promote/quarantine acts on. Default 'observation'. An import quarantines whatever carried a credential, and cuba_sync writes episodes and errors too: without the matching kind those rows would stay stored and permanently unreachable. Ignored by positive/negative/correct, and by pending, which always returns all three. | |
| limit | No | Max rows for the 'pending' listing (default 20, max 200) | |
| action | Yes | Feedback type, or a quarantine transition: promote/quarantine flip one memory's retrievability; pending lists everything currently withheld, in three lists (quarantined, quarantined_episodes, quarantined_errors), each row tagged with its kind. | |
| correction | No | New content (for correct action) | |
| entity_name | No | Target entity | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| observation_id | No | Target observation UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It usefully explains the Oja's-rule importance effect and the retrievability semantics of the gate, plus that 'pending' withholds memories from search because they came from untrusted text. It omits permissions, persistence/reversibility guarantees, and response shape, leaving meaningful gaps 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 compact sentences that front-load the alias and primary purpose before the gate explanation. Dense but largely earning its place; the bracketed alias and repeated comma-clauses add minor friction.
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 8 parameters, no output schema, and no annotations, the description covers the core action and gate behavior adequately and explains the important allow_secret-style nuance indirectly. Some parameter-level detail (entity_name, output format) is left to the schema, but nothing critical to calling it correctly is missing.
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 the schema already documents every parameter richly (including enum meanings for kind/action). The description adds conceptual framing for 'kind' spanning observations, episodes, and errors but no syntax or format detail beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
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 concrete verbs and resources: RLHF-style feedback (positive/negative/correct) and a quarantine gate (promote/quarantine/pending). The bracketed '[alias of cuba_eco]' distinguishes it from that sibling explicitly. It stops just short of a crisp one-line statement, folding two capabilities into a dense paragraph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains what each action does conditionally (positive boosts, negative decreases, correct updates, promote makes retrievable, quarantine withdraws), which implies when to pick each. However, it gives no explicit when-not guidance and never routes to an alternative tool among the many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_expedienteB
[alias of cuba_expediente] Search past errors/solutions. Use 'proposed_action' as anti-repetition guard: warns if similar approach previously failed.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search text for errors | |
| project | No | Filter by project | |
| resolved_only | No | Only return errors with solutions | |
| proposed_action | No | Anti-repetition: describe what you plan to do. Returns warning if similar approach failed before. |
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 usefully discloses the anti-repetition warning behavior triggered by proposed_action, but says nothing about return format, permissions, or result semantics.
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 compact sentences with the core purpose front-loaded and no wasted words. The alias note is placed first, which is mildly noisy but does not bury the main function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must stand alone for a search tool. It is adequate for selection but thin on what a result set looks like or how the warning surfaces.
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 the schema already documents all four parameters including the anti-repetition meaning of proposed_action. The description largely restates what the schema provides, so baseline 3 applies.
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?
States a specific verb ('Search') and resource ('past errors/solutions'), so an agent knows it retrieves prior failure/solution records. It does not distinguish itself from the many sibling tools (memory_remedio, memory_cronica, etc.) beyond noting it is an alias of cuba_expediente.
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?
Usage is implied ('search past errors/solutions') and the proposed_action guard condition is stated, but there is no explicit when-to-use or when-not-to-use guidance versus the numerous sibling memory_/cuba_ tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_faroA
[alias of cuba_faro] Search memory BEFORE answering to ground responses. Returns grounding scores. Mode 'verify' checks claims against evidence (confidence: verified/partial/weak/unknown). Session-aware: boosts results matching active session goals. Supports temporal filtering. Optional MMR diversification, OOD abstention and an exact tiktoken-based token budget.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode (default: hybrid). 'verify' checks if claim is grounded. | |
| tags | No | Filter observations by tag keyword (exact match against auto-extracted tags) | |
| after | No | ISO8601 datetime — return results created after this time | |
| limit | No | Max results (default 10, max 50) | |
| query | Yes | Search text | |
| scope | No | Where to search (default: all) | |
| before | No | ISO8601 datetime — return results created before this time | |
| format | No | Response format. compact (DEFAULT): abbreviated keys — e=entity, c=content, t=type, i=importance, s=score. 71% fewer tokens (798 vs 2787 at limit=10, measured). verbose: full key names, only when you need every field. | |
| rerank | No | Cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3. Auto-enabled when CUBA_MODE=completo, or when this build has a real GPU provider active (CUDA/DirectML compiled in AND a working device). Off by default everywhere else, even with the model on disk: on CPU it costs 60-110s and blows the search budget. Explicit true/false always wins; run `memory-industry doctor` to see which reason applies here. | |
| diversify | No | Post-RRF MMR pass that penalizes near-duplicates among top-K. Default false. | |
| max_tokens | No | Token budget for results (default 5000). Counted exactly via tiktoken cl100k_base. | |
| mmr_lambda | No | MMR balance — 1.0 pure relevance, 0.0 pure diversity. Default 0.7. | |
| abstain_ood | No | Abstain (return empty results with abstain_reason) when the query is out-of-distribution via Mahalanobis distance. Default false. | |
| associative | No | Multi-hop expansion: seeds spreading activation from query-matched entities and pulls in observations on graph-connected entities that no lexical/vector signal surfaced. Additive — never lowers a base hit. Default false. | |
| enable_bm25 | No | Enable BM25 (ts_rank_cd) as third RRF signal alongside text + vector. Catches queries with rare terms that dense embeddings miss. Default true. | |
| ood_threshold | No | Mahalanobis distance threshold for abstention. Defaults to sqrt(chi2_0.99(d)), which scales with the embedding dimension (~21.25 for d=384). Override only if you calibrated on your own corpus. | |
| include_unscoped | No | When a project is active, rows with project_id NULL are hidden. Set true to include that leftover corpus. Default false. |
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 genuinely behavioral traits: session-aware goal boosting, grounding-score returns, confidence tiers (verified/partial/weak/unknown), and optional MMR/OOD/token-budget machinery. However it never states the operation is read-only/non-destructive, nor any auth, rate-limit or side-effect profile, so it is only 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?
Front-loads the actionable directive and keeps to five tight sentences. The trailing feature list ('Optional MMR diversification, OOD abstention and an exact tiktoken-based token budget') slightly duplicates schema content but is short enough to be tolerable.
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 17-parameter tool with no output schema, the description covers the intent and some return semantics (grounding scores, confidence categories) but does not describe result shape beyond that, and gives no guidance on the many optional flags. The alias note is a useful completeness touch, but gaps remain.
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 all 17 parameters are self-documenting in the schema. The description only lightly echoes a few of them (verify mode, temporal filtering, MMR, OOD, token budget) without adding syntax or values beyond the schema, so baseline 3 applies.
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?
States a specific verb+resource (search memory) and its grounding intent ('BEFORE answering to ground responses'), plus the [alias of cuba_faro] tag which lets an agent deduplicate against a known sibling. It does not explicitly differentiate itself from the many other memory_* tools (memory_context, memory_expediente, memory_hipotesis), so it stops short of a 5.
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?
Gives a clear trigger ('Search memory BEFORE answering') and a mode-specific use case ('verify' checks claims against evidence). It does not name when NOT to use it or which sibling to prefer for non-grounding retrieval, so no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_forgetA
[alias of cuba_forget] GDPR Right to Erasure: cascading hard-delete of an entity and ALL references across observations, relations, errors, and sessions. IRREVERSIBLE. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to proceed (safety gate) | |
| entity_name | Yes | Entity name to erase completely |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses cascading deletion across observations, relations, errors, and sessions, marks the action IRREVERSIBLE, and requires confirm=true. This is the critical information an agent needs before invoking a destructive 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 two dense sentences with no waste. The scope, irreversibility, and safety gate are front-loaded and easy to scan.
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 destructive tool with no annotations and no output schema, the description covers the essential scope, effect, and confirmation requirement. It does not describe return values or error behavior, but those omissions are minor for a hard-delete operation whose result is implicit.
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%, and the schema already states that confirm must be true and entity_name is the entity to erase. The description reinforces confirm=true but adds no additional parameter meaning 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 states a specific verb and resource: cascading hard-delete of an entity and all references. It also distinguishes this as the alias of cuba_forget, making the relationship to that sibling clear. An agent can tell exactly what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It frames the tool for GDPR Right to Erasure and notes the confirm=true gate, giving clear context for when to use it. However, it does not explicitly state when not to use it or name alternative tools beyond the alias relationship.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_hipotesisB
[alias of cuba_hipotesis] Abductive inference: find plausible causes of an observed effect. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hypotheses to return (default 10, max 50) | |
| action | Yes | explain: traverse causal relations backwards from `effect`, ranked by path_strength × importance. | |
| effect | Yes | Entity name representing the observed effect | |
| max_depth | No | Max causal chain hops (default 3, max 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses 'Read-only', which is the key safety trait, but says nothing about cost/latency of the backward traversal, whether results are exhaustive, or what the response contains.
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 short sentences with the alias relationship and core purpose front-loaded, followed by the safety trait. Nothing is wasted, though it is minimal to the point of under-specification.
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 no output schema and no annotations, the description should do more to characterize the return (ranked hypotheses, format). The schema covers inputs well, so the gap is mostly in behavioral and output context, keeping this at a minimum-viable 3.
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 action, effect, limit, and max_depth are already fully documented in the schema. The description adds no parameter meaning beyond what the structured fields provide, making the baseline 3 correct.
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?
States a specific verb+resource: abductive inference that finds plausible causes of an observed effect. The '[alias of cuba_hipotesis]' note clarifies its relationship to a sibling, but it doesn't distinguish its purpose from other causal/reasoning siblings like memory_contradiccion or memory_reflexion.
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 when-to-use guidance, no exclusions, and no routing between this alias and cuba_hipotesis or the other reasoning tools. The agent must infer usage from the one-line purpose statement alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_ingestaA
[alias of cuba_ingesta] Bulk knowledge ingestion. 'ingest': array of {entity_name, content, observation_type} items. 'parse': split long text by paragraphs + heuristic classify. 'auto_extract' (v0.11): the calling client's LLM extracts salient durable facts from a turn/conversation via MCP Sampling ($0, no API key) and ingests them — the automatic-extraction that mem0/Zep have. All routes share the dedup/PE-gating/embedding pipeline; none delete.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Raw text: paragraphs to split (parse) or a turn/conversation to extract facts from (auto_extract) | |
| items | No | Array of {entity_name, content, observation_type?} objects (for ingest action, max 200) | |
| action | Yes | Ingestion mode. Default 'ingest' is the fast raw path (no LLM). 'parse' splits long text. 'auto_extract' is opt-in LLM extraction via MCP sampling — do not use it as the default write. | ingest |
| untrusted | No | Set when the text came from somewhere you do not control (a fetched page, a pasted document, a third party). Everything extracted lands quarantined — stored and inspectable via cuba_eco action=pending, but withheld from cuba_faro until promoted. Default false. | |
| entity_hint | No | Optional main-subject hint for auto_extract (biases entity_name) | |
| entity_name | No | Entity to attach parsed observations to (for parse action) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| supersede_conflicts | No | v0.11 (auto_extract): when a new fact replaces/contradicts an existing related one, ask the judge and mark the old observation superseded (knowledge-update; never deletes). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: 'none delete' (non-destructive guarantee), the shared dedup/PE-gating/embedding pipeline, quarantine behavior for untrusted input (withheld from cuba_faro until promoted), and the irreversible consequence of allow_secret ('stored verbatim, in clear, and reachable by search, export and every client'). It stops short of describing return values or rate/permission 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?
Front-loaded with the core purpose and alias, then organized by mode/behavior. Dense but every clause carries information; a few parenthetical asides (v0.11, mem0/Zep comparison) are decorative but brief.
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 3-mode, 8-param mutation tool with no output schema and no annotations, the description covers routing, safety (untrusted quarantine, secret refusal, no deletion), and conflict handling well. The main omission is what a call returns after ingestion (counts, ids, errors), which an agent would need to confirm success.
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 the schema already documents all 8 parameters including the action enum and defaults. The description adds marginal color (e.g., the items shape and the meaning of 'PE-gating', the entity_hint bias) but largely restates the schema's own param descriptions. Baseline 3 applies.
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?
States a specific verb and resource ('Bulk knowledge ingestion') and enumerates the three modes with distinct semantics ('ingest' raw path, 'parse' splitting, 'auto_extract' sampling-based LLM extraction). It clearly describes what the tool does, though it does not differentiate itself from the many similarly named sibling tools (cuba_ingesta aside, which it flags as its alias).
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?
Gives per-mode guidance: 'ingest' is the fast default with no LLM, 'parse' is for long text, and 'auto_extract' is explicitly opt-in with 'do not use it as the default write.' It also explains the untrusted and supersede_conflicts conditions. It lacks guidance on choosing this tool over sibling ingestion-adjacent tools, but within the tool's own branching the routing advice is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_jornadaB
[alias of cuba_jornada] Track working sessions with goals and outcomes. v0.8: optional 'project' arg binds the session to a named project (upserts in brain_projects); subsequent handlers will scope reads/writes to that project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Session name (for start) | |
| goals | No | Session goals (for start) | |
| action | Yes | Session action | |
| outcome | No | Session outcome (for end) | |
| project | No | v0.8: project name to bind this session to (created on first use). Omit to keep session global. | |
| summary | No | What was accomplished (for end) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. |
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 does add real behavioral context: the optional project arg upserts into brain_projects and later handlers scope reads/writes to it. However, it never states that start/end persist data, whether sessions are retrievable, or what the credential-refusal path means for callers beyond the schema text.
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 compact sentences, front-loaded with the alias and the core purpose, then the versioned behavior note. Minimal waste, though the 'v0.8' and 'subsequent handlers' phrasing is somewhat internal-facing.
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 no annotations and no output schema, the description must cover behavior on its own. It covers the project-binding side effect but says nothing about return values for list/current or what a completed session record contains, leaving a gap for a 7-parameter mutation 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%, so every parameter (including action enum, allow_secret's credential guard, and project's global-fallback behavior) is already documented in the schema. The description's project note largely restates what the schema says, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: track working sessions with goals and outcomes, and flags itself as an alias of cuba_jornada. This distinguishes it from sibling memory tools at a high level, though many siblings (jornada, cronica, eco) share the 'session/memory' family and the description doesn't contrast them 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?
Usage is implied by enumerating the session lifecycle (start/end goals and outcomes) and by the project-binding note, but there is no explicit when-to-use or when-not-to-use versus cuba_jornada or memory_cronica/cuba_cronica. The agent must infer that this is the read/track counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_juezA
[alias of cuba_juez] LLM-judge for semantically-conflicting observations in the ambiguous cosine-similarity band (0.6-0.8), where heuristics miss vocabulary-different conflicts. Verdicts are cached in brain_judgments.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | judge_pair: decide on two given observation ids. scan_entity: pull ambiguous pairs for an entity and judge each. | |
| max_pairs | No | Max pairs to escalate per call (default 5; controls LLM cost) | |
| entity_name | No | Entity to scan (for scan_entity) | |
| observation_a | No | UUID of first observation (for judge_pair) | |
| observation_b | No | UUID of second observation (for judge_pair) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that verdicts are cached in brain_judgments and implies LLM cost via the judge role, but does not cover permissions, mutation semantics, or failure 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?
Two concise sentences with no wasted words. The alias and core purpose are front-loaded before the caching detail.
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?
No annotations and no output schema mean the description should do more to explain return values and side effects. It covers the judge’s scope and caching but leaves the output format and mutation implications unspecified.
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 the schema already documents all five parameters. The description adds no parameter-level meaning beyond what the schema provides, making the baseline 3 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?
States a specific function: an LLM judge for semantically conflicting observations in a defined cosine-similarity band. It also names the alias relationship with cuba_juez and distinguishes itself from heuristics, though it does not differentiate from all sibling memory tools.
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?
Clearly indicates when to use it: the ambiguous 0.6-0.8 cosine-similarity band where heuristics miss vocabulary-different conflicts. It implies heuristics as an alternative but does not explicitly list when-not or other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_pizarraA
[alias of cuba_pizarra] Working memory buffer (v0.9, Baddeley 1992): a TTL-bounded scratchpad orthogonal to episodic and semantic memory. Use for inter-step plan state during long-horizon agent tasks, tentative observations, cross-tool-call reminders inside one session. Auto-expire by ttl_seconds; bulk-purged by cuba_zafra REM cycle.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional tag for filtering on read/clear | |
| action | Yes | Working-memory operation | |
| content | No | Content to store (for write) | |
| ttl_seconds | No | Time-to-live in seconds (default 3600) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses that entries auto-expire by ttl_seconds (default 3600 per schema) and are bulk-purged by the cuba_zafra REM cycle. This is real behavioral context an agent needs. It does not discuss auth requirements or exactly what clear/read return, leaving some 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?
Two compact sentences, front-loaded with the alias and the core identity, with the usage guidance following. No filler, though the parenthetical version/author citation is decorative rather than load-bearing.
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 no-output-schema, five-parameter write/read/clear tool, the description covers the lifecycle (auto-expire, REM purge) and usage context adequately. It omits return-value behavior for read/clear, but overall an agent has enough to call 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?
Schema description coverage is 100%, so the schema already documents all five parameters including the allow_secret caveat. The description adds TTL context but no per-parameter syntax or format detail beyond what the schema provides. 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?
States a specific resource (working memory buffer/scratchpad) with a clear verb-neutral framing of what it stores and its TTL-bounded, orthogonal-to-episodic/semantic nature. It even flags itself as an alias of cuba_pizarra. It does not clearly enumerate that the tool is a multi-action (write/read/clear) surface, so the agent must open the schema to learn the actual operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use context: inter-step plan state during long-horizon tasks, tentative observations, cross-tool-call reminders within a session. The 'orthogonal to episodic and semantic memory' clause implicitly routes the agent away from those siblings, but no sibling is named or excluded explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_pre_compactA
[alias of cuba_pre_compact] Compaction-survival protocol: persist and restore a session summary across /compact.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | snapshot: before /compact, persists a dense markdown summary (observations, decisions, unresolved errors, pending embeddings, goals) for the active session. restore: after /compact, retrieves the latest snapshot and re-injects it into context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It indicates that data is persisted and restored, but does not disclose storage location, permissions, reversibility, side effects, or what exactly gets re-injected. This is a significant gap for a tool that writes and restores session 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?
The description is a single compact sentence with an alias tag. It is front-loaded and contains no redundant or filler language.
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 one-parameter enum tool with full schema description coverage and no output schema, the description sufficiently communicates the overall purpose and compaction timing. It is somewhat incomplete on behavioral and alternative-tool details, but the low parameter complexity makes that less critical.
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%, and the single action parameter has a detailed enum description covering both snapshot and restore. The description itself adds little parameter detail beyond mapping 'persist' and 'restore' to the two actions, so the schema does the heavy lifting.
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 a specific verb pair and resource: 'persist and restore a session summary across /compact.' It also identifies the tool as an alias of cuba_pre_compact. However, it does not explicitly differentiate itself from the many sibling memory_/cuba_ tools.
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 phrase 'across /compact' gives clear timing context for when the tool is relevant, and the schema enum description clarifies snapshot before /compact and restore after /compact. There are no explicit exclusions or named alternatives, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_proyectoB
[alias of cuba_proyecto] Project scoping (v0.8): isolate memories per project so multiple projects sharing one DB don't bleed into each other. Active project is bound to the current session (cuba_jornada start --project NAME). Legacy NULL project_id rows are hidden while a project is active unless faro include_unscoped=true or you backfill them.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Destination name (for rename/merge) | |
| name | No | Project name (for switch/stats/rename source/backfill) | |
| action | Yes | Project action. backfill assigns every NULL project_id row to `name` (dry-run unless confirm=true). | |
| confirm | No | backfill only: write the assignment. Default false (dry-run). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and it does disclose one non-obvious trait: NULL project_id rows are hidden while a project is active. It says nothing about the side effects of rename/merge, reversibility, permissions, or confirmation requirements beyond what the schema already states.
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-loads the core purpose in the first clause and keeps the alias/version notes brief. The second sentence is dense but every clause carries information; nothing is wasted.
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?
This is a multi-action tool with seven enum values, no annotations, and no output schema, yet the description explains none of the actions (list, current, switch, stats, rename, merge, backfill) or their return shapes. For a tool of this complexity the description is materially incomplete.
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 the schema already documents action, name, to, and confirm. The description adds only the backfill dry-run nuance, which the schema also states, so it does not meaningfully exceed the baseline.
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?
States a specific concept and verb-domain: project scoping that isolates memories per project so DBs don't bleed between projects, and explicitly flags itself as an alias of cuba_proyecto. The domain is unmistakable, though the seven actions it actually performs are never enumerated beyond what the schema's enum provides.
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?
Gives real context for when scoping applies (active project bound to session via cuba_jornada start --project NAME) and when legacy rows surface (faro include_unscoped=true or backfill). However it gives no guidance on choosing among the seven actions or when to prefer the canonical cuba_proyecto over this alias.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_puenteB
[alias of cuba_puente] Create edges between entities (uses, causes, implements, depends_on, related_to). 'traverse' explores connections, 'infer' does transitive reasoning (A→B→C), 'predict' suggests missing links via Adamic-Adar. Relations strengthen with use (Hebbian).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to perform. 'predict' uses Adamic-Adar to suggest missing relations. | |
| persist | No | For predict: write the suggestions to brain_relations as provenance='predicted' (relation_type related_to) instead of only returning them. Default false — read-only. | |
| max_depth | No | Max hops for traverse/infer (default 3, max 5) | |
| to_entity | No | Target entity name | |
| entity_name | No | Entity name for predict action (Adamic-Adar link prediction) | |
| from_entity | No | Source entity name | |
| start_entity | No | Start point for traverse/infer | |
| bidirectional | No | If true, relation goes both ways | |
| relation_type | No | Relation: uses, causes, implements, depends_on, related_to. Also used by predict+persist to pick the type for the persisted edge (default related_to). |
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 usefully discloses that relations strengthen with use (Hebbian) and how predict works via Adamic-Adar, adding behavioral context. But it never covers the 'delete' action's reversibility or permissions, nor any auth or persistence semantics beyond what the schema already states for persist.
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?
Dense but efficient: the alias note leads, then capabilities are front-loaded, and each clause carries information. No filler sentences, though the concatenated style is slightly terse for a 9-param multi-action tool.
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 multi-action, 9-parameter tool with no annotations and no output schema, the description covers the interesting actions but omits the delete action entirely and does not describe return shapes. It is adequate for the primary create/traverse/infer path but leaves gaps an agent would notice.
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 the schema already documents every parameter including persist, max_depth, and relation_type. The description's restatement of relation types matches the schema, and its added depth (transitive A→B→C, Adamic-Adar) is useful but marginal against a fully documented schema, warranting the baseline 3.
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 names a concrete resource (edges between entities) and enumerates the relation types, then explains the non-obvious action modes (traverse, infer, predict). It is clear what the tool operates on, though the leading verb 'Create edges' undersells that the tool also deletes, traverses, and predicts, and it does not distinguish the tool from the many sibling memory_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains what each action mode does ('traverse' explores, 'infer' does transitive reasoning, 'predict' suggests missing links), which implies usage. However, it gives no guidance on when to choose this tool over siblings like memory_contradiccion or memory_reflexion, and no prerequisites or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recetaA
[alias of cuba_receta] PROCEDURAL MEMORY: how things are DONE here — bring up the dev services, run the test suite, deploy, migrate. The other tools remember what is TRUE; this one remembers what to DO, so an agent stops rediscovering it every session. Ranked by reliability, not by how often it is read: report the outcome with action='outcome' after running one, or the memory learns nothing. A recipe that keeps failing is worse than none, because it is trusted.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Procedure name, e.g. 'levantar el entorno de desarrollo' | |
| limit | No | Max results | |
| query | No | For action=search | |
| steps | No | Ordered steps: [{do: '...', run: 'comando'?, expect: 'qué debe pasar'?}] | |
| action | Yes | search: find by meaning. get: fetch by exact name. add: store/update (re-adding the same name edits it, keeping its track record). outcome: record success/failure — this is what teaches it. | |
| success | No | For action=outcome: did it work? | |
| trigger | No | WHEN this applies — the IF half. e.g. 'cuando hay que levantar los servicios de mapupita-web' | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| verification | No | How you know it actually worked | |
| preconditions | No | What must already be true before starting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that entries are ranked by reliability rather than read count, that a failing recipe is dangerous because it is 'trusted', and that results must be reported via outcome or nothing is learned. The secret-handling behavior (allow_secret refusal) is documented in the param, not the description.
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 the core definition followed by the contrast and the feedback instruction. Every sentence earns its place, though 'worse than none, because it is trusted' is slightly rhetorical flourish rather than load-bearing.
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 10-parameter, no-output-schema tool, the description supplies the operational model (add/get/search/outcome lifecycle and ranking) that the schema alone lacks. It does not describe what get/search actually return, a minor gap given the absence of an 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?
Schema coverage is 100%, so the baseline is 3. The description adds real meaning beyond the schema by explaining the outcome feedback loop ('this is what teaches it') and the reliability-ranking model, giving the 'outcome' action a purpose the schema alone does not convey.
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?
It states a specific verb+resource ('PROCEDURAL MEMORY: how things are DONE') and contrasts directly with sibling memories ('The other tools remember what is TRUE; this one remembers what to DO'). An agent can distinguish it from memory_remedio/memory_expediente without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It frames the usage context clearly (procedures vs facts) and instructs the agent to call action='outcome' after running a recipe, which is a concrete when-to-use rule. It does not name specific sibling alternatives (e.g. memory_remedio) or give exclusions, so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_reflexionB
[alias of cuba_reflexion] Analyze the knowledge graph for structural gaps. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | analyze: the only action. Reports isolated entities, underconnected hubs, type silos, observation gaps (missing decisions/lessons), and statistical density anomalies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose the most important behavioral trait — 'Read-only' — which tells the agent no graph state is mutated. However it says nothing about cost, authentication, or how results are returned, leaving meaningful gaps for a no-annotation 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 short, front-loaded sentences with the alias routing first and the safety claim last. Nothing is redundant, though 'Read-only.' is a fragment that could have been folded into the purpose sentence.
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 one-parameter, no-output-schema analysis tool this is adequate: the schema enumerates the reported anomaly categories, so return content is covered. What is missing is usage context — when an agent should run this versus the many sibling analysis tools — which matters given the dense sibling set.
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% and the single enum parameter is documented in detail, including exactly which gap categories are reported. The description adds no parameter information beyond that, so the 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?
States a specific verb ('Analyze') and resource ('knowledge graph'), narrowed by 'structural gaps'. The alias note '[alias of cuba_reflexion]' usefully disambiguates it from the large family of cuba_/memory_ sibling pairs, though it does not differentiate it from analysis-adjacent siblings like memory_contradiccion or memory_calibrar.
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?
There is no when-to-use guidance, no statement of prerequisites, and no routing to alternatives. The only usage constraint ('analyze: the only action') comes from the schema enum, not the description, so the description itself provides essentially nothing about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_remedioC
[alias of cuba_remedio] Mark an error as resolved with solution. Cross-references similar unresolved errors.
| Name | Required | Description | Default |
|---|---|---|---|
| error_id | Yes | UUID of the error to solve | |
| solution | Yes | Solution that fixed the error | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says the tool marks an error as resolved and cross-references similar unresolved errors, but it does not disclose permissions, side effects, reversibility, storage behavior, or how the cross-referencing affects other records. The critical allow_secret behavior is only described in the schema, not the description.
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 one compact sentence plus an alias tag, with no wasted language. The alias is front-loaded before the action, which is slightly less ideal, but the definition remains easy to scan.
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 mutation tool with no annotations and no output schema, the description is thin. It does not explain the effect of cross-referencing similar unresolved errors, return behavior, or secret-handling implications. The schema covers parameters, but the behavioral context an agent needs is largely missing.
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 the input schema already documents error_id, solution, and allow_secret in detail. The description adds no additional parameter meaning beyond what the schema provides, so the baseline score 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 states a specific verb and resource: 'Mark an error as resolved with solution.' It also adds the cross-referencing behavior. The alias note '[alias of cuba_remedio]' signals it is a duplicate of the sibling cuba_remedio, which helps selection, though it does not distinguish broader use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to resolve an error with a solution, but it gives no explicit when-to-use guidance, no when-not-to-use conditions, and no alternatives among the many memory_/cuba_ sibling tools. The agent must infer that this is for marking errors resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_syncA
[alias of cuba_sync] Git-friendly export/import of the knowledge graph between machines that share no database. export/import/diff/status work on a local directory, ./.memory-industry/ by default and otherwise as the dir parameter describes; pull/notify/fetch/conflicts/resolve talk to a peer over HTTP with CUBA_PEER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | resolve only: the conflict id from action=conflicts | |
| dir | No | Directory override. Without it: $CUBA_SYNC_DIR if set, else ./.memory-industry/ — or ./.cuba-memorys/ on a repo that already has that older directory | |
| url | No | fetch only: the peer's base address, e.g. https://brain.example.net | |
| keep | No | resolve only: which text stays current (default 'both', which loses nothing) | |
| peer | No | fetch only: which peer to pull from (default 'default') | |
| limit | No | pull only: max files per page | |
| scope | No | Export scope: active project only (default) or all data | |
| action | Yes | export/import/diff/status: local bundle round-trip. pull: return the bundle in the response instead of writing it, for a peer to fetch. notify: tell a peer what changed. fetch: pull a peer's bundle over HTTP and import it. conflicts/resolve: list and settle rows two machines disagree about. | |
| offset | No | pull only: index of the first bundle file to return | |
| confirm | No | Required when the import's tombstones would delete more than 10% of this machine's observations and at least 25 rows | |
| node_id | No | notify only: self-asserted id of the sending node | |
| summary | No | notify only: what changed, in at most 2000 characters | |
| conflict | No | How to resolve a row that exists on both sides (default merge; merge and skip keep local content, overwrite takes the incoming version) | |
| node_name | No | notify only: readable name of the sending node | |
| manifest_hash | No | notify only: the bundle hash this notice refers to | |
| with_embeddings | No | Include embeddings (default false on export, true on pull) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It does disclose the peer-auth requirement (CUBA_PEER_TOKEN) and the default working directory, which is genuinely useful. However, it never warns that import can destructively delete observations via tombstones (that only surfaces in the confirm parameter), nor does it describe pagination or return behavior for pull.
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?
A single dense block front-loads the alias and the core purpose before the action split; every clause carries information. It is slightly compressed with semicolon-joined clauses, but no sentence is wasted.
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 16-parameter tool with no output schema and no annotations, the description covers the action taxonomy and one auth requirement but omits import destructiveness, pagination semantics, and any indication of return shape for the HTTP actions. Adequate but with clear gaps.
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 the schema already documents all 16 parameters including enums and defaults. The description only groups actions and adds no syntax or format detail beyond what the schema provides, making the baseline 3 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?
States plainly that it is an alias of cuba_sync and describes the concrete resource (knowledge graph export/import between machines without a shared database). The action grouping (local bundle vs HTTP peer operations) lets an agent tell it apart from unrelated siblings.
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 partitions the nine actions into local-directory ones (export/import/diff/status) and peer-over-HTTP ones (pull/notify/fetch/conflicts/resolve) and names the CUBA_PEER_TOKEN prerequisite for the latter. It does not state when to prefer this tool over a sibling beyond the alias equivalence, so it falls short of a full when/when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_toolsA
[alias of cuba_tools] Find MemoryIndustry tools and load their schemas ON DEMAND. The server exposes 31 tools; under CUBA_TOOL_PROFILE=lean only the everyday core is pre-loaded and the rest live here. Search by capability ('audit', 'decay', 'contradiction', 'session'), then call what you find with cuba_call. detail='names' is cheapest, 'full' returns the exact argument schema.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Filter by capability — matches tool names and descriptions. Omit to list everything. | |
| detail | No | names: just the names. summary (default): name + description. full: the complete JSON Schema, which is what you need to call the tool correctly. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the 31-tool population, the lean-profile behavior, and a cost hint (detail='names' is cheapest). It does not describe auth requirements or latency beyond the cost signal, but for a non-destructive discovery tool that is a minor gap.
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?
Four dense sentences, front-loaded with the alias caveat followed by purpose, environment condition, and usage workflow. Every sentence carries information an agent needs — nothing is padding.
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?
No output schema exists, so the description must cover the return shapes, and it does so at each detail level (names, summary, full schema). For a two-parameter discovery tool with no annotations this is largely complete, though it could say more about the naming/format of the discovered tools.
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 already 100%, so the baseline is 3. The description adds value beyond the schema by framing the cost trade-off ('names' is cheapest) and clarifying that 'full' is what you need to call a tool correctly, which reinforces the enum semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — find MemoryIndustry tools and load their schemas on demand — and immediately identifies itself as an alias of cuba_tools. It also distinguishes its role from the calling sibling by naming cuba_call as the follow-up action, so an agent knows what this tool is and is not.
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 the exact condition under which this tool matters (CUBA_TOOL_PROFILE=lean, where only the everyday core is pre-loaded) and prescribes the workflow: search by capability, then call the result with cuba_call. It stops short of an explicit 'do not use this if the tool is already preloaded' exclusion, but the routing context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_vigiaC
[alias of cuba_vigia] Knowledge graph analytics: summary, health, drift, communities, bridges, structural.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | summary: counts + token estimate. health: staleness, entropy, DB size. drift: chi-squared on errors. communities: Leiden clustering. bridges: betweenness centrality. structural: harmonic + closeness centrality + k-core ranking (backbone identification). |
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 of behavioral disclosure. It does not state whether the tool is read-only, what the return format is, whether it has side effects, or any performance characteristics—a significant gap for an analytics 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?
A single compact sentence with the alias note up front and zero waste. Every word is relevant, and the metric list is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should carry more context about what the tool does (e.g., that it is read-only analytics) and what an agent can expect from each metric. It only names the metrics, leaving behavioral and return-value information entirely to inference.
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%, and the enum descriptions fully explain each metric (counts, staleness, chi-squared, Leiden clustering, etc.). The tool description merely repeats the enum values, adding no meaning beyond what the schema already 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?
States the resource ('knowledge graph analytics') and lists the six metrics, and identifies the tool as an alias of cuba_vigia. That is clear enough to separate it from most siblings, though the description lacks a verb and does not explain what the analytics actually produce.
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 no when-to-use guidance, no prerequisites, and no alternatives. It simply lists the metric names, leaving the agent to infer usage from the schema enum descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_whoamiA
[alias of cuba_whoami] Identify this MCP client against the MemoryIndustry daemon: client id, project, session, node, LLM, graph-db, resource plan. Alias: memory_whoami.
| 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 behavioral burden. It usefully lists the fields returned (client id, project, session, node, LLM, graph-db, resource plan), but it does not explicitly state that this is a read-only, side-effect-free operation or disclose any auth or rate-limit 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 short and front-loads the purpose, with the alias note placed first. The final 'Alias: memory_whoami' sentence is slightly redundant with the tool name, keeping it from being maximally concise.
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, zero-parameter identity tool with no output schema, the description is nearly complete: it states the purpose, the alias relationship, and the returned fields. It stops short of explaining the return format or confirming read-only safety, but those are minor gaps for this tool type.
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?
There are zero parameters, so the baseline score is 4. The description correctly does not add parameter semantics beyond what an empty schema already communicates.
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?
It states a specific verb ('Identify') and resource ('this MCP client against the MemoryIndustry daemon'), and enumerates the exact identity fields returned. The alias note distinguishes it from other sibling tools by tying it explicitly to cuba_whoami.
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 purpose implies when to use it—to retrieve client identity context—but there is no explicit when-to-use statement, no exclusion criteria, and no guidance on alternatives among the many sibling tools. It is adequate but leaves routing inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_zafraC
[alias of cuba_zafra] Memory maintenance, scoped to the active project: decay, prune, merge, summarize, pagerank, find_duplicates, export, reembed, decay_episodes.
| Name | Required | Description | Default |
|---|---|---|---|
| c | No | Power-law c parameter for decay_episodes (default 0.1) | |
| beta | No | Power-law β exponent for decay_episodes (default 0.5) | |
| action | Yes | decay: stratified exponential decay by type. prune: deletes low-importance observations, dry-run unless confirm=true. merge: deduplicates similar entities. summarize: replaces an entity's observations with compressed_summary. stats: counts. pagerank: personalized importance ranking. find_duplicates: lists near-duplicate pairs. export: writes a JSON dump. reembed: re-encodes with the current model. decay_episodes: power-law decay on brain_episodes. | |
| confirm | No | prune only: actually delete. Without it, prune returns a dry-run plan (would_prune, by_project) and deletes nothing — read the plan first, the default threshold reaches a large share of a mature corpus. | |
| threshold | No | Importance threshold for prune (default 0.1) | |
| batch_size | No | Max observations to re-encode in reembed (default 500) | |
| entity_name | No | Entity to summarize (for summarize action) | |
| allow_secret | No | Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client. | |
| halflife_days | No | Global halflife override for decay (overrides per-type stratification) | |
| compressed_summary | No | Compressed text replacing observations (for summarize) | |
| similarity_threshold | No | Similarity threshold for merge (default 0.8) |
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, yet it discloses only the active-project scoping. Destructive actions bundled into the same tool (prune deletes observations, summarize replaces observations, merge deduplicates) are not flagged in the description; the safety details live only in the schema's per-parameter prose.
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?
One sentence, front-loaded with the alias relationship followed by the action list, with no filler. The alias tag consumes the opening slot that could have carried usage guidance, but the sentence itself is economical.
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 an 11-parameter, multi-action tool with no output schema and no annotations, the description is thin: it gives the action roster but no ordering, destructive-action warnings, or selection logic. The unusually rich schema compensates for most parameter gaps, keeping this at minimum-viable rather than inadequate.
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% and the action enum is thoroughly documented in the schema, so the tool meets the baseline where structured data already does the heavy lifting. The description adds no format, default, or interaction details beyond what the schema states.
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 names the resource (memory), the scope (active project) and enumerates the concrete maintenance actions, so an agent knows this is a memory-upkeep tool rather than an ingest or query tool. It does not, however, explicitly differentiate itself from its sibling cuba_zafra beyond the '[alias of]' tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists the available actions but gives no guidance on when to choose this tool over its alias cuba_zafra or over the many sibling memory_* tools, nor on which action suits which situation. 'Scoped to the active project' is the only selection hint and it is implicit at best.
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.
6 tool updates
v0.27.0- Changed
cuba_faro2 fields changed- added
Input schema / properties / include_unscopedAdded value: +{ + "description": "When a project is active, rows with project_id NULL are hidden. Set true to include that leftover corpus. Default false.", + "type": "boolean" +} - changed
Input schema / properties / rerank / descriptionPrevious value: -"Cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3. Auto-enabled when CUBA_MODE=completo, or when this build has a real GPU provider active (CUDA/DirectML compiled in AND a working device). Off by default everywhere else, even with the model on disk: on CPU it costs 60-110s and blows the search budget. Explicit true/false always wins; run `cuba-memorys doctor` to see which reason applies here."New value: +"Cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3. Auto-enabled when CUBA_MODE=completo, or when this build has a real GPU provider active (CUDA/DirectML compiled in AND a working device). Off by default everywhere else, even with the model on disk: on CPU it costs 60-110s and blows the search budget. Explicit true/false always wins; run `memory-industry doctor` to see which reason applies here."
- Changed
cuba_proyecto4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Project action"New value: +"Project action. backfill assigns every NULL project_id row to `name` (dry-run unless confirm=true)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "current", - "switch", - "stats", - "rename", - "merge" -]New value: +[ + "list", + "current", + "switch", + "stats", + "rename", + "merge", + "backfill" +] - added
Input schema / properties / confirmAdded value: +{ + "description": "backfill only: write the assignment. Default false (dry-run).", + "type": "boolean" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Project name (for switch/stats/rename source)"New value: +"Project name (for switch/stats/rename source/backfill)"
- Changed
cuba_sync1 field changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Directory override (default $CUBA_SYNC_DIR or ./.cuba-memorys/)"New value: +"Directory override. Without it: $CUBA_SYNC_DIR if set, else ./.memory-industry/ — or ./.cuba-memorys/ on a repo that already has that older directory"
- Changed
memory_faro2 fields changed- added
Input schema / properties / include_unscopedAdded value: +{ + "description": "When a project is active, rows with project_id NULL are hidden. Set true to include that leftover corpus. Default false.", + "type": "boolean" +} - changed
Input schema / properties / rerank / descriptionPrevious value: -"Cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3. Auto-enabled when CUBA_MODE=completo, or when this build has a real GPU provider active (CUDA/DirectML compiled in AND a working device). Off by default everywhere else, even with the model on disk: on CPU it costs 60-110s and blows the search budget. Explicit true/false always wins; run `cuba-memorys doctor` to see which reason applies here."New value: +"Cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3. Auto-enabled when CUBA_MODE=completo, or when this build has a real GPU provider active (CUDA/DirectML compiled in AND a working device). Off by default everywhere else, even with the model on disk: on CPU it costs 60-110s and blows the search budget. Explicit true/false always wins; run `memory-industry doctor` to see which reason applies here."
- Changed
memory_proyecto4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Project action"New value: +"Project action. backfill assigns every NULL project_id row to `name` (dry-run unless confirm=true)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "current", - "switch", - "stats", - "rename", - "merge" -]New value: +[ + "list", + "current", + "switch", + "stats", + "rename", + "merge", + "backfill" +] - added
Input schema / properties / confirmAdded value: +{ + "description": "backfill only: write the assignment. Default false (dry-run).", + "type": "boolean" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Project name (for switch/stats/rename source)"New value: +"Project name (for switch/stats/rename source/backfill)"
- Changed
memory_sync1 field changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Directory override (default $CUBA_SYNC_DIR or ./.cuba-memorys/)"New value: +"Directory override. Without it: $CUBA_SYNC_DIR if set, else ./.memory-industry/ — or ./.cuba-memorys/ on a repo that already has that older directory"
54 tool updates
v0.25.0- Changed
cuba_alarma1 field changed- added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_archivo1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"Audit operation"New value: +"append: add an event. verify: walk the hash chain and detect tampering. tail: read recent events."
- Added
cuba_artefacto - Changed
cuba_calibrar1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"Calibration action. v0.9: 'trust' returns per-source Beta(α, β) credibility; 'metrics' returns Brier score (1950) + Expected Calibration Error (Naeini AAAI 2015) + reliability diagram."New value: +"stats/history: past predictions. resolve: mark a verify_id correct/incorrect. trust: per-source Beta(α, β) credibility, updated by resolve outcomes. metrics: Brier score + Expected Calibration Error + reliability diagram."
- Changed
cuba_centinela3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Trigger action"New value: +"create: define a trigger. list: show triggers. delete: remove one (trigger_id). check: evaluate now." - added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +} - changed
Input schema / properties / condition_type / descriptionPrevious value: -"When to fire"New value: +"When to fire. on_session_start with the other session's name as entity_pattern is also the cross-session note channel: fires once (max_fires) the next time that session starts, carrying who left it."
- Added
cuba_contexto - Changed
cuba_cronica1 field changed- added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_decreto1 field changed- added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_eco4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Feedback type, or a quarantine transition: promote/quarantine flip one observation's retrievability; pending lists what is currently withheld."New value: +"Feedback type, or a quarantine transition: promote/quarantine flip one memory's retrievability; pending lists everything currently withheld, in three lists (quarantined, quarantined_episodes, quarantined_errors), each row tagged with its kind." - added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +} - added
Input schema / properties / idAdded value: +{ + "description": "Target UUID for promote/quarantine when kind is episode or error. For kind=observation use observation_id.", + "type": "string" +} - added
Input schema / properties / kindAdded value: +{ + "description": "Which table promote/quarantine acts on. Default 'observation'. An import quarantines whatever carried a credential, and cuba_sync writes episodes and errors too: without the matching kind those rows would stay stored and permanently unreachable. Ignored by positive/negative/correct, and by pending, which always returns all three.", + "enum": [ + "observation", + "episode", + "error" + ], + "type": "string" +}
- Changed
cuba_faro7 fields changed- changed
Input schema / properties / abstain_ood / descriptionPrevious value: -"v0.9: abstain (return empty results with abstain_reason) when query is out-of-distribution via Mahalanobis distance. Default false."New value: +"Abstain (return empty results with abstain_reason) when the query is out-of-distribution via Mahalanobis distance. Default false." - changed
Input schema / properties / associative / descriptionPrevious value: -"v0.11: multi-hop expansion (HippoRAG-style). Seeds spreading activation from query-matched entities and pulls in observations on graph-connected entities that no lexical/vector signal surfaced. Additive — never lowers a base hit. Measured +10pts recall@10 on the smoke set. Default false."New value: +"Multi-hop expansion: seeds spreading activation from query-matched entities and pulls in observations on graph-connected entities that no lexical/vector signal surfaced. Additive — never lowers a base hit. Default false." - changed
Input schema / properties / diversify / descriptionPrevious value: -"v0.9: post-RRF MMR pass that penalizes near-duplicates among top-K. Default false."New value: +"Post-RRF MMR pass that penalizes near-duplicates among top-K. Default false." - changed
Input schema / properties / enable_bm25 / descriptionPrevious value: -"v0.9: enable BM25 (ts_rank_cd) as third RRF signal alongside text + vector. Catches queries with rare terms that dense embeddings miss. Default true."New value: +"Enable BM25 (ts_rank_cd) as third RRF signal alongside text + vector. Catches queries with rare terms that dense embeddings miss. Default true." - changed
Input schema / properties / mmr_lambda / descriptionPrevious value: -"v0.9: MMR balance — 1.0 pure relevance, 0.0 pure diversity. Default 0.7."New value: +"MMR balance — 1.0 pure relevance, 0.0 pure diversity. Default 0.7." - changed
Input schema / properties / ood_threshold / descriptionPrevious value: -"v0.9: Mahalanobis distance threshold for abstention. Defaults to sqrt(chi2_0.99(d)), which scales with the embedding dimension (~21.25 for d=384). Override only if you calibrated on your own corpus."New value: +"Mahalanobis distance threshold for abstention. Defaults to sqrt(chi2_0.99(d)), which scales with the embedding dimension (~21.25 for d=384). Override only if you calibrated on your own corpus." - changed
Input schema / properties / rerank / descriptionPrevious value: -"v0.9.2: cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3 (Xiao 2023). Auto-enabled when CUBA_RERANKER_PATH points to a valid ONNX. Identity fallback otherwise."New value: +"Cross-encoder rerank top-50 → top-K with bge-reranker-v2-m3. Auto-enabled when CUBA_MODE=completo, or when this build has a real GPU provider active (CUDA/DirectML compiled in AND a working device). Off by default everywhere else, even with the model on disk: on CPU it costs 60-110s and blows the search budget. Explicit true/false always wins; run `cuba-memorys doctor` to see which reason applies here."
- Changed
cuba_hipotesis1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"Inference action"New value: +"explain: traverse causal relations backwards from `effect`, ranked by path_strength × importance."
- Changed
cuba_ingesta3 fields changed- added
Input schema / properties / action / defaultAdded value: +"ingest" - changed
Input schema / properties / action / descriptionPrevious value: -"Ingestion mode. 'ingest' for structured items, 'parse' for raw text splitting, 'auto_extract' for LLM extraction via MCP sampling."New value: +"Ingestion mode. Default 'ingest' is the fast raw path (no LLM). 'parse' splits long text. 'auto_extract' is opt-in LLM extraction via MCP sampling — do not use it as the default write." - added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_jornada1 field changed- added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_juez1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"judge_pair = decide on two given obs ids; scan_entity = pull ambiguous pairs and judge each"New value: +"judge_pair: decide on two given observation ids. scan_entity: pull ambiguous pairs for an entity and judge each."
- Changed
cuba_pizarra1 field changed- added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_pre_compact1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"snapshot persists a session summary; restore returns the latest"New value: +"snapshot: before /compact, persists a dense markdown summary (observations, decisions, unresolved errors, pending embeddings, goals) for the active session. restore: after /compact, retrieves the latest snapshot and re-injects it into context."
- Changed
cuba_receta1 field changed- added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_reflexion1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"Gap analysis action (only 'analyze' supported)"New value: +"analyze: the only action. Reports isolated entities, underconnected hubs, type silos, observation gaps (missing decisions/lessons), and statistical density anomalies."
- Changed
cuba_remedio1 field changed- added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +}
- Changed
cuba_sync16 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Sync mode"New value: +"export/import/diff/status: local bundle round-trip. pull: return the bundle in the response instead of writing it, for a peer to fetch. notify: tell a peer what changed. fetch: pull a peer's bundle over HTTP and import it. conflicts/resolve: list and settle rows two machines disagree about." - changed
Input schema / properties / action / enumPrevious value: -[ - "export", - "import", - "diff", - "status" -]New value: +[ + "export", + "import", + "diff", + "status", + "pull", + "notify", + "fetch", + "conflicts", + "resolve" +] - added
Input schema / properties / confirmAdded value: +{ + "description": "Required when the import's tombstones would delete more than 10% of this machine's observations and at least 25 rows", + "type": "boolean" +} - changed
Input schema / properties / conflict / descriptionPrevious value: -"Import conflict policy (default merge)"New value: +"How to resolve a row that exists on both sides (default merge; merge and skip keep local content, overwrite takes the incoming version)" - added
Input schema / properties / idAdded value: +{ + "description": "resolve only: the conflict id from action=conflicts", + "type": "string" +} - added
Input schema / properties / keepAdded value: +{ + "description": "resolve only: which text stays current (default 'both', which loses nothing)", + "enum": [ + "ours", + "theirs", + "both" + ], + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "description": "pull only: max files per page", + "type": "integer" +} - added
Input schema / properties / manifest_hashAdded value: +{ + "description": "notify only: the bundle hash this notice refers to", + "type": "string" +} - added
Input schema / properties / node_idAdded value: +{ + "description": "notify only: self-asserted id of the sending node", + "type": "string" +} - added
Input schema / properties / node_nameAdded value: +{ + "description": "notify only: readable name of the sending node", + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "pull only: index of the first bundle file to return", + "type": "integer" +} - added
Input schema / properties / peerAdded value: +{ + "description": "fetch only: which peer to pull from (default 'default')", + "type": "string" +} - changed
Input schema / properties / scope / descriptionPrevious value: -"Export scope: only the active project (default) or all data"New value: +"Export scope: active project only (default) or all data" - added
Input schema / properties / summaryAdded value: +{ + "description": "notify only: what changed, in at most 2000 characters", + "type": "string" +} - added
Input schema / properties / urlAdded value: +{ + "description": "fetch only: the peer's base address, e.g. https://brain.example.net", + "type": "string" +} - changed
Input schema / properties / with_embeddings / descriptionPrevious value: -"Include the embeddings.bin.zst blob on export (default false)"New value: +"Include embeddings (default false on export, true on pull)"
- Changed
cuba_vigia1 field changed- changed
Input schema / properties / metric / descriptionPrevious value: -"Metric to compute. v0.9: 'structural' adds harmonic + closeness centrality (Boldi-Vigna 2014, Bavelas 1950) + k-core decomposition (Seidman 1983)."New value: +"summary: counts + token estimate. health: staleness, entropy, DB size. drift: chi-squared on errors. communities: Leiden clustering. bridges: betweenness centrality. structural: harmonic + closeness centrality + k-core ranking (backbone identification)."
- Added
cuba_whoami - Changed
cuba_zafra3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Consolidation action. decay_episodes applies power-law decay to brain_episodes."New value: +"decay: stratified exponential decay by type. prune: deletes low-importance observations, dry-run unless confirm=true. merge: deduplicates similar entities. summarize: replaces an entity's observations with compressed_summary. stats: counts. pagerank: personalized importance ranking. find_duplicates: lists near-duplicate pairs. export: writes a JSON dump. reembed: re-encodes with the current model. decay_episodes: power-law decay on brain_episodes." - added
Input schema / properties / allow_secretAdded value: +{ + "description": "Refused when the text looks like a live credential (token, password, URL with embedded creds). Set true only for a false match — the text is then stored verbatim, in clear, and reachable by search, export and every client.", + "type": "boolean" +} - added
Input schema / properties / confirmAdded value: +{ + "description": "prune only: actually delete. Without it, prune returns a dry-run plan (would_prune, by_project) and deletes nothing — read the plan first, the default threshold reaches a large share of a mature corpus.", + "type": "boolean" +}
- Added
memory_alarma - Added
memory_alma - Added
memory_archivo - Added
memory_artifact - Added
memory_calibrar - Added
memory_call - Added
memory_centinela - Added
memory_context - Added
memory_contradiccion - Added
memory_cronica - Added
memory_decreto - Added
memory_eco - Added
memory_expediente - Added
memory_faro - Added
memory_forget - Added
memory_hipotesis - Added
memory_ingesta - Added
memory_jornada - Added
memory_juez - Added
memory_pizarra - Added
memory_pre_compact - Added
memory_proyecto - Added
memory_puente - Added
memory_receta - Added
memory_reflexion - Added
memory_remedio - Added
memory_sync - Added
memory_tools - Added
memory_vigia - Added
memory_whoami - Added
memory_zafra
28 tool updates
v0.18.0- First observed
cuba_alarma - First observed
cuba_alma - First observed
cuba_archivo - First observed
cuba_calibrar - First observed
cuba_call - First observed
cuba_centinela - First observed
cuba_contradiccion - First observed
cuba_cronica - First observed
cuba_decreto - First observed
cuba_eco - First observed
cuba_expediente - First observed
cuba_faro - First observed
cuba_forget - First observed
cuba_hipotesis - First observed
cuba_ingesta - First observed
cuba_jornada - First observed
cuba_juez - First observed
cuba_pizarra - First observed
cuba_pre_compact - First observed
cuba_proyecto - First observed
cuba_puente - First observed
cuba_receta - First observed
cuba_reflexion - First observed
cuba_remedio - First observed
cuba_sync - First observed
cuba_tools - First observed
cuba_vigia - First observed
cuba_zafra
TDQS
Scored across 62 tools
Descriptions carefully partition the memory space into semantic (alma), episodic (cronica), procedural (receta), working (pizarra), prospective (centinela), error (alarma/remedio/expediente) and analytics (vigia/reflexion) roles, so most tools are distinguishable. However, every tool is duplicated under both cuba_ and memory_ prefixes, and search/context tools (faro vs contexto vs cronica) have fuzzy boundaries, which can cause occasional misselection.
All names use consistent snake_case with clear prefix families (cuba_*, memory_*), and the domain nouns are stable. The only inconsistency is that each tool appears twice under two different prefixes, which is systematic but creates duplicate naming for identical functionality.
62 tools is far too many for a clean surface; even discounting the alias duplicates, roughly 31 distinct tools exceeds the 25-tool heavy threshold. The cuba_tools on-demand loading profile mitigates this, but the exposed set is still bloated for an agent to navigate.
The surface covers an unusually wide lifecycle: entity CRUD, observations, errors, decisions, sessions, artifacts, sync, audit, ingestion, maintenance, calibration, GDPR erasure, and compaction survival. Minor gaps remain, such as no obviously dedicated read/list tool for every resource type, but core workflows are well supported.
Maintenance
Related MCP Connectors
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent working memory for AI agents: a knowledge graph with semantic search and decay.
Persistent memory and knowledge graph for AI assistants — keyword + vector + graph search.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenancePersistent shared memory for AI agents. Hybrid search (pgvector + tsvector), knowledge graph, cognitive scoring, and 16-language temporal extraction. 97.2% Recall@10 on LongMemEval with one PostgreSQL query. Works across Claude Code, Cursor, Codex, OpenClaw, and any MCP client.116MIT
- AlicenseNot gradedqualityBmaintenancePersistent knowledge memory layer for AI agents. Hybrid semantic + full-text search with pgvector, code dependency graph with blast-radius impact analysis, and incremental indexing for 7 languages. In-process ONNX embeddings, no external API required.44 npm35MIT
- AlicenseNot gradedqualityCmaintenancePersistent memory for AI agents with Ebbinghaus forgetting curve, semantic graph retrieval, and engineering state tracking. Local-first, DuckDB, zero cloud dependency.110 PyPI1MIT
- AlicenseNot gradedqualityBmaintenancePersistent semantic memory for AI agents using PostgreSQL and vector embeddings, enabling cross-session continuity and semantic search.AGPL 3.0