In MiniMax Code, Mini Apps and sessions relate as follows:
One backend per Mini App: Each Mini App starts only one Node process. Whichever session you call it from, you reach the same backend and read and write the same data.
Pages are isolated per session: Each session has its own Mini App tab, but within one session a Mini App opens in only one tab.
Sessions a Mini App starts are private to it: Sessions a Mini App starts through the Agent API don’t appear in the chat list on the left; only that Mini App maintains and continues them.
One service per plugin, one page per session; Agent sessions a Mini App starts belong to that Mini App.
There are three ways: pick it from the right panel’s ”+” menu, @-mention an installed Mini App in the input, or let the Agent call open. The page always opens in the session that started the action.
Situation
What happens
A Mini App reference appears in an existing session’s input
The backend starts or is reused right away, and the sidebar expands only after the page opens; a failed startup never shows an empty panel. Selecting with @, clicking “Use” in the marketplace, and restoring a draft with a reference all count
A new conversation on the home screen
Only the backend starts. After the first send creates the session, pages open for Mini Apps that are still in the message and started successfully
Opening or @-mentioning it again in the same session
Reuses the existing tab. The current route and state remain while the service is on the same run and the page has not reloaded. An explicit path can navigate to a target address, and a service restart that changes the run also reloads the page
Plain-text @xxx and message history
Never start the service or open a page
Cloud, SSH, and Remote Control sessions
Never start or open Mini Apps on your machine
Once opening has started, removing the reference, cancelling the message, or switching sessions doesn’t withdraw it. The tab stays in the session that requested it until you close it.
The session list on the left marks sessions that have a Mini App open, so you can get back to the right workspace.
When sessions A and B open the same Mini App, both pages talk to the same Node service and read and write the same dataDir.
A change made in session A shows up on session B’s page only after a refresh or a pushed update. Authors should route every write through the Node business service and push SSE or WebSocket events after committing; see State and persistence.
Removing an @ reference from the input doesn’t stop the shared service.
Closing a running Mini App’s tab and confirming stops its shared service and closes that plugin’s pages in every session.
At most 3 different Mini App services run at once, and referencing a Mini App that is already running doesn’t take a new slot. If you @ a Mini App that needs a new slot and none is free, it doesn’t start or open; you see a service-limit notice and the reference stays. Select it again once a slot frees up.
After a service restart, refresh or reopen an open tab to recover.
Managed MCP tools: while the Mini App service runs, the Agent can call the tools it exposes. Tools follow the service, not any session’s page.
Ready before sending: when a message references a Mini App, the host starts its service, connects MCP, and confirms the tools are available before calling the model. If a required managed MCP is unavailable, the request fails instead of letting the model continue without its tools.
No implicit starts: the host never starts a Mini App because of message history, quoted messages, or model output.
Looking at the page: the Agent can inspect the Mini App page open in the current session with the built-in browser. That is how screenshot acceptance works when building with /miniapp-creator.
message.append always targets the session the page belongs to. It never writes to another session or the home draft, and never creates a session.
It only appends to local, writable sessions. If the session is deleted, becomes read-only, or switches to cloud or Remote Control, the call rejects with target_unavailable instead of writing somewhere else.
It can append to the session’s draft even when that session isn’t in the foreground.
Every append needs user confirmation, and the user sends the message.
A Mini App that declares agentAccess can start Agent sessions through the Agent API. These are separate from your chat sessions:
Page-initiated
Node-initiated
Linked chat
The session the page is open in
None
Agent
That session’s agent
The primary agent, or one chosen at creation
Working directory
That session’s project directory; without one, this Mini App’s own Agent directory
This Mini App’s own Agent directory
Model
That session’s model and thinking level at creation
The runtime default model
These sessions don’t appear in your session list. Each Mini App can continue only sessions it created.
The agent is fixed at creation; create a new session to use a different agent.
The model is captured at creation and then decoupled from the chat: switching models in your main chat doesn’t affect the Mini App’s session. run and answer can switch models explicitly.
A session the page creates with create can be handed to Node by passing its sessionId, and Node continues it with run({ sessionId }).
When the page calls open(sessionId), the Agent session appears in the current chat’s side panel, where you can follow it, approve tool calls, and answer questionnaires.
The page can open any session this Mini App owns, including ones Node created.
One session can show in the side panels of several chats at once; it counts as unanswerable only after all of them close.
Tool approvals wait only while someone can answer: the call passed onEvent, or the session is showing in a chat side panel. The chat a session was originally created from doesn’t count. Approvals nobody can answer are denied, and the model is told to continue without that tool.
Reloading or closing the host window counts as closing the panel. After the chat is deleted or the runtime restarts, the page needs to call open again.
A separate session.read declaration in agentAccess lets a Mini App list recent user sessions, read details and final replies, and subscribe to progress. Users can switch this permission off in plugin details. It does not let the Mini App continue those sessions, approve their tools, or answer their questionnaires. See Reading and observing user sessions for the APIs and scope.
A popped-out window still belongs to the original session’s tab. Closing it or pressing Cmd/Ctrl+W requests a return to its original file panel.
Changing between inline and window is separate from reopening the Mini App in the same session. When the host returns modeChangeReloadsPage: true, changing mode rebuilds the page: unsaved memory, media streams, and page subscriptions do not survive, while the logical window ID and Node service remain. Authors need to save state first and restore it when the destination page starts; see Page rebuilds and confirmation.
From v3.1.10, popping out or returning a page that requires rebuilding displays the impact and waits for confirmation. Closing the separate window or pressing Cmd/Ctrl+W keeps the original window until confirmation finishes; cancellation leaves the page and requests in the original window unchanged.
The window’s visibility doesn’t follow the main window: hiding, minimizing, or closing the main window to the tray leaves popped-out windows as they are.
When the Mini App stops, the page closes, or the app quits, the window closes with it.
When the same sign-in refreshes its credentials, running Mini Apps, managed MCP, and tools stay as they are.
After you sign out, Host Connector tool lists and authorized references are revoked. Sign back in with the same account and the Mini App lists its tools again to keep working, with no republish.
When you switch to a different account, official Mini Apps running under the old account are retired before the new account can activate them. Local Mini Apps keep running, but their Connector access from the old account is revoked for good; restart the service to use Connectors under the new account.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"MiniMax Code Docs","colors":{"primary":"#181E25","dark":"#181E25"},"logo":{"light":"https://mintcdn.com/agent-en/AWwAA_JD3rUWnMtN/logo/light.svg?fit=max\u0026auto=format\u0026n=AWwAA_JD3rUWnMtN\u0026q=85\u0026s=dd070cb1a0cc203f11cd45f588926f57","dark":"https://mintcdn.com/agent-en/AWwAA_JD3rUWnMtN/logo/dark.svg?fit=max\u0026auto=format\u0026n=AWwAA_JD3rUWnMtN\u0026q=85\u0026s=8796874562c21bdce4110337c42efc73","href":"https://agent.minimax.io"},"favicon":"https://mintcdn.com/agent-en/P5MzPaVjsb-042G7/favicon.ico?fit=max\u0026auto=format\u0026n=P5MzPaVjsb-042G7\u0026q=85\u0026s=fa22cbc6858a880da7c77691939715bf","appearance":{"default":"light","strict":false},"navbar":{"links":[{"href":"https://agent.minimax.io","label":"Get Started","type":"button"}]},"footer":{"socials":{"discord":"https://discord.com/invite/hvvt8hAye6","x":"https://x.com/MiniMax_AI","linkedin":"https://www.linkedin.com/company/minimax-ai","github":"https://github.com/MiniMax-AI"}},"seo":{"metatags":{"canonical":"https://code.minimax.io/docs","og:image":"https://file.cdn.minimax.io/public/58eca777-e31f-448a-9823-e2220e49b426.png","og:type":"website","og:site_name":"MiniMax Code","og:locale":"en_US","title":"MiniMax Code – AI Agent for Complex Tasks | Changelog \u0026 Docs","description":"MiniMax Code is a general-purpose AI agent that builds full-stack web apps, presentations, deep research reports, and more. View the latest product updates, features, and research.","keywords":"MiniMax Code, AI agent, AI coding assistant, full-stack AI, PPT generator, deep research AI, MCP integration, Supabase AI, AI web app builder, MiniMax changelog","charset":"UTF-8","viewport":"width=device-width, initial-scale=1.0","twitter:card":"summary_large_image","twitter:site":"@MiniMax_AI","twitter:title":"MiniMax Code – AI Agent for Complex Tasks","twitter:description":"Build full-stack apps, presentations, and research reports with MiniMax Code. Powered by multi-agent AI.","twitter:image":"https://file.cdn.minimax.io/public/58eca777-e31f-448a-9823-e2220e49b426.png","robots":"index, follow"},"indexing":"all"},"fonts":{"family":"DM Sans"},"icons":{"library":"lucide"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"agent-en","hasAudioNarration":false,"actualSubdomain":"agent-en","customDomains":["agent.minimax.io"],"gitSource":{"type":"github","owner":"minimax-ai-dev","repo":"agent-docs","deployBranch":"main","contentDirectory":"packages/docs-en","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aef17f7ec2091b7c464945b","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"MiniMax Code","count":34},{"language":"default","tag":"Mini App Development","count":20},{"language":"default","tag":"CLI","count":13},{"language":"default","tag":"Agent Capabilities","count":8},{"language":"default","tag":"Desktop Features","count":8},{"language":"default","tag":"Develop","count":8},{"language":"default","tag":"Core Workflows","count":6},{"language":"default","tag":"Reference","count":5},{"language":"default","tag":"Models \u0026 Account","count":4},{"language":"default","tag":"Learn","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"[class*=\"ask-ai\"],[id*=\"ask-ai\"],[class*=\"AskAI\"],button[aria-label*=\"Ask AI\"]{display:none!important}article h2{display:inline-block;padding:2px 14px;border-radius:16px;background-color:#EBF5FF;color:#0969DA;font-size:14px;font-weight:500;border:1px solid #B6D4FE;margin-top:2rem}article .techblog-list h2,.techblog-list h2{display:block!important;background-color:transparent!important;border:none!important;border-top:1px solid #E5E7EB!important;border-radius:0!important;padding:2rem 0 0 0!important;color:#374151!important;font-size:16px!important;font-weight:500!important;margin-top:2.5rem!important;margin-bottom:0.5rem!important}.techblog-list h2:first-of-type{margin-top:2.5rem!important}.dark .techblog-list h2{color:#E5E7EB!important;border-top-color:#374151!important}.techblog-list h2,.techblog-list h3{scroll-margin-top:80px}#footer a[href*=\"mintlify\"],[class*=\"attribution\"],footer a[href*=\"mintlify\"]{display:none!important}img{max-width:100%;height:auto;object-fit:contain}@media (min-width: 1024px){#sidebar{top:max(\n calc(var(--mintlify-slot-header-height, 7rem) + var(--banner-height, 0px)),\n 5rem\n )!important}}@media (max-width: 1023px){#sidebar>div:first-child,#sidebar-content>div:first-child{padding-top:16px!important}}.code-docs h2,.code-docs h3{display:block!important;padding:0!important;border-radius:0!important;background-color:transparent!important;color:inherit!important;border:none!important}.code-image-placeholder{border:1px dashed #CBD5E1;border-radius:8px;padding:16px;background:#F8FAFC;color:#475569;font-size:14px;line-height:22px;margin:16px 0 24px}.dark .code-image-placeholder{border-color:#475569;background:#111827;color:#CBD5E1}.code-screenshot{display:block;width:100%;margin:16px 0 24px;border:1px solid #E2E8F0;border-radius:8px;background:#FFFFFF}.dark .code-screenshot{border-color:#334155;background:#0F172A}.code-community-panel{display:grid;grid-template-columns:minmax(0, 1fr) 180px;gap:24px;align-items:center;border:1px solid #E2E8F0;border-radius:8px;padding:20px;margin:16px 0 8px;background:#FFFFFF}.code-community-panel p{margin-bottom:0}.code-qr-placeholder{display:flex;min-height:180px;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px dashed #CBD5E1;border-radius:8px;background:#F8FAFC;color:#334155;text-align:center}.code-qr-placeholder small{max-width:140px;color:#64748B;font-size:12px;line-height:18px}.code-community-qr{display:block;width:180px;max-width:100%;border:1px solid #E2E8F0;border-radius:8px;background:#FFFFFF}.dark .code-community-panel{border-color:#334155;background:#0F172A}.dark .code-qr-placeholder{border-color:#475569;background:#111827;color:#CBD5E1}.dark .code-qr-placeholder small{color:#94A3B8}@media (max-width: 640px){.code-community-panel{grid-template-columns:1fr}.code-qr-placeholder{min-height:220px}}body:has(.question-standalone-marker) header,body:has(.question-standalone-marker) #navbar,body:has(.question-standalone-marker) #sidebar,body:has(.question-standalone-marker) #sidebar-content,body:has(.question-standalone-marker) footer,body:has(.question-standalone-marker) [class*=\"navbar\"],body:has(.question-standalone-marker) [class*=\"Navbar\"],body:has(.question-standalone-marker) [class*=\"sidebar\"],body:has(.question-standalone-marker) [class*=\"Sidebar\"],body:has(.question-standalone-marker) [class*=\"search\"],body:has(.question-standalone-marker) [class*=\"Search\"],body:has(.question-standalone-marker) button[aria-label*=\"Search\"],body:has(.question-standalone-marker) button[aria-label*=\"搜索\"],body:has(.question-standalone-marker) [role=\"search\"]{display:none!important}body:has(.question-standalone-marker) #table-of-contents-layout,body:has(.question-standalone-marker) [aria-label=\"目录\"],body:has(.question-standalone-marker) [aria-label=\"Contents\"]{display:none!important}body:has(.question-standalone-marker) main,body:has(.question-standalone-marker) article{padding-top:0!important}body:has(.question-standalone-marker) article{max-width:900px!important;margin-left:auto!important;margin-right:auto!important}"}],"page":{"pagePath":"miniapp/sessions","slug":"/miniapp/sessions","pageMetadata":{"title":"Mini Apps and sessions","description":null,"href":"/miniapp/sessions"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,OptimizedImage,Table}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(`div`,{className:`code-docs`,children:[_jsx(_components.p,{children:`In MiniMax Code, Mini Apps and sessions relate as follows:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`One backend per Mini App:`}),` Each Mini App starts only one Node process. Whichever session you call it from, you reach the same backend and read and write the same data.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pages are isolated per session:`}),` Each session has its own Mini App tab, but within one session a Mini App opens in only one tab.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sessions a Mini App starts are private to it:`}),` Sessions a Mini App starts through the Agent API don’t appear in the chat list on the left; only that Mini App maintains and continues them.`]}),`\n`]}),_jsx(Frame,{caption:`One service per plugin, one page per session; Agent sessions a Mini App starts belong to that Mini App.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/agent-en/mM6ovYl9sr4HdU6x/images/miniapp/sessions-en.svg?fit=max\u0026auto=format\u0026n=mM6ovYl9sr4HdU6x\u0026q=85\u0026s=468c25abd45d4082a8a8398983ac5fa1`,alt:`How Mini Apps relate to sessions`,\"data-og-width\":`1200`,width:`1200`,\"data-og-height\":`556`,height:`556`,\"data-path\":`images/miniapp/sessions-en.svg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/agent-en/mM6ovYl9sr4HdU6x/images/miniapp/sessions-en.svg?w=280\u0026fit=max\u0026auto=format\u0026n=mM6ovYl9sr4HdU6x\u0026q=85\u0026s=dd504d2095b4522bcf306ae8c39f3cfd 280w, https://mintcdn.com/agent-en/mM6ovYl9sr4HdU6x/images/miniapp/sessions-en.svg?w=560\u0026fit=max\u0026auto=format\u0026n=mM6ovYl9sr4HdU6x\u0026q=85\u0026s=6624b36907de046f3fb4b92efd033199 560w, https://mintcdn.com/agent-en/mM6ovYl9sr4HdU6x/images/miniapp/sessions-en.svg?w=840\u0026fit=max\u0026auto=format\u0026n=mM6ovYl9sr4HdU6x\u0026q=85\u0026s=df2a9b3dd7cf74a502e206dc4fa63276 840w, https://mintcdn.com/agent-en/mM6ovYl9sr4HdU6x/images/miniapp/sessions-en.svg?w=1100\u0026fit=max\u0026auto=format\u0026n=mM6ovYl9sr4HdU6x\u0026q=85\u0026s=02fce34a2d9f1563a8a7c053227eb7db 1100w, https://mintcdn.com/agent-en/mM6ovYl9sr4HdU6x/images/miniapp/sessions-en.svg?w=1650\u0026fit=max\u0026auto=format\u0026n=mM6ovYl9sr4HdU6x\u0026q=85\u0026s=094511fa255e49bd2afe909a42c21787 1650w, https://mintcdn.com/agent-en/mM6ovYl9sr4HdU6x/images/miniapp/sessions-en.svg?w=2500\u0026fit=max\u0026auto=format\u0026n=mM6ovYl9sr4HdU6x\u0026q=85\u0026s=2a45c4d7bd5cf2b030c611604cb7b43c 2500w`})}),_jsx(Heading,{level:`2`,id:`open`,children:`Opening a Mini App in a session`}),_jsxs(_components.p,{children:[`There are three ways: pick it from the right panel’s ”+” menu, `,_jsx(_components.code,{children:`@`}),`-mention an installed Mini App in the input, or let the Agent call `,_jsx(_components.code,{children:`open`}),`. The page always opens in the session that started the action.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Situation`}),_jsx(_components.th,{children:`What happens`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A Mini App reference appears in an existing session’s input`}),_jsxs(_components.td,{children:[`The backend starts or is reused right away, and the sidebar expands only after the page opens; a failed startup never shows an empty panel. Selecting with `,_jsx(_components.code,{children:`@`}),`, clicking “Use” in the marketplace, and restoring a draft with a reference all count`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A new conversation on the home screen`}),_jsx(_components.td,{children:`Only the backend starts. After the first send creates the session, pages open for Mini Apps that are still in the message and started successfully`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Opening or `,_jsx(_components.code,{children:`@`}),`-mentioning it again in the same session`]}),_jsxs(_components.td,{children:[`Reuses the existing tab. The current route and state remain while the service is on the same run and the page has not reloaded. An explicit `,_jsx(_components.code,{children:`path`}),` can navigate to a target address, and a service restart that changes the run also reloads the page`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Plain-text `,_jsx(_components.code,{children:`@xxx`}),` and message history`]}),_jsx(_components.td,{children:`Never start the service or open a page`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cloud, SSH, and Remote Control sessions`}),_jsx(_components.td,{children:`Never start or open Mini Apps on your machine`})]})]})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Once opening has started, removing the reference, cancelling the message, or switching sessions doesn’t withdraw it. The tab stays in the session that requested it until you close it.`}),`\n`,_jsx(_components.li,{children:`The session list on the left marks sessions that have a Mini App open, so you can get back to the right workspace.`}),`\n`]}),_jsx(Heading,{level:`2`,id:`shared`,children:`One service for every session`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`When sessions A and B open the same Mini App, both pages talk to the same Node service and read and write the same `,_jsx(_components.code,{children:`dataDir`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`A change made in session A shows up on session B’s page only after a refresh or a pushed update. Authors should route every write through the Node business service and push SSE or WebSocket events after committing; see `,_jsx(_components.a,{href:`/miniapp/authors/data#state`,children:`State and persistence`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Removing an `,_jsx(_components.code,{children:`@`}),` reference from the input doesn’t stop the shared service.`]}),`\n`,_jsx(_components.li,{children:`Closing a running Mini App’s tab and confirming stops its shared service and closes that plugin’s pages in every session.`}),`\n`,_jsxs(_components.li,{children:[`At most 3 different Mini App services run at once, and referencing a Mini App that is already running doesn’t take a new slot. If you `,_jsx(_components.code,{children:`@`}),` a Mini App that needs a new slot and none is free, it doesn’t start or open; you see a service-limit notice and the reference stays. Select it again once a slot frees up.`]}),`\n`,_jsx(_components.li,{children:`After a service restart, refresh or reopen an open tab to recover.`}),`\n`]}),_jsx(Heading,{level:`2`,id:`agent-tools`,children:`How the Agent uses a Mini App in a session`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Managed MCP tools:`}),` while the Mini App service runs, the Agent can call the tools it exposes. Tools follow the service, not any session’s page.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ready before sending:`}),` when a message references a Mini App, the host starts its service, connects MCP, and confirms the tools are available before calling the model. If a required managed MCP is unavailable, the request fails instead of letting the model continue without its tools.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No implicit starts:`}),` the host never starts a Mini App because of message history, quoted messages, or model output.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Looking at the page:`}),` the Agent can inspect the Mini App page open in the current session with the built-in browser. That is how screenshot acceptance works when building with /miniapp-creator.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`handoff`,children:`Handing content to this session’s input`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`message.append`}),` always targets the session the page belongs to. It never writes to another session or the home draft, and never creates a session.`]}),`\n`,_jsxs(_components.li,{children:[`It only appends to local, writable sessions. If the session is deleted, becomes read-only, or switches to cloud or Remote Control, the call rejects with `,_jsx(_components.code,{children:`target_unavailable`}),` instead of writing somewhere else.`]}),`\n`,_jsx(_components.li,{children:`It can append to the session’s draft even when that session isn’t in the foreground.`}),`\n`,_jsx(_components.li,{children:`Every append needs user confirmation, and the user sends the message.`}),`\n`]}),_jsx(Heading,{level:`2`,id:`agent-sessions`,children:`A Mini App’s own Agent sessions`}),_jsxs(_components.p,{children:[`A Mini App that declares `,_jsx(_components.code,{children:`agentAccess`}),` can start Agent sessions through the `,_jsx(_components.a,{href:`/miniapp/authors/agent#agent-api`,children:`Agent API`}),`. These are separate from your chat sessions:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:`Page-initiated`}),_jsx(_components.th,{children:`Node-initiated`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Linked chat`}),_jsx(_components.td,{children:`The session the page is open in`}),_jsx(_components.td,{children:`None`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Agent`}),_jsx(_components.td,{children:`That session’s agent`}),_jsx(_components.td,{children:`The primary agent, or one chosen at creation`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Working directory`}),_jsx(_components.td,{children:`That session’s project directory; without one, this Mini App’s own Agent directory`}),_jsx(_components.td,{children:`This Mini App’s own Agent directory`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Model`}),_jsx(_components.td,{children:`That session’s model and thinking level at creation`}),_jsx(_components.td,{children:`The runtime default model`})]})]})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`These sessions don’t appear in your session list. Each Mini App can continue only sessions it created.`}),`\n`,_jsx(_components.li,{children:`The agent is fixed at creation; create a new session to use a different agent.`}),`\n`,_jsxs(_components.li,{children:[`The model is captured at creation and then decoupled from the chat: switching models in your main chat doesn’t affect the Mini App’s session. `,_jsx(_components.code,{children:`run`}),` and `,_jsx(_components.code,{children:`answer`}),` can switch models explicitly.`]}),`\n`,_jsxs(_components.li,{children:[`A session the page creates with `,_jsx(_components.code,{children:`create`}),` can be handed to Node by passing its `,_jsx(_components.code,{children:`sessionId`}),`, and Node continues it with `,_jsx(_components.code,{children:`run({ sessionId })`}),`.`]}),`\n`]}),_jsx(Heading,{level:`3`,id:`open-in-chat`,children:`Showing it in the chat panel`}),_jsxs(_components.p,{children:[`When the page calls `,_jsx(_components.code,{children:`open(sessionId)`}),`, the Agent session appears in the current chat’s side panel, where you can follow it, approve tool calls, and answer questionnaires.`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The page can open any session this Mini App owns, including ones Node created.`}),`\n`,_jsx(_components.li,{children:`One session can show in the side panels of several chats at once; it counts as unanswerable only after all of them close.`}),`\n`,_jsxs(_components.li,{children:[`Tool approvals wait only while someone can answer: the call passed `,_jsx(_components.code,{children:`onEvent`}),`, or the session is showing in a chat side panel. The chat a session was originally created from doesn’t count. Approvals nobody can answer are denied, and the model is told to continue without that tool.`]}),`\n`,_jsxs(_components.li,{children:[`Reloading or closing the host window counts as closing the panel. After the chat is deleted or the runtime restarts, the page needs to call `,_jsx(_components.code,{children:`open`}),` again.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`read`,children:`Reading and observing user sessions`}),_jsxs(_components.p,{children:[`A separate `,_jsx(_components.code,{children:`session.read`}),` declaration in `,_jsx(_components.code,{children:`agentAccess`}),` lets a Mini App list recent user sessions, read details and final replies, and subscribe to progress. Users can switch this permission off in plugin details. It does not let the Mini App continue those sessions, approve their tools, or answer their questionnaires. See `,_jsx(_components.a,{href:`/miniapp/authors/agent#agent-read`,children:`Reading and observing user sessions`}),` for the APIs and scope.`]}),_jsx(Heading,{level:`2`,id:`window`,children:`Pop-out windows and sessions`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A popped-out window still belongs to the original session’s tab. Closing it or pressing Cmd/Ctrl+W requests a return to its original file panel.`}),`\n`,_jsxs(_components.li,{children:[`Changing between `,_jsx(_components.code,{children:`inline`}),` and `,_jsx(_components.code,{children:`window`}),` is separate from reopening the Mini App in the same session. When the host returns `,_jsx(_components.code,{children:`modeChangeReloadsPage: true`}),`, changing mode rebuilds the page: unsaved memory, media streams, and page subscriptions do not survive, while the logical window ID and Node service remain. Authors need to save state first and restore it when the destination page starts; see `,_jsx(_components.a,{href:`/miniapp/reference/client-api#window-reload`,children:`Page rebuilds and confirmation`}),`.`]}),`\n`,_jsx(_components.li,{children:`From v3.1.10, popping out or returning a page that requires rebuilding displays the impact and waits for confirmation. Closing the separate window or pressing Cmd/Ctrl+W keeps the original window until confirmation finishes; cancellation leaves the page and requests in the original window unchanged.`}),`\n`,_jsx(_components.li,{children:`The window’s visibility doesn’t follow the main window: hiding, minimizing, or closing the main window to the tray leaves popped-out windows as they are.`}),`\n`,_jsx(_components.li,{children:`When the Mini App stops, the page closes, or the app quits, the window closes with it.`}),`\n`]}),_jsx(Heading,{level:`2`,id:`accounts`,children:`Sign-in and accounts`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`When the same sign-in refreshes its credentials, running Mini Apps, managed MCP, and tools stay as they are.`}),`\n`,_jsx(_components.li,{children:`After you sign out, Host Connector tool lists and authorized references are revoked. Sign back in with the same account and the Mini App lists its tools again to keep working, with no republish.`}),`\n`,_jsx(_components.li,{children:`When you switch to a different account, official Mini Apps running under the old account are retired before the new account can activate them. Local Mini Apps keep running, but their Connector access from the old account is revoked for good; restart the service to use Connectors under the new account.`}),`\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":"Mini Apps and sessions","description":null,"href":"/miniapp/sessions"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Opening a Mini App in a session","slug":"open","depth":2,"children":[]},{"title":"One service for every session","slug":"shared","depth":2,"children":[]},{"title":"How the Agent uses a Mini App in a session","slug":"agent-tools","depth":2,"children":[]},{"title":"Handing content to this session’s input","slug":"handoff","depth":2,"children":[]},{"title":"A Mini App’s own Agent sessions","slug":"agent-sessions","depth":2,"children":[{"title":"Showing it in the chat panel","slug":"open-in-chat","depth":3,"children":[]}]},{"title":"Reading and observing user sessions","slug":"read","depth":2,"children":[]},{"title":"Pop-out windows and sessions","slug":"window","depth":2,"children":[]},{"title":"Sign-in and accounts","slug":"accounts","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/agent-en/771da42817f2844d/scripts/seo-schema.js"],"subdomain":"agent-en","siteName":"MiniMax Code Docs","title":"Mini Apps and sessions - MiniMax Code Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T11:45:07.664Z","originalFileLocation":"miniapp/sessions.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;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=\"light\"}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=\"MiniMax Code is a general-purpose AI agent that builds full-stack web apps, presentations, deep research reports, and more. View the latest product updates, features, and research.\">\u003cmeta data-mint-head name=\"keywords\" content=\"MiniMax Code, AI agent, AI coding assistant, full-stack AI, PPT generator, deep research AI, MCP integration, Supabase AI, AI web app builder, MiniMax changelog\">\u003cmeta data-mint-head name=\"application-name\" content=\"MiniMax Code Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_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=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Mini Apps and sessions - MiniMax Code Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"MiniMax Code is a general-purpose AI agent that builds full-stack web apps, presentations, deep research reports, and more. View the latest product updates, features, and research.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"MiniMax Code\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://code.minimax.io/docs/miniapp/sessions\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://file.cdn.minimax.io/public/58eca777-e31f-448a-9823-e2220e49b426.png\">\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=\"MiniMax Code – AI Agent for Complex Tasks\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build full-stack apps, presentations, and research reports with MiniMax Code. Powered by multi-agent AI.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://file.cdn.minimax.io/public/58eca777-e31f-448a-9823-e2220e49b426.png\">\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=\"/docs/mintlify-assets/_mintlify/favicons/agent-en/RrLMm1BmnhcYtr3S/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"MiniMax Code Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#181E25\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"charset\" content=\"UTF-8\">\u003cmeta data-mint-head name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://code.minimax.io/docs/miniapp/sessions\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/miniapp/sessions.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://code.minimax.io/#organization\",\"name\":\"MiniMax Code Docs\",\"url\":\"https://code.minimax.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/agent-en/AWwAA_JD3rUWnMtN/logo/light.svg?fit=max\u0026auto=format\u0026n=AWwAA_JD3rUWnMtN\u0026q=85\u0026s=dd070cb1a0cc203f11cd45f588926f57\"}},{\"@type\":\"WebSite\",\"@id\":\"https://code.minimax.io/docs#website\",\"name\":\"MiniMax Code Docs\",\"url\":\"https://code.minimax.io/docs\",\"publisher\":{\"@id\":\"https://code.minimax.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://code.minimax.io/docs/miniapp/sessions#webpage\",\"url\":\"https://code.minimax.io/docs/miniapp/sessions\",\"name\":\"Mini Apps and sessions\",\"dateModified\":\"2026-11-05T11:45:07.664Z\",\"isPartOf\":{\"@id\":\"https://code.minimax.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://code.minimax.io/docs/miniapp/sessions#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://code.minimax.io/docs/miniapp/sessions#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Learn\",\"item\":\"https://code.minimax.io/docs/miniapp/learn/architecture\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mini Apps and sessions\",\"item\":\"https://code.minimax.io/docs/miniapp/sessions\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://code.minimax.io/docs/miniapp/sessions#article\",\"headline\":\"Mini Apps and sessions\",\"name\":\"Mini Apps and sessions\",\"url\":\"https://code.minimax.io/docs/miniapp/sessions\",\"mainEntityOfPage\":{\"@id\":\"https://code.minimax.io/docs/miniapp/sessions#webpage\"},\"image\":\"https://file.cdn.minimax.io/public/58eca777-e31f-448a-9823-e2220e49b426.png\",\"dateModified\":\"2026-11-05T11:45:07.664Z\",\"publisher\":{\"@id\":\"https://code.minimax.io/#organization\"},\"isPartOf\":{\"@id\":\"https://code.minimax.io/docs#website\"}}]}\u003c/script>","siteName":"MiniMax Code Docs","nav":{"global":null,"tabs":[{"tab":"MiniMax Code","pages":[{"title":"MiniMax Code","href":"/code/welcome"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/quick-start"}]},{"tab":"Mini App Development","groups":[{"group":"Get started","pages":[{"title":"What is a Mini App?","href":"/miniapp/overview"},{"title":"Features","href":"/miniapp/features"},{"title":"Capabilities and progress","href":"/miniapp/progress"}]},{"group":"Learn","pages":[{"title":"Architecture overview","description":"What a Mini App is made of, how its parts talk to each other, and one full call from start to finish.","href":"/miniapp/learn/architecture"},{"title":"Mini Apps and sessions","href":"/miniapp/sessions"},{"title":"Running and updating","description":"How the host discovers, starts, updates, and cleans up a Mini App. You don't need this page to build one; come back when you hit an edge case.","href":"/miniapp/host/lifecycle"},{"title":"Security model","href":"/miniapp/host/security"}]},{"group":"Develop","pages":[{"title":"Build a Mini App with the Agent","sidebarTitle":"Build with the Agent","href":"/miniapp/authors/quickstart"},{"title":"Package structure and manifests","sidebarTitle":"Package and manifests","href":"/miniapp/authors/package"},{"title":"Node runtime","href":"/miniapp/authors/node-runtime"},{"title":"Page Client API","href":"/miniapp/authors/client-api"},{"title":"Two-way collaboration with the Agent","sidebarTitle":"Working with the Agent","href":"/miniapp/authors/agent"},{"title":"Data and services","sidebarTitle":"Data access","href":"/miniapp/authors/data"},{"title":"Publish, debug, and troubleshoot","href":"/miniapp/authors/publish"},{"title":"Submit and share","href":"/miniapp/authors/share"}]},{"group":"Reference","pages":[{"title":"Client API reference","href":"/miniapp/reference/client-api"},{"title":"Node API reference","href":"/miniapp/reference/node-api"},{"title":"Agent API reference","href":"/miniapp/reference/agent-api"},{"title":"miniapp.json fields","href":"/miniapp/reference/manifest"},{"title":"Error reference","href":"/miniapp/reference/errors"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"Research","pages":[{"title":"Research","href":"/techblog"}]}]},"basePath":"","title":"Mini Apps and sessions - MiniMax Code Docs","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BDAj7nBh.js","DynamicMarkdown-Bq09mRwR.js","zoom-image-lightbox-CypZe82l.js","lightbox-handle-r17bVUz3.js"]}