A few minutes. Nothing on this page reaches an outside service.
A name. Name the key after the agent, machine or person that will hold it. Do not name it
after the job you want done.
Your password manager, open. Postern shows this key once, and never again.
1
Open the form and name the agent
In the Console, click Agents & keys in the left sidebar. Click Mint a key. On a first install
the list is empty, and that button sits inside the No keys issued yet card. The form opens.
Give this agent a name no other agent has. One name holds one key. Type a name that already exists
and Postern replaces that agent’s key. Its sectors and its deadline become whatever this form now
says, and Postern clears a revoke you had made. Every agent still on the old key stops at once.
Postern deletes every token derived from the old key too.
In Name, type the name. The field shows my-agent in grey — that is an example, not a value.
Mint the key stays greyed out until you type something.Console → The ledger prints this name under Who for every call the key makes. It records what
the key does, never what you do to the key.
What does not get a row.
The form behind Mint a key: the Name field, the six sector toggles, and the expiry chips.
2
Tick the sectors it may reach
Under Grant which sectors, tick each sector this agent may reach. The six toggles read
Finance, Mail, Calendar, Contacts, Health and Home, in that order. No sector
starts ticked, and the form says so:
Nothing is granted until you pick it. Tap a sector to toggle it.A sector is the smallest thing you can grant. Tick Mail and you grant every mail source you have
connected, and every one you connect later. There is no read-only setting:
a grant covers read and act across every provider in the sector.
Only Home has anything to act on today.The screen after the button lists the same sectors under Opens, in lower case — finance,
mail. Postern prints them that way everywhere it recaps a grant, including the Granted sectors
column of the register. The toggle you tick and the word you read back are the same sector.
You can press Mint the key with nothing ticked, and the form says what that costs you:
No sectors granted yet — this key would be denied everything until you edit its grants. Such a key
connects, and Postern then denies every read.
3
Set when it expires
Under Expires, click one of four chips: Never, 30 days, 60 days or 90 days.
claude.ai and ChatGPT refuse an agent key that never expires. If this key will go to either, click
30 days, 60 days or 90 days. Choose Never and their sign-in stops with
This agent key never expires. Keys used with a cloud client must have an expiry… — and only a
rotate gets you back in.
Which chip the form starts on follows your remote access. If you have not published a public address,
it starts on Never. If you have, it starts on 90 days and adds the line
This gate is published. A key you paste into a hosted client should expire.Choose by where the key will live. A key that never leaves this computer may sit at Never.
Postern refuses a key at the instant it expires, and refuses to move a lapsed key’s deadline.
4
Create the key, and store it before you leave the screen
Postern shows this key once, on the screen after the button. It keeps a scrambled copy it can check
against, never the key itself — no reveal button, nothing to recover. Leave without the key and your
only way back is a rotate, which replaces it. Open your password manager first.
Press Mint the key. The reveal screen opens. Do four things on it, in this order.
On the rotate path the same form reads differently, so look for different words. Its heading is
Rotate <agent> with your agent’s name in it, the button reads Rotate the key, and Name is
locked with the hint The name carries over on rotate — one key per agent. The sectors and the
deadline arrive already set to what that key held. Everything after the button is identical.
Under Agent key — shown once, press Copy. The Console answers
Key copied — store it now; it isn't shown again. Paste the key into your password manager now.
Every other Copy button on this screen overwrites your clipboard.
Read Opens. It lists the sectors you granted, followed by
read and act, across every provider in each. With none it reads
no sectors — this key is denied everything.
Read MCP endpoint. That is the address on this computer, and it is the only address this
screen ever shows. It still reads that way after you publish a public address. claude.ai and
ChatGPT cannot reach it.
Under Connect config, press Copy config · key included. Paste the whole object into your
agent’s MCP config file — Claude Code’s .mcp.json, Cursor’s mcp.json. Then restart that agent.
The key is already in it, and there is nothing to fill in.
Where the address should be, the card can print
This gateway isn’t serving MCP yet, so it has no address to pair with this key. There is then no
Connect config block either. Your key is good. Postern serves no agent port.
Set MCP_HTTP_PORT and restart it.
Press Done to return to Agents & keys. The link Connect a hosted client (claude.ai, ChatGPT) →
opens the hosted sign-in instead. That path needs a public address first:
set up remote access, then
connect the agent.
The key holds no sector, or not the sector the agent asked for. In Console → Agents & keys, click the agent and tick the sectors it needs under Grants. Tick the sectors it may reach.
A sign-in answers That agent key was not accepted. Check the key in the Console and try again., or you left the reveal screen without the key
Nothing can show that key again. In Console → Agents & keys, click the agent, press Rotate, then copy the new key from the reveal screen. Store it before you leave the screen.
A sign-in says the key never expires, or an agent that worked yesterday fails today with nothing changed
Both are the deadline, and Postern will not move a lapsed key’s. In Console → Agents & keys, click the agent, press Rotate, click 30 days, 60 days or 90 days, then press Rotate the key. Hand the new key to the agent. Set when it expires.
Your key opens the sectors you ticked, until the deadline you set, and nothing else. You have
connected no source to it yet.Treat the key as a password: every config file you paste it into now holds a secret. If it gets loose,
revoke or rotate the agent.
That ends the key and every token derived from it at once, and cuts its live sessions.
Postern touches no source password, and nothing upstream changes.
a key you created · a few minutes, plus a restart of the agent ·
claude.ai and ChatGPT need a public address first
{"docsConfig":{"theme":"sequoia","$schema":"https://mintlify.com/docs.json","name":"Postern","colors":{"primary":"#E7A42A","light":"#E7A42A","dark":"#B83E15"},"favicon":"https://mintcdn.com/postern/L5OSSMQX3JjXD-Ob/favicon.svg?fit=max\u0026auto=format\u0026n=L5OSSMQX3JjXD-Ob\u0026q=85\u0026s=acbbe5732970fc6bf76b003f012843f1","appearance":{"default":"light","strict":false},"background":{"color":{"light":"#F5EDDA","dark":"#151F19"}},"navbar":{"links":[{"href":"https://getpostern.com","label":"getpostern.com"}],"primary":{"type":"github","href":"https://github.com/getpostern/postern"}},"footer":{"socials":{"website":"https://getpostern.com","github":"https://github.com/getpostern/postern"}},"fonts":{"heading":{"family":"Cormorant Garamond","source":"fonts/cormorant-garamond-var.woff2","format":"woff2"},"body":{"family":"Source Serif 4","source":"fonts/source-serif-4-var.woff2","format":"woff2"}},"styling":{"codeblocks":"system","latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"postern","hasAudioNarration":false,"actualSubdomain":"postern","customDomains":["docs.getpostern.com"],"gitSource":{"type":"github","owner":"getpostern","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a77bc437948e45f24bff423","collectionId":"465e71f9-edfd-4e92-a7b2-36446667a983","liveDeploymentHistoryId":"6a77bc437948e45f24bff423","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aea219dcf56d9cceaaf5561:success","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"Reference","count":15},{"language":"default","tag":"Connect a source","count":9},{"language":"default","tag":"Start here","count":6},{"language":"default","tag":"MCP tools","count":5},{"language":"default","tag":"Security","count":4},{"language":"default","tag":"Mail, calendar \u0026 contacts","count":3},{"language":"default","tag":"Agents, keys and grants","count":3},{"language":"default","tag":"The record","count":3},{"language":"default","tag":"Health","count":2},{"language":"default","tag":"Money","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","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":"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":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Courier Prime\";src:url(\"/fonts/courier-prime-400.woff2\") format(\"woff2\");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:\"Courier Prime\";src:url(\"/fonts/courier-prime-700.woff2\") format(\"woff2\");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:\"Cormorant Garamond\";src:url(\"/fonts/cormorant-garamond-marks.woff2\") format(\"woff2\");font-weight:300 700;font-style:normal;font-display:swap;unicode-range:U+2116, U+2190-2192}@font-face{font-family:\"Cormorant Garamond\";src:url(\"/fonts/cormorant-garamond-italic-marks.woff2\") format(\"woff2\");font-weight:300 700;font-style:italic;font-display:swap;unicode-range:U+2116, U+2190-2192}@font-face{font-family:\"EB Garamond\";src:url(\"/fonts/eb-garamond-marks.woff2\") format(\"woff2\");font-weight:400 800;font-style:normal;font-display:swap;unicode-range:U+2116, U+2190-2192}@font-face{font-family:\"EB Garamond\";src:url(\"/fonts/eb-garamond-italic-marks.woff2\") format(\"woff2\");font-weight:400 800;font-style:italic;font-display:swap;unicode-range:U+2116, U+2190-2192}@font-face{font-family:\"Cormorant Garamond\";src:url(\"/fonts/cormorant-garamond-500-italic.woff2\") format(\"woff2\");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:\"EB Garamond\";src:url(\"/fonts/eb-garamond-400-italic.woff2\") format(\"woff2\");font-weight:400;font-style:italic;font-display:swap}code,pre,kbd,samp,code span,pre span{font-family:\"Courier Prime\", \"Courier New\", ui-monospace, Menlo, Consolas,\n \"DejaVu Sans Mono\", monospace}@font-face{font-family:\"Source Serif 4\";src:url(\"/fonts/source-serif-4-var.woff2\") format(\"woff2\");font-weight:400 700;font-style:normal;font-display:swap}@font-face{font-family:\"Source Serif 4\";src:url(\"/fonts/source-serif-4-italic-var.woff2\") format(\"woff2\");font-weight:400 700;font-style:italic;font-display:swap}:root{--postern-body: \"Source Serif 4\", \"EB Garamond\", Georgia, serif;--postern-measure: 74ch}#content-area p,#content-area li,#content-area td,#content-area th,#content-area blockquote{font-family:var(--postern-body);font-size:17px;line-height:1.7}#content-area p,#content-area ul,#content-area ol,#content-area blockquote{max-width:var(--postern-measure)}#content-area h2{margin-top:2.75em;margin-bottom:0.6em;letter-spacing:-0.01em}#content-area h3{margin-top:2em;margin-bottom:0.5em}#content-area h2+p,#content-area h3+p{margin-top:0}#content-area table{font-size:15.5px;line-height:1.55}#content-area th{font-size:13px;letter-spacing:0.06em;text-transform:uppercase;opacity:0.72}#content-area td,#content-area th{padding-top:0.6em;padding-bottom:0.6em;vertical-align:baseline}#content-area .prose>table,#content-area table{display:block;overflow-x:auto;max-width:100%}#content-area .callout,#content-area [class*=\"callout\"]{border-width:1px;border-radius:3px}#content-area .callout p,#content-area [class*=\"callout\"] p{font-size:16px;line-height:1.65;max-width:none}#content-area p code,#content-area li code,#content-area td code{font-size:0.94em;padding:0.1em 0.32em;border-radius:2px}#content-area p strong,#content-area li strong,#content-area td strong{font-weight:600;color:var(--postern-strong, inherit)}#content-area h2:has(+p){text-wrap:balance}@media (max-width: 900px){#content-area p,#content-area li,#content-area td,#content-area th,#content-area blockquote{font-size:16px}#content-area h2{margin-top:2.25em}}"}],"page":{"pagePath":"start/first-key","slug":"/start/first-key","pageMetadata":{"title":"Mint your first key","description":"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.","href":"/start/first-key"},"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: \"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.\"\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`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Info,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Before you start`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Postern started, and the Console at `,_jsx(_components.a,{href:`http://localhost:8787`,children:`http://localhost:8787`}),`.`]}),` You need\nno source yet. If Postern runs on a computer with no screen,\n`,_jsx(_components.a,{href:`/start/install#open-console`,children:`open the Console over SSH first`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A few minutes.`}),` Nothing on this page reaches an outside service.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A name.`}),` Name the key after the agent, machine or person that will hold it. Do not name it\nafter the job you want done.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Your password manager, open.`}),` Postern shows this key once, and never again.`]}),`\n`]})]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open the form and name the agent`,titleSize:`h2`,id:`name`,children:[_jsxs(_components.p,{children:[`In the Console, click `,_jsx(_components.strong,{children:`Agents \u0026 keys`}),` in the left sidebar. Click `,_jsx(_components.strong,{children:`Mint a key`}),`. On a first install\nthe list is empty, and that button sits inside the `,_jsx(_components.strong,{children:`No keys issued yet`}),` card. The form opens.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Give this agent a name no other agent has. One name holds one key. Type a name that already exists\nand Postern replaces that agent’s key. Its sectors and its deadline become whatever this form now\nsays, and Postern clears a revoke you had made. Every agent still on the old key stops at once.\n`,_jsx(_components.a,{href:`/reference/agent-keys#revoking-rotating-and-removing`,children:`Postern deletes every token derived from the old key too`}),`.`]})}),_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Name`}),`, type the name. The field shows `,_jsx(_components.code,{children:`my-agent`}),` in grey — that is an example, not a value.\n`,_jsx(_components.strong,{children:`Mint the key`}),` stays greyed out until you type something.`]}),_jsxs(_components.p,{children:[`Console → `,_jsx(_components.strong,{children:`The ledger`}),` prints this name under `,_jsx(_components.strong,{children:`Who`}),` for every call the key makes. It records what\nthe key does, never what you do to the key.\n`,_jsx(_components.a,{href:`/reference/audit-log#what-does-not-get-a-row`,children:`What does not get a row`}),`.`]}),_jsx(Frame,{caption:`The form behind Mint a key: the Name field, the six sector toggles, and the expiry chips.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/postern/E8R3wfogdGSukifu/images/gate-mint-key.png?fit=max\u0026auto=format\u0026n=E8R3wfogdGSukifu\u0026q=85\u0026s=28cdb2c67bf2995267fadc9376cc5462`,alt:`The Console's form for a new key: a Name field with the grey my-agent example, six unticked sector toggles, and four expiry chips.`,\"data-og-width\":`1440`,width:`1440`,\"data-og-height\":`900`,height:`900`,\"data-path\":`images/gate-mint-key.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/postern/E8R3wfogdGSukifu/images/gate-mint-key.png?w=280\u0026fit=max\u0026auto=format\u0026n=E8R3wfogdGSukifu\u0026q=85\u0026s=3134ef46889446b1d5d79330db76a964 280w, https://mintcdn.com/postern/E8R3wfogdGSukifu/images/gate-mint-key.png?w=560\u0026fit=max\u0026auto=format\u0026n=E8R3wfogdGSukifu\u0026q=85\u0026s=6f60f9323578fa9f6cf77e5b1528a5ec 560w, https://mintcdn.com/postern/E8R3wfogdGSukifu/images/gate-mint-key.png?w=840\u0026fit=max\u0026auto=format\u0026n=E8R3wfogdGSukifu\u0026q=85\u0026s=3247565675f760453de189889ba3dbdf 840w, https://mintcdn.com/postern/E8R3wfogdGSukifu/images/gate-mint-key.png?w=1100\u0026fit=max\u0026auto=format\u0026n=E8R3wfogdGSukifu\u0026q=85\u0026s=911fff3f895b90c7d7facd347869d961 1100w, https://mintcdn.com/postern/E8R3wfogdGSukifu/images/gate-mint-key.png?w=1650\u0026fit=max\u0026auto=format\u0026n=E8R3wfogdGSukifu\u0026q=85\u0026s=f2c0d7a3efefe821bc31fefd8cbbe6c2 1650w, https://mintcdn.com/postern/E8R3wfogdGSukifu/images/gate-mint-key.png?w=2500\u0026fit=max\u0026auto=format\u0026n=E8R3wfogdGSukifu\u0026q=85\u0026s=f4c5b7a9251d04433d25066d5d95673d 2500w`})})]}),_jsxs(Step,{title:`Tick the sectors it may reach`,titleSize:`h2`,id:`grant-sectors`,children:[_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Grant which sectors`}),`, tick each sector this agent may reach. The six toggles read\n`,_jsx(_components.strong,{children:`Finance`}),`, `,_jsx(_components.strong,{children:`Mail`}),`, `,_jsx(_components.strong,{children:`Calendar`}),`, `,_jsx(_components.strong,{children:`Contacts`}),`, `,_jsx(_components.strong,{children:`Health`}),` and `,_jsx(_components.strong,{children:`Home`}),`, in that order. No sector\nstarts ticked, and the form says so:\n`,_jsx(_components.code,{children:`Nothing is granted until you pick it. Tap a sector to toggle it.`})]}),_jsxs(_components.p,{children:[`A sector is the smallest thing you can grant. Tick `,_jsx(_components.strong,{children:`Mail`}),` and you grant every mail source you have\nconnected, and every one you connect later. There is no read-only setting:\n`,_jsx(_components.a,{href:`/reference/grants-and-sectors#what-a-grant-covers`,children:`a grant covers read and act across every provider in the sector`}),`.\nOnly `,_jsx(_components.strong,{children:`Home`}),` has anything to act on today.`]}),_jsxs(_components.p,{children:[`The screen after the button lists the same sectors under `,_jsx(_components.strong,{children:`Opens`}),`, in lower case — `,_jsx(_components.code,{children:`finance`}),`,\n`,_jsx(_components.code,{children:`mail`}),`. Postern prints them that way everywhere it recaps a grant, including the `,_jsx(_components.strong,{children:`Granted sectors`}),`\ncolumn of the register. The toggle you tick and the word you read back are the same sector.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`You can press `,_jsx(_components.strong,{children:`Mint the key`}),` with nothing ticked, and the form says what that costs you:\n`,_jsx(_components.code,{children:`No sectors granted yet — this key would be denied everything until you edit its grants.`}),` Such a key\nconnects, and Postern then denies every read.`]})})]}),_jsxs(Step,{title:`Set when it expires`,titleSize:`h2`,id:`expiry`,children:[_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Expires`}),`, click one of four chips: `,_jsx(_components.strong,{children:`Never`}),`, `,_jsx(_components.strong,{children:`30 days`}),`, `,_jsx(_components.strong,{children:`60 days`}),` or `,_jsx(_components.strong,{children:`90 days`}),`.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`claude.ai and ChatGPT refuse an agent key that never expires. If this key will go to either, click\n`,_jsx(_components.strong,{children:`30 days`}),`, `,_jsx(_components.strong,{children:`60 days`}),` or `,_jsx(_components.strong,{children:`90 days`}),`. Choose `,_jsx(_components.strong,{children:`Never`}),` and their sign-in stops with\n`,_jsx(_components.code,{children:`This agent key never expires. Keys used with a cloud client must have an expiry…`}),` — and only a\nrotate gets you back in.`]})}),_jsxs(_components.p,{children:[`Which chip the form starts on follows your remote access. If you have not published a public address,\nit starts on `,_jsx(_components.strong,{children:`Never`}),`. If you have, it starts on `,_jsx(_components.strong,{children:`90 days`}),` and adds the line\n`,_jsx(_components.code,{children:`This gate is published. A key you paste into a hosted client should expire.`})]}),_jsxs(_components.p,{children:[`Choose by where the key will live. A key that never leaves this computer may sit at `,_jsx(_components.strong,{children:`Never`}),`.\n`,_jsx(_components.a,{href:`/reference/agent-keys#expiry`,children:`Postern refuses a key at the instant it expires, and refuses to move a lapsed key’s deadline`}),`.`]})]}),_jsxs(Step,{title:`Create the key, and store it before you leave the screen`,titleSize:`h2`,id:`mint`,children:[_jsx(Warning,{children:_jsx(_components.p,{children:`Postern shows this key once, on the screen after the button. It keeps a scrambled copy it can check\nagainst, never the key itself — no reveal button, nothing to recover. Leave without the key and your\nonly way back is a rotate, which replaces it. Open your password manager first.`})}),_jsxs(_components.p,{children:[`Press `,_jsx(_components.strong,{children:`Mint the key`}),`. The reveal screen opens. Do four things on it, in this order.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`On the rotate path the same form reads differently, so look for different words. Its heading is\n`,_jsx(_components.code,{children:`Rotate \u003cagent>`}),` with your agent’s name in it, the button reads `,_jsx(_components.strong,{children:`Rotate the key`}),`, and `,_jsx(_components.strong,{children:`Name`}),` is\nlocked with the hint `,_jsx(_components.code,{children:`The name carries over on rotate — one key per agent.`}),` The sectors and the\ndeadline arrive already set to what that key held. Everything after the button is identical.`]})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Agent key — shown once`}),`, press `,_jsx(_components.strong,{children:`Copy`}),`. The Console answers\n`,_jsx(_components.code,{children:`Key copied — store it now; it isn't shown again`}),`. Paste the key into your password manager now.\nEvery other `,_jsx(_components.strong,{children:`Copy`}),` button on this screen overwrites your clipboard.`]}),`\n`,_jsxs(_components.li,{children:[`Read `,_jsx(_components.strong,{children:`Opens`}),`. It lists the sectors you granted, followed by\n`,_jsx(_components.code,{children:`read and act, across every provider in each`}),`. With none it reads\n`,_jsx(_components.code,{children:`no sectors — this key is denied everything`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Read `,_jsx(_components.strong,{children:`MCP endpoint`}),`. That is the address on this computer, and it is the only address this\nscreen ever shows. It still reads that way after you publish a public address. claude.ai and\nChatGPT cannot reach it.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Connect config`}),`, press `,_jsx(_components.strong,{children:`Copy config · key included`}),`. Paste the whole object into your\nagent’s MCP config file — Claude Code’s `,_jsx(_components.code,{children:`.mcp.json`}),`, Cursor’s `,_jsx(_components.code,{children:`mcp.json`}),`. Then restart that agent.\nThe key is already in it, and there is nothing to fill in.`]}),`\n`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Where the address should be, the card can print\n`,_jsx(_components.code,{children:`This gateway isn’t serving MCP yet, so it has no address to pair with this key.`}),` There is then no\n`,_jsx(_components.strong,{children:`Connect config`}),` block either. Your key is good. Postern serves no agent port.\n`,_jsxs(_components.a,{href:`/start/connect-an-agent#connect-config`,children:[`Set `,_jsx(_components.code,{children:`MCP_HTTP_PORT`}),` and restart it`]}),`.`]})}),_jsxs(_components.p,{children:[`Press `,_jsx(_components.strong,{children:`Done`}),` to return to Agents \u0026 keys. The link `,_jsx(_components.strong,{children:`Connect a hosted client (claude.ai, ChatGPT) →`}),`\nopens the hosted sign-in instead. That path needs a public address first:\n`,_jsx(_components.a,{href:`/start/remote-access#publish`,children:`set up remote access`}),`, then\n`,_jsx(_components.a,{href:`/start/connect-an-agent#hosted`,children:`connect the agent`}),`.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`confirm-it-works`,children:`Confirm it works`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Console → `,_jsx(_components.strong,{children:`Agents \u0026 keys`}),` → `,_jsx(_components.strong,{children:`The register`}),` lists your agent by name.`]}),`\n`,_jsxs(_components.li,{children:[`Its sub-line counts the days down — `,_jsx(_components.code,{children:`expires in 90d`}),` for a 90-day key — or reads `,_jsx(_components.code,{children:`never expires`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Its `,_jsx(_components.strong,{children:`Granted sectors`}),` are the ones you ticked, and nothing else.`]}),`\n`,_jsx(_components.li,{children:`The key is in your password manager, not only on your clipboard.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`if-something-went-wrong`,children:`If something went wrong`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`What you see`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Postern denies every read the agent makes`}),_jsxs(_components.td,{children:[`The key holds no sector, or not the sector the agent asked for. In Console → `,_jsx(_components.strong,{children:`Agents \u0026 keys`}),`, click the agent and tick the sectors it needs under `,_jsx(_components.strong,{children:`Grants`}),`. `,_jsx(_components.a,{href:`#grant-sectors`,children:`Tick the sectors it may reach`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`A sign-in answers `,_jsx(_components.code,{children:`That agent key was not accepted. Check the key in the Console and try again.`}),`, or you left the reveal screen without the key`]}),_jsxs(_components.td,{children:[`Nothing can show that key again. In Console → `,_jsx(_components.strong,{children:`Agents \u0026 keys`}),`, click the agent, press `,_jsx(_components.strong,{children:`Rotate`}),`, then copy the new key from the reveal screen. `,_jsx(_components.a,{href:`#mint`,children:`Store it before you leave the screen`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A sign-in says the key never expires, or an agent that worked yesterday fails today with nothing changed`}),_jsxs(_components.td,{children:[`Both are the deadline, and Postern will not move a lapsed key’s. In Console → `,_jsx(_components.strong,{children:`Agents \u0026 keys`}),`, click the agent, press `,_jsx(_components.strong,{children:`Rotate`}),`, click `,_jsx(_components.strong,{children:`30 days`}),`, `,_jsx(_components.strong,{children:`60 days`}),` or `,_jsx(_components.strong,{children:`90 days`}),`, then press `,_jsx(_components.strong,{children:`Rotate the key`}),`. Hand the new key to the agent. `,_jsx(_components.a,{href:`#expiry`,children:`Set when it expires`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-you-have-now`,children:`What you have now`}),`\n`,_jsx(_components.p,{children:`Your key opens the sectors you ticked, until the deadline you set, and nothing else. You have\nconnected no source to it yet.`}),`\n`,_jsxs(_components.p,{children:[`Treat the key as a password: every config file you paste it into now holds a secret. If it gets loose,\nrevoke or rotate the agent.\n`,_jsx(_components.a,{href:`/reference/agent-keys#revoking-rotating-and-removing`,children:`That ends the key and every token derived from it at once, and cuts its live sessions`}),`.\nPostern touches no source password, and nothing upstream changes.`]}),`\n`,_jsx(Heading,{level:`2`,id:`next`,children:`Next`}),`\n`,_jsx(Card,{title:`Connect an agent`,href:`/start/connect-an-agent`,children:_jsx(_components.p,{children:`a key you created · a few minutes, plus a restart of the agent ·\nclaude.ai and ChatGPT need a public address first`})})]})}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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Mint your first key","description":"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.","href":"/start/first-key"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Open the form and name the agent","slug":"name","depth":2,"children":[]},{"title":"Tick the sectors it may reach","slug":"grant-sectors","depth":2,"children":[]},{"title":"Set when it expires","slug":"expiry","depth":2,"children":[]},{"title":"Create the key, and store it before you leave the screen","slug":"mint","depth":2,"children":[]},{"title":"Confirm it works","slug":"confirm-it-works","depth":2,"children":[]},{"title":"If something went wrong","slug":"if-something-went-wrong","depth":2,"children":[]},{"title":"What you have now","slug":"what-you-have-now","depth":2,"children":[]},{"title":"Next","slug":"next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"postern","siteName":"Postern","title":"Mint your first key - Postern","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-07T18:52:32.619Z","originalFileLocation":"start/first-key.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=\"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Postern\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/postern/qaGaM2kl3nxvvGFE/_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/postern/qaGaM2kl3nxvvGFE/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/postern/qaGaM2kl3nxvvGFE/_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/postern/qaGaM2kl3nxvvGFE/_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/postern/qaGaM2kl3nxvvGFE/_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/postern/qaGaM2kl3nxvvGFE/_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/postern/qaGaM2kl3nxvvGFE/_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/postern/qaGaM2kl3nxvvGFE/_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/postern/qaGaM2kl3nxvvGFE/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Mint your first key - Postern\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Postern\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.getpostern.com/start/first-key\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://postern.mintlify.site/_mintlify/api/og/v2?division=Start+here\u0026amp;title=Mint+your+first+key\u0026amp;description=Create+one+agent+key+in+the+Console%3A+name+it%2C+tick+the+sectors+it+may+reach%2C+set+when+it+expires%2C+and+store+it+before+you+leave+the+screen.\u0026amp;theme=4d380beff7db0b8a6a5f24a8\u0026amp;signature=633b69430a8b9575a8ecebb2fd76fec14528603dfa5ef63df26cf86df7ad046e\">\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=\"Mint your first key - Postern\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://postern.mintlify.site/_mintlify/api/og/v2?division=Start+here\u0026amp;title=Mint+your+first+key\u0026amp;description=Create+one+agent+key+in+the+Console%3A+name+it%2C+tick+the+sectors+it+may+reach%2C+set+when+it+expires%2C+and+store+it+before+you+leave+the+screen.\u0026amp;theme=4d380beff7db0b8a6a5f24a8\u0026amp;signature=633b69430a8b9575a8ecebb2fd76fec14528603dfa5ef63df26cf86df7ad046e\">\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/postern/qaGaM2kl3nxvvGFE/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Postern\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#E7A42A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.getpostern.com/start/first-key\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/start/first-key.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.getpostern.com/#organization\",\"name\":\"Postern\",\"url\":\"https://docs.getpostern.com\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.getpostern.com#website\",\"name\":\"Postern\",\"url\":\"https://docs.getpostern.com\",\"publisher\":{\"@id\":\"https://docs.getpostern.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.getpostern.com/start/first-key#webpage\",\"url\":\"https://docs.getpostern.com/start/first-key\",\"name\":\"Mint your first key\",\"description\":\"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.\",\"dateModified\":\"2026-08-07T18:52:32.619Z\",\"isPartOf\":{\"@id\":\"https://docs.getpostern.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.getpostern.com/start/first-key#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.getpostern.com/start/first-key#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start here\",\"item\":\"https://docs.getpostern.com/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mint your first key\",\"item\":\"https://docs.getpostern.com/start/first-key\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.getpostern.com/start/first-key#article\",\"headline\":\"Mint your first key\",\"name\":\"Mint your first key\",\"description\":\"Create one agent key in the Console: name it, tick the sectors it may reach, set when it expires, and store it before you leave the screen.\",\"url\":\"https://docs.getpostern.com/start/first-key\",\"mainEntityOfPage\":{\"@id\":\"https://docs.getpostern.com/start/first-key#webpage\"},\"dateModified\":\"2026-08-07T18:52:32.619Z\",\"publisher\":{\"@id\":\"https://docs.getpostern.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.getpostern.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Postern\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Postern","nav":{"global":null,"groups":[{"group":"Start here","pages":[{"title":"Postern","href":"/index"},{"title":"Install Postern","href":"/start/install"},{"title":"Set up remote access","description":"Open two ports to your own devices, and one port to the internet only if claude.ai or ChatGPT needs it.","href":"/start/remote-access"},{"title":"Mint your first key","href":"/start/first-key"},{"title":"Connect an agent","description":"Paste one config block into Claude Code or Cursor. Claude Desktop needs a bridge. claude.ai and ChatGPT need a public address first.","href":"/start/connect-an-agent"},{"title":"Set up with an agent","href":"/start/set-up-with-an-agent"}]},{"group":"Connect a source","pages":[{"group":"Money","pages":[{"title":"Connect SimpleFIN","href":"/connect/simplefin"},{"title":"Connect Plaid","href":"/connect/plaid"}]},{"group":"Health","pages":[{"title":"Connect Apple Health","href":"/connect/apple-health"},{"title":"Connect WHOOP","href":"/connect/whoop"}]},{"group":"Mail, calendar \u0026 contacts","pages":[{"title":"Connect Google and Gmail","href":"/connect/google"},{"title":"Connect Microsoft","href":"/connect/microsoft"},{"title":"Connect iCloud","href":"/connect/icloud"}]},{"group":"Home","pages":[{"title":"Connect Home Assistant","href":"/connect/home-assistant"}]},{"group":"Agents","pages":[{"title":"Connect ChatGPT","href":"/connect/chatgpt"}]}]},{"group":"Operate","pages":[{"title":"Back up, export and erase","href":"/operate/backup-and-export"}]},{"group":"Reference","pages":[{"group":"Security","pages":[{"title":"Security model","href":"/reference/security-model"},{"title":"Which computers can reach Postern","href":"/reference/ports"},{"title":"The vault and the master key","href":"/reference/vault"},{"title":"Provider sign-ins","href":"/reference/provider-sign-ins"}]},{"group":"Agents, keys and grants","pages":[{"title":"Grants and sectors","href":"/reference/grants-and-sectors"},{"title":"Agent keys: create, expire, revoke, rotate","href":"/reference/agent-keys"},{"title":"Why an agent was refused","href":"/reference/refusals"}]},{"group":"MCP tools","pages":[{"title":"MCP tools","href":"/reference/mcp-primitives"},{"title":"Read data: get_schema, query, get_record","href":"/reference/mcp-reading"},{"title":"Freshness and live reads: describe_context, fetch_live","href":"/reference/mcp-freshness"},{"title":"Act on a source: list_actions, invoke_action","href":"/reference/mcp-actions"},{"title":"The OAuth bridge, for hosted agents","href":"/reference/oauth-bridge"}]},{"group":"The record","pages":[{"title":"The audit log","href":"/reference/audit-log"},{"title":"Read the record","href":"/reference/read-the-record"},{"title":"What the record cannot promise","href":"/reference/record-limits"}]}]},{"group":"About","pages":[{"title":"Frequently asked questions","href":"/about/faq"}]}]},"basePath":"","title":"Mint your first key - Postern","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-NdetNziF.js","DynamicMarkdown-CD8713Yy.js","zoom-image-lightbox-DMoL6lHz.js","lightbox-handle-r17bVUz3.js"]}