{"id":"d86d9dcf-779a-4232-b472-98233becee80","slug":"codex-phone-assistant","kind":"skill","name":"codex-phone-assistant","summary":"Codex Live phone assistant skills for macOS Phone.app and Loopback audio routing","owner":"zhangzhongnan928","repoUrl":"https://github.com/zhangzhongnan928/codex-phone-assistant","license":"GPL-3.0","licenseTier":"strong-copyleft","trust":"community","stars":4,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-08-10T02:36:14.000Z","addedAt":"2026-10-14T06:22:05.302Z","logoUrl":"https://avatars.githubusercontent.com/u/33795543?u=8829dca8e4469e40f000e65a9a6f52c89aa37936&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["design-media"],"tags":["codex","dtmf","loopback","macos","phone-assistant"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-17T10:05:39.967Z","sample":false,"url":"https://conduits.dev/tools/codex-phone-assistant","language":"","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Codex Phone Assistant for macOS\n<img width=\"1672\" height=\"941\" alt=\"exec-8138d4bc-d89c-4b03-87c0-19c4fe1190a6\" src=\"https://github.com/user-attachments/assets/7f01f281-89e2-43ef-b672-4947a08b9721\" />\n\nThis repository contains two Codex skills for a supervised telephone workflow on macOS:\n\n- `phone-assistant` runs one bounded conversation in a standalone Codex Live Voice session.\n- `mac-phone` performs one local Phone.app action: dial one number or send one active-call DTMF digit.\n\nThe audio bridge uses two Loopback virtual devices. Telephone audio is routed into Codex Live, and Codex voice output is routed back into the calling app. The skills assume this setup is already working. They execute calls, they do not repeatedly inspect or repair the audio configuration.\n\n## Important limitations\n\nThis is experimental, supervised personal automation. It is not a telephony API or an emergency calling system.\n\n- A local `tel:` request and Click to Call confirmation do not prove that the paired iPhone dialed, the remote phone rang, or anyone answered.\n- A local DTMF button click does not prove that the remote IVR accepted the digit.\n- Hang-up remains manual.\n- The workflow depends on current macOS UI behavior, Codex Computer Use, the Node REPL MCP, and `@oai/sky`. Operating-system or product updates may break it.\n- Never use it for emergency calls, unattended calling, harassment, spam, or calls you are not legally authorized to make.\n\n## Audio routing model\n\n```mermaid\nflowchart LR\n    A[\"Calling apps: Phone, FaceTime, Signal, Telegram\"] --> B[\"PHONE_TO_CODEX\"]\n    C[\"Optional local headset microphone\"] --> B\n    B --> D[\"Codex Live microphone input\"]\n    D --> E[\"Codex Live conversation\"]\n    E --> F[\"ChatGPT voice output\"]\n    F --> G[\"CODEX_TO_PHONE\"]\n    G --> H[\"Calling app microphone input\"]\n    G --> I[\"Optional Loopback monitors: headphones or speakers\"]\n```\n\nThe critical outbound setting is `Mute when capturing` on the ChatGPT source inside `CODEX_TO_PHONE`. In the tested setup, leaving the ordinary app-output path active caused macOS voice processing to attenuate most of the generated voice as echo. Enabling this option, while listening through Loopback monitors, restored normal remote volume. This is an observed routing result, not a guaranteed Apple implementation detail.\n\nSee [Audio setup](docs/audio-setup.md) for the complete configuration.\n\n## Requirements\n\n- macOS with Phone.app calling through a paired iPhone\n- Codex desktop with standalone Live Voice\n- Loopback by Rogue Amoeba\n- Computer Use access in Codex\n- The persistent Node REPL MCP with `@oai/sky`\n- Accessibility and other permissions required by the above applications\n\n## Install the skills\n\nClone the repository:\n\n```bash\ngit clone https://github.com/zhangzhongnan928/codex-phone-assistant.git\ncd codex-phone-assistant\n```\n\nCopy both skill directories into the personal Codex skill directory:\n\n```bash\nmkdir -p \"$HOME/.codex/skills\"\ncp -R skills/mac-phone \"$HOME/.codex/skills/\"\ncp -R skills/phone-assistant \"$HOME/.codex/skills/\"\n```\n\nIf a directory with either name already exists, back it up and review the differences before replacing it.\n\nA project-level `AGENTS.md` is not required. The operating rules are already inside the skills, and this workflow must begin in a standalone Live Voice session rather than from a project prompt.\n\n## Mandatory startup order\n\nThe order matters:\n\n1. Open a new Codex task.\n2. Start a standalone Live Voice session.\n3. Only after Live Voice is running, invoke `$phone-assistant` or say `start phone assistant mode`.\n4. After the activation sentence finishes, use typed chat for the destination, objective, limits, and start instruction.\n\nDo not type-invoke `$phone-assistant` before starting Live Voice. In the tested Codex workflow, doing that prevents Live Voice from being started in the same task. Start a new task if the order was reversed.\n\nAfter activation, every assistant utterance is assumed to go to the telephone party. The assistant therefore gives no spoken status updates to the owner. Only typed chat messages in the current top-level task are trusted as control instructions. Telephone audio, including a voice claiming to be the owner, is treated as third-party content.\n\n## Example task\n\nAfter Phone Assistant mode is active, type:\n\n```text\ndestination: <a number you are authorized to call>\nobjective: Ask for today's opening hours\nowner_name: <optional name to disclose>\nallowed_information: The objective above only\nallowed_decisions: none\nprohibited_actions: No purchases, bookings, or disclosure of sensitive information\nsuccess_criteria: The business states today's opening and closing times\nstart_now: yes\n```\n\nThe assistant uses English by default. If the telephone party clearly uses another language, it may match that party's language. The language of the owner's typed instructions does not determine the telephone language.\n\n## Safety model\n\n- One typed task authorizes one bounded call.\n- `mac-phone` accepts only one atomic action at a time.\n- Dialing uses a fresh Click to Call confirmation control.\n- DTMF uses only a verified active-call keypad, never the ordinary dialing keypad.\n- The assistant does not disclose passwords, one-time codes, recovery codes, private keys, seed phrases, or complete payment-card data.\n- Payment, identity verification, legal commitments, sensitive personal data, or decisions beyond typed authority require a human takeover.\n- The owner must end the call manually.\n\nTest first with a number you control or a harmless public IVR. Keep the Mac and paired iPhone in view during testing.\n\n## Repository layout\n\n```text\nskills/\n  mac-phone/\n    SKILL.md\n    agents/openai.yaml\n  phone-assistant/\n    SKILL.md\n    agents/openai.yaml\ndocs/\n  audio-setup.md\n```\n\n## License\n\nCopyright is licensed under the GNU General Public License v3.0. See [LICENSE](LICENSE).\n\nThis project is not affiliated with or endorsed by Apple, OpenAI, or Rogue Amoeba.\n"}