Engineering documents from the cMCP pilot build (October 2026). Statuses here are engineering states, not product claims: see cMCP for what is available. All documents
Status 2026-10-11. Stages 1a–1t of Build Phase 1 are built and tested (1l–1s on 2026-10-11, M-109; 1t, M-111). The pilot company has not adopted cMCP, so its account is now a test account with its company data cleared. Next, on hold until the owner resumes it (M-112): the web console moves to cmcp.it-labs.in and the API, sign-in, database and local AI model to a GPU server, so the addresses on this page will change. See the build plan, section 15.

← cMCP home

Space and memory model: placing every memory in the right space

Paper v1.1 · adopted in the build plan (M-106) · built in stages 1l–1t v1.1: indexes and index cards Consolidated and expanded 2026-10-09
This version brings together the space-mapping paper (v0.1–v0.3, including the user's proposals) and a new part on building memory from the content of spaces, in one order. It designs from the problem up, not from what cMCP does today. It is based on seven research agents (four earlier, three for this paper) and the user's decisions. When this was written nothing was built; it has since been built as stages 1l–1t (M-109, M-111), and the build plan records where the build differs.

Summary

The design in eleven points
  1. Who creates memory is always known from a credential. There are four kinds of actor: a person, an agent working for a person (claude.ai, Claude CLI), a task bot doing one job, and a digital worker, a long-lived AI worker with its own identity and a human master.
  2. Places are the company's structure: the org (created by the web-admin, with an org ID), projects, teams and clients. Each has its own ID.
  3. Spaces are where work happens: repos, mailboxes, shared drives, Teams or Slack channels, Jira projects, personal folders, chat projects. cMCP gives every space one space ID, built from the platform's own stable id, never from a name or path. The person is never part of it.
  4. Every space has an owner side: company, person or client. It is decided from hard facts, such as which company tenant the space lives in. If it's unknown, the space counts as the person's and stays private.
  5. Spaces are linked to places by the company (declared), by the person (confirmed), or by cMCP (suggested, with a confidence). A link never gives anyone new rights.
  6. At session start, cMCP seeds every app with the person's space IDs: the space manifest. A small helper on the person's machine matches the folder to a space ID and tags each stretch of the session.
  7. The app posts its memory, and cMCP routes each item to its space. Anything it can't place stays in the person's private work pool until a link appears.
  8. Every memory item carries a full memory address: org, places, space, actor, master, app, run. It is stored once where it was created, and links decide what it counts toward.
  9. The same items build two memories. Collective people memory is what the people (and workers) on a place know, shared only in aggregate. Organizational memory is curated and approved, and flows back down to everyone working in a linked space.
  10. The content of spaces (mail, chats, documents, issues, repos) is also turned into memory, in four layers: raw, cleaned, extracted, synthesised. Each record shows its source and keeps the source's access rules. That gives decision logs, open actions, project status, procedures and "who to ask" for people, teams, projects and the org.
  11. Everything is kept in searchable indexes, one per category: people; agents, bots and workers; places; spaces; topics; memory; knowledge; and sources. A link graph ties them together. Short index cards for the person and their current place are loaded at session start, like Claude's own memory index, and the details are fetched only when needed.

1. The problem

A. Organizational spaces
The company owns fixed spaces that people work in: GitHub / Bitbucket organizations and repos, Jira projects, Confluence spaces, shared mailboxes, shared drives, Teams / Slack channels, servers. They change slowly, and the company decides what they belong to.
B. People's spaces
People have their own spaces: their mailbox, private chats, personal GitHub, own Drive or OneDrive, Notion pages, local folders on several machines and chat-app projects. In every space they use many AI agents and bots, and those create memory all day.
The issue. Memory created in people's spaces, and the knowledge held in the spaces themselves, must be mapped to the organization, placed correctly, linked and stored, so that it builds both organizational memory and the people's collective memory. Every piece of memory must answer seven questions: which space, which app, which agent or bot, which person, which team, which project and which org.

Goals:

Not goals (for now): replacing the company's search engine, storing every mail and chat forever, or monitoring people.

2. Design principles

#PrincipleMeaning
P1Identity from credentialsOrg, actor, master and app come from the sign-in or key. A caller only says where it is and which session it's in.
P2Stable ids, not namesSpaces are known by the platform's stable id; names, URLs and paths are only aliases.
P3Owner side from hard factsCompany, person or client comes from the tenant, organization or domain. Unknown means the person.
P4Private by defaultAnything not linked by the company or confirmed by the person stays with the person.
P5Store once, count by linksAn item lives where it was created; links decide what it counts toward. Nothing is copied.
P6Routing labels, never sharesA space ID decides what an item counts toward, never who can see it.
P7Machines match, people decideExact matching is automatic. Anything that widens visibility or changes ownership needs a person.
P8Late bindingItems that can't be placed wait in the work pool and are placed when a link appears. Nothing is forced.
P9Derived data keeps its source's rulesEverything generated from a source shows that source and inherits its access, retention and deletion.
P10Everything stamped and auditableEvery item carries its memory address; every link and decision records who made it, when and why.

3. Vocabulary

TermMeaningExample
PlaceA unit of the company's structure that memory can belong toOrg Pilot, project Shipping, team Platform, client Acme
SpaceAnywhere work happens and memory or knowledge is createdRepo, mailbox, shared drive, Teams channel, Jira project, local folder, chat project
Space IDcMCP's own id for a registered space; one per space, never per personsp_ship_api
Space addressThe platform identity behind a space ID: kind, tenant or host, stable idspace:git:bitbucket.org/{7c1e…}
Owner sideWho the space belongs toCompany, person, client
ActorWho creates memory: a person, agent, task bot or digital workerAlice; Claude CLI; CI review bot; "Shipping release coordinator"
AppOne installed AI tool for one actor on one device"Claude Code on Alice's laptop"
RunOne session or job run of an appA Claude Code session id, a cron run id
LinkA statement that a space belongs to a place, with kind, evidence, confidence and authorsp_ship_api → project Shipping (declared)
Space manifestThe person's space IDs, with recognisers and place paths, sent to each appSection 8
Memory addressThe full who / where / how stamp on every itemSection 10
LaneWhere an item is stored: its origin actor in its origin space, or the space itself for space knowledge"Alice · sp_ship_api", "space · #shipping"
Work poolThe person's private memory that is not yet routed to a spaceNotes from ~/scratch
Session copyThe session memory an app posted, kept as the source of routed itemsSession 9c1, 30 days
Collective memoryAll items counting toward a place, still owned by their creatorsWhat the people on Shipping noted
Organizational memoryCurated, approved knowledge of a place"Shipping releases use blue-green with a 5-minute canary"

The picture

Organization (places) Org: Pilot Project: Shipping Team: Platform Company spaces (catalog) Bitbucket repo shipping-api Jira project SHIP Shared drive "Shipping docs" Slack #shipping All declared by the company and linked to places by mapping rules Person: Alice Apps: Claude Code (laptop, server), Cursor, ChatGPT (phone), a CI bot she sponsors Her spaces (registry) Clone of shipping-api (2 PCs) github.com/alice/ship-tools My Drive folder "ship notes" ChatGPT project "Shipping" Local folder ~/scratch Reported by her own tools, never guessed Space graph • one address per space, many aliases • owner side: company / person / client • links space → place, with evidence • every memory stamped with its address solid: same space (her clone = company repo) dashed: link to a place (confirmed / suggested) no line: stays private (~/scratch)
Company places and spaces on the left, a person's spaces on the right. cMCP knows that her clone is the company repo, that three of her own spaces are linked to project Shipping, and that ~/scratch stays private.

4. Actors: who creates memory

Solid facts we start from:

The coming case is AI workers with their own e-mail, name and ID, a long life, and a person as master, who talk to people and other bots by e-mail or Teams. They form a fourth kind: the digital worker.

PersonAgent (delegated)Task botDigital worker
Own identityYesNo: uses the person's sign-inA key issued under a sponsorYes: own e-mail, name, ID and directory entry, plus accounts in Teams, Slack and Jira
Works forThe orgOne person, in their sessionsA person or agent, for one taskA project, team or the org
LifespanEmploymentA session or installationOne run or jobThe project's or org's life, with an end date and reviews
Member of placesYesNo: works within the person's placesNo: borrows its launcher's scope, narrowed to the taskYes: assigned like a member
MemoryOwn lanes, User and Personal memoryThe person's lanes, marked with the agentOwn lane, limited to the taskOwn lanes plus "worker memory"; never Personal memory
Rights ceilingTheir roleNever more than the personNever more than its launcherIts assigned role, never more than its master; never ADMIN
AccountableThemselvesThe personIts sponsorIts master, plus a named backup
Talks toAnyoneIts personNo one (writes results)People and bots by e-mail, Teams, Slack and Jira

How each actor is identified

QuestionAnswered byTrusted?
Which orgThe account the credential belongs toVerified
Which personCompany sign-in. Their other accounts (GitHub login, Atlassian id, Slack id, personal Google) are linked once, by the person signing in to each, or from the company directory. Unmatched accounts are shown, never silently droppedVerified
Which digital workerIts own credential; its accounts are linked like a person'sVerified
Which task botIts key; sponsor and launcher recordedVerified
Which appA registered installation: tool + device + actor. The tool name and version are labelsVerified installation; labels declared
Which runThe tool's own session or run id, sent with every callDeclared; never gives rights
Which spaceThe helper's match against the manifest, or the server's matchMatched, with confidence
Which team and projectDerived from the space's links and the actor's memberships; never sent by the callerDerived

Rules for digital workers

  1. Created only by an ADMIN, in person. Each has a purpose, a master and a backup, assigned places, an end date, and limits on spend and calls.
  2. Never ADMIN. It never approves or grants anything, never reads anyone's Personal memory or work pool, and never creates other workers.
  3. Its own short-lived credentials, never its master's.
  4. Its conversations are spaces. Its mail threads and chats get space IDs and owner sides like any other space, and a client's wall applies when it writes to that client.
  5. Its input is untrusted. Mail and messages from outside or from other bots become memory only as data, never as instructions.
  6. It doesn't count as a person for promotion, so AI workers never out-vote people.
  7. Lifecycle:
    • its master reviews it every 90 days, and a kill switch pauses it at once;
    • if its master leaves and no new master is named within 7 days, it is paused;
    • at retirement, what it learned stays with its places, and its worker memory goes to a successor or the archive.
  8. It always says what it is: an AI badge and who it works for, on every message and item.

5. Places: the company's structure

Places have their own IDs. A space links to places; the place tree (team → project → org) then gives the full path. The person's relation to a space always comes from their membership, which is why the person is never part of a space ID (decided by the user, 2026-10-09).

6. Spaces: identity, owner side and registration

Space address and space ID

The identity of a space is the platform's stable id within its tenant: space:<kind>:<tenant or host>/<stable id>. cMCP issues a short space ID for each address, and every alias (URLs, keys, names, local paths) points to it.

KindStable idRead locally by the helper?Owner side fromWatch out
Git repoHost repo id (GitHub id, Bitbucket UUID) when known, plus the set of root commitsYes: remotes and root commitsCompany organization or workspace vs a user's namespace; managed enterprise accountsThe same remote is spelled many ways; forks and mirrors share root commits; shallow clones hide them
Mailbox / mail threadMailbox id + thread or conversation id (Graph, Gmail)No: through the connectorShared mailbox in the company tenant = company; a personal mailbox = person; external participants = a client signalForwards and quoted copies repeat content
Google DriveFile or folder id; shared-drive idNo documented way: confirm through the person's connected accountShared drive = company; My Drive = person; Workspace domainShortcuts; link keys are secrets, not ids
OneDrive / SharePointTenant + site + item id (or drive + item id)Partly: the sync root, then an online lookupTenant; SharePoint library = company; personal OneDrive = personItem ids are unique only inside their drive
Teams / SlackTenant or workspace (+ enterprise) id + channel idNo: through the connectorCompany tenant = company; a channel shared with another organization = a client signalNames change; shared channels span companies
Jira / ConfluenceSite cloud id + numeric project or space idNo (also from branch names)The site's organizationKeys get renamed, and old keys still resolve
Notion / DropboxPage or database id; namespace idNoTeamspace or team folder vs private section or home folderIds change after migrations (Dropbox)
Chat-app projectThe app's project or conversation idOnly if the app passes itA work plan vs a personal planMobile chats often have no project at all
Local folderA marker file with a generated id (.cmcp-space)YesThe signed-in personCopies duplicate the marker; ask when two folders claim one id

Registration

sp_ship_api space:git:bitbucket.org/{7c1e…} owner: company (workspace "pilot" registered) aliases: bitbucket.org/pilot/shipping-api · github.com/alice/shipping-api (mirror) laptop:C:\src\shipping-api · server:/home/alice/shipping-api · roots a1b2c3… sp_ship_chan space:slack:T01PILOT/C04SHIP owner: company alias: #shipping sp_ship_mail space:mail:pilot/shipping@pilot owner: company (shared mailbox) sp_a_notes space:gdrive:my/1AbC… owner: person alice alias: "ship notes" sp_a_scratch space:local:alice-laptop/{e5f6…} owner: person alice alias: ~/scratch
Link kindMade byEffect
Same spaceThe matcher, when a person's space is a copy of a company space (clone, mirror, synced shared drive)It is the company space
DeclaredThe company: catalog facts, mapping rules ("Bitbucket project SHIP → project Shipping"), or a mapping file in a company repo (.cmcp.yaml)Full link
ConfirmedThe person, for their own space; the place's lead accepts when others will see itemsFull link for that person's items
SuggestedThe matcher, from evidenceShown as "looks like Shipping — link?"; changes nothing until confirmed

Matching ladder

EvidenceConfidenceAction
Same host id, or same tenant + same stable id≈ 0.99Same space, automatically
Identical root-commit set, or same normalised URL with matching roots≈ 0.95Same space, automatically
One shared root commit with another URL (fork or mirror); a Jira key in branch names; a mapping file≈ 0.8Probable: ask before anything changes ownership or visibility
Similar names, the same people active, content close to a place's memory0.4–0.8Suggestion only
Little or nothing< 0.4Stays unlinked (private)
Rules for links.
  1. A link never gives anyone rights: reading a place still needs membership.
  2. Moving anything from the person side to the company side needs the person, and the lead when others will see it.
  3. Content similarity can suggest, never decide.
  4. Every link records who or what made it, when and why. Links are versioned, so history stays honest.

8. The space manifest and the helper (user proposal, adopted)

cMCP seeds every app that creates memory with the person's space IDs at session start, so the app knows from the beginning where it is and what to confirm.

SituationApp behaviour
The folder matches a space ID in the manifestWorks and saves, tagged; nothing to confirm
A copy of a company space the person isn't a member ofSaves to the work pool; offers "ask to join"
An unknown folder or personal repoSaves to the work pool; asks once
A client spaceConfirms first if policy says so; behind the client's wall
No folder (phone chat)Work pool, unless the person or the app names a place

9. Session routing and the work pool

  1. Detect: the helper tags each stretch of the session with its space ID.
  2. Post: at checkpoints (after answers, before compaction, at the end), the app posts its session memory (notes and facts, with the stretch tags and the run id) and a session copy as the source. Whole transcripts are kept only under the rules of M-105.
  3. Route: cMCP splits the memory into single items and decides each one, using the strongest evidence first:
    1. the stretch's space tag;
    2. an explicit mention that matches the manifest, such as a repo name, Jira key or path;
    3. similarity to a space's memory, as a suggestion only.
    Items about the person (preferences, habits) go to their own memory, and items about the work follow the space. One item can link to several spaces without being copied.
  4. Pool: what can't be placed with enough confidence stays in the person's private work pool. It is placed later when a link appears, and a weekly digest lets the person sort the rest.
  5. Return: the answer says what went where and returns the updated memory for the current space.
Session 9c1 · Claude Code · alice-laptop · three folders 10:02–10:40 ~/src/shipping-api → sp_ship_api (Shipping) 6 items → Shipping 10:41–11:05 ~/src/billing → sp_billing (Billing) 2 items → Billing 11:06–11:20 ~/scratch → no space ID ("keep private") 1 item → work pool Not tied to a folder: "prefers short answers" → Alice's own memory (about the person) "check SHIP-412 with the billing team" → Shipping + Billing (one item, two links) Session copy kept as the source (30 days)

A limit: cMCP can't stop a tool writing its own local memory (for example Claude Code's memory files). But the helper knows the space for every stretch, so every local note can be tagged and copied with the right space ID.

10. The memory address on every item

item m_7f3… "Shipping releases use blue-green with a 5-minute canary" WHO org Pilot verified actor person Alice verified (SSO) app Claude Code · alice-laptop verified (device key) v3.x (label) run session 9c1… declared WHERE space sp_ship_api matched 0.99 (host id) owner: company places project Shipping → team Platform → org Pilot link: declared HOW lane Alice · sp_ship_api (stored once) counts collective(Shipping) · org memory: proposed source session copy 9c1, stretch 10:02–10:40
item m_91a… "Release 4.2 waits for billing sign-off on SHIP-412" WHO actor digital worker "Shipping release coordinator" master Alice (backup Bob) launched task bot "jira-sync" run 77 WHERE space sp_ship_chan (#shipping) owner: company → project Shipping HOW lane worker · sp_ship_chan counts: collective(Shipping), marked AI

The address is written when the item is created and is never rewritten. If a link changes later, the new link applies by version.

11. Placement: where an item goes

The space is…LinkStored inCounts towardWho reads the item itself
Company-ownedDeclared or same spaceThe actor's lane in that spaceCollective memory of the linked places; may be promotedThe actor (and their apps); the place in aggregate
Company-ownedNone yetSameOrg collective memory (unplaced); the company is asked to link the spaceThe actor
Person-ownedConfirmed by the personThe person's laneCollective memory of the linked placeThe person; shared items only by their choice
Person-ownedNone or suggestedThe person's lane or work poolNothing outside the personThe person
Client-ownedDeclared to a clientThe actor's lane, behind the client's wallThat client's memories onlyThe actor and the client team
Task bot runThe launcher's placeThe bot's laneCollective memory of that placeThe sponsor and the lead
Digital worker's spaceIts assigned placesThe worker's laneCollective memory, marked AIThe master and the place's members, in aggregate
No space—The person's work poolNothing until placedThe person

12. Two memories from the same items

Collective people memory
  • All items, in all lanes, that count toward a place, including space knowledge (section 13).
  • Each stays owned by its creator; nothing is copied.
  • Shared in aggregate: "7 people on Shipping noted the canary rule": counts and themes, not names, and never for groups smaller than three. Names appear only on items the person shared.
  • Grows by itself as people work, and shows what is actually done.
Organizational memory
  • Curated, approved knowledge of a place.
  • Built by promotion from collective memory: seen by three or more people (humans only), rewritten without names, approved by the lead. Also built by the company directly, and from space knowledge after review.
  • Each item links back to its supporting evidence.
  • Flows down to everyone working in a linked space, on every tool.
  • Survives people leaving.
The loop. Work in any space → items in lanes, stamped → counted toward linked places (collective) → repeated and agreed items promoted (organizational) → sent back through the manifest and context to every app in a linked space → better work → new items.

13. Space knowledge: building memory from the content of spaces

Sections 8–12 cover memory that AI apps create while people work. Spaces also hold knowledge themselves: mail threads, channel conversations, documents, issues, commits. This section covers how cMCP turns that content into memory.

What leading products do. cMCP needs both: an index for finding things, and a small set of durable, sourced records that are worth remembering.

Four layers

LayerHoldsRecord typesKept
1. RawPointers to source items, a content hash, the source's access rules, sync positionSource, Item (message, document revision, issue event), SyncCursorShort, or pointer only for personal and high-risk sources
2. CleanedText with quoted history, signatures, disclaimers and boilerplate removed; split into thread, message and chunk; duplicates droppedThread, Message, Chunk, Participant, Audience, LanguageAs long as the source; used for search
3. ExtractedSmall, typed records from each message with its thread context, each with source line, confidence and extractor versionFact, Decision, ActionItem, Question, Entity, StatusSignal, ProcedureStep, Evidence(person, topic, kind)Durable; corrected or replaced, never silently edited
4. SynthesisedSummaries rebuilt on a schedule from layer 3, always traceableDecisionLog, ProjectStatus, ThreadDigest, TopicSummary, Procedure, Glossary, WhoToAsk, ChangeEventRebuilt; old versions kept for audit

Kinds of space memory, and who they help

KindExamplePersonTeamProjectOrg
Decision (what, who, when, why, source)"Use blue-green for 4.2 — decided by Alice, 3 Oct, #shipping"Decisions I took part inDecision logDecision log, the reasons behind thingsStandards to adopt
Action item (owner, due, status)"Bob to update the canary script by Friday 10 Oct"My open actions, across mail and chatTeam open actionsBlockers—
Fact (with validity dates)"Billing API v2 retires on 31 Dec"What I need to knowShared factsProject factsCompany facts
Status signalJira transitions, PR merges, "release done" messages—ProgressProject status, without status meetingsPortfolio view
Procedure"How to roll back a release" pieced together from three threadsHow do I…?How we workRunbooksCompany playbooks
Entity / glossarySystems, customers, terms, codenamesOnboardingShared languageProject glossaryCompany glossary
Episode / digest"What happened in #shipping this week"What I missedWeekly digestHistory—
Who to ask (counts, not prose)"Canary deploys: Alice (12 threads), Bob (5)"Who can help meExpertise mapKey peopleExpert directory

Where space memory is stored and who sees it

Sources: what is on by default

SourceDefaultWhy
Company repos, Jira, Confluence, shared drivesOn, once linked to a placeCompany work, already shared
Team and project channels (Teams, Slack)On, once linkedWhere decisions are made
Shared mailboxes (shipping@, support@)On, once linkedCompany channels
Client-shared channels and mailboxesOn only behind the client's wallClient data
A person's own mailbox, private chats, My DriveOff; the person can switch it on for themselves, and results stay private to themPersonal; employee-privacy law; not monitoring
A digital worker's mailbox and chatsOn; they are its working spacesIts work record, with the master accountable

Processing

  1. Sync by changes only: Microsoft Graph delta links, Gmail history ids and webhooks, with a full re-sync when a change token expires (Gmail keeps history for about a week).
  2. Clean without any AI: strip quotes, signatures and disclaimers; drop duplicates by hash and message id; resolve people by address.
  3. Filter by rules: drop newsletters, notifications, bot messages and one-line replies, so the slow local model only sees the small share worth reading.
  4. Extract when a thread goes quiet (for example after 2 hours), one message at a time with its thread context. Use a fixed JSON format, keep a quote and line reference, and resolve dates like "next Friday" against the message date.
  5. Synthesise on a schedule: decision log and project status nightly, digests weekly, "who to ask" from counts.
  6. Reconcile: newer facts mark older ones as replaced, with dates. Duplicates add a confirmation instead of a copy.

What the local model can and can't do

Without AI (rules and counts)Local 4B model on CPUNeeds a bigger model (GPU or an approved cloud model)
Cleaning, duplicates, people resolution, status signals from Jira and Git, "who to ask" counts, the salience filterTagging messages (decision, action, question, FYI); extracting short messages into a small fixed format; short thread digestsMerging the same entity across sources; judging contradictions; long-thread reasoning; project-wide and org-wide summaries

Until a bigger model is approved, synthesis uses rules and the simple records, and real accounts stay on the local model only (M-46). Every extracted record carries its extractor version, so it can be re-extracted later with a better model.

14. Indexes: a searchable card for every category

Yes. cMCP keeps one searchable index per category, in two groups. They work the way Claude's own memory index works, at company scale.

Catalog indexes: who and where
  • People: name, e-mail, linked accounts, teams and projects, "ask me about" (counts only).
  • Agents, task bots, digital workers: kind, master or sponsor, purpose, places, status.
  • Places: the org, projects, teams and clients, with purpose, members, spaces, status and key decisions.
  • Spaces: space ID, aliases, owner side, links, recent activity.
  • Topics and glossary: systems, customers, terms and codenames, with where they are discussed.
Content indexes: what
  • Memory index: items created by people, agents, bots and workers (sections 9–12).
  • Knowledge index: decisions, action items, facts, procedures and digests from space content (section 13).
  • Source index: cleaned mail, chat, document and issue text (layer 2), for finding the original.

Every index can be searched by keyword and by meaning. Every entry carries its audience, so a search only returns what the person asking may see. A link graph ties the indexes together: who is a member of what, which space is linked to which place, who created an item and in which space, what each record is about, and which source it came from.

Index cards, loaded at session start (like Claude's MEMORY.md) A short card for the person and their current place, sent with the space manifest. Details are fetched only when needed. Catalog indexes: who and where Peoplenames, e-mails, accounts, ask-me-about Agents · task bots · workerskind, master or sponsor, purpose, places Placesorg, projects, teams, clients, members Spacesspace IDs, aliases, owner side, links Topics and glossarysystems, customers, terms, codenames Content indexes: what Memory indexitems from people, agents, botsand workers, stamped withtheir memory address Knowledge indexdecisions, actions, facts,procedures, digests, who to ask(from space content) Source indexcleaned mail, chat, documentand issue text, with access rules,for finding the original Link graph person member of team / project agent / bot / worker works for person space linked to place item created by actor item created in space item / record counts toward place record about topic record evidence from source Every index: keyword + meaning search, every entry carries its audience, results filtered to what you may see Answering a question 1 Question "What did we decideabout canarydeploys?" from Alice's ClaudeCode, in shipping-api 2 Who and where catalog indexes:"canary" = topic"we" = Alice's placesShipping = 3 spaces 3 Filter only places andspaces Alice maysee; client walls;groups of 3 or more 4 Search memory + knowledgeindexes, keywordand meaning, insidethat scope 5 Answer follow links to thesource: "blue-green,5-min canary — 3 Oct,#shipping (Alice);7 people's notes agree"
Catalog indexes on the left and content indexes on the right, tied together by the link graph. Small index cards are loaded at session start; a question is answered by resolving who and where, filtering by permission, searching, and following links back to the sources.

Like Claude's memory index, at company scale

Claude Code keeps a short index file (MEMORY.md): one line per memory, loaded in every session, with the details in separate files that are opened only when needed. cMCP does the same with index cards:

PLACE CARD · project Shipping (sp_ship_api, sp_ship_chan, sp_ship_mail) v42 · 2026-10-09 Purpose Customer shipping API and release pipeline Status Release 4.2 waiting for billing sign-off (SHIP-412) ← status signal, Jira Decisions Blue-green with a 5-minute canary (3 Oct, #shipping) ← decision log API v1 retires 31 Dec ← fact, shipping@ mail Ask Canary deploys: Alice (12 threads) · Billing API: Bob (5) ← who to ask, counts Procedures Roll back a release · Rotate API keys ← knowledge index Workers Shipping release coordinator (master Alice) PERSON CARD · Alice (for Alice's own apps) Places Shipping (member), Platform (lead) Open actions Review SHIP-415 by Fri 10 Oct ← action item, Jira Spaces sp_ship_api, sp_billing, ship-tools (personal, linked to Shipping) Work pool 3 items waiting to be placed

How a question is answered

  1. Resolve who and where in the catalog indexes: "canary" is a topic, "we" means Alice's places, and Shipping has three spaces.
  2. Filter to the places and spaces the asker may see, including client walls.
  3. Search the memory and knowledge indexes within that scope, by keyword and meaning together.
  4. Follow links to the evidence and the source text.
  5. Answer with sources: "Blue-green with a 5-minute canary — decided 3 Oct in #shipping (Alice); confirmed by 7 people's notes."
QuestionIndexes used
"Who knows about canary deploys?"Topics → knowledge (who-to-ask counts) → People
"What's the status of Shipping?"Places (card) → knowledge (status signals, decisions)
"Where is the billing API spec?"Topics → Spaces → Source
"What did I decide last week?"Memory (my lane) + knowledge (decisions I took part in)
"What does the release coordinator know about 4.2?"Agents and workers → memory (its lane) → Places

How it is stored: the catalog tables (section 18) are the truth. Each index is a search view over them, with keyword and meaning search, built and rebuilt separately for each category. The link graph lives in the same database. Cards are stored with their version and source references, so an answer can always show where each line came from.

15. Changes over time

EventWhat happens
Repo renamed, moved or mirrored (GitHub → Bitbucket)Same space ID; the new URL becomes an alias
Repo forkedA new space with a "fork of" link, suggested to the same place
Personal repo adopted by the companyThe owner side changes only with the person's consent; earlier items stay theirs unless they share them
Space re-linked to another projectNew items follow the new link; old items keep their address; the lead may move history
Channel or mailbox renamedSame space ID (platform id); the new name becomes an alias
Project or team closesOrganizational memory archived under the company's retention; links end
Person changes teamTheir lanes stay theirs; counts move with the space links, not with the person
Person leavesItems in company spaces stay company data (per retention); items in person-owned spaces are removed or exported to them per policy
Digital worker retiredPlace knowledge stays; worker memory goes to a successor or the archive
Source item deletedEvery derived record is updated or removed

Rule: ownership of an item follows the owner side of its space when the item was created.

16. Security and privacy

ThreatControl
A faked recogniser (setting a repo remote to a company URL to reach project memory)Recognisers only route; reading a place needs membership
Planted instructions in mail, chats or documentsMemory is data, never instructions; space knowledge reaches organizational memory only after review; injection check
A wrong link exposing personal itemsLinks never share (P6); people decide anything that widens visibility (P7)
Aggregates revealing individualsNo counts or themes for groups smaller than three
Derived data with weaker access than its sourceThe intersection of source audiences; checked again on every read; deletion flows down
The manifest exposing project or repo names to cloud AI appsOnly the person's own spaces; real accounts only to allowed apps
A hijacked digital workerStrict limits, its own short-lived credentials, a kill switch, rate and spend limits, audit
"Who to ask" turning into monitoringCounts only, shown as help ("who can answer"), opt-out, legal check (in the EU a privacy impact assessment, and in some countries a works-council agreement)
Personal mail or private chats ingested by mistakeOff by default; only the person can switch them on, and the results stay private

17. Worked examples

Developer, two machines, mixed repos
Alice's clones on her laptop and the server are one company space (host id), linked to Shipping. Her personal repo ship-tools is person-owned. It is suggested for Shipping because its branch names use SHIP Jira keys; she confirms, so her items count toward Shipping and stay hers.
One session, three folders
A Claude Code session moves across shipping-api, billing and ~/scratch. The helper tags each stretch, and cMCP sends 6 items to Shipping, 2 to Billing, 1 to the work pool, a preference to Alice's own memory, and one cross-project note to both projects.
Team channel
#shipping is a company space linked to Shipping. Each night, decisions and action items are extracted from quiet threads. The lead approves three decisions into Shipping's decision log, and Bob sees "update the canary script, due Friday" in his open actions.
Shared mailbox
support@ is linked to the Support team. Repeated answers across many threads become a procedure candidate, "how to reset a customer's API key". The team lead approves it, and every support agent's AI gets it.
Analyst with a My Drive folder
Bob's notes in his own Drive are person-owned. The folder looks like client Acme, so it is suggested. Confirming it puts his items behind Acme's wall once the Acme lead accepts; until then they stay private.
Digital worker
"Shipping release coordinator" (master Alice) watches #shipping and Jira, runs a jira-sync task bot, and posts a release status every morning. Its items count toward Shipping, marked AI. It never approves the release itself.
Client-shared channel
A Slack channel shared with Acme's workspace carries Acme's team id, so it is client-owned and sits behind Acme's wall, even though it lives in the company's Slack.
Phone chat
Alice asks ChatGPT on her phone about release rules. There is no space, so the item goes to her work pool unless she names the project.

18. Data model sketch

GroupTables
Structureorgs (from the web-admin), places (projects, teams, clients, tree), memberships
Actorsactors (kind: person / agent / task bot / digital worker; master, backup, purpose, end date, status), accounts (each actor's tool accounts and how they were verified), apps (installations), runs
Spacestenants (company and client tenants per platform), spaces (space ID, address, kind, owner side and its basis), space_aliases, space_links (kind, confidence, evidence, author, versioned)
Apps and sessionsmanifests (per person, versioned), session_copies (with stretch tags), routing_decisions (item → spaces or work pool, evidence, confidence)
Memorymemory_items (content, kind, lane, full address with confidence per part), counts_toward (derived view, no copies), promotions (organizational item ← evidence)
Indexesindex_cards (person, place or space; version; lines with source references; audience), one search index per category (keyword + meaning), links (the link graph)
Space knowledgesources, sync_cursors, threads, messages, chunks (cleaned, with audience), extracted_records (typed, source line, confidence, extractor version), synth_records (decision log, status, digests, procedures, who to ask)

Every table carries the account and org, and keeps them apart with row-level security.

19. Rollout in steps

StepDeliversProves
1. Places, actors and space IDsPlaces and memberships, the four kinds of actor, company tenants, space IDs for Bitbucket / GitHub repos and Jira projects, mapping rulesEvery company repo and project has one ID and a place
2. Manifest, helper and memory addressThe manifest sent to apps with person and place index cards, local matching, stretch tags, run ids, the full address on every item, a "My spaces" pageAny item answers the seven questions
3. Routing, work pool and people's spacesSession posting and routing, the work pool, personal spaces and the ask-once links, the matching ladderPersonal repos and folders land correctly or stay private
4. Collective and organizational memoryCounts-toward views, aggregates, promotion with evidence, flow back downPeople's work becomes place knowledge
5. Space knowledge, first sourcesTeam channels, shared mailboxes and Jira: layers 1–3, decision log, open actions, project statusSpace content becomes useful memory on the local model
6. More spaces and synthesisDrives, Notion, digital workers' spaces, procedures, "who to ask", bigger-model synthesis once approvedThe same model for every kind of space

20. Decisions

#QuestionStatus / suggestion
D1Keep the person out of the space ID?Decided by the user 2026-10-09: yes
D2Space IDs seeded to apps through a manifest, with cMCP routing session memory and a work pool?Proposed by the user 2026-10-09, adopted with four adjustments (sections 8–9)
3Store once at the origin and count by links?Yes
4Does an unknown owner side default to the person (private)?Yes
5Who may link a person-owned space to a company place?The person; the lead accepts when others will see items
6Collective memory visible in aggregate only, with a minimum group of three?Yes; names only for items the person shared
7Do items in company spaces stay with the company when a person leaves?Yes; person-owned spaces stay the person's
8Mapping files in repos may declare links?Only inside company tenants
9Can content similarity ever create a link without a person?No: suggestions only
10What does the manifest contain, and who gets it?Only the person's own spaces; client spaces only when assigned; for real accounts only allowed apps
11Block work in an unknown space?No: work pool plus a one-time question; client spaces by policy
12Keep a session copy as the source?Yes, 30 days; whole transcripts only under M-105
13Digital workers as a separate kind of actor?Yes
14Who creates digital workers, and what may they never do?Only an ADMIN, in person; never ADMIN, approver or granter; never reads Personal memory; never creates workers
15Do digital workers count toward "three or more people" for promotion?No
16A digital worker's master leaves?A new master within 7 days, or the worker is paused
17Which space content is on by default?Company spaces once linked (repos, Jira, Confluence, team channels, shared mailboxes, shared drives); personal mailboxes and private chats off, and only the person can switch them on, for themselves
18Space knowledge into organizational memory?Into collective memory automatically with its source; into organizational memory after the lead approves; Jira and Git status signals trusted
19"Who to ask" profiles?Counts only, shown as help, opt-out, legal check first
20Which model does extraction?Rules plus the local model for tagging and short extraction; synthesis that needs a bigger model waits for a GPU or approved model
21First kinds of spaceBitbucket / GitHub repos and Jira, then team channels and shared mailboxes, then drives
22One search index per category (people; agents, bots and workers; places; spaces; topics; memory; knowledge; sources) with a link graph?Yes
23Which index cards go to apps at session start?The person's own card and their current place's card only, a few hundred tokens; everything else on demand
24What may a person card show to others?Name, places, linked spaces and "ask me about" counts (opt-out); never HR data, Personal memory or the work pool

21. Sources

Research behind this paper