Brain Save — write one local Registrar memory proposal
Propose one fact to the local Registrar spool or apply one supported lifecycle transition. Never claim
that a queued proposal is already governed or searchable.
Overview
This is the full Registrar operator surface, not the read-only intent-brain marketplace runtime and
not the unified governed-second-brain plugin. teamkb_propose, teamkb_transition, and
teamkb_status operate on the local paths configured for apps/mcp-server, even when remote search is
configured. Keep TEAMKB_API_URL unset when the search and write sides must address the same brain.
Prerequisites
- Build and configure
apps/mcp-server from this repository.
- Set
TEAMKB_TENANT_ID, TEAMKB_BASE_PATH, and TEAMKB_ROLE=admin.
- Protect the local base path with operating-system permissions;
TEAMKB_ROLE=admin is a tool
registration gate, not remote authentication.
- Read the runtime contract before operating mixed local/remote mode.
Instructions
Save a new fact
- Search first with
teamkb_search({ query: "KEY_TERMS", scope: "all" }). If existing governed
content already covers the fact, stop instead of duplicating it.
- Exclude ephemeral debugging, personal preferences, secrets, credentials, and facts already
maintained in authoritative project documentation.
- Choose
decision, pattern, convention, architecture, troubleshooting, onboarding, or
reference.
- Call
teamkb_propose with { title, content, category, filePaths? }.
- Report the returned
candidateId as queued to the local spool. Promotion happens only when the
separate curator processes it; this skill does not run or prove that step.
Retire or restore a memory
- Search for the memory and extract its UUID from a UUID-shaped citation filename such as
qmd://kb-curated/9c2e42f1-7b60-4ed2-a9dd-648d6c786d43.md.
- Call
teamkb_transition with { memoryId, to, reason, actor }.
- Use only transitions the current tool can complete safely:
active to deprecated or archived,
deprecated to active or archived, and superseded to archived.
- Do not request
active to superseded through this version of the MCP tool; its input surface
cannot supply the required replacement-memory link.
Check local status
Call teamkb_status for local database counts and recent governance feedback. Status does not list
spool proposals and cannot confirm that a newly queued candidate has been promoted.
Output
- Save: candidate UUID, local-spool disposition, and an explicit “not yet promoted” statement.
- Transition: memory UUID, old and new lifecycle states, and audit-event UUID.
- Status: counts by lifecycle/category/tenant and recent feedback, without printing
dbPath unless the
operator explicitly requests it.
Examples
teamkb_search({ query: "Apache license", scope: "all" })
teamkb_propose({
title: "License: Apache-2.0 across public engines",
content: "The public engines use Apache-2.0.",
category: "decision"
})
Candidate 4f3a2e0e-0ee4-4f63-b63e-22306c45115a was queued locally. It is not governed memory until the
curator processes it.
teamkb_transition({
memoryId: "9c2e42f1-7b60-4ed2-a9dd-648d6c786d43",
to: "deprecated",
reason: "Replaced by the current deployment runbook",
actor: "registrar-operator"
})
Memory 9c2e42f1-7b60-4ed2-a9dd-648d6c786d43 moved from active to deprecated; audit event
83e1bc9a-0048-44e7-b70b-52bc7cf6e954 recorded the transition.
Error Handling
| Situation |
Response |
| Write tools are absent |
The read-only plugin or member role is active; use the built local server with TEAMKB_ROLE=admin. |
| Spool write fails |
Report the error; do not claim the candidate was queued. |
| Transition ID is not UUID-shaped |
Stop and obtain an exact ID from a returned citation. |
| Transition is rejected |
Report the state-machine reason; do not route around it. |
| Content may contain a secret |
Strip it before calling teamkb_propose; policy scanning is not the only control. |
Guardrails
- Never persist secrets, tokens, credentials, or private keys.
- Require a human-readable transition reason and a truthful actor identifier.
- Local filesystem access is the security boundary for writes; a bearer token does not authorize this
tool path.
- Provenance proves capture origin, not factual truth.
Resources
- Bob's Big Brain Registrar — source,
build instructions, and operator documentation.
apps/mcp-server —
the required full operator runtime.
brain — read counterpart using the Registrar-native teamkb_search tool.
1---2name: brain-save-23description: Create one Registrar memory proposal or apply a supported lifecycle transition to an existing memory. This is a local operator write and never auto-fires. Use when an administrator needs to preserve one team fact or retire an outdated memory. Trigger with "/brain-save".4license: Apache-2.05---67# Brain Save — write one local Registrar memory proposal89Propose one fact to the local Registrar spool or apply one supported lifecycle transition. Never claim10that a queued proposal is already governed or searchable.1112## Overview1314This is the full Registrar operator surface, not the read-only `intent-brain` marketplace runtime and15not the unified `governed-second-brain` plugin. `teamkb_propose`, `teamkb_transition`, and16`teamkb_status` operate on the local paths configured for `apps/mcp-server`, even when remote search is17configured. Keep `TEAMKB_API_URL` unset when the search and write sides must address the same brain.1819## Prerequisites2021- Build and configure `apps/mcp-server` from this repository.22- Set `TEAMKB_TENANT_ID`, `TEAMKB_BASE_PATH`, and `TEAMKB_ROLE=admin`.23- Protect the local base path with operating-system permissions; `TEAMKB_ROLE=admin` is a tool24 registration gate, not remote authentication.25- Read [the runtime contract](references/runtime-contract.md) before operating mixed local/remote mode.2627## Instructions2829### Save a new fact30311. Search first with `teamkb_search({ query: "KEY_TERMS", scope: "all" })`. If existing governed32 content already covers the fact, stop instead of duplicating it.332. Exclude ephemeral debugging, personal preferences, secrets, credentials, and facts already34 maintained in authoritative project documentation.353. Choose `decision`, `pattern`, `convention`, `architecture`, `troubleshooting`, `onboarding`, or36 `reference`.374. Call `teamkb_propose` with `{ title, content, category, filePaths? }`.385. Report the returned `candidateId` as queued to the local spool. Promotion happens only when the39 separate curator processes it; this skill does not run or prove that step.4041### Retire or restore a memory42431. Search for the memory and extract its UUID from a UUID-shaped citation filename such as44 `qmd://kb-curated/9c2e42f1-7b60-4ed2-a9dd-648d6c786d43.md`.452. Call `teamkb_transition` with `{ memoryId, to, reason, actor }`.463. Use only transitions the current tool can complete safely: `active` to `deprecated` or `archived`,47 `deprecated` to `active` or `archived`, and `superseded` to `archived`.484. Do not request `active` to `superseded` through this version of the MCP tool; its input surface49 cannot supply the required replacement-memory link.5051### Check local status5253Call `teamkb_status` for local database counts and recent governance feedback. Status does not list54spool proposals and cannot confirm that a newly queued candidate has been promoted.5556## Output5758- Save: candidate UUID, local-spool disposition, and an explicit “not yet promoted” statement.59- Transition: memory UUID, old and new lifecycle states, and audit-event UUID.60- Status: counts by lifecycle/category/tenant and recent feedback, without printing `dbPath` unless the61 operator explicitly requests it.6263## Examples6465```text66teamkb_search({ query: "Apache license", scope: "all" })67teamkb_propose({68 title: "License: Apache-2.0 across public engines",69 content: "The public engines use Apache-2.0.",70 category: "decision"71})7273Candidate 4f3a2e0e-0ee4-4f63-b63e-22306c45115a was queued locally. It is not governed memory until the74curator processes it.75```7677```text78teamkb_transition({79 memoryId: "9c2e42f1-7b60-4ed2-a9dd-648d6c786d43",80 to: "deprecated",81 reason: "Replaced by the current deployment runbook",82 actor: "registrar-operator"83})8485Memory 9c2e42f1-7b60-4ed2-a9dd-648d6c786d43 moved from active to deprecated; audit event8683e1bc9a-0048-44e7-b70b-52bc7cf6e954 recorded the transition.87```8889## Error Handling9091| Situation | Response |92| -------------------------------- | --------------------------------------------------------------------------------------------------- |93| Write tools are absent | The read-only plugin or member role is active; use the built local server with `TEAMKB_ROLE=admin`. |94| Spool write fails | Report the error; do not claim the candidate was queued. |95| Transition ID is not UUID-shaped | Stop and obtain an exact ID from a returned citation. |96| Transition is rejected | Report the state-machine reason; do not route around it. |97| Content may contain a secret | Strip it before calling `teamkb_propose`; policy scanning is not the only control. |9899## Guardrails100101- Never persist secrets, tokens, credentials, or private keys.102- Require a human-readable transition reason and a truthful actor identifier.103- Local filesystem access is the security boundary for writes; a bearer token does not authorize this104 tool path.105- Provenance proves capture origin, not factual truth.106107## Resources108109- [Bob's Big Brain Registrar](https://github.com/jeremylongshore/bobs-big-brain-registrar) — source,110 build instructions, and operator documentation.111- [`apps/mcp-server`](https://github.com/jeremylongshore/bobs-big-brain-registrar/tree/main/apps/mcp-server) —112 the required full operator runtime.113- `brain` — read counterpart using the Registrar-native `teamkb_search` tool.