Nanny Cloud has exactly one endpoint. There is no --env flag, no [cloud] environment config field, and nothing to select on the command line. A stale
CI flag or a copy-pasted config value can never point a run at the wrong
place, because there is nothing to point.What decides whether a run is live or sandbox is the API key itself:
nny_live_... # live: real usage, real evidencenny_sdbx_... # sandbox: same enforcement, nothing counted
Create either kind from the dashboard under Settings → API Keys. Enforcement
is identical either way, the same rules, the same limits, the same stop
behavior. Only what happens to the data differs.
Point a real deployment at a sandbox key while you’re building or testing a
new rule set, without any chance of a test run polluting your live dashboard,
your live compliance evidence, or your live retention window. Confirming your
own events actually arrive is the whole point, sandbox is the real ingest
path, not a mock, so what you see there is what production will see too.
A sandbox run produces no compliance evidence. It is never signed, never
sealed into a receipt, and never appears in a compliance export. If you need
to demonstrate enforcement to an auditor, that has to be a live run.
Sandbox data is also held for a flat 7 days, regardless of your plan’s
retention tier. An Enterprise plan’s multi-year retention window applies to
live data; sandbox is short-lived on every plan, because it is meant to be
disposable.
Enforcement never depends on the network, so a batch the cloud could not take
yet is held locally under .nanny/spool/ until it can be delivered, see
Connect to Nanny Cloud.
That outbox is partitioned by environment (.nanny/spool/live/,
.nanny/spool/sandbox/), so switching from a sandbox key back to a live one
(or the reverse) never sends one environment’s held batches under the other’s
credential. If the other side is holding anything, the next run says so:
nanny: sync: 12 batch(es) held for sandbox, not sent: this run is live
Nothing is sent, and nothing is lost, switch back and it delivers.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Nanny Docs","colors":{"primary":"#ff8800","light":"#ff8800","dark":"#a64f00"},"logo":{"light":"https://mintcdn.com/nanny-5f0aa63e/ODR2lIiyxgL4wFfI/logo/light.svg?fit=max\u0026auto=format\u0026n=ODR2lIiyxgL4wFfI\u0026q=85\u0026s=601bf7c7a547ab7e81457fd406025237","dark":"https://mintcdn.com/nanny-5f0aa63e/ODR2lIiyxgL4wFfI/logo/dark.svg?fit=max\u0026auto=format\u0026n=ODR2lIiyxgL4wFfI\u0026q=85\u0026s=1f3973fda77e54203895f9c0b04a6dba"},"favicon":"https://mintcdn.com/nanny-5f0aa63e/SUqRk1mx_PzFsWbK/logo/favicon.svg?fit=max\u0026auto=format\u0026n=SUqRk1mx_PzFsWbK\u0026q=85\u0026s=9b27ede8e94239525a271f8ca8fbf382","appearance":{"default":"dark"},"navbar":{"links":[{"href":"mailto:support@nanny.run","label":"Support"},{"href":"https://github.com/nanny-run/nanny","type":"github"}]},"footer":{"socials":{"github":"https://github.com/nanny-run/nanny","x":"https://x.com/nannyrun_","discord":"https://discord.gg/YctsexDhYw"}},"fonts":{"family":"Reddit Sans"},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"nanny-5f0aa63e","hasAudioNarration":false,"actualSubdomain":"nanny-5f0aa63e","customDomains":["docs.nanny.run"],"gitSource":{"type":"github","owner":"nanny-run","repo":"nanny","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aa3c9832af23f61baacc3fb","collectionId":"ec6d8662-8ee4-4f18-a083-fcde84509ef3","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aa3c9832af23f61baacc3fb"},"entitlements":{},"buildId":"6aa3c9832af23f61baacc3fb","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"Getting Started","count":22},{"language":"default","tag":"CLI","count":6},{"language":"default","tag":"Guides","count":5},{"language":"default","tag":"Concepts","count":4},{"language":"default","tag":"SDKs","count":2},{"language":"default","tag":"Reference","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"v0.7/guides/environments","slug":"/v0.7/guides/environments","pageMetadata":{"title":"Live and sandbox","description":"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.","href":"/v0.7/guides/environments"},"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: \"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.\"\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`there-is-one-host`,children:`There is one host`}),`\n`,_jsxs(_components.p,{children:[`Nanny Cloud has exactly one endpoint. There is no `,_jsx(_components.code,{children:`--env`}),` flag, no `,_jsx(_components.code,{children:`[cloud] environment`}),` config field, and nothing to select on the command line. A stale\nCI flag or a copy-pasted config value can never point a run at the wrong\nplace, because there is nothing to point.`]}),`\n`,_jsxs(_components.p,{children:[`What decides whether a run is `,_jsx(_components.strong,{children:`live`}),` or `,_jsx(_components.strong,{children:`sandbox`}),` is the API key itself:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nny_live_...`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # live: real usage, real evidence`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nny_sdbx_...`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # sandbox: same enforcement, nothing counted`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Create either kind from the dashboard under `,_jsx(_components.strong,{children:`Settings → API Keys`}),`. Enforcement\nis identical either way, the same rules, the same limits, the same stop\nbehavior. Only what happens to the data differs.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-sandbox-is-for`,children:`What sandbox is for`}),`\n`,_jsx(_components.p,{children:`Point a real deployment at a sandbox key while you’re building or testing a\nnew rule set, without any chance of a test run polluting your live dashboard,\nyour live compliance evidence, or your live retention window. Confirming your\nown events actually arrive is the whole point, sandbox is the real ingest\npath, not a mock, so what you see there is what production will see too.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-sandbox-does-not-have`,children:`What sandbox does not have`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`A sandbox run produces `,_jsx(_components.strong,{children:`no compliance evidence`}),`. It is never signed, never\nsealed into a receipt, and never appears in a compliance export. If you need\nto demonstrate enforcement to an auditor, that has to be a live run.`]})}),`\n`,_jsxs(_components.p,{children:[`Sandbox data is also held for a flat `,_jsx(_components.strong,{children:`7 days`}),`, regardless of your plan’s\nretention tier. An Enterprise plan’s multi-year retention window applies to\nlive data; sandbox is short-lived on every plan, because it is meant to be\ndisposable.`]}),`\n`,_jsx(Heading,{level:`2`,id:`switching-keys-is-safe`,children:`Switching keys is safe`}),`\n`,_jsxs(_components.p,{children:[`Enforcement never depends on the network, so a batch the cloud could not take\nyet is held locally under `,_jsx(_components.code,{children:`.nanny/spool/`}),` until it can be delivered, see\n`,_jsx(_components.a,{href:`/v0.7/guides/managed-mode#when-the-cloud-is-unreachable`,children:`Connect to Nanny Cloud`}),`.\nThat outbox is partitioned by environment (`,_jsx(_components.code,{children:`.nanny/spool/live/`}),`,\n`,_jsx(_components.code,{children:`.nanny/spool/sandbox/`}),`), so switching from a sandbox key back to a live one\n(or the reverse) never sends one environment’s held batches under the other’s\ncredential. If the other side is holding anything, the next run says so:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`nanny: sync: 12 batch(es) held for sandbox, not sent: this run is live`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Nothing is sent, and nothing is lost, switch back and it delivers.`})]})}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":"Live and sandbox","description":"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.","href":"/v0.7/guides/environments"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"There is one host","slug":"there-is-one-host","depth":2,"children":[]},{"title":"What sandbox is for","slug":"what-sandbox-is-for","depth":2,"children":[]},{"title":"What sandbox does not have","slug":"what-sandbox-does-not-have","depth":2,"children":[]},{"title":"Switching keys is safe","slug":"switching-keys-is-safe","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"nanny-5f0aa63e","siteName":"Nanny Docs","title":"Live and sandbox - Nanny Docs","navMaps":{"firstHrefInVersion":{"v0.7.x":{"href":"/v0.7/guides/environments","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-09-11T09:27:47.739Z","originalFileLocation":"v0.7/guides/environments.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=\"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=\"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nanny Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/nanny-5f0aa63e/vtuYrEI_H31es28O/_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/nanny-5f0aa63e/vtuYrEI_H31es28O/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/nanny-5f0aa63e/vtuYrEI_H31es28O/_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/nanny-5f0aa63e/vtuYrEI_H31es28O/_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/nanny-5f0aa63e/vtuYrEI_H31es28O/_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/nanny-5f0aa63e/vtuYrEI_H31es28O/_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/nanny-5f0aa63e/vtuYrEI_H31es28O/_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/nanny-5f0aa63e/vtuYrEI_H31es28O/_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/nanny-5f0aa63e/vtuYrEI_H31es28O/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Live and sandbox - Nanny Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nanny Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.nanny.run/v0.7/guides/environments\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://nanny-5f0aa63e.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Live+and+sandbox\u0026amp;description=Two+environments%2C+one+host%2C+chosen+entirely+by+which+API+key+you+use%2C+never+a+flag%2C+never+a+config+field.\u0026amp;theme=d006dd20d6c0adba82ac6ca1\u0026amp;signature=51a8932f9b6c7c173b1421f19bb8f07bbb4b45234d80013ba80cf5290425371a\">\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=\"Live and sandbox - Nanny Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://nanny-5f0aa63e.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Live+and+sandbox\u0026amp;description=Two+environments%2C+one+host%2C+chosen+entirely+by+which+API+key+you+use%2C+never+a+flag%2C+never+a+config+field.\u0026amp;theme=d006dd20d6c0adba82ac6ca1\u0026amp;signature=51a8932f9b6c7c173b1421f19bb8f07bbb4b45234d80013ba80cf5290425371a\">\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/nanny-5f0aa63e/vtuYrEI_H31es28O/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nanny Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff8800\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.nanny.run/v0.7/guides/environments\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v0.7/guides/environments.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.nanny.run/#organization\",\"name\":\"Nanny Docs\",\"url\":\"https://docs.nanny.run\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/nanny-5f0aa63e/ODR2lIiyxgL4wFfI/logo/light.svg?fit=max\u0026auto=format\u0026n=ODR2lIiyxgL4wFfI\u0026q=85\u0026s=601bf7c7a547ab7e81457fd406025237\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.nanny.run#website\",\"name\":\"Nanny Docs\",\"url\":\"https://docs.nanny.run\",\"publisher\":{\"@id\":\"https://docs.nanny.run/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.nanny.run/v0.7/guides/environments#webpage\",\"url\":\"https://docs.nanny.run/v0.7/guides/environments\",\"name\":\"Live and sandbox\",\"description\":\"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.\",\"dateModified\":\"2026-09-11T09:27:47.739Z\",\"isPartOf\":{\"@id\":\"https://docs.nanny.run#website\"},\"breadcrumb\":{\"@id\":\"https://docs.nanny.run/v0.7/guides/environments#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.nanny.run/v0.7/guides/environments#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.nanny.run/v0.7/guides/managed-mode\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Live and sandbox\",\"item\":\"https://docs.nanny.run/v0.7/guides/environments\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.nanny.run/v0.7/guides/environments#article\",\"headline\":\"Live and sandbox\",\"name\":\"Live and sandbox\",\"description\":\"Two environments, one host, chosen entirely by which API key you use, never a flag, never a config field.\",\"url\":\"https://docs.nanny.run/v0.7/guides/environments\",\"mainEntityOfPage\":{\"@id\":\"https://docs.nanny.run/v0.7/guides/environments#webpage\"},\"dateModified\":\"2026-09-11T09:27:47.739Z\",\"publisher\":{\"@id\":\"https://docs.nanny.run/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.nanny.run#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nanny Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Nanny Docs","nav":{"global":{"anchors":[]},"versions":[{"version":"v0.7.x","tag":"Latest","tabs":[{"tab":"Getting Started","pages":[{"title":"Introduction","href":"/v0.7"},{"title":"Quickstart","href":"/v0.7/quickstart"},{"title":"Installation","href":"/v0.7/install"},{"group":"Concepts","pages":[{"title":"How It Works","href":"/v0.7/concepts/how-it-works"},{"title":"Event Log","href":"/v0.7/concepts/event-log"},{"title":"Tool labels","href":"/v0.7/concepts/tool-labels"},{"title":"Declared authority","href":"/v0.7/concepts/declared-authority"}]},{"group":"SDKs","pages":[{"title":"Rust","href":"/v0.7/guides/rust-sdk"},{"title":"Python","href":"/v0.7/guides/python-sdk"}]},{"group":"Guides","pages":[{"title":"Connect to Nanny Cloud","description":"Set one environment variable and Nanny forwards your runs to Nanny Cloud (dashboards, cost, and a durable audit trail) while enforcement stays fully local.","href":"/v0.7/guides/managed-mode"},{"title":"Live and sandbox","href":"/v0.7/guides/environments"},{"title":"Deploying a governed app","description":"The ordered path from a working app to a governed one running on a host, and how to read the log it prints on the way up.","href":"/v0.7/guides/deploying"},{"title":"Governance server","href":"/v0.7/guides/governance-server"},{"title":"Rule packs","href":"/v0.7/guides/rule-packs"}]},{"group":"CLI","pages":[{"title":"nanny init","href":"/v0.7/init"},{"title":"nanny run","href":"/v0.7/run"},{"title":"nanny certs","href":"/v0.7/reference/cli-certs"},{"title":"nanny health","href":"/v0.7/reference/cli-health"},{"title":"nanny uninstall","href":"/v0.7/uninstall"},{"title":"nanny rules","href":"/v0.7/reference/cli-rules"}]},{"group":"Reference","pages":[{"title":"nanny.toml reference","href":"/v0.7/reference/nanny-toml"},{"title":"Event Schema","href":"/v0.7/reference/events"}]}]}]}]},"title":"Live and sandbox - Nanny Docs","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}