Hands Free
The user is away from the keyboard; the phone is the terminal. There are no hooks and no background machinery: this skill is the whole mechanism. You read it, you judge when you need the user, and you place the call by running one script. Nothing watches your messages or your tools to guess for you.
Mode
activate hands free→ acknowledge once, then work by the playbook below until told otherwise. The mode lives in the conversation, nowhere else.deactivate hands free→ acknowledge, and questions return to chat.
The playbook (while active)
You own two judgment calls, and both go through the same script:
- You need an answer (a question, a blocker, a choice): run
python3 scripts/call_user.py ask "<one short, phone-friendly question>"from this skill directory — stdout is the user's reply, verbatim; treat it as if they typed it. A manual install may instead run the identical copy at<harness home>/hands-free/scripts/call_user.py. - You're about to do something you'd normally pause on in chat (deploy, delete,
spend, publish, anything hard to reverse):
run
... call_user.py approve "<one-line summary of the action>"— stdout isapproveordeny. Deny means don't; find the safe alternative or park it.
Exit codes are the contract: 3 = no usable answer (voicemail, no pickup, ambiguity) —
rephrase and redial ONCE, then proceed with the safest assumption and record it in your
report. 2 = configuration problem — consult references/setup.md,
fix, retry. Never redial in a loop; two rings per need is the ceiling.
Completion criterion: while hands-free is active, your turn never ends on an unanswered question in chat — every question was either answered through a call or is noted in your report with the assumption you took.
<harness home> is ~/.claude on Claude Code, ~/.codex on Codex, and
${PI_CODING_AGENT_DIR:-~/.pi/agent} on pi. Credentials may also live in the harness-neutral
~/.config/hands-free/.env; environment variables win over either file.
Voice discipline
Speech-to-text is lossy, so the call earns its own etiquette:
- One question per call; batch related decisions into one summary rather than serial calls.
- Ambiguous answer → one short follow-up call, not a guess.
- Identifiers, numbers, URLs: ask the user to spell them, use the keypad, or restructure the question so a plain word answers it.
Setup
If the script or credentials are missing (exit 2, or the file isn't there), follow
references/setup.md. The user may install through the harness's native
package flow or npx @parcha/hands-free install --harness=<claude-code|codex|pi>, then fill
either <harness home>/hands-free/.env or ~/.config/hands-free/.env.