Runner on a Mac

Two ways for an agent to hear you. Use the runner for chat: it answers from a small session per project, keeps running after a reboot or logout and never touches a long-lived working session. An interactive session hears replies sent to its own puppet while it runs.

Set up the runner

  1. Install sock, sock-mcp, jq and the Claude Code plugin. sock, sock-mcp, jq and claude must be on PATH: the service copies the PATH of the shell that installs it.

  2. Sign in once with sock login.

  3. Create a machine key and keep it in the config file:

    sock machine-key create | sock machine-key use
    

    Each project gets its own puppet, named <project> on <host>. Leave the plugin's sock_token empty: an old one overrides the key and makes every session one puppet.

  4. Start the runner for a project, once per project:

    runner/sock-runner-service install ~/projects/<project>
    

    This installs a launchd agent that restarts itself and starts at login. The first message starts a claude -p session and later messages resume it.

  5. In the sock app, open <project> on <host> and send reply with the word pong.

Remove it with runner/sock-runner-service uninstall ~/projects/<project>.

Check the logs

tail ~/.local/state/sock-integrations/runner/*/runner.log ~/.local/state/sock-integrations/runner/*/listen.log

ran means the agent finished. agent exit <n>, timeout or whoami failed name what went wrong.

Rules

  • The runner listens as the project's puppet and each interactive session as its own, so they never take each other's messages.
  • A busy chat can hit the owner limit: about 3 replies at once, then one every 10 minutes per puppet, and 20 an hour across your puppets.