1:"$Sreact.fragment"
2:I[39756,["/_next/static/chunks/3fntmmi971322.js"],"default"]
3:I[37457,["/_next/static/chunks/3fntmmi971322.js"],"default"]
4:I[59973,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/2v6icscw2u98x.js"],"SupportNavigation"]
6:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"OutletBoundary"]
7:"$Sreact.suspense"
a:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"ViewportBoundary"]
c:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"MetadataBoundary"]
e:I[68027,["/_next/static/chunks/3fntmmi971322.js"],"default",1]
:HL["/_next/static/chunks/0uu3n70ekaa_q.css","style"]
:HL["/_next/static/chunks/0b-w4aydaoki1.css","style"]
9:X
0:{"P":null,"c":["","support","linux-setup",""],"q":"","i":false,"f":[[["",{"children":["support",{"children":[["slug","linux-setup","d",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0uu3n70ekaa_q.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/3fntmmi971322.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0b-w4aydaoki1.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/2v6icscw2u98x.js","async":true,"nonce":"$undefined"}]],["$","div",null,{"className":"docs-shell","children":[["$","a",null,{"className":"docs-skip","href":"#support-content","children":"Skip to content"}],["$","header",null,{"className":"docs-header","children":[["$","a",null,{"href":"/support/","className":"docs-brand","aria-label":"Handsfree support home","children":[["$","span",null,{"children":["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":22,"height":22,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-audio-lines","aria-hidden":"true","children":[["$","path","1fnikh",{"d":"M2 10v3"}],["$","path","11sgs0",{"d":"M6 6v11"}],["$","path","yhl04a",{"d":"M10 3v18"}],["$","path","3a1oy3",{"d":"M14 8v7"}],["$","path","123xd1",{"d":"M18 5v13"}],["$","path","154ddg",{"d":"M22 10v3"}],"$undefined"]}]}],"handsfree",["$","span",null,{"className":"docs-brand-period","children":"."}],["$","i",null,{}],["$","small",null,{"children":"Support"}]]}],["$","a",null,{"href":"/","className":"docs-open-app","children":["Open Handsfree ",["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":16,"height":16,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-up-right","aria-hidden":"true","children":[["$","path","1tivn9",{"d":"M7 7h10v10"}],["$","path","1vkiza",{"d":"M7 17 17 7"}],"$undefined"]}]]}]]}],["$","div",null,{"className":"docs-layout","children":[["$","$L4",null,{}],["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],["$","footer",null,{"className":"docs-footer","children":[["$","span",null,{"children":["Handsfree support ",["$","span",null,{"aria-hidden":"true","children":"·"}]," Your computer. Your context."]}],["$","a",null,{"href":"/privacy/","children":"Privacy"}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L5",[["$","script","script-0",{"src":"/_next/static/chunks/2bw5iof_b--vu.js","async":true,"nonce":"$undefined"}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],{},null,false,null]},null,false,"$9"]},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$7",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],null]}],false]],"m":"$undefined","G":["$e",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0uu3n70ekaa_q.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"mtyNzNz9MUZ_ooV9pJSu1"}
9:C
5:["$","div",null,{"className":"docs-article-layout","children":[["$","main",null,{"id":"support-content","className":"docs-article","children":[["$","nav",null,{"className":"docs-breadcrumb","aria-label":"Breadcrumb","children":[["$","a",null,{"href":"/support/","children":"Support"}],["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":13,"height":13,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right","aria-hidden":"true","children":[["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}],"$undefined"]}],["$","span",null,{"children":"Start here"}]]}],["$","div",null,{"className":"docs-article-meta","children":[["$","span",null,{"children":"Start here"}],["$","span",null,{"children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":13,"height":13,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-clock","aria-hidden":"true","children":[["$","circle","1mglay",{"cx":"12","cy":"12","r":"10"}],["$","path","mmk7yg",{"d":"M12 6v6l4 2"}],"$undefined"]}],12," min read"]}]]}],["$","h1",null,{"children":"Set up headless Linux"}],["$","p",null,{"className":"docs-article-description","children":"Install the self-contained host, open private setup over SSH, and connect your iPhone."}],["$","details",null,{"className":"docs-mobile-toc","children":[["$","summary",null,{"children":"On this page"}],["$","nav",null,{"aria-label":"On this page","children":[["$","a","before-you-begin",{"href":"#before-you-begin","className":"","children":"Before you begin"}],["$","a","1-download-and-install",{"href":"#1-download-and-install","className":"","children":"1. Download and install"}],["$","a","2-open-private-setup-on-your-laptop",{"href":"#2-open-private-setup-on-your-laptop","className":"","children":"2. Open private setup on your laptop"}],["$","a","3-unlock-and-sign-in",{"href":"#3-unlock-and-sign-in","className":"","children":"3. Unlock and sign in"}],["$","a","4-connect-tailscale",{"href":"#4-connect-tailscale","className":"","children":"4. Connect Tailscale"}],["$","a","5-verify-your-coding-agent-and-choose-projects",{"href":"#5-verify-your-coding-agent-and-choose-projects","className":"","children":"5. Verify your coding agent and choose projects"}],["$","a","6-connect-your-iphone",{"href":"#6-connect-your-iphone","className":"","children":"6. Connect your iPhone"}],["$","a","personal-voice-history-and-connection-diagnostics",{"href":"#personal-voice-history-and-connection-diagnostics","className":"","children":"Personal voice history and connection diagnostics"}],["$","a","restarts-upgrades-and-recovery",{"href":"#restarts-upgrades-and-recovery","className":"","children":"Restarts, upgrades, and recovery"}],["$","a","access-logs-and-removal",{"href":"#access-logs-and-removal","className":"","children":"Access, logs, and removal"}]]}]]}],["$","div",null,{"className":"docs-prose","children":[["$","p","p-0",{"children":"Handsfree can run on a Linux server without a desktop environment. You use a small private browser wizard on your laptop, then connect your iPhone over Tailscale. No repository clone, Node installation, or npm commands are required for the packaged app."}],"\n",["$","h2","h2-0",{"id":"before-you-begin","children":["Before you begin",["$","a",null,{"className":"docs-heading-link","href":"#before-you-begin","aria-label":"Link to this section","children":"#"}]]}],"\n",["$","p","p-1",{"children":["Use a 64-bit Linux machine with glibc: Ubuntu 22.04 or newer / Debian 12 or newer are the initial targets. Choose ",["$","strong","strong-0",{"children":"x64"}]," for Intel/AMD or ",["$","strong","strong-1",{"children":"arm64"}]," for ARM. Alpine/musl and 32-bit Linux are not supported by these packages. You need a normal Linux account, SSH access, and outbound internet access to Clerk and your coding provider. Don’t run Handsfree as root."]}],"\n",["$","p","p-2",{"children":"For now, Claude Code handles phone execution. Codex installation, authentication, and runtime verification are available, but Codex phone execution is not enabled. Your provider subscription/credits are separate from your Handsfree account."}],"\n","$Lf","\n","$L10","\n","$L11","\n","$L12","\n","$L13","\n","$L14","\n","$L15","\n","$L16","\n","$L17","\n","$L18","\n","$L19","\n","$L1a","\n","$L1b","\n","$L1c","\n","$L1d","\n","$L1e","\n","$L1f","\n","$L20","\n","$L21","\n","$L22","\n","$L23","\n","$L24","\n","$L25","\n","$L26","\n","$L27","\n","$L28","\n","$L29","\n","$L2a","\n","$L2b","\n","$L2c","\n","$L2d","\n","$L2e","\n","$L2f","\n","$L30","\n","$L31","\n","$L32","\n","$L33","\n","$L34"]}],"$L35"]}],"$L36"]}]
f:["$","h2","h2-1",{"id":"1-download-and-install","children":["1. Download and install",["$","a",null,{"className":"docs-heading-link","href":"#1-download-and-install","aria-label":"Link to this section","children":"#"}]]}]
10:["$","p","p-3",{"children":["Get the matching ",["$","code","code-0",{"children":"handsfree-0.2.5-linux-x64.tar.gz"}]," or ",["$","code","code-1",{"children":"handsfree-0.2.5-linux-arm64.tar.gz"}]," and its ",["$","code","code-2",{"children":".sha256"}]," file from ",["$","a","a-0",{"href":"/downloads/","children":"Handsfree downloads"}],". These installer downloads are public; no repository access or clone is needed."]}]
11:["$","p","p-4",{"children":["Copy both files to your Linux account with your usual SSH file transfer tool. In that folder, substitute ",["$","code","code-0",{"children":"arm64"}]," below if appropriate:"]}]
12:["$","pre","pre-0",{"tabIndex":0,"children":["$","code","code-0",{"className":"language-bash","children":"sha256sum -c handsfree-0.2.5-linux-x64.tar.gz.sha256\ntar -xzf handsfree-0.2.5-linux-x64.tar.gz\ncd handsfree-0.2.5-linux-x64\n./install.sh --service\n"}]}]
13:["$","p","p-5",{"children":["Proceed only if the checksum says ",["$","strong","strong-0",{"children":"OK"}],". The installer copies a self-contained package into ",["$","code","code-0",{"children":"~/.local/opt/handsfree"}],", creates ",["$","code","code-1",{"children":"~/.local/bin/handsfree"}],", and installs a ",["$","strong","strong-1",{"children":"user"}]," systemd service. Existing versions and user data are retained. It does not use sudo or install Tailscale or coding agents silently."]}]
14:["$","p","p-6",{"children":["If your machine has no user systemd session, use ",["$","code","code-0",{"children":"./install.sh"}]," without ",["$","code","code-1",{"children":"--service"}],", then ",["$","code","code-2",{"children":"~/.local/bin/handsfree start"}]," inside your own terminal multiplexer. This foreground mode stops when that process stops. For the service to survive logout and start at boot, ask your administrator whether user lingering is appropriate (",["$","code","code-3",{"children":"loginctl enable-linger YOUR_LINUX_USERNAME"}],"). This is an explicit administrator choice, not something the installer changes."]}]
15:["$","h2","h2-2",{"id":"2-open-private-setup-on-your-laptop","children":["2. Open private setup on your laptop",["$","a",null,{"className":"docs-heading-link","href":"#2-open-private-setup-on-your-laptop","aria-label":"Link to this section","children":"#"}]]}]
16:["$","p","p-7",{"children":["From a terminal ",["$","strong","strong-0",{"children":"on your laptop"}],", run this with your existing SSH alias or ",["$","code","code-0",{"children":"username@hostname"}],":"]}]
17:["$","pre","pre-1",{"tabIndex":0,"children":["$","code","code-0",{"className":"language-bash","children":"ssh -N -L 19880:127.0.0.1:19880 -L 43821:127.0.0.1:43821 YOUR_LINUX_HOST\n"}]}]
18:["$","p","p-8",{"children":"Leave that terminal open. In another SSH session on the Linux machine, run:"}]
19:["$","pre","pre-2",{"tabIndex":0,"children":["$","code","code-0",{"className":"language-bash","children":"~/.local/bin/handsfree setup-url\n"}]}]
1a:["$","p","p-9",{"children":["Open the complete printed link in your laptop browser. Keep the link private; it grants administrative setup access through your tunnel. Use ",["$","strong","strong-0",{"children":"127.0.0.1"}],", not ",["$","code","code-0",{"children":"localhost"}],", and keep the long ",["$","code","code-1",{"children":"#…"}]," suffix when opening it. Handsfree removes that suffix from browser history after loading. Refreshing the page intentionally clears its in-memory access token; reopen the full link to reconnect."]}]
1b:["$","p","p-10",{"children":"Only ports 19880 (setup) and 43821 (temporary sign-in callback) need SSH forwarding. Never expose either port with a firewall rule, Tailscale Serve, Funnel, or a public reverse proxy. The actual host listens on loopback 19879 and its agent daemon on 19878; the wizard gives only the host a private Tailscale HTTPS route."}]
1c:["$","h2","h2-3",{"id":"3-unlock-and-sign-in","children":["3. Unlock and sign in",["$","a",null,{"className":"docs-heading-link","href":"#3-unlock-and-sign-in","aria-label":"Link to this section","children":"#"}]]}]
1d:["$","p","p-11",{"children":"Create a vault passphrase with at least 12 characters and save it in your password manager. Confirm it to avoid locking yourself out. The vault encrypts Handsfree OAuth credentials using scrypt and authenticated AES-256-GCM encryption. Its encryption key is held only in process memory. A restart always begins locked; there is no plaintext fallback or hidden saved passphrase."}]
1e:["$","p","p-12",{"children":["Choose ",["$","strong","strong-0",{"children":"Create account / Sign in"}],", then ",["$","strong","strong-1",{"children":"Continue in secure sign-in"}],". Clerk opens in another browser tab. You can create an account there or use an existing one. Finish the email verification or supported provider login, approve Handsfree access, and return to setup. This internal release uses Clerk ",["$","strong","strong-2",{"children":"Development"}],", not production."]}]
1f:["$","p","p-13",{"children":"Use the same Handsfree account on your iPhone. Clerk identity, your Tailscale account, and your coding-agent account are three separate things; signing into one doesn’t sign into the others."}]
20:["$","h2","h2-4",{"id":"4-connect-tailscale","children":["4. Connect Tailscale",["$","a",null,{"className":"docs-heading-link","href":"#4-connect-tailscale","aria-label":"Link to this section","children":"#"}]]}]
21:["$","p","p-14",{"children":["Follow ",["$","a","a-0",{"href":"https://tailscale.com/docs/install/linux","children":"Tailscale’s Linux installation instructions"}],". Authenticate this Linux machine and your iPhone to the same tailnet. In the wizard, choose ",["$","strong","strong-0",{"children":"Check setup again"}],", then ",["$","strong","strong-1",{"children":"Enable private HTTPS"}],". If Tailscale presents an HTTPS approval link, approve it and retry."]}]
22:["$","p","p-15",{"children":["If this user cannot configure Serve, ask your administrator about ",["$","a","a-0",{"href":"https://tailscale.com/docs/reference/troubleshooting/linux/linux-operator-permission","children":"Linux operator permissions"}],". Handsfree never runs sudo. The wizard preserves existing routes and chooses an available HTTPS port; it refuses an address with public Funnel sharing enabled. It does not erase or reset your Tailscale configuration."]}]
23:["$","h2","h2-5",{"id":"5-verify-your-coding-agent-and-choose-projects","children":["5. Verify your coding agent and choose projects",["$","a",null,{"className":"docs-heading-link","href":"#5-verify-your-coding-agent-and-choose-projects","aria-label":"Link to this section","children":"#"}]]}]
24:["$","p","p-16",{"children":["Install and authenticate Claude Code ",["$","strong","strong-0",{"children":"on this Linux machine as the Handsfree user"}],", following its ",["$","a","a-0",{"href":"https://code.claude.com/docs/en/setup","children":"official setup guide"}],". Agent credentials on your laptop do not authenticate the Linux server. Use the provider’s own supported remote authentication instructions."]}]
25:["$","p","p-17",{"children":["Choose ",["$","strong","strong-0",{"children":"Check setup again"}]," to confirm installation and login. ",["$","strong","strong-1",{"children":"Test response"}]," asks Claude for a fixed response without project tools or external MCP access; it uses provider credits. Enable Claude and review the agent-access consent before saving. Agents run as your Linux user and can execute commands: project selection is not an OS sandbox. Use a dedicated low-privilege Linux user if you need stronger separation."]}]
26:["$","p","p-18",{"children":["Enter one or more absolute Linux search folders, such as ",["$","code","code-0",{"children":"/home/alex/Projects"}],". Choose ",["$","strong","strong-0",{"children":"Find Git repositories"}],", select the projects you want, and save. Discovery is read-only and supports normal repositories and Git worktrees. It skips hidden/dependency folders and is bounded to avoid a never-ending scan. Add a folder manually if it isn’t found or isn’t a Git repository."]}]
27:["$","h2","h2-6",{"id":"6-connect-your-iphone","children":["6. Connect your iPhone",["$","a",null,{"className":"docs-heading-link","href":"#6-connect-your-iphone","aria-label":"Link to this section","children":"#"}]]}]
28:["$","p","p-19",{"children":["Install the internal iPhone build from TestFlight and ",["$","a","a-0",{"href":"/support/iphone-accounts/","children":"sign in to Handsfree"}],". Ask Todd for internal tester access; there is no public TestFlight invitation link in this release."]}]
29:["$","p","p-20",{"children":["Start the Linux host, then show a new pairing code. On your iPhone, turn on Tailscale and choose ",["$","strong","strong-0",{"children":"Add computer"}]," in Handsfree. Scan the QR code, or enter the private HTTPS address and code manually. The host verifies that both devices use the same Clerk account. A code expires after ten minutes and can be used once. The wizard confirms when a native iPhone connects. Send a small request to verify the complete agent path."]}]
2a:["$","h2","h2-7",{"id":"personal-voice-history-and-connection-diagnostics","children":["Personal voice history and connection diagnostics",["$","a",null,{"className":"docs-heading-link","href":"#personal-voice-history-and-connection-diagnostics","aria-label":"Link to this section","children":"#"}]]}]
2b:["$","p","p-21",{"children":["Linux 0.2.5 includes the same voice diagnostics screen as Mac. In your private\nsetup page, select ",["$","strong","strong-0",{"children":"Open personal voice history"}]," while the vault is unlocked,\nyou are signed in, and the host is running. The page opens through the existing\nSSH tunnel. Keep that setup link private; no new port or public dashboard is needed."]}]
2c:["$","p","p-22",{"children":"With iPhone build 26 or later, recognized text, matched keywords, decisions and\nrecognition errors are captured automatically during normal voice use. No extra\nmicrophone recording or audio upload is started. Older build 25 requires manual\ncapture. History belongs to the signed-in Handsfree account and its paired\nphones. Search, filter, expand events, export text logs or delete stored history.\nThere is no global utterance feed. Mac and Linux retain the latest 1,000 events\nfor up to seven days; pending iPhone events remain memory-only."}]
2d:["$","p","p-23",{"children":"Locking the vault or switching accounts clears the displayed history on the next\nstate poll (within two seconds when connected) and denies new reads immediately.\nRefreshing the diagnostics browser tab clears its access token: reopen it from\nsetup. Exported transcript files are your copies and do not automatically expire."}]
2e:["$","p","p-24",{"children":[["$","strong","strong-0",{"children":"Export safe connection diagnostics"}]," downloads content-free connection events,\nversion and runtime status, separate from voice transcripts and raw host logs.\nUse that file first when reporting connection loss. Voice history can be disabled\npersistently in the iPhone command guide. See ",["$","a","a-0",{"href":"https://github.com/MinimaGroup/ioshandsfree/blob/main/docs/HOST-PARITY.md","children":"host parity"}]," for the\nshared release process and intentional differences between Mac and Linux."]}]
2f:["$","h2","h2-8",{"id":"restarts-upgrades-and-recovery","children":["Restarts, upgrades, and recovery",["$","a",null,{"className":"docs-heading-link","href":"#restarts-upgrades-and-recovery","aria-label":"Link to this section","children":"#"}]]}]
30:["$","ul","ul-0",{"children":["\n",["$","li","li-0",{"children":"Closing the browser or SSH tunnel does not stop a systemd-installed host. Restarting the Handsfree service does: unlock the vault and select Start host again."}],"\n",["$","li","li-1",{"children":["To reopen setup, reconnect the SSH tunnel and run ",["$","code","code-0",{"children":"handsfree setup-url"}]," again. If your shell does not find the command, use ",["$","code","code-1",{"children":"~/.local/bin/handsfree"}],"."]}],"\n",["$","li","li-2",{"children":[["$","code","code-0",{"children":"handsfree status"}],", ",["$","code","code-1",{"children":"handsfree stop"}],", and ",["$","code","code-2",{"children":"handsfree restart"}]," operate the user service. A stop disconnects phones and can interrupt agent work; finish active work first."]}],"\n",["$","li","li-3",{"children":["Install a new package with the same installer to upgrade. It switches a ",["$","code","code-0",{"children":"current"}]," symlink and keeps a ",["$","code","code-1",{"children":"previous"}]," symlink and version directories for administrator-assisted rollback. It never deletes your saved projects, vault, or host history. Upgrades restart the service into a locked state."]}],"\n",["$","li","li-4",{"children":"A wrong vault passphrase leaves the encrypted file untouched. Forgotten passphrases are not recoverable. Ask an administrator to back up the complete data directory before considering a fresh account vault."}],"\n",["$","li","li-5",{"children":"“Address already in use”: close another Handsfree setup or Mac sign-in callback using the same laptop ports, or ask an administrator to resolve the conflict. Don’t expose setup publicly as a workaround."}],"\n",["$","li","li-6",{"children":"“Different account”: sign out on the phone, then sign in with the exact email/account displayed by Linux setup. A new code alone won’t bypass the account check."}],"\n",["$","li","li-7",{"children":"“Cannot reach host”: check both Tailscale connections, host running state, the private HTTPS route, and tailnet ACLs. The SSH tunnel is for setup, not the phone connection."}],"\n"]}]
31:["$","h2","h2-9",{"id":"access-logs-and-removal","children":["Access, logs, and removal",["$","a",null,{"className":"docs-heading-link","href":"#access-logs-and-removal","aria-label":"Link to this section","children":"#"}]]}]
32:["$","p","p-25",{"children":"The setup page lists paired phones and lets you revoke a phone’s host credential. Signing out on a phone disconnects that phone but does not delete the Clerk account or automatically revoke every host credential. Revoke a lost device from each host. Agent work already submitted may continue after the phone disconnects."}]
33:["$","p","p-26",{"children":["State is under ",["$","code","code-0",{"children":"~/.local/share/handsfree"}],"; OAuth credentials are encrypted, while host history, configuration, and host device-token hashes use owner-restricted local files. Provider credentials remain in the provider’s storage. Logs are in ",["$","code","code-1",{"children":"logs/host.log"}],"; the service journal also contains the private setup link. Review/redact paths, account identifiers, messages, and links before sharing diagnostics."]}]
34:["$","p","p-27",{"children":["To retire a host, first revoke its phones and stop active work. Stop and disable the user service with ",["$","code","code-0",{"children":"systemctl --user disable --now handsfree.service"}],". The administrator can remove the matching unit and installed version directories later, preserving the data directory for backup. Remove only Handsfree’s specific Tailscale route after inspecting ",["$","code","code-1",{"children":"tailscale serve status"}],"; do not run a global Serve reset that would remove other apps’ routes."]}]
35:["$","nav",null,{"className":"docs-pagination","aria-label":"Article navigation","children":[["$","a",null,{"href":"/support/","children":[["$","small",null,{"children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":13,"height":13,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-left","aria-hidden":"true","children":[["$","path","1l729n",{"d":"m12 19-7-7 7-7"}],["$","path","x3x0zl",{"d":"M19 12H5"}],"$undefined"]}]," Back to"]}],["$","strong",null,{"children":"Support overview"}]]}],["$","a",null,{"href":"/support/iphone-accounts/","className":"docs-next","children":[["$","small",null,{"children":["Next article ",["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":13,"height":13,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]]}],["$","strong",null,{"children":"Sign in on your iPhone"}]]}]]}]
36:["$","aside",null,{"className":"docs-toc","children":[["$","p",null,{"children":"On this page"}],"$5:props:children:0:props:children:4:props:children:1"]}]
b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, viewport-fit=cover"}],["$","meta","2",{"name":"theme-color","content":"#f7f8f5"}]]
37:I[27201,["/_next/static/chunks/3fntmmi971322.js"],"IconMark"]
8:null
d:[["$","title","0",{"children":"Set up headless Linux · Handsfree support"}],["$","meta","1",{"name":"description","content":"Install the self-contained host, open private setup over SSH, and connect your iPhone."}],["$","meta","2",{"name":"application-name","content":"Handsfree"}],["$","link","3",{"rel":"icon","href":"/icon.svg"}],["$","link","4",{"rel":"apple-touch-icon","href":"/icon.svg"}],["$","$L37","5",{}]]
