Skip to main content
Glama

Learn something

crbro_learn

Store a fact, decision, pattern, preference, error or debt into persistent memory on a topic, creating its neuron if missing and superseding outdated truths.

Instructions

Write: store a fact, decision, pattern, preference, error or debt on a topic; the neuron is created if missing (or pass neuron_id). A value that can change names its source (file, key, URL, person). Stage 1 of the lifecycle: a new truth that REPLACES an old one → crbro_learn with supersedes; retire with no replacement → crbro_revise; delete from disk → crbro_forget. crbro_recall first — it may already exist. The same fact text again is not duplicated: keywords merge, a changed confidence or shelf_life applies (updated_in_place), a bare repeat counts as re-verified and another session repeating it raises confirmations; text matching a retired entry is refused with skipped_retired. Decisions always append; preferences never leave this machine. Credentials become a marker listed in redacted: crbro_secret them, keep only the name. Returns neuron_id, action, the fact's shelf_life, near_duplicates (stored anyway; retire the old telling) and supersedes_unmatched (still live).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeYeserror = a mistake plus its correction, in one entry. debt = a deliberate deferral: what was NOT done on purpose, its ceiling, and the revisit condition, e.g. "DEFERRED: protecting the PDFs. CEILING: anyone can download them without signing up. REVISIT WHEN: the signup flow works."
topicNoTopic name, e.g. "OctoChat", "Firebase", "SEO Strategy". Required UNLESS you pass neuron_id, in which case the topic is taken from that neuron.
domainNoDomain, e.g. "proyectos-web". Applied when the neuron is created; on an existing neuron it only replaces the default "general" (crbro_revise domain replaces it unconditionally).
contentYesThe knowledge itself. Dense and self-contained: it is recalled without this conversation as context. For a value that can change (a version, price, port, host, setting, who holds a role), say where it came from — the file, config key, URL or person — so a later check knows where to look.
keywordsNoFacts only, and expected on every fact: 2-5 words a future question may use that the text does not contain — synonyms, the other language, the generic name of the product named. Indexed with the fact, never shown; the largest measured lever on recall. Without them the fact is stored and the answer carries keywords_missing. The same text again with new keywords merges them.
neuron_idNoExact neuron id from crbro_recall, e.g. "project_octochat". Skips name matching entirely, and then topic is not needed.
rationaleNoWhy the decision was taken. Stored and indexed with it; ignored for other types.
confidenceNo0.0-1.0, default 1.0. Facts only. On an exact-duplicate active fact the stored confidence is updated to this value (updated_in_place:true).
shelf_lifeNoFacts only: how fast this value goes stale. volatile = versions, prices, ports, hosts, paths, config, who holds a role; durable = rarely moves; permanent = history that cannot change; normal otherwise. Omitted: inferred from the text, and returned.
supersedesNoFacts this one replaces: their ids or exact text. They leave recall but stay in the file. Unmatched targets are reported and stay live.
keywords_replaceNoWhen the exact fact text already exists, replace its stored keywords with `keywords` instead of merging (default false). Teammates in a shared space only ever receive the union.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv2.9.1
    • changedInput schema / properties / content / description
      Previous value: -"The knowledge itself. Dense and self-contained: it is recalled without this conversation as context."New value: +"The knowledge itself. Dense and self-contained: it is recalled without this conversation as context. For a value that can change (a version, price, port, host, setting, who holds a role), say where it came from — the file, config key, URL or person — so a later check knows where to look."
    • changedInput schema / properties / keywords / description
      Previous value: -"Facts only. 2-5 words a future question may use that the text does not contain: synonyms, the other language, the generic name of the product named. Indexed with the fact, never shown. The same text again with new keywords merges them."New value: +"Facts only, and expected on every fact: 2-5 words a future question may use that the text does not contain — synonyms, the other language, the generic name of the product named. Indexed with the fact, never shown; the largest measured lever on recall. Without them the fact is stored and the answer carries keywords_missing. The same text again with new keywords merges them."
    • addedInput schema / properties / shelf_life
      Added value: +{
      +  "description": "Facts only: how fast this value goes stale. volatile = versions, prices, ports, hosts, paths, config, who holds a role; durable = rarely moves; permanent = history that cannot change; normal otherwise. Omitted: inferred from the text, and returned.",
      +  "enum": [
      +    "volatile",
      +    "normal",
      +    "durable",
      +    "permanent"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changedv2.4.0
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  3. Changed3 schema fields changedv2.1.0
    • changedInput schema / properties / neuron_id / description
      Previous value: -"Exact neuron id from crbro_recall, e.g. \"project_octochat\". Skips name matching entirely."New value: +"Exact neuron id from crbro_recall, e.g. \"project_octochat\". Skips name matching entirely, and then topic is not needed."
    • changedInput schema / properties / topic / description
      Previous value: -"Topic name, e.g. \"OctoChat\", \"Firebase\", \"SEO Strategy\"."New value: +"Topic name, e.g. \"OctoChat\", \"Firebase\", \"SEO Strategy\". Required UNLESS you pass neuron_id, in which case the topic is taken from that neuron."
    • changedInput schema / required
      Previous value: -[
      -  "topic",
      -  "type",
      -  "content"
      -]New value: +[
      +  "type",
      +  "content"
      +]
  4. Changed3 schema fields changedv2.0.0
    • changedInput schema / properties / confidence / description
      Previous value: -"0.0-1.0, default 1.0. Facts only."New value: +"0.0-1.0, default 1.0. Facts only. On an exact-duplicate active fact the stored confidence is updated to this value (updated_in_place:true)."
    • changedInput schema / properties / domain / description
      Previous value: -"Domain, e.g. \"proyectos-web\". Applied when the neuron is created; on an existing neuron it only replaces the default \"general\"."New value: +"Domain, e.g. \"proyectos-web\". Applied when the neuron is created; on an existing neuron it only replaces the default \"general\" (crbro_revise domain replaces it unconditionally)."
    • addedInput schema / properties / keywords_replace
      Added value: +{
      +  "description": "When the exact fact text already exists, replace its stored keywords with `keywords` instead of merging (default false). Teammates in a shared space only ever receive the union.",
      +  "type": "boolean"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / keywords
      Added value: +{
      +  "description": "Facts only. 2-5 words a future question may use that the text does not contain: synonyms, the other language, the generic name of the product named. Indexed with the fact, never shown. The same text again with new keywords merges them.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  6. Changed9 schema fields changedv1.14.0
    • changedInput schema / properties / confidence / description
      Previous value: -"Confidence level 0.0-1.0 (default 1.0)"New value: +"0.0-1.0, default 1.0. Facts only."
    • changedInput schema / properties / content / description
      Previous value: -"The knowledge content to remember"New value: +"The knowledge itself. Dense and self-contained: it is recalled without this conversation as context."
    • changedInput schema / properties / domain / description
      Previous value: -"Domain category (e.g., \"proyectos-web\", \"infraestructura\")"New value: +"Domain, e.g. \"proyectos-web\". Applied when the neuron is created; on an existing neuron it only replaces the default \"general\"."
    • addedInput schema / properties / neuron_id
      Added value: +{
      +  "description": "Exact neuron id from crbro_recall, e.g. \"project_octochat\". Skips name matching entirely.",
      +  "type": "string"
      +}
    • changedInput schema / properties / rationale / description
      Previous value: -"Rationale for decisions"New value: +"Why the decision was taken. Stored and indexed with it; ignored for other types."
    • addedInput schema / properties / supersedes
      Added value: +{
      +  "description": "Facts this one replaces: their ids or exact text. They leave recall but stay in the file. Unmatched targets are reported and stay live.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / topic / description
      Previous value: -"The topic name (e.g., \"OctoChat\", \"Firebase\", \"SEO Strategy\")"New value: +"Topic name, e.g. \"OctoChat\", \"Firebase\", \"SEO Strategy\"."
    • changedInput schema / properties / type / description
      Previous value: -"Type of knowledge to store"New value: +"error = a mistake plus its correction, in one entry. debt = a deliberate deferral: what was NOT done on purpose, its ceiling, and the revisit condition, e.g. \"DEFERRED: protecting the PDFs. CEILING: anyone can download them without signing up. REVISIT WHEN: the signup flow works.\""
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "fact",
      -  "decision",
      -  "pattern",
      -  "preference"
      -]New value: +[
      +  "fact",
      +  "decision",
      +  "pattern",
      +  "preference",
      +  "error",
      +  "debt"
      +]
  7. First observedv1.4.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description goes well beyond it: duplicate handling (keywords merge, updated_in_place, bare repeat = re-verified, cross-session confirmations), refusal on retired text (skipped_retired), append-only decisions, preference locality, and credential redaction. It also explains WHY it is non-idempotent, which the annotation alone cannot convey.

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

Conciseness4/5

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

The write action and routing are front-loaded, and every sentence carries distinct information (dedup, retirement, credential handling, return keys). It is, however, a single dense paragraph of telegraphic clauses that takes effort to parse and could be split for scanability.

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

Completeness5/5

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

With 11 parameters and no output schema, the description compensates by naming the returned fields (neuron_id, action, shelf_life, near_duplicates, supersedes_unmatched) and by covering all six type values' behavioral differences. Nothing essential for a correct call appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds interaction semantics the schema does not: how repeated text merges keywords vs. replaces them (keywords_replace union for teammates), how supersedes targets leave recall but stay in the file, and how supersedes_unmatched is reported. Only a few params (e.g. domain, rationale) are left to the schema alone.

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

Purpose5/5

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

Opens with a specific verb and resource: "Write: store a fact, decision, pattern, preference, error or debt on a topic; the neuron is created if missing." It immediately distinguishes itself from crbro_revise and crbro_forget with an explicit replace/retire/delete split, so an agent can disambiguate 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.

Usage Guidelines5/5

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

Gives explicit when-to-use routing: "a new truth that REPLACES an old one → crbro_learn with supersedes; retire with no replacement → crbro_revise; delete from disk → crbro_forget," plus a prerequisite ("crbro_recall first — it may already exist"). This is a textbook when/when-not/alternatives statement.

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