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

Superseded. This draft (v0.1–v0.3) has been consolidated and expanded into Space and memory model, paper v1.0. Please review that page.

Space mapping: putting every person's AI memory in the right place

Paper v0.3 · superseded by the space and memory model v1.1 Fresh design 2026-10-09 v0.2: space IDs, manifest and session routing (user proposal) v0.3: four kinds of actor, digital workers
This paper sets aside what cMCP does today and designs from the problem up. It draws on earlier research (Q-35) and two new research agents (company knowledge graphs and catalogs; space identity and ownership). Nothing was built from this draft directly: it was folded into the space and memory model v1.1, which was built as stages 1l–1t.

1. The problem

A. Organizational spaces
The company owns fixed spaces that people work in: GitHub / Bitbucket organizations and their repos, Jira projects, Confluence spaces, shared drives, Slack / Teams channels, servers. They change slowly and the company decides what they belong to.
B. People's spaces
People have their own spaces: a personal GitHub, their own Drive or OneDrive, Notion pages, local folders on several machines, chat-app projects. In both kinds of space they use many AI apps, agents and bots, and those create memory all day.
The issue. Memory created in people's spaces must be mapped to the organization's spaces, placed correctly, linked and stored so that it builds two things at once: the organization's 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, which org.

2. The idea in one 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. The space graph knows that her clone is the company repo, that three of her own spaces are linked to the project Shipping, and that ~/scratch stays private.
The design in seven sentences
  1. Every space gets one stable address built from the platform's own id (not its name, URL or path), plus a list of aliases (clone URLs, mirrors, local paths on each machine).
  2. Every space has an owner side — company, person or client — decided from hard signals (the tenant, organization or domain it lives in), never from guesses. Unknown means "person" until someone confirms.
  3. Spaces are linked to the company's places (org → project → team, client) by declared, confirmed or suggested links, each with its evidence and confidence. A suggested link never widens who can see anything.
  4. Every memory item carries a full memory address: org, place, space, person, bot, app, agent run, plus how sure each part is.
  5. Each item is stored once, at its origin (the person or bot, in that space). Links decide what it counts toward — no copies.
  6. The same items build two memories: collective people memory (what the people working on a place know, privately held, shared in aggregate) and organizational memory (curated, approved knowledge of the place). Collective feeds organizational by promotion; organizational flows back down to everyone working in a linked space.
  7. cMCP seeds every app with the person's space IDs (a space manifest), so the app knows where it is from the start. The app marks each stretch of its session with the active space ID and posts its memory; cMCP routes each item to its space, and what can't be routed stays in the person's private work pool (section 10).

3. Concepts

TermMeaningExamples
PlaceA unit of the company's structure that memory can belong toOrg, project, team, client
SpaceAnywhere work happens and memory is created; has a kind, a stable address and an owner sideRepo, Jira project, Confluence space, shared drive, My Drive folder, Slack channel, Notion page, local folder, chat-app project
PersonOne human, with many accounts in many toolsAlice: SSO login, GitHub login, Atlassian account, Slack user
AgentAn AI app working for one person, inside their sessions, with no identity of its ownclaude.ai, the Claude CLI on Alice's laptop
Task botA short-lived actor that runs one task for a person or an agent, under a sponsorA CI review bot, a nightly report job
Digital workerA long-lived AI worker with its own identity (e-mail, name, ID), assigned to places, with a master"Shipping release coordinator"
AppOne installed AI tool for one person on one device, or one bot's runtime"Claude Code on Alice's laptop", "ChatGPT on Alice's phone"
Agent runOne working 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 who made it"shipping-api → project Shipping (declared by the repo's mapping file)"
Memory addressThe full who / where / how stamp carried by every memory itemSee section 6
Space IDcMCP's own id for a registered space (sp_…); one per space, never per personsp_ship_api
Space manifestThe list of a person's space IDs with their recognisers and place paths, sent to each app at session startSee section 10
Work poolThe person's private memory that is not (yet) routed to a space; routed later when a link appearsNotes from ~/scratch
Session copyThe session memory an app posted, kept as the source of the routed itemsSession 9c1, 30 days
LaneWhere an item is physically stored: the origin actor in the origin space"Alice · shipping-api", "nightly-bot · SHIP"

4. Identifying a space

Rule: the identity of a space is the platform's stable id inside its tenant. Names, URLs, keys and local paths change, so they are only aliases. (Every product studied separates the two: Microsoft drive + item ids, Google file ids, Backstage entity references, OpenLineage namespace + name.)

Address format: space:<kind>:<tenant or host>/<stable id>, plus aliases and an owner side.

KindStable id (the address)Read locally by an agent?Owner side comes fromWatch out
Git repoHost repo id (GitHub id, Bitbucket UUID) when known, plus the set of root commits; without a host: the root-commit set aloneYes: remotes and git rev-list --max-parents=0 --allCompany org or workspace vs a user's namespace; managed (enterprise) accountsSame remote spelled many ways; forks and mirrors share root commits; shallow clones hide them
Google DriveFile or folder id; shared-drive idNo documented way; confirm through the person's connected accountShared drive = company; My Drive = person; Workspace domain (hd) present or notShortcuts; link "resource keys" are secrets, not ids
OneDrive / SharePointTenant + site + item id (or drive id + item id)Partly: sync root from settings, then look the path up onlineTenant id; SharePoint library = company; personal OneDrive has no SharePoint idsItem id is only unique inside its drive
DropboxNamespace id of the team or shared folderNo (local attributes hold a machine-only id)Team space vs member's home folderA member's root id changes after a migration
Jira / ConfluenceSite cloud id + numeric project or space idNo (from connector or branch names)The site's organizationKeys get renamed; old keys still resolve
Slack / TeamsWorkspace (and enterprise) id + channel id; Teams: tenant + team + channelNo (from connector)Enterprise / tenant id; a channel shared with other organizations is a client signalNames change; shared channels span companies
NotionPage or database idNoTeamspace vs a member's private sectionPage ids move with the page
Chat-app projectThe app's project or conversation idOnly if the app passes itThe account (work plan vs personal plan)Mobile chats often have no project at all
Local folderA marker file with a generated id (.cmcp-space), else machine + pathYesThe signed-in personCopies duplicate the marker; ask when two folders claim one id
space:git:bitbucket.org/{7c1e…} aliases: bitbucket.org/pilot/shipping-api, github.com/alice/shipping-api (mirror), laptop:C:\src\shipping-api, server:/home/alice/shipping-api roots: a1b2c3… owner: company (Bitbucket workspace "pilot" is a registered company tenant) space:gdrive:my/1AbC… alias: "ship notes" owner: person alice (My Drive, no shared drive) space:slack:T01PILOT/C04SHIP alias: #shipping owner: company space:local:alice-laptop/{e5f6…} alias: ~/scratch owner: person alice (no host)

5. Identifying who: person, bot, app, agent run

QuestionHow it is answeredTrusted?
Which orgThe account the sign-in or key belongs toVerified
Which personCompany sign-in (SSO). Other tool accounts (GitHub login, Atlassian account id, Slack user id, personal Google account) are linked to the person once, by the person signing in to each, or by the company directory. Unmatched accounts are shown, not silently droppedVerified
Which botThe bot's own key or credential; every bot has a sponsor (a person) and a home placeVerified
Which appA registered installation: tool + device + person (a device key or the tool's sign-in client). The tool name and version are labels on topVerified installation; label declared
Which agent runThe tool's own session, conversation or run id, sent with every call and kept per appDeclared (never grants anything)
Which team / projectNot sent by the caller: derived from the space's links and the person's or bot's membershipsDerived from verified data
Which spaceSent by the app (fingerprint from its folder or project), resolved to an address by the serverDeclared, then matched with a confidence

Key point: the caller only says where it is and what it is doing; cMCP works out the rest. A bot or app never claims an org, person, team or project — those come from the credential and the space graph, so they cannot be faked.

Four kinds of actor (added in v0.3, 2026-10-09)

The solid facts:

The new case is AI workers with their own e-mail, name and ID, a long life (a project or the whole org), working on their own and talking to people and other bots by e-mail or Teams, with a person as master. These are a separate kind of actor. In cMCP they are called digital workers ("AI workers" or "agent identities" elsewhere; "robot" works in conversation).

PersonAgent (delegated)Task botDigital worker (new)
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, inside their sessionsA person or an agent, for one taskA project, team or the org
LifespanEmploymentA session or an installationOne run or one 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 to projects and teams like a member
MemoryOwn lanes, User and Personal memoryThe person's lanes (marked with the agent)Its own lane, limited to the taskOwn lanes and its own "worker memory"; never Personal memory
Rights ceilingTheir roleNever more than the personNever more than its launcher; the task onlyIts 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
ExampleAliceClaude CLI on Alice's laptopA CI review bot, a nightly report job"Shipping release coordinator", ship-coordinator@pilot

Why a separate kind, and not a person or a bot.

Identity providers are moving the same way, giving AI agents their own directory identities. The IETF agent-auth draft also says each agent should have its own identity and calls shared static keys an anti-pattern.

How a digital worker maps into cMCP

  1. Created only by an ADMIN, in person. Each one gets a purpose, a master and a backup, the places it is assigned to, an end date, and limits on spend and on calls. A digital worker never creates another one.
  2. Its own identity record, like a person's. Its e-mail, Teams, Slack and Jira accounts are linked to it the same way a person's accounts are (section 5). Each credential is its own and short-lived; it never uses its master's.
  3. Members of places, with ceilings. It is assigned to projects and teams. It may read and write memory there, but it never becomes ADMIN, never approves or grants anything, and never reads anyone's Personal memory or private work pool.
  4. Its own memory.
    • Lanes per space, like a person's, so its items count toward the places it works in.
    • Worker memory, about how it does its job. This is the equivalent of a person's User memory.
  5. Its conversations are spaces. A mail thread, Teams chat or Slack channel it works in gets a space address and an owner side like any other space. When it writes to a client, the client's wall applies.
  6. Its input is untrusted. Mail and messages from outside, or from other bots, can carry planted instructions. They become memory only as data, never as instructions, never as must-apply items, and reach shared memory only through review.
  7. Promotion is decided by people. Its items count in collective memory and are marked AI. But "seen by three or more people" counts only humans, so AI workers can never out-vote people.
  8. The chain is stamped on every item. The memory address names the digital worker, its master, and anything it launched: for example "task bot X, launched by digital worker Y, master Alice".
  9. Lifecycle.
    • The master reviews it every 90 days.
    • 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 about its places stays with those places, and its worker memory is handed to a successor or archived.
  10. It always says what it is. Every message and memory item carries an AI badge and names who it works for.
item m_91a… "Release 4.2 waits for the billing team's sign-off on SHIP-412" WHO org Pilot verified actor digital worker "Shipping release coordinator" (ship-coordinator@pilot) verified (own credential) master Alice (backup: Bob) launched task bot "jira-sync" run 77 → found the blocker WHERE space space:slack:T01PILOT/C04SHIP (#shipping) owner: company places project Shipping → team Platform → org Pilot HOW lane ship-coordinator · #shipping counts: collective(Shipping), marked AI

6. The memory address on every item

item m_7f3… "Shipping API releases use blue-green with a 5-minute canary" WHO org Pilot verified (sign-in) person Alice verified (SSO) app Claude Code · alice-laptop verified (device key) version 3.x (label) run session 9c1… declared bot — WHERE space space:git:bitbucket.org/{7c1e…} matched 0.99 (host id) owner: company places project Shipping → team Platform → org link: declared (mapping file in the repo) HOW lane Alice · shipping-api stored here, once counts collective(Shipping) yes · org memory(Shipping) proposed 2026-10-09 source lines 120–134 of the session, model notes at checkpoint

The address is written when the item is created and never rewritten. If a link changes later, the item keeps its original address and the new link is applied by version, so history stays honest.

Four kinds of link

KindWho makes itEffect
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: company owner side, the company space's links apply
DeclaredThe company: the catalog, a mapping rule ("Bitbucket project SHIP → project Shipping") or a mapping file inside the space (.cmcp.yaml: org / project / team)Full link
ConfirmedThe person ("my folder 'ship notes' belongs to Shipping"), accepted by the place's lead when it changes what others can seeFull link for that person's items; others' visibility only after the lead accepts
SuggestedThe matcher, from evidence belowShown to the person 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, shown as "linked"
One shared root commit but another URL (fork or mirror); a Jira key from the branch name; a mapping file≈ 0.8Probable: link for the person, ask before anything changes ownership or visibility
Similar names, same people active, memory content close to a project's memory0.4–0.8Suggestion in a review list
Little or nothing< 0.4Stays unlinked (private)
Safety rules for links. (1) A link never gives anyone new rights; it only decides what an item counts toward. (2) Moving something from the person side to the company side needs a human: the owner, and the lead when others will see it. (3) Content evidence (similar memory) can suggest, never decide. (4) Every link records who or what made it, when and why, so conflicts can be explained.

8. Placement: where a memory item goes

Principle: store once at the origin, count by links. The item is stored in its lane (the person or bot, in that space). Nothing is copied into team or project memory. Links decide what the item counts toward; promotion decides what becomes organizational memory.

The space is…LinkItem is storedCounts towardWho can read the item itself
Company-ownedDeclared or same spacePerson's (or bot's) lane in that spaceCollective memory of the linked places; may be promoted to their org memoryThe person; their apps; aggregated views for the place
Company-ownedNone yetSameCollective memory of the org (unplaced); the company is asked to link the spaceThe person
Person-ownedConfirmed by the personPerson's laneCollective memory of the linked placeThe person; shared items only after they choose
Person-ownedNone or suggestedPerson's laneNothing outside the personThe person only
Client-ownedDeclared to a client placePerson's lane behind that client's wallThat client's collective and org memory onlyThe person and the client team
Bot space (its run)The bot's home placeThe bot's laneCollective memory of the home place; org memory only by approvalThe sponsor and the place's lead
No space (phone chat)—Person's lane, "unplaced"Nothing until the person or the app adds a placeThe person

Kind of memory also matters: a preference about the person ("Alice prefers short answers") stays personal wherever it was said; a fact about the work ("SHIP deploys use blue-green") follows the space's links. The writer (the app's model, a hook or the bot) marks each item as about the person or about the work; the server checks.

9. Two memories from the same items

Collective people memory
  • All items, in all lanes, that count toward a place.
  • Each stays owned by its person or bot; nothing is copied.
  • Used in aggregate: "7 people working on Shipping noted the canary rule" — counts and themes, not names, unless the person shared the item.
  • Grows automatically as people work; reflects what is actually done.
  • A person's own AI sees their items plus the place's organizational memory; it sees others' items only when they were shared.
Organizational memory
  • Curated, approved knowledge of a place (project, team, org, client).
  • Built by promotion from collective memory (seen by several people, rewritten without names, approved by the lead), by the company directly, and by connectors.
  • Each organizational item links back to the collective items that support it (evidence, not names).
  • Flows down to everyone working in any space linked to that place, on every tool.
  • Survives people leaving.
The loop. Work in any space → items in the person's lane, stamped with the address → counted toward linked places (collective) → repeated, agreed items promoted (organizational) → organizational memory sent back to every app working in a linked space → better work → new items. Personal spaces join the loop only through a link the person confirms.

10. Space IDs, the space manifest and session routing (user proposal, 2026-10-09)

The proposal
  1. The company registers its fixed spaces as facts (org, project, team, user), and cMCP issues an internal space ID for each.
  2. cMCP seeds every app that creates memory (Claude and others) with the person's space IDs at the start, so the app knows from the beginning what it must confirm before it continues or saves.
  3. One session may touch many spaces. The app posts its memory to cMCP, and cMCP decides which part goes to which space ID. The rest stays in the person's work pool, together with a copy of the session memory.
Assessment: sound, and adopted. It fixes the weakest part of version 0.1: cMCP had to guess spaces after the fact. With the proposal, cMCP hands the app the answers in advance, the app marks its work as it goes, and cMCP routes with evidence. That's how mature systems work: a central catalog, matching at the edge, and routing on the server. Four adjustments make it safe and scalable:
#AdjustmentWhy
AKeep the person out of the space ID.
  • One ID per space (sp_…).
  • Org, project and team keep their own place IDs.
  • The person's link to a space comes from their membership.
  • For convenience, cMCP can still hand the app a short work-context handle (person + place) during a session.
IDs for every org + project + team + user combination multiply (people × projects × teams). They change whenever someone moves team, and they reveal who works where in every ID. Projects and teams are separate axes; one space usually belongs to one project, with a team as owner.
BThe helper or hook matches the manifest, not the model. Matching is exact, on repo ids, remotes, root commits, folder markers, Jira keys and Drive folder ids. The model only receives the result: "you are in Shipping (sp_ship_api)".Models skip instructions; a hook always runs. Exact matching on the person's own machine is fast, works offline and needs no guessing.
CAsk only when a space is unknown, and only once.
  • By default work is never blocked: memory from an unknown space goes to the work pool, and a one-line question offers "link to Shipping / keep private / ask later". The answer is remembered on every machine.
  • Work stops only where policy requires it, for example a client space.
A tool that interrupts every new folder gets switched off. Late binding (section 10, step 6) means nothing is lost by asking later.
DRouting labels; it never shares. Giving an item a space ID decides what it counts toward. Who can see it still follows section 8.A wrong route must never expose a person's item to a team.

The flow

  1. Register. The company's fixed spaces are registered from connectors and from facts (org, project, team, owner). cMCP issues a space ID for each and links it to its place IDs.
  2. Seed. At session start, cMCP sends the app a space manifest:
    • the person's space IDs, each with its recognisers (remote URLs, root commits, host ids, folder markers, Jira keys, Drive folder ids, chat project names) and its place path;
    • a version number, so later changes arrive as small updates.
    It contains only spaces the person belongs to, and client spaces only when the person is assigned to that client.
  3. Detect.
    • The helper matches the working folder, every folder change and the file paths the tools touch, all on the person's machine.
    • It tells the app the current space and marks each stretch of the session with the active space ID.
    • Unknown folders get a local marker and a pending question.
  4. Post. At checkpoints (after answers, before compaction, at the end), the app posts:
    • its session memory: the notes and facts it made, with the space tags per stretch and the session id;
    • a copy of the session memory, kept as the source. Whole transcripts are kept only under the M-105 rules.
  5. Route. cMCP splits the memory into single items and decides each one, using the strongest evidence first:
    • the stretch's space tag;
    • an explicit mention that matches the manifest, such as a repo name, Jira key or path;
    • similarity to that space's memory. This is weak evidence, so it can only make a suggestion.
    Items about the person (preferences, habits) go to their own memory. One item can link to several spaces without being copied.
  6. Pool. Anything that can't be routed with enough confidence stays in the person's work pool, which is private. It is routed later when a link appears (late binding), and a weekly digest lets the person sort what remains.
  7. Return. The answer says what went where and returns the updated memory for the current space. The next session's manifest includes any new spaces and links.
Session 9c1 · Claude Code · alice-laptop · three folders used 10:02–10:40 ~/src/shipping-api → sp_ship_api (project Shipping) 6 items → Shipping 10:41–11:05 ~/src/billing → sp_billing (project Billing) 2 items → Billing 11:06–11:20 ~/scratch → no space ID (asked once: "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 of these 11 items (30 days)

What the app must confirm before saving, and what it doesn't

SituationApp behaviour
Folder matches a space ID in the manifestNothing to confirm; works and saves, tagged
Folder is a copy of a company space not in the person's manifest (they aren't a member)Saves to the work pool and offers "ask to join project X"
Unknown folder or personal repoSaves to the work pool and asks once: link, keep private or later
Client spaceMust be confirmed first if the company's policy says so; otherwise as above, behind the client's wall
No folder (phone chat)Saves to the work pool, unless the person or the app names a place

A limit to accept: cMCP can't stop a tool writing its own local memory (for example Claude Code's memory files). It can make sure every local note is tagged and copied with the right space ID, because the helper knows the space for each stretch of the session.

11. Discovery: how the graph fills itself

Company side: the space catalog
  • Connectors list company spaces: Bitbucket / GitHub organizations and repos, Jira projects, Confluence spaces, shared drives, Slack / Teams channels — by API, kept current by webhooks.
  • Company tenants are registered once (Bitbucket workspace, GitHub org, Google domain, Microsoft tenant, Slack enterprise, Atlassian site). Anything inside them is company-owned; client tenants are registered as clients.
  • Mapping rules turn structure into links ("Bitbucket project SHIP → project Shipping", "Jira SHIP → Shipping").
  • Optional mapping file in a repo (.cmcp.yaml) for exceptions.
People side: the space registry
  • Each AI app (through a small helper or hook) reports the space it works in: repo fingerprint, folder marker, the tool's project id.
  • A person can connect personal accounts (personal GitHub, own Drive) so their spaces can be resolved to stable ids and owner sides.
  • The matcher compares every new space with the catalog, then asks once when unsure.
  • The person sees "My spaces": each space, its owner side, its links, and what it counts toward — and can change their own links.

12. Changes over time

EventWhat happens
Repo renamed, moved or mirrored (GitHub → Bitbucket)Same address; the new URL becomes an alias (host id or root commits match)
Repo forkedA new space with a "fork of" link; suggested to the same place, not merged
Personal repo adopted by the companyOwner side changes only with the person's consent; earlier items stay in the person's lane, and the person chooses which to share
Space re-linked to another projectNew items follow the new link; old items keep their address; the lead can choose to move history
Project or team closesOrganizational memory archived by the company's retention; collective links end
Person changes teamTheir lanes stay theirs; counts move with the space links, not with the person
Person leavesItems in company-owned spaces: company data (kept per retention, already-promoted knowledge stays); items in person-owned spaces: removed or exported to the person per policy
Bot retiredIts lane is frozen; the sponsor or lead decides what to keep

Rule: ownership of a memory item follows the owner side of the space when the item was created.

13. Worked examples

Developer, two machines, mixed repos
Alice works in the company Bitbucket repo on her laptop and on a server, and in her personal GitHub repo ship-tools. Both clones resolve to one company space (host id), linked to Shipping, so her items count toward Shipping from either machine. ship-tools is person-owned; the matcher suggests Shipping (it uses the SHIP Jira key in branch names); she confirms, so her ship-tools items count toward Shipping while staying hers.
Analyst with a My Drive folder
Bob keeps client notes in his own Drive. The folder is person-owned. Its content resembles the client "Acme" place, so the matcher suggests it; because it is client data, confirming it puts his items behind Acme's wall, and the Acme lead accepts. Until then they stay private.
CI bot in a company repo
The review bot runs in shipping-api with its own key and Alice as sponsor; its home place is Shipping. Each run sends the repo fingerprint and run id. Its findings land in the bot's lane, count toward Shipping, and reach organizational memory only through approval.
Consultant in a shared Slack channel
A channel shared with the client's Slack organization has the client's team id, so it is client-owned and linked to the client place. Items stay behind that client's wall even though the channel lives in the company's Slack.
Chat on the phone
Alice asks ChatGPT on her phone about release rules. There is no space; the item is "unplaced" in her lane. If the app passes its project ("Shipping"), or she says which place, it is linked like any other space.
Local scratch folder
~/scratch gets a marker id on first use. It is person-owned and unlinked, so nothing leaves Alice's lane unless she links it.

14. Data model sketch

TableHolds
tenantsRegistered company and client tenants per platform (workspace, org, domain, tenant id, enterprise id) → owner side
placesOrg, projects, teams, clients and their tree
spacesAddress, kind, tenant, owner side and its basis, catalog or registry origin, status
space_aliasesURLs, keys, names, local paths per machine, root commits
space_linksSpace → place, kind (same / declared / confirmed / suggested), confidence, evidence, made by, valid from / to (versioned)
people, accountsOne person, many tool accounts (verified how, when); unmatched accounts listed
actorsOne table for every kind: person, agent, task bot, digital worker; kind, master and backup, purpose, end date, status (active / paused / retired)
bots / workersTask bots: sponsor, launcher, task scope. Digital workers: places assigned, ceilings, limits, review date
appsInstallation: tool, device, person or bot, credential
runsAgent run / session id per app, space, start and end
memory_itemsContent, kind (about the person / about the work), lane, and the full address (org, space, person, bot, app, run, places at creation, confidence per part)
manifestsPer person: version, spaces included, sent to which apps
session_copiesPosted session memory per run, with per-stretch space tags; retention
routing_decisionsItem → space(s) or work pool, evidence used, confidence, re-routed when
counts_towardDerived view: item → places through links (no copies)
promotionsOrganizational item ← supporting collective items, approver, date

15. Rollout in steps

StepDeliversProves
1. Addresses and catalogSpace addresses, aliases, company tenants, git and Jira catalog from Bitbucket / GitHub / Jira, mapping rulesEvery company repo and project has one address and a place
2. Memory address on every itemSpace IDs, the space manifest sent to apps, local matching by the helper, per-stretch tags and run id; server stamps the full address and routes; work pool; "My spaces" pageAny item can answer the seven questions
3. Person spaces and linkingRegistry from apps and connected personal accounts, matcher ladder, ask-once linksPersonal repos and folders land correctly or stay private
4. Collective and organizational memoryCounts-toward view, aggregate views per place, promotion with evidenceKnowledge built from people's work reaches the place and flows back down
5. More kinds of spaceDrives, Slack / Teams, Notion, chat-app projects, client tenantsThe same model for every space kind

16. Decisions for review

#QuestionSuggestion
1Store once at the origin and count by links (no copies into team / project memory)?Yes
2Unknown owner side defaults to the person (private)?Yes
3Who may link a person-owned space to a company place?The person; the lead accepts when others will see items
4Collective memory visible to the place in aggregate only (counts and themes, no names)?Yes; names only for items the person shared
5Do items in company-owned spaces belong to the company when the person leaves?Yes; person-owned spaces stay the person's
6Mapping file inside repos (.cmcp.yaml) allowed to declare links?Yes inside company tenants only; ignored in personal spaces
7Should content similarity ever create a link without a human?No: suggestions only
8First space kindsGit (Bitbucket, GitHub) and Jira, then Drive and Slack
9One space ID per space (person not part of it), plus a work-context handle for apps?Yes
10What does the manifest send to apps?Only the person's own spaces, with recognisers and place paths; client spaces only when assigned; for real accounts only to apps on the allowed list
11Unknown space: block or not?Don't block: work pool plus a one-time question; block only for client spaces when policy says so
12Keep a copy of the posted session memory as the source?Yes, 30 days by default; whole transcripts only under the M-105 rules
13Long-lived AI workers with their own identity: a separate kind of actor?Yes, as a "digital worker", alongside person, agent and task bot
14Who creates digital workers, and what may they never do?Only an ADMIN, in person. They are never ADMIN, never approve or grant, never read Personal memory, and never create other workers
15Do digital workers count toward "three or more people" for promotion?No: only humans count; their items are marked AI
16What happens when a digital worker's master leaves?A new master within 7 days, or the worker is paused

17. Sources

Research for this paper (2026-10-09)