How to Use Cerebro in the ORIA Workbench
How to Use Institutional Memory in the ORIA Workbench
Institutional Memory is ARPIA's persistent knowledge layer, powered by Cerebro. Inside an ORIA Workbench session it appears as a first-class panel section — not a tool you attach — and it is on by default.
The Workbench is the one place where institutional memory and structural authoring meet in the same session. Start with The Defaults Are the Design: the session's opening posture tells you more about how to work well than any list of rules.
For the Workbench itself, see How to Use the ORIA Workbench. For the read-first counterpart, see How to Use Institutional Memory in the ORIA Reasoner.
Where to find it. Right-hand panel, first section, labelled Institutional Memory with a badge showing how many domains you can access. The gear icon opens its settings; the power icon toggles it for the session. It sits above Repository, Ontology Nodes, Tools in this session, Artifacts and Files — it is not an entry inside Tools, and not an MCP collection you connect.
Overview
| Panel name | Institutional Memory (powered by Cerebro) |
| Available in | ORIA Workbench sessions, and the ORIA Reasoner |
| Default state | On. Every session, unless you turn it off in the panel |
| Default domain scope | All domains you can access. The badge shows the count |
| What it stores | Decisions, rules, procedures, customer and product knowledge — with attribution and traceability |
| Scope boundary | Organization → Domain → Memory (mid). No memory crosses organizations |
| Writes to your repository? | No. Memory writes go to memory, never to repository structures — though memory can inform structural writes you approve |
What makes the Workbench different from the Reasoner: both read and write memory, through an identical settings panel. Only the Workbench can author structure.
The Defaults Are the Design
A fresh Workbench session opens with a deliberate asymmetry, and the empty state says so: "I start with nothing enabled on purpose — reshaping a repository should be something you switched on for this session. Once it is on, every change still waits for you to approve a plan."
| Capability | Default | Who sets it | Implication |
|---|---|---|---|
| Institutional Memory | On | You | Grounding in organizational knowledge is the normal path |
| Domain scope | All accessible | You | Broad by default; narrowing is your choice |
| Repository | None selected | You | Nothing can be authored until you choose where it lands |
| Repository write scope | Per repository | Administrator | Table creation needs a repository marked RW |
| Authoring tools | Off | You | Structural change requires an explicit switch-on |
| Author-Apply permission | Per profile | Administrator | Ontology changes can be proposed without it — not applied |
| Plan approval | Always | You | Even with authoring on, every change waits for your approval |
Read together: memory is opt-out, authoring is opt-in, and execution is gated twice — once by permission and once by your approval. The most consequential configuration — memory informing structural writes — cannot happen by accident. You select a writable repository, enable authoring, hold the apply permission, and approve a plan.
Knowing that shapes where your attention belongs. The approval prompt shows you what will change. It does not show you whether the reason for the change is sound. A plan reading "rename to contract_renewals per the naming convention" looks the same whether that convention is a recorded rule or an inference. Checking the reasoning happens before the plan, not at the prompt.
Why This Combination Matters
The value: Oria can consult a prior decision — a naming convention, a modeling standard, a resolution from a past change — and apply it directly to the tables and nodes it authors. Your ontology stops drifting away from the decisions that shaped it.
Where care is needed: whatever memory says becomes the stated rationale for changes you're asked to approve. Verifying that rationale is the highest-value habit in this tool. See Working Well.
Prerequisites
- Institutional Memory is enabled for the work-area by an ARPIA admin.
- Your user has at least
read_onlyscope on the domains you'll query, andread_writeon any domain you'll save to — or move a memory into. - ORIA Workbench itself is configured — a Model Group must be set, or the Workbench is disabled entirely. See Before You Start.
- Your seat plan is Arpia Builder. Platform-level building, including ontology authoring and governance, is not available on Oria Basic or Oria Pro.
- To author: a Repository must be selected (right panel → Repository → pencil icon). Everything you author lives there. Until one is chosen the panel reads "No repository selected." To create tables, that repository must be writable — check for the
RWscope badge in the picker. - To author: switch on the tools you need from Tools in this session → Ontology Authoring — Author Tables (inspect and create tables) and Author Nodes & Relations (model them).
- To apply ontology changes: your profile needs the Author-Apply permission. Without it, Oria can propose and you can review, but nothing commits.
Access is granted by an administrator. A user can be added to a domain, but removing access or changing an existing scope (read_only → read_write) is an administrative action. Grant deliberately.
The Institutional Memory Panel
Expanding the section lists your in-scope domains as chips under a header reading All domains [n] — everything you have access to. The gear icon opens the settings dialog. This dialog is identical in the ORIA Reasoner, so the mental model transfers between the two tools.
1. Use institutional memory in this session
Checked by default. Turn it off and Oria answers from your session data and the conversation only — no organizational grounding.
Turning it off is a legitimate tool, not a failure state. Use it when you want an unanchored second opinion: a modeling approach not shaped by prior decisions, or a check on whether general knowledge agrees with your institutional record. Just know which mode you were in when you quote the result.
2. Limit to these domains
Empty by default (All my domains…), meaning Oria may read any domain you can access. Choose specific domains and it cannot read outside them. Organization-wide rules are included either way.
Narrowing scope is good practice: sharper answers, and less chance that unrelated or work-in-progress content shapes the response. If your organization keeps sandbox or test domains, they are in scope by default — worth excluding when the answer matters.
3. Ask me before saving anything
Unchecked by default. The consent model is asymmetric:
| Save target | Default behavior |
|---|---|
| Shared domain | Always asks. Unconditional — this setting does not change it |
| Personal memory | Does not ask. Checking the box extends the prompt to personal saves too |
Nothing is written to a shared domain without a prompt. Personal memory accumulates without one unless you opt in.
Turn it on if you audit your own memory, work in a regulated or evidentiary context, or simply want every write to be a decision you made rather than one you allowed. The cost is a click per save. The benefit matters because memory has a 15-day edit window — after that a record can only be retired, not corrected.
Conceptual Model
There are no default domains. Every domain is created by your organization. The names used on this page —
acme_product,acme_security,acme_docs— are illustrative only. The two names that are product concepts rather than organizational choices areglobal(organization-wide immutable rules) andpersonal.
Organization ← tenant boundary; isolation is per-tenant
└── Domain (acme_security, acme_docs, global, ...)
└── Memory (mid_xxxxxxxx)
├── knowledge_type_id (from your organization's types)
├── parent_mid (causal antecedent)
├── references[] (external links with a role)
├── expires_at (optional expiration)
└── status (APPROVED | INACTIVE)
| Object | What it is | What to know |
|---|---|---|
| Organization | Tenant boundary | Nothing crosses it |
| Domain | Grouping and permission scope | Every save and retrieval is bound to a domain |
Memory (mid) | Atomic unit of knowledge | Editable for 15 days from creation. Frozen after that |
knowledge_type_id | Semantic classification | Determines retrieval priority. The valid set is per-organization — read it from init |
parent_mid | Causal link to an antecedent | Only the primary, canonical antecedent — never "related to" |
references[] | External links with a role | What makes a search answer auditable |
expires_at | Auto-expiration | The only automatic hygiene mechanism |
status | APPROVED or INACTIVE | The manual mechanism. INACTIVE retires a memory — and it is the only option once the edit window closes |
Knowledge types
The types below are typical. The authoritative set for your organization is whatever cerebro_init returns in available_types — don't assume a type exists until you see it there.
| Type | Intended use | Workbench example |
|---|---|---|
Immutable Rule | Non-negotiable organizational rule | Naming convention enforced across all node authoring |
Business Rule | Business rule, may change | How contract_renewals maps to the Customer entity |
Procedure | Repeatable sequence of steps | Steps to deprecate a table and re-point dependent nodes |
Customer Knowledge | Customer-specific context | Configuration particularities for one customer |
Product Knowledge | Product behavior | Repository vs. Data Source distinction |
Fact | Verified, stable data point | Oria = Ontology Reasoning Interactive Agent |
Tip | Practical learning | An operational shortcut discovered in the field |
Todo Item | Pending work | Open items from an authoring session |
Reference roles
Unlike knowledge types, the role on a reference is a fixed, closed set:
| Role | Use it for |
|---|---|
context | Background the memory draws on |
quoted | A source the memory quotes directly |
discovery | Where the knowledge was first found |
contradicted | A source this memory supersedes or disagrees with |
Any other value is rejected. source in particular is a common guess and is not valid — use context or quoted.
The Six Tools
The panel is the interface; these are the mechanics underneath it. You won't normally call them by hand, but knowing what each does explains the behavior you see.
cerebro_init — discovery
cerebro_init — discoveryRuns once at the start of a session that touches organizational context. Returns the authenticated user, organization_id, organization_name, available_types, the accessible domain list, last_saved_memories, and global_immutable_knowledge.
{ "action": "initalize" }
The response informs later calls silently — it isn't printed unless you ask. Worth asking for once: the global immutable rules it surfaces are the constraints your organization has already decided are non-negotiable, and reading them often changes the question you were about to ask.
Init runs once per conversation, with one exception: re-run it after a successful cerebro_config.
cerebro_load — broad context
cerebro_load — broad contextFor opening work on a known scope: "I'm extending the billing ontology," "let's continue the ERP migration model." domain is an array.
// Mode 1 — semantic retrieval within a scope (default)
{ "query": "question or topic", "domain": ["acme_product", "global"] }
// Mode 2 — specific memory by ID
{ "mid": "mid_a1b2c3d4" }
// Mode 3 — latest memories in a domain
{ "domain": ["acme_docs", "global"] }
// Mode 4 — inventory (metadata only, no content)
{ "mode": "list", "domain": ["acme_docs", "global"] }
list mode is the most useful and most overlooked. Use it for domain onboarding, for duplicate detection before any save, and as a safe default when it isn't clear whether Load or Search applies.
cerebro_search — specific answer
cerebro_search — specific answerFor a pointed question institutional knowledge could answer: decisions, rules, standards, prior resolutions.
// Scoped to domains
{ "query": "natural-language question", "domain": ["acme_compliance", "global"] }
// All accessible domains plus global rules
{ "query": "natural-language question" }
search returns a synthesized answer plus an attribution block listing the contributing memories and their external references. That block is presented as-is, never paraphrased or trimmed — it is what makes the answer verifiable. If a search returns nothing, that is stated explicitly rather than filled in from general knowledge.
Load vs. Search
| Signal | Tool |
|---|---|
| "I'm starting on X" / "load the context for Y" | Load (broad) |
| "what's the rule for X?" / "what did we decide about Y?" | Search (specific) |
| "what's in domain Z?" | Load mode:"list" |
| "where did that figure come from?" | Load by mid (verification) |
| It's already in the session | Neither — no need to re-query |
| It's general knowledge, not organizational | Neither — this isn't a search engine |
In one line: Load answers "give me everything for this scope." Search answers "answer this question."
cerebro_save — create
cerebro_save — createCreates only, never edits. A payload containing a mid is rejected and routed to cerebro_update.
Reactive only. Memory is written when you say "save," "remember," or "persist." Finishing an authoring task does not by itself write a memory.
{
"title": "Memory title",
"knowledge_type_id": "Procedure",
"content": "Content...",
"domain": "acme_product",
"parent_mid": "mid_XXXXX",
"references": [
{ "url": "https://docs.arpia.ai/...", "title": "Original doc", "role": "context" }
],
"expires_at": "2026-12-31 00:00:00"
}
title, knowledge_type_id, content and domain are required.
domainis a single string here — not an array. Load and Search take arrays; Save takes one domain. If knowledge belongs in several domains, issue several saves.
Don't save when: nothing identifiable was decided or discovered; it's a personal preference (this is organizational knowledge, not user configuration); or a near-duplicate may exist — run load mode:"list" first, and if it's already there, what you want is an edit.
Content fidelity: if a draft was shown to you before saving, the saved title and content are character-identical to that text. No re-summarizing at save time — otherwise you approved one thing and the record says another.
Continuations are new saves. An addition to an existing memory is a new memory, optionally linked via parent_mid.
parent_mid guidance
parent_mid guidanceLink only the primary, canonical antecedent:
| New memory | Parent |
|---|---|
| DONE / PROGRESS / SHIPPED | the original TODO |
| Bug-fix documentation | the bug or the delivered feature |
| Postmortem | the incident memory |
| Replacement / refinement | the design it supersedes |
| Correction | the corrected memory |
| Next step | the previous step |
Omit it when the relationship is loose ("related to," "same topic") or when several parents would apply — mention it in the body text instead. When in doubt, omit: it's cleaner to add a link later than to un-link a wrong one.
cerebro_update — correction
cerebro_update — correctionEdits an existing record in place. Never creates. Requires a mid. If you don't have one, find it via search or load and confirm it's the right record before updating.
Reactive only — called when you explicitly ask to change, fix, correct, relink, re-domain, expire, or deactivate a memory. Recording something new, even a continuation, is a save.
Editable fields: title, content, domain, knowledge_type_id, references, expires_at, parent_mid, status. At least one must be present. Partial updates send only what changes; omitted fields are untouched.
// Content only (most common)
{ "mid": "mid_XXXX", "content": "Corrected content." }
// Move domain — requires read_write on the TARGET domain
{ "mid": "mid_XXXX", "domain": "acme_engineering" }
// Set an expiration
{ "mid": "mid_XXXX", "expires_at": "2026-12-31 00:00:00" }
// Clear an expiration — empty string, not null
{ "mid": "mid_XXXX", "expires_at": "" }
// Detach parent (becomes a root memory) — empty string, not null
{ "mid": "mid_XXXX", "parent_mid": "" }
// Retire a memory
{ "mid": "mid_XXXX", "status": "INACTIVE" }
Three semantics worth memorizing:
- Clearing vs. changing. For
expires_atandparent_mid,""is an explicit clear; omitting the field leaves it as-is. Use the empty string, notnull. - References are replaced, not merged. Sending
referencesoverwrites the whole list — to add one, resend the existing entries too. An empty array is rejected, so references cannot be cleared this way. statusaccepts onlyAPPROVEDorINACTIVE.
The response reports updated_fields. Fields that weren't part of the edit report unchanged.
Edit window: 15 days from creation. Re-parenting does not extend it. Past the window the record is frozen — the remaining path is to mark it
INACTIVEand carry the correction forward as a new save,parent_mid-linked to the record it replaces.
cerebro_config — domain structure
cerebro_config — domain structure// Create a domain
{ "action": "create_domain", "domain_slug": "slug_code", "domain_name": "Name" }
// Grant a user access
{ "action": "add_user_domain", "domain": "domain name",
"user": "username", "scope": "read_only | read_write" }
domain_slug: lowercase, underscores, no spaces or special characters. "Acme customer notes" →acme_customers.add_user_domainmatches the domain by name, not by slug.- The caller must already hold
read_writeon that domain. - Grants only. Revoking access or changing an existing scope is an administrative action.
After every successful config, cerebro_init runs again. A new or renamed domain, or newly granted access, won't appear in Load, Save, or the panel's domain list until the session context refreshes.
On rename, prior saves and external tools referencing the old slug will need updating.
Working Well with Memory + Authoring Tools
In a read-only session, memory shapes an answer. In a Workbench session with authoring enabled, memory shapes a plan you'll be asked to approve. A few habits make the difference.
1. Check the reasoning before the plan, not at the approval prompt
Any numeric value, identifier, or naming decision Oria cites from memory is worth verifying against its source memory (load by mid) before it becomes the rationale for a structural change. Prefer search when attribution matters — only search returns the contributing-memories block.
The approval prompt shows you what will change. It doesn't show you whether the stated reason is grounded.
2. Scope domains deliberately
Default scope is every domain you can access. Narrow it to what the question actually needs, and exclude sandbox or work-in-progress domains when the answer will inform a structural change.
3. Leave authoring off until you need it
The session already defaults this way; the discipline is not enabling it out of habit. If you're exploring what memory says, you don't need a repository selected or authoring switched on. The read paths are equally available in the ORIA Reasoner, which cannot author structures at all.
4. Read the plan's justification, not just its diff
The plan gate is a real control — use it as one. Ask why each change is proposed. If the answer cites a rule, a convention, or a prior decision, that citation is the thing to check. A correct-looking change built on a misremembered convention will apply cleanly and still be wrong.
5. Use the propose/apply split as a review step
Author Nodes & Relations lets anyone who enables it propose ontology changes; applying them requires the Author-Apply permission. That gap is a control, not just a restriction.
It supports a two-person pattern: a modeller without Author-Apply drafts the change and its memory-based justification, and a second person with the permission reviews both before committing. The proposer checks what is changing; the approver checks why. For regulated or high-blast-radius work, that separation is worth arranging deliberately rather than granting Author-Apply to everyone who models.
6. Get the save right the first time
The edit window is 15 days. Before saving: run load mode:"list" to rule out a duplicate, confirm the domain and knowledge type against init, and check the content against what was shown to you.
7. Memory is not approval
Memory records that a decision was made. It doesn't make one. The in-session plan gate is a technical control, not a governance one — structural changes still go through your normal change-management process. Automating the execution of a change does not remove the need to authorize it.
Common Pitfalls
Confident specifics
Language models learn institutional structure accurately and can then state specific details — identifiers, metrics, dates — with the same confidence whether they were retrieved or inferred. In an authoring session, that confidence arrives as the justification for a plan.
The habit that addresses it: for anything specific, open the source memory rather than accepting the synthesis.
Approving the diff, not the reason
The plan gate can create a false sense of completeness — every change was reviewed, so nothing slipped through. But reviewing what changes isn't reviewing why. That's the gap §1 exists to close.
Author-Apply granted by default to everyone who models
The propose/apply split only functions as a review step if the two roles are actually held by different people. Granting Author-Apply alongside authoring access by default collapses four gates into three and removes the one that involves a second pair of eyes.
Sandbox content in scope
Test and working domains sit in the default scope alongside authoritative ones, and a confident answer grounded in throwaway content looks exactly like a confident answer grounded in a decision. Narrow the scope, and expire or retire test domains you're finished with.
Memory written outside authoring sessions
Memory writes aren't confined to the Workbench. In the ORIA Reasoner, institutional memory is on by default, shared-domain saves prompt, and personal-domain saves don't unless the user opts in. If your governance model assumes memory only changes during authoring, revisit that assumption.
Retired memories that were never retired
Renaming a memory's title to mark it stale does not remove it from retrieval. Only expires_at or status: INACTIVE does.
Typical Workflow
- Open or resume an ORIA Workbench session. Institutional Memory is already on.
- Open the panel. Set the domain scope and decide whether you want save prompts.
- Review the global immutable rules — does any apply to today's authoring work?
loadthe relevant domain context, orsearchfor the specific decision or standard you need.- Verify any cited identifier or figure against its source memory.
- Select a Repository — everything you author lives there. Confirm the
RWbadge if you'll be creating tables. - Add the Ontology Nodes you intend to edit, then switch on the authoring tools you need.
- Author the tables and nodes. Review each plan's justification before approving.
- Validate by querying the resulting structure.
- If a durable decision came out of the session, say so explicitly — then it's saved, with
parent_midpointing at its antecedent.
Leverage Points
Small habits with disproportionate effect on system quality:
expires_athygiene. The only automatic decay mechanism. Without it, signal degrades as volume grows. Apply it by default to anything operational with a known useful life.mode:"list"before every save. Marginal cost; prevents the duplication behind most contradictory answers.parent_middiscipline. Turns a flat set of memories into a navigable causal graph where every decision inherits its history. It's what separates memory from archive.- Keep the attribution. It's simultaneously the audit trail and the check on confident specifics. Trimming it for brevity loses both.
- Retire, don't accumulate.
status: INACTIVEis the only corrective action that still works on a frozen record. - Ask "why" at every plan gate. The habit that turns an existing technical control into a real check on reasoning.
- Separate propose from apply. Author-Apply is the only gate in the chain that can involve a second person. Deciding who holds it is a governance choice, not an access-request formality.
Known Limitations
- 15-day edit window. Past 15 days from creation a memory is frozen; re-parenting doesn't extend it. The remaining path is
INACTIVEplus a corrected new save. - Access changes require an administrator. Domain access can be granted in-session, but removing access or changing an existing scope cannot.
- References cannot be cleared. On update the list is fully replaced, and an empty array is rejected.
- The
roleenum is closed. Onlycontext,quoted,discovery, andcontradictedare accepted; other values are rejected at runtime. - Renaming a title doesn't retire a memory. Only expiration or
INACTIVEremoves it from retrieval. - The plan gate confirms the change, not the reasoning. It shows what will change, not whether the stated reason is grounded.
- Applying ontology changes requires the Author-Apply permission. Without it, memory-informed plans can be drafted and reviewed but not committed.
- Table creation requires a writable repository. A read-only repository allows inspection but not DDL.
- Requires admin setup and an Arpia Builder seat. The Workbench is disabled until a Model Group is configured at the work-area level; Institutional Memory requires separate work-area enablement; platform-level building requires the Arpia Builder plan.
Updated 3 days ago
