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/17xyy7vca3shy.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/2cpy3hkr8pdlx.css","style"]
:HL["/_next/static/chunks/0b-w4aydaoki1.css","style"]
9:X
0:{"P":null,"c":["","support","connection-help",""],"q":"","i":false,"f":[[["",{"children":["support",{"children":[["slug","connection-help","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/2cpy3hkr8pdlx.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/17xyy7vca3shy.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/2cpy3hkr8pdlx.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"wz0A9YF1IYMhihIBq8BL7"}
9:C
f:T417,Set up this Handsfree checkout so I can test the real app on my iPhone.
Read docs/LOCAL-SETUP.md and host/README.md, and follow the agent handoff there.
Inspect existing services and Tailscale routes first; reuse a healthy setup.
I authorize local dependency installation, a real Claude host,
a user login service, and private HTTPS using Tailscale Serve.
Start in a disposable project. I understand unattended Claude tools run as my
OS user and allowed project roots are not a filesystem sandbox.
Keep credentials and logs outside Git. Help me connect both devices to the same
Tailscale account, leaving login, consent and OS prompts for me.
Use native iPhone speech; no desktop speech installation is needed.
Verify real Claude and the clientSpeech.v1 capability, then the actual HTTPS/WSS route. Give me the exact
host URL, open a QR with host/pair.mjs, and give me its refresh command plus
start/stop instructions. Configure named project choices with HF_PROJECTS.
Walk me through phone health, text and voice tests. Do not deploy the website.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":"Setup & support"}]]}],["$","div",null,{"className":"docs-article-meta","children":[["$","span",null,{"children":"Setup & support"}],["$","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"]}],6," min read"]}]]}],["$","h1",null,{"children":"Connection & troubleshooting"}],["$","p",null,{"className":"docs-article-description","children":"Pairing, browser access, voice controls, and getting connected again."}],["$","details",null,{"className":"docs-mobile-toc","children":[["$","summary",null,{"children":"On this page"}],["$","nav",null,{"aria-label":"On this page","children":[["$","a","let-your-coding-agent-set-it-up",{"href":"#let-your-coding-agent-set-it-up","className":"","children":"Let your coding agent set it up"}],["$","a","1-set-up-your-host",{"href":"#1-set-up-your-host","className":"","children":"1. Set up your host"}],["$","a","connect-from-your-phone-tonight",{"href":"#connect-from-your-phone-tonight","className":"","children":"Connect from your phone tonight"}],["$","a","using-the-hosted-browser-companion",{"href":"#using-the-hosted-browser-companion","className":"","children":"Using the hosted browser companion"}],["$","a","2-pair-your-device",{"href":"#2-pair-your-device","className":"","children":"2. Pair your device"}],["$","a","3-open-a-session",{"href":"#3-open-a-session","className":"","children":"3. Open a session"}],["$","a","keep-the-conversation-under-your-control",{"href":"#keep-the-conversation-under-your-control","className":"","children":"Keep the conversation under your control"}],["$","a","if-a-connection-drops",{"href":"#if-a-connection-drops","className":"","children":"If a connection drops"}],["$","a","need-to-troubleshoot",{"href":"#need-to-troubleshoot","className":"","children":"Need to troubleshoot?"}]]}]]}],["$","div",null,{"className":"docs-prose","children":[["$","p",null,{"className":"lede","children":"Your phone is the conversation. Your computer does the work."}],["$","h2",null,{"id":"let-your-coding-agent-set-it-up","children":"Let your coding agent set it up"}],["$","p",null,{"children":["Open the Handsfree repository on your Mac and paste the request below into your coding agent. The"," ",["$","a",null,{"href":"/support/local-setup/","children":"complete local setup guide"}]," includes commands for automatic startup, private HTTPS through Tailscale, pairing and troubleshooting."]}],["$","pre",null,{"children":"$f"}],"$L10","$L11","$L12","$L13","$L14","$L15","$L16","$L17","$L18","$L19","$L1a","$L1b","$L1c","$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23","$L24","$L25","$L26","$L27","$L28","$L29","$L2a"]}],"$L2b"]}],"$L2c"]}]
10:["$","h2",null,{"id":"1-set-up-your-host","children":"1. Set up your host"}]
11:["$","p",null,{"children":"Handsfree connects to a gateway running on your trusted computer, with access to your projects and a configured Claude agent. Install and configure the host from the Handsfree repository, following its host setup guide. Keep provider credentials on that computer."}]
12:["$","p",null,{"children":"The host needs a trusted HTTPS certificate and a network route from your phone, such as your private network or VPN. A website deployment by itself does not run the agent."}]
13:["$","h2",null,{"id":"connect-from-your-phone-tonight","children":"Connect from your phone tonight"}]
14:["$","p",null,{"children":"Before pairing, make sure you have a running host, a trusted HTTPS address for it, and a network route from the phone. The public Handsfree website supplies the interface; it does not create or relay a host connection."}]
15:["$","ol",null,{"children":[["$","li",null,{"children":["On your computer, install the host dependencies with"," ",["$","code",null,{"children":"npm ci"}]," inside the ",["$","code",null,{"children":"host"}]," folder. Configure your Claude login, project directory, and execution permissions using the host README. Start both the daemon and gateway using the supplied ",["$","code",null,{"children":"run.mjs"}]," supervisor or your existing service setup."]}],["$","li",null,{"children":["Keep the gateway on ",["$","code",null,{"children":"127.0.0.1:9879"}]," behind a private HTTPS reverse proxy, or bind it to a private interface with"," ",["$","code",null,{"children":"TLS_CERT"}]," and ",["$","code",null,{"children":"TLS_KEY"}],". The certificate must be trusted by your phone and match the hostname. The proxy must forward ",["$","code",null,{"children":"/pair"}]," and WebSocket upgrades at ",["$","code",null,{"children":"/ws"}],"."]}],["$","li",null,{"children":["Connect your phone to the same private network or VPN. An option is"," ",["$","a",null,{"href":"https://tailscale.com/docs/features/tailscale-serve","children":"Tailscale Serve"}],", which shares a local service over your tailnet and requires HTTPS certificates. Keep access limited to your devices; do not turn on a public tunnel for this setup."]}],["$","li",null,{"children":["From the phone’s browser, open your host’s HTTPS address followed by"," ",["$","code",null,{"children":"/health"}],". You should see a small JSON health response without a certificate warning. If this fails, fix routing, DNS, or TLS before trying a pairing code."]}]]}]
16:["$","p",null,{"children":[["$","strong",null,{"children":"Use the computer’s reachable HTTPS hostname in Handsfree."}]," ",["$","code",null,{"children":"localhost"}]," and ",["$","code",null,{"children":"127.0.0.1"}]," on a physical phone refer to the phone itself. They are useful for local development and simulator testing, not for reaching your computer from an iPhone."]}]
17:["$","h2",null,{"id":"using-the-hosted-browser-companion","children":"Using the hosted browser companion"}]
18:["$","p",null,{"children":"Add this exact origin to the gateway environment before starting or restarting it:"}]
19:["$","pre",null,{"children":"HF_ALLOWED_ORIGINS=https://ioshandsfree.vercel.app"}]
1a:["$","p",null,{"children":"This authorizes the companion page to make browser requests to your paired gateway. Device pairing and authentication are still required. If you use a different companion domain, explicitly allow that domain instead. The native app uses its own transport and does not need a browser CORS origin."}]
1b:["$","p",null,{"children":["Some browsers also ask for permission to connect to devices on your local network. Allow it for the companion if you want that connection; if you declined, review the site’s Local Network Access setting. Chrome documents this in its"," ",["$","a",null,{"href":"https://developer.chrome.com/blog/local-network-access","children":"Local Network Access guide"}],". This permission is separate from microphone access."]}]
1c:["$","p",null,{"children":"Keep the browser page open and in the foreground for voice. After a page reload, pair again with a fresh single-use code. A real voice conversation also needs working transcription on the host; demo mode’s transcript and agent replies are explicitly simulated."}]
1d:["$","h2",null,{"id":"2-pair-your-device","children":"2. Pair your device"}]
1e:["$","p",null,{"children":["On your computer, use the"," ",["$","a",null,{"href":"/support/local-setup/#show-a-scannable-connection-code","children":"QR pairing command"}]," ","to open a fresh connection code. In Handsfree, choose"," ",["$","strong",null,{"children":"Scan my computer’s code"}],". Scanning fills the address and one-use code and connects automatically.",["$","strong",null,{"children":" Enter details instead"}]," is available if the camera cannot scan. Refresh an expired or used code by rerunning the desktop command."]}]
1f:["$","p",null,{"children":"On iPhone, the device credential is stored in Keychain. The browser companion keeps its credential only in page memory, so pair again after reloading. Removing a host from the app removes its local pairing; revoke a lost device’s credential on the host."}]
20:["$","h2",null,{"id":"3-open-a-session","children":"3. Open a session"}]
21:["$","p",null,{"children":["Choose ",["$","strong",null,{"children":"New session"}],", then your computer, project and agent. Steps with one available option are skipped. Check the selected project and tap ",["$","strong",null,{"children":"Start talking"}],", or"," ",["$","strong",null,{"children":"Type instead"}],". To resume, choose"," ",["$","strong",null,{"children":"Continue a session"}]," and a recent conversation."]}]
22:["$","p",null,{"children":"Allow Microphone and Speech Recognition access when asked. iPhone also needs local network permission for a LAN host. The browser requires HTTPS or localhost and must remain in the foreground for voice. Keep the iPhone app open while talking; it keeps the screen awake. Leaving the app pauses listening. The iPhone uses on-device English recognition and its own voice. Browser voice uses optional host speech services."}]
23:["$","h2",null,{"id":"keep-the-conversation-under-your-control","children":"Keep the conversation under your control"}]
24:["$","ul",null,{"children":[["$","li",null,{"children":[["$","strong",null,{"children":"Record once:"}]," begin recording; tap Finish recording to send it for transcription."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Start talking / Pause listening:"}]," start continuous listening or pause capture."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Stop speaking:"}]," silence playback without canceling agent work."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Stop agent:"}]," ask the host to interrupt the current turn and clear its pending queue."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Replay reply:"}]," hear the most recent assistant response again."]}]]}]
25:["$","p",null,{"children":[["$","strong",null,{"children":"Done for now"}]," stops listening and playback and returns home. Accepted work continues on the computer. Leaving an unfinished single recording discards it."]}]
26:["$","h2",null,{"id":"if-a-connection-drops","children":"If a connection drops"}]
27:["$","p",null,{"children":"The app reconnects automatically. Accepted work can continue on the host while your phone is disconnected. Microphone audio is not held for later submission during a long disconnect. If the host itself crashes, an active job may have an interrupted or unknown outcome. Review the host and project before retrying an action that changes files or external systems."}]
28:["$","h2",null,{"id":"need-to-troubleshoot","children":"Need to troubleshoot?"}]
29:["$","p",null,{"children":"Check that the gateway is running, the certificate is trusted, and your phone can reach the host address. A rejected device credential needs a fresh pairing. For microphone errors, check the app’s permissions in iPhone Settings or your browser’s site settings. Text commands remain available without microphone permission."}]
2a:["$","p",null,{"children":"This is a developer beta. Report issues through the repository or the support contact provided with your build. Include the app version, device and OS, steps to reproduce, and the visible error. Do not include pairing codes, device tokens, provider keys, or private project contents."}]
2b:["$","nav",null,{"className":"docs-pagination","aria-label":"Article navigation","children":[["$","a",null,{"href":"/support/local-setup/","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"]}]," Previous article"]}],["$","strong",null,{"children":"Set up your Mac & iPhone"}]]}],["$","a",null,{"href":"/support/technical-flow/","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":"Phone → host → phone"}]]}]]}]
2c:["$","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"}]]
2d:I[27201,["/_next/static/chunks/3fntmmi971322.js"],"IconMark"]
8:null
d:[["$","title","0",{"children":"Connection & troubleshooting · Handsfree support"}],["$","meta","1",{"name":"description","content":"Pairing, browser access, voice controls, and getting connected again."}],["$","meta","2",{"name":"application-name","content":"Handsfree"}],["$","link","3",{"rel":"icon","href":"/icon.svg"}],["$","link","4",{"rel":"apple-touch-icon","href":"/icon.svg"}],["$","$L2d","5",{}]]
