A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.
Every time you wire a chat to an agent, you answer one question: should this conversation share anything with the others? NanoClaw gives you four levels, built from two dials in the entity model — which agent group the wiring points at, and the wiring’s session_mode. From most to least isolated they run: separate agent groups, then within one group per-thread, shared, and finally agent-shared. The walkthrough below starts at the group boundary — the strongest split — and then takes the three session modes.
Level
Conversation history
Files & memory
Container config & credentials
Separate agent groups
Separate
Separate
Separate
One group, session per thread (per-thread)
Separate continuations; retrievable within the group
Shared
Shared
One group, session per chat (shared)
Separate continuations; retrievable within the group
Each agent group is its own world: a workspace folder under groups/<folder>/, its own per-group standing instructions (instructions.prepend.md) and durable memory (the memory/ tree), its own composed CLAUDE.md, its own container config (packages, mounts, model, skills), and its own Agent Vault credential scope — the OneCLI agent identifier is the agent group id, so secrets granted to one group never reach another. Sessions of different groups share only the host and the read-only pieces every container gets: the shared base instructions (container/CLAUDE.md, inlined by the host into each composed project document) plus the agent-runner source and skills.Choose this when:
Different people. A family chat and a client channel should not be one agent — a prompt-injected message in one must have nothing to exfiltrate from the other.
Different trust domains. An agent with a mounted code repo and deploy credentials versus an agent that talks to strangers in a public channel.
Different jobs. A research agent and a home-automation agent want different packages, models, and instructions anyway.
session_mode: 'shared' gives each wired chat its own session: its own conversation history, its own session folder and databases, its own container while running. The provider normally resumes only that session’s conversation, but the agent can explicitly retrieve other sessions’ transcripts within its own group through ncl sessions history. Use this for separate conversation flows; use separate agent groups when the audiences must not access each other’s context.
Separate sessions are not a confidentiality boundary within an agent group: both cross-session history retrieval and a shared filesystem are available. Every session of an agent group mounts the same group folder read-write at /workspace/agent — working files, instructions.prepend.md, and the memory/ tree included. A file the agent saves while talking in chat A is readable (and mentionable) while talking in chat B, and a memory note written in one conversation shapes all of them. If the people in one chat must never see artifacts from another, separate sessions are not enough — use separate agent groups.
The same idea at finer grain: one session per (chat, thread), so each Discord or Slack thread is its own conversation. You rarely set this by hand — on thread-capable adapters the router forces per-thread in group chats regardless of a shared wiring (only agent-shared or a per-wiring threads = 0 overrides it), DM thread behavior follows the channel’s declared DM default and any threads override, and thread-less adapters like WhatsApp or Telegram collapse per-thread back to shared. The full requested-versus-effective table is in the entity model’s sessions section. The history-access and shared-filesystem caveats above apply here identically. When creating or changing a per-thread wiring, the CLI rejects explicit threads = 0 or an inherited threads-off policy on a declared adapter. Undeclared adapters retain legacy leniency when threads is unset. On a thread-capable channel whose context defaults to threads off, use --threads true alongside --session-mode per-thread.
session_mode: 'agent-shared' is the deliberate opposite of isolation: every messaging group wired with this mode joins the agent group’s single session. Mention the agent on Slack, continue on Discord, and it’s the same conversation with the same context. Use it when the chats are really one stream — your own DMs across three platforms, or a GitHub webhook channel plus the Slack channel where you discuss it. Don’t use it across chats with different audiences: everyone in every wired chat is effectively in one room.
The conversational route is the /manage-channels skill — it asks exactly this isolation question when you wire a channel and picks the flags for you. With the ncl CLI:
# Most isolated: a new agent group, then wire the chat to itncl groups create --name "Work" --folder workncl wirings create --messaging-group-id <mg-id> --agent-group-id <new-group-id># Same agent, separate conversations (default)ncl wirings create --messaging-group-id <mg-id> --agent-group-id <ag-id> --session-mode shared# One conversation across every chat wired this wayncl wirings create --messaging-group-id <mg-id> --agent-group-id <ag-id> --session-mode agent-shared
--session-mode is updatable (ncl wirings update --id <id> --session-mode ...), but it only changes how future messages find a session — existing sessions keep their history where it is.
Session and agent-group boundaries separate agents from each other, not from the world:
The container boundary is what stands between an agent and the host — see container lifecycle for what’s mounted where and why.
Network egress and additional mounts are per-group container config and open by default beyond the proxy — lock them down in hardening.
Shared base instructions — the host inlines the shared base into each provider’s composed project document; Claude uses container/CLAUDE.md, while Codex uses container/AGENTS.md. Changes to a base reach groups using that provider on their next spawn. Per-group instructions belong in that group’s instructions.prepend.md.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"NanoClaw","colors":{"primary":"#2DD4BF","light":"#5EEAD4","dark":"#14B8A6"},"logo":{"light":"https://mintcdn.com/qwibitai-nanoclaw-8/U-zx_S2Vkyzi0Gli/images/nanoclaw-logotype-dark.svg?fit=max\u0026auto=format\u0026n=U-zx_S2Vkyzi0Gli\u0026q=85\u0026s=7fabf1abf0eb70d18a0235dd67255fcb","dark":"https://mintcdn.com/qwibitai-nanoclaw-8/U-zx_S2Vkyzi0Gli/images/nanoclaw-logotype-dark.svg?fit=max\u0026auto=format\u0026n=U-zx_S2Vkyzi0Gli\u0026q=85\u0026s=7fabf1abf0eb70d18a0235dd67255fcb","href":"https://nanoclaw.dev"},"favicon":"https://mintcdn.com/qwibitai-nanoclaw-8/U-zx_S2Vkyzi0Gli/images/favicon.svg?fit=max\u0026auto=format\u0026n=U-zx_S2Vkyzi0Gli\u0026q=85\u0026s=59a44855795dae3f826d473592ade7a0","appearance":{"default":"dark","strict":true},"background":{"decoration":"gradient"},"navbar":{"primary":{"type":"github","href":"https://github.com/nanocoai/nanoclaw"}},"footer":{"socials":{"github":"https://github.com/nanocoai/nanoclaw","discord":"https://discord.gg/VDdww8qS42","x":"https://x.com/Gavriel_Cohen","youtube":"https://www.youtube.com/@NanoClaw","website":"https://nanoclaw.dev"},"links":[{"header":"Legal","items":[{"label":"MIT License","href":"https://github.com/nanocoai/nanoclaw/blob/main/LICENSE"}]}]},"search":{"prompt":"Search NanoClaw docs..."},"seo":{"indexing":"navigable"},"fonts":{"heading":{"family":"Inter","weight":600},"body":{"family":"Inter","weight":400}},"styling":{"eyebrows":"breadcrumbs","latex":false},"banner":{"content":"[Join the Discord community](https://discord.gg/VDdww8qS42) — get help, share what you're building, or just say hi.","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"global":{"anchors":[{"anchor":"Changelog","icon":"clock-rotate-left","href":"/changelog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qwibitai-nanoclaw-8","hasAudioNarration":false,"actualSubdomain":"qwibitai-nanoclaw-8","customDomains":["docs.nanoclaw.dev"],"gitSource":{"type":"github","owner":"glifocat","repo":"nanoclaw-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad9d4e10febba82de2fda10","collectionId":"e8f44256-8726-4d08-8a35-a07089f9f5e4","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad9d4e10febba82de2fda10"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ad9d4e10febba82de2fda10","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"Documentation","count":49},{"language":"default","tag":"Channels","count":12},{"language":"default","tag":"Operate","count":9},{"language":"default","tag":"Reference","count":8},{"language":"default","tag":"Understand","count":7},{"language":"default","tag":"Templates","count":6},{"language":"default","tag":"Extend","count":5},{"language":"default","tag":"Operating","count":5},{"language":"default","tag":"Build with agents","count":4},{"language":"default","tag":"Get started","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".quickstart-walkthrough [data-component-part=step-title]{font-size:1.25rem;line-height:1.5;font-weight:650;color:#f3f4f6}.quickstart-walkthrough .step-container{padding-bottom:2rem}.quickstart-walkthrough .setup-terminal{margin:1.25rem 0;overflow:hidden;border:1px solid #33413f;border-radius:12px;background:#101715;color:#e5e7eb}.setup-terminal-label{padding:.65rem 1rem;border-bottom:1px solid #33413f;color:#bac8c3;font-size:.75rem;letter-spacing:.02em}.setup-terminal-screens{padding:1rem}.setup-terminal-screen+.setup-terminal-screen{border-top:1px solid #33413f;margin-top:1rem;padding-top:1rem}.setup-terminal-order{color:#bac8c3;font-size:.75rem;margin-bottom:.6rem}.setup-terminal-options,.setup-terminal-question{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.875rem;line-height:1.65;overflow-wrap:anywhere}.setup-terminal-question{display:flex;gap:.7rem;color:#f3f4f6}.setup-terminal-question>span:first-child{color:#5eead4;flex-shrink:0}.setup-terminal-options{list-style:none;padding:0;margin:.8rem 0 0}.setup-terminal-options li{display:flex;gap:.7rem;padding:.5rem .65rem;border-radius:5px}.setup-terminal-options li>span:first-child{flex-shrink:0}.setup-terminal-options .setup-terminal-selected{background:#173b32;color:#d1fae5}.setup-terminal figcaption{padding:.75rem 1rem;border-top:1px solid #33413f;font-size:.75rem;line-height:1.5;color:#bac8c3}.quickstart-walkthrough .setup-check{display:flex;gap:.8rem;margin:1.5rem 0;padding:.8rem 1rem;border-left:3px solid #5eead4;background:#10251f;color:#e5e7eb;font-size:.9375rem;line-height:1.65}.setup-check-icon{color:#5eead4}.setup-check-label{font-size:.75rem;font-weight:600;color:#99f6e4;margin-bottom:.2rem}"}],"page":{"pagePath":"concepts/isolation-levels","slug":"/concepts/isolation-levels","pageMetadata":{"title":"Isolation levels","description":"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.","keywords":["isolation","session_mode","shared","per-thread","agent-shared","agent groups","privacy","workspace","sessions","multi-tenant"],"tag":"UPDATED","href":"/concepts/isolation-levels"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Every time you wire a chat to an agent, you answer one question: should this conversation share anything with the others? NanoClaw gives you four levels, built from two dials in the `,_jsx(_components.a,{href:`/concepts/entity-model`,children:`entity model`}),` — which agent group the wiring points at, and the wiring’s `,_jsx(_components.code,{children:`session_mode`}),`. From most to least isolated they run: separate agent groups, then within one group `,_jsx(_components.code,{children:`per-thread`}),`, `,_jsx(_components.code,{children:`shared`}),`, and finally `,_jsx(_components.code,{children:`agent-shared`}),`. The walkthrough below starts at the group boundary — the strongest split — and then takes the three session modes.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Level`}),_jsx(_components.th,{children:`Conversation history`}),_jsx(_components.th,{children:`Files \u0026 memory`}),_jsx(_components.th,{children:`Container config \u0026 credentials`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Separate agent groups`}),_jsx(_components.td,{children:`Separate`}),_jsx(_components.td,{children:`Separate`}),_jsx(_components.td,{children:`Separate`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`One group, session per thread (`,_jsx(_components.code,{children:`per-thread`}),`)`]}),_jsx(_components.td,{children:`Separate continuations; retrievable within the group`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Shared`})}),_jsx(_components.td,{children:`Shared`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`One group, session per chat (`,_jsx(_components.code,{children:`shared`}),`)`]}),_jsx(_components.td,{children:`Separate continuations; retrievable within the group`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Shared`})}),_jsx(_components.td,{children:`Shared`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`One conversation (`,_jsx(_components.code,{children:`agent-shared`}),`)`]}),_jsx(_components.td,{children:`One for everything`}),_jsx(_components.td,{children:`Shared`}),_jsx(_components.td,{children:`Shared`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`separate-agent-groups-—-nothing-shared`,children:`Separate agent groups — nothing shared`}),`\n`,_jsxs(_components.p,{children:[`Each agent group is its own world: a workspace folder under `,_jsx(_components.code,{children:`groups/\u003cfolder>/`}),`, its own per-group standing instructions (`,_jsx(_components.code,{children:`instructions.prepend.md`}),`) and `,_jsx(_components.a,{href:`/concepts/agent-memory`,children:`durable memory`}),` (the `,_jsx(_components.code,{children:`memory/`}),` tree), its own composed `,_jsx(_components.code,{children:`CLAUDE.md`}),`, its own container config (packages, mounts, model, skills), and its own Agent Vault credential scope — the OneCLI agent identifier `,_jsx(_components.em,{children:`is`}),` the agent group id, so secrets granted to one group never reach another. Sessions of different groups share only the host and the read-only pieces every container gets: the shared base instructions (`,_jsx(_components.code,{children:`container/CLAUDE.md`}),`, inlined by the host into each composed project document) plus the agent-runner source and skills.`]}),`\n`,_jsx(_components.p,{children:`Choose this when:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Different people.`}),` A family chat and a client channel should not be one agent — a prompt-injected message in one must have nothing to exfiltrate from the other.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Different trust domains.`}),` An agent with a mounted code repo and deploy credentials versus an agent that talks to strangers in a public channel.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Different jobs.`}),` A research agent and a home-automation agent want different packages, models, and instructions anyway.`]}),`\n`]}),`\n`,_jsxs(Heading,{level:`2`,id:`one-agent-group-a-session-per-chat-—-shared`,children:[`One agent group, a session per chat — `,_jsx(_components.code,{children:`shared`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`session_mode: 'shared'`}),` gives each wired chat its own session: its own conversation history, its own session folder and databases, its own container while running. The provider normally resumes only that session’s conversation, but the agent can explicitly retrieve other sessions’ transcripts within its own group through `,_jsx(_components.code,{children:`ncl sessions history`}),`. Use this for separate conversation flows; use separate agent groups when the audiences must not access each other’s context.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Separate sessions are `,_jsx(_components.strong,{children:`not a confidentiality boundary`}),` within an agent group: both cross-session history retrieval and a shared filesystem are available. Every session of an agent group mounts the same group folder read-write at `,_jsx(_components.code,{children:`/workspace/agent`}),` — working files, `,_jsx(_components.code,{children:`instructions.prepend.md`}),`, and the `,_jsx(_components.code,{children:`memory/`}),` tree included. A file the agent saves while talking in chat A is readable (and mentionable) while talking in chat B, and a memory note written in one conversation shapes all of them. If the people in one chat must never see artifacts from another, separate sessions are not enough — use separate agent groups.`]})}),`\n`,_jsxs(Heading,{level:`2`,id:`a-session-per-thread-—-per-thread`,children:[`A session per thread — `,_jsx(_components.code,{children:`per-thread`})]}),`\n`,_jsxs(_components.p,{children:[`The same idea at finer grain: one session per `,_jsx(_components.code,{children:`(chat, thread)`}),`, so each Discord or Slack thread is its own conversation. You rarely set this by hand — on thread-capable adapters the router `,_jsx(_components.strong,{children:`forces`}),` per-thread in group chats regardless of a `,_jsx(_components.code,{children:`shared`}),` wiring (only `,_jsx(_components.code,{children:`agent-shared`}),` or a per-wiring `,_jsx(_components.code,{children:`threads = 0`}),` overrides it), DM thread behavior follows the channel’s declared DM default and any `,_jsx(_components.code,{children:`threads`}),` override, and thread-less adapters like WhatsApp or Telegram collapse `,_jsx(_components.code,{children:`per-thread`}),` back to `,_jsx(_components.code,{children:`shared`}),`. The full requested-versus-effective table is in the `,_jsx(_components.a,{href:`/concepts/entity-model`,children:`entity model`}),`’s sessions section. The history-access and shared-filesystem caveats above apply here identically. When creating or changing a `,_jsx(_components.code,{children:`per-thread`}),` wiring, the CLI rejects explicit `,_jsx(_components.code,{children:`threads = 0`}),` or an inherited threads-off policy on a declared adapter. Undeclared adapters retain legacy leniency when `,_jsx(_components.code,{children:`threads`}),` is unset. On a thread-capable channel whose context defaults to threads off, use `,_jsx(_components.code,{children:`--threads true`}),` alongside `,_jsx(_components.code,{children:`--session-mode per-thread`}),`.`]}),`\n`,_jsxs(Heading,{level:`2`,id:`one-conversation-everywhere-—-agent-shared`,children:[`One conversation everywhere — `,_jsx(_components.code,{children:`agent-shared`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`session_mode: 'agent-shared'`}),` is the deliberate opposite of isolation: every messaging group wired with this mode joins the agent group’s single session. Mention the agent on Slack, continue on Discord, and it’s the same conversation with the same context. Use it when the chats are really one stream — your own DMs across three platforms, or a GitHub webhook channel plus the Slack channel where you discuss it. Don’t use it across chats with different audiences: everyone in every wired chat is effectively in one room.`]}),`\n`,_jsx(Heading,{level:`2`,id:`choosing-a-level`,children:`Choosing a level`}),`\n`,_jsx(OptimizedImage,{className:`mint-block dark:mint-hidden`,src:`https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-light.svg?fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=09c3d42370332aa073a6a463ada19cc7`,alt:`Decision tree over three questions landing on four isolation levels, ordered most to least isolated: separate agent groups, per-thread, shared, agent-shared; the three session modes share the same agent workspace files`,\"data-og-width\":`1328`,width:`1328`,\"data-og-height\":`768`,height:`768`,\"data-path\":`images/diagrams/isolation-levels-light.svg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-light.svg?w=280\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=0b7f4be92a90fa92cadf90844eb17337 280w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-light.svg?w=560\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=fdec804be28ed2a456ef81dc981c8d60 560w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-light.svg?w=840\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=d3c52c396571029ebe121b332821385d 840w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-light.svg?w=1100\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=0624ddd6378c2e7f3e5d19059cdd75dd 1100w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-light.svg?w=1650\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=c18e3edb2b626ab13d8b1b3b0951167e 1650w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-light.svg?w=2500\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=d9d477cabde734a44e41cc678535ae31 2500w`}),`\n`,_jsx(OptimizedImage,{className:`mint-hidden dark:mint-block`,src:`https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-dark.svg?fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=cd2616b4d1728c4351988faa88a3dae0`,alt:`Decision tree over three questions landing on four isolation levels, ordered most to least isolated: separate agent groups, per-thread, shared, agent-shared; the three session modes share the same agent workspace files`,\"data-og-width\":`1328`,width:`1328`,\"data-og-height\":`768`,height:`768`,\"data-path\":`images/diagrams/isolation-levels-dark.svg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-dark.svg?w=280\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=d5c2ea30f2fab1f07fcc086724bef525 280w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-dark.svg?w=560\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=b09621115844d9b64eb15f7ac87eb9de 560w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-dark.svg?w=840\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=c26b482e74ac162be9a52743b70f70f2 840w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-dark.svg?w=1100\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=ce373b1e2711684c8cc357b829d866b6 1100w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-dark.svg?w=1650\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=4552f14b6baee135d41afdd8777ddbf4 1650w, https://mintcdn.com/qwibitai-nanoclaw-8/eaEEYcmCdIZ6Tipx/images/diagrams/isolation-levels-dark.svg?w=2500\u0026fit=max\u0026auto=format\u0026n=eaEEYcmCdIZ6Tipx\u0026q=85\u0026s=0079d9fc72b6654fb1ac9347579b538d 2500w`}),`\n`,_jsx(_components.p,{children:`When in doubt, start more isolated. Merging two agent groups later means hand-carrying files and memory; splitting one is just creating a new group.`}),`\n`,_jsx(Heading,{level:`2`,id:`configuring-each-level`,children:`Configuring each level`}),`\n`,_jsxs(_components.p,{children:[`The conversational route is the `,_jsx(_components.code,{children:`/manage-channels`}),` skill — it asks exactly this isolation question when you wire a channel and picks the flags for you. With the `,_jsxs(_components.a,{href:`/reference/ncl-cli`,children:[_jsx(_components.code,{children:`ncl`}),` CLI`]}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Most isolated: a new agent group, then wire the chat to it`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ncl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` groups`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Work\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --folder`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` work`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ncl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` wirings`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --messaging-group-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`mg-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --agent-group-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`new-group-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Same agent, separate conversations (default)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ncl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` wirings`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --messaging-group-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`mg-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --agent-group-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ag-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --session-mode`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` shared`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# One conversation across every chat wired this way`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ncl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` wirings`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --messaging-group-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`mg-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --agent-group-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ag-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --session-mode`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` agent-shared`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`--session-mode`}),` is updatable (`,_jsx(_components.code,{children:`ncl wirings update --id \u003cid> --session-mode ...`}),`), but it only changes how `,_jsx(_components.em,{children:`future`}),` messages find a session — existing sessions keep their history where it is.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-no-level-isolates`,children:`What no level isolates`}),`\n`,_jsx(_components.p,{children:`Session and agent-group boundaries separate agents from each other, not from the world:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The container boundary`}),` is what stands between an agent and the host — see `,_jsx(_components.a,{href:`/concepts/container-lifecycle`,children:`container lifecycle`}),` for what’s mounted where and why.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Network egress and additional mounts`}),` are per-group container config and open by default beyond the proxy — lock them down in `,_jsx(_components.a,{href:`/operate/hardening`,children:`hardening`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Shared base instructions`}),` — the host inlines the shared base into each provider’s composed project document; Claude uses `,_jsx(_components.code,{children:`container/CLAUDE.md`}),`, while Codex uses `,_jsx(_components.code,{children:`container/AGENTS.md`}),`. Changes to a base reach groups using that provider on their next spawn. Per-group instructions belong in that group’s `,_jsx(_components.code,{children:`instructions.prepend.md`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`related-pages`,children:`Related pages`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/concepts/entity-model`,children:`Entity model`}),` — the five entities these levels are built from`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/channels/overview`,children:`Channels overview`}),` — wiring chats with `,_jsx(_components.code,{children:`/manage-channels`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/operate/hardening`,children:`Hardening`}),` — egress, mounts, sender policies, the command gate`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/concepts/container-lifecycle`,children:`Container lifecycle`}),` — the per-session container and its mounts`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Isolation levels","description":"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.","keywords":["isolation","session_mode","shared","per-thread","agent-shared","agent groups","privacy","workspace","sessions","multi-tenant"],"tag":"UPDATED","href":"/concepts/isolation-levels"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Separate agent groups — nothing shared","slug":"separate-agent-groups-—-nothing-shared","depth":2,"children":[]},{"title":"One agent group, a session per chat — shared","slug":"one-agent-group-a-session-per-chat-—-shared","depth":2,"children":[]},{"title":"A session per thread — per-thread","slug":"a-session-per-thread-—-per-thread","depth":2,"children":[]},{"title":"One conversation everywhere — agent-shared","slug":"one-conversation-everywhere-—-agent-shared","depth":2,"children":[]},{"title":"Choosing a level","slug":"choosing-a-level","depth":2,"children":[]},{"title":"Configuring each level","slug":"configuring-each-level","depth":2,"children":[]},{"title":"What no level isolates","slug":"what-no-level-isolates","depth":2,"children":[]},{"title":"Related pages","slug":"related-pages","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"dynamicCss":".mint-block {\n display: block\n}\n.mint-hidden {\n display: none\n}\n.dark\\:mint-block:is(.dark *) {\n display: block\n}\n.dark\\:mint-hidden:is(.dark *) {\n display: none\n}","subdomain":"qwibitai-nanoclaw-8","siteName":"NanoClaw","title":"Isolation levels - NanoClaw","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-04T22:14:31.922Z","gitLastModified":"2026-09-04T21:44:10.000Z","originalFileLocation":"concepts/isolation-levels.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.\">\u003cmeta data-mint-head name=\"application-name\" content=\"NanoClaw\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Isolation levels - NanoClaw\">\u003cmeta data-mint-head property=\"og:description\" content=\"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"NanoClaw\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.nanoclaw.dev/concepts/isolation-levels\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qwibitai-nanoclaw-8.mintlify.app/_mintlify/api/og/v2?division=Understand\u0026amp;title=Isolation+levels\u0026amp;description=A+decision+guide+for+how+isolated+your+agents+and+conversations+should+be+%E2%80%94+from+fully+separate+agent+groups+down+to+one+shared+conversation+across+channels.\u0026amp;theme=0741fc673de6ce854a783acf\u0026amp;signature=33a8a0ac714e4cf19a45ef5c98c8cb14fd5751fc4f22e28312b78d058d991977\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Isolation levels - NanoClaw\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qwibitai-nanoclaw-8.mintlify.app/_mintlify/api/og/v2?division=Understand\u0026amp;title=Isolation+levels\u0026amp;description=A+decision+guide+for+how+isolated+your+agents+and+conversations+should+be+%E2%80%94+from+fully+separate+agent+groups+down+to+one+shared+conversation+across+channels.\u0026amp;theme=0741fc673de6ce854a783acf\u0026amp;signature=33a8a0ac714e4cf19a45ef5c98c8cb14fd5751fc4f22e28312b78d058d991977\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/qwibitai-nanoclaw-8/_VTx1OtifLne3AF6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"NanoClaw\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2DD4BF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.nanoclaw.dev/concepts/isolation-levels\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/concepts/isolation-levels.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.nanoclaw.dev/#organization\",\"name\":\"NanoClaw\",\"url\":\"https://docs.nanoclaw.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qwibitai-nanoclaw-8/U-zx_S2Vkyzi0Gli/images/nanoclaw-logotype-dark.svg?fit=max\u0026auto=format\u0026n=U-zx_S2Vkyzi0Gli\u0026q=85\u0026s=7fabf1abf0eb70d18a0235dd67255fcb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.nanoclaw.dev#website\",\"name\":\"NanoClaw\",\"url\":\"https://docs.nanoclaw.dev\",\"publisher\":{\"@id\":\"https://docs.nanoclaw.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.nanoclaw.dev/concepts/isolation-levels#webpage\",\"url\":\"https://docs.nanoclaw.dev/concepts/isolation-levels\",\"name\":\"Isolation levels\",\"description\":\"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.\",\"dateModified\":\"2026-09-04T21:44:10.000Z\",\"isPartOf\":{\"@id\":\"https://docs.nanoclaw.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.nanoclaw.dev/concepts/isolation-levels#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.nanoclaw.dev/concepts/isolation-levels#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Understand\",\"item\":\"https://docs.nanoclaw.dev/concepts/architecture\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Isolation levels\",\"item\":\"https://docs.nanoclaw.dev/concepts/isolation-levels\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.nanoclaw.dev/concepts/isolation-levels#article\",\"headline\":\"Isolation levels\",\"name\":\"Isolation levels\",\"description\":\"A decision guide for how isolated your agents and conversations should be — from fully separate agent groups down to one shared conversation across channels.\",\"url\":\"https://docs.nanoclaw.dev/concepts/isolation-levels\",\"mainEntityOfPage\":{\"@id\":\"https://docs.nanoclaw.dev/concepts/isolation-levels#webpage\"},\"dateModified\":\"2026-09-04T21:44:10.000Z\",\"keywords\":\"isolation, session_mode, shared, per-thread, agent-shared, agent groups, privacy, workspace, sessions, multi-tenant\",\"publisher\":{\"@id\":\"https://docs.nanoclaw.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.nanoclaw.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"NanoClaw\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"NanoClaw","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":"clock-rotate-left","href":"/changelog"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"What is NanoClaw?","icon":"house","sidebarTitle":"Introduction","tag":"UPDATED","href":"/introduction"},{"title":"Quick start","icon":"bolt","tag":"UPDATED","href":"/quickstart"},{"title":"Installation","icon":"download","href":"/installation"},{"title":"Migrate from v1 or OpenClaw","icon":"route","href":"/migrate-from-v1"}]},{"group":"Channels","icon":"tower-broadcast","pages":[{"title":"Channels overview","href":"/channels/overview"},{"title":"WhatsApp","href":"/channels/whatsapp"},{"title":"Telegram","href":"/channels/telegram"},{"title":"Discord","href":"/channels/discord"},{"title":"Slack","sidebarTitle":"Slack","tag":"UPDATED","href":"/channels/slack"},{"title":"Mattermost","href":"/channels/mattermost"},{"title":"Signal","href":"/channels/signal"},{"title":"iMessage","href":"/channels/imessage"},{"title":"Microsoft Teams","tag":"UPDATED","href":"/channels/teams"},{"title":"Dial","href":"/channels/dial"},{"title":"CLI channel","href":"/channels/cli"},{"title":"More channels","href":"/channels/more-channels"}]},{"group":"Operate","icon":"gauge","pages":[{"title":"Configuration","tag":"UPDATED","href":"/operate/configuration"},{"title":"The ncl admin CLI","href":"/operate/ncl-cli"},{"title":"Credentials","tag":"UPDATED","href":"/operate/credentials"},{"title":"Credential gateways","tag":"NEW","href":"/operate/gateways"},{"title":"Hardening","href":"/operate/hardening"},{"title":"Get started with the Echo hardened runtime","sidebarTitle":"Hardened runtime","href":"/guides/echo-hardened-runtime"},{"title":"Upgrading","href":"/operate/upgrading"},{"title":"Uninstall NanoClaw","icon":"trash","href":"/operate/uninstall"},{"title":"Troubleshooting","href":"/operate/troubleshooting"}]},{"group":"Build with agents","icon":"wand-magic-sparkles","pages":[{"title":"Your first agent","href":"/guides/first-agent"},{"title":"Customize an agent","href":"/guides/customize-an-agent"},{"title":"Schedule recurring work","href":"/guides/scheduled-tasks"},{"title":"Build a multi-agent team","href":"/guides/multi-agent-swarm"}]},{"group":"Templates","icon":"layer-group","pages":[{"title":"Getting started with a template","tag":"UPDATED","href":"/templates/getting-started"},{"title":"Templates","href":"/templates/overview"},{"title":"Using a template","tag":"UPDATED","href":"/templates/using-templates"},{"title":"Updating a stamped agent","href":"/templates/updating"},{"title":"Building a template","href":"/templates/building"},{"title":"Submitting a template","href":"/templates/submitting"}]},{"group":"Extend","icon":"puzzle-piece","pages":[{"title":"Skills: how NanoClaw extends itself","href":"/extend/overview"},{"title":"Give agents tools","href":"/extend/tools"},{"title":"Agent providers","tag":"UPDATED","href":"/extend/providers"},{"title":"Agent self-modification","href":"/extend/self-modification"},{"title":"Writing skills","href":"/extend/writing-skills"}]},{"group":"Understand","icon":"lightbulb","pages":[{"title":"Architecture","href":"/concepts/architecture"},{"title":"Entity model","href":"/concepts/entity-model"},{"title":"Agent memory","description":"How NanoClaw stores durable facts in a provider-neutral Markdown tree, loads them into fresh context windows, and keeps them scoped to one agent group.","href":"/concepts/agent-memory"},{"title":"Isolation levels","tag":"UPDATED","href":"/concepts/isolation-levels"},{"title":"Container lifecycle","description":"The full container story: how the agent image is built, what gets assembled at every spawn, how wakes are deduplicated, and what kills a container.","tag":"UPDATED","href":"/concepts/container-lifecycle"},{"title":"Security model","href":"/concepts/security"},{"title":"Contributing to NanoClaw","href":"/concepts/contributing"}]},{"group":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Releases","icon":"tag","href":"/changelog/index"},{"title":"Docs updates","icon":"file-pen","href":"/changelog/docs-updates"}]}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/ncl-cli"}]}]},"title":"Isolation levels - NanoClaw","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["10e4515597","a74be98ba7"],"chunks":["BannerMarkdown-BVNUlwBc.js","dist-aeztFa9U.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-rL8ZCCw4.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","zoom-image-lightbox-BZxD9MAj.js","lightbox-handle-r17bVUz3.js"]}