?

Overview

You're on a train, you had an idea, you dictate a voice note. Rousseau transcribes it with whisper, edits the file on your workstation via the bind-mounted workspace, and replies with a summary. Session picks up where you left it thanks to --session.

Prerequisites

  • WhatsApp paired and confirmed (rousseau whatsapp at least once).
  • whisper (whisper.cpp CLI) installed on the daemon host.
  • Workspace bind mount (/workspace) with the repo you're editing.
  • Any provider that handles tool-use — claudecli if you have Claude Code, anthropic otherwise.

Config

provider: claudecli

agent:
  max_iterations: 40
  approver:
    mode: pattern
    default: deny
    allow:
      - {tool: read,  match: ".*"}
      - {tool: grep,  match: ".*"}
      - {tool: edit,  match: "^/workspace/.*"}
      - {tool: write, match: "^/workspace/.*"}
      - {tool: bash,  match: "^(git (log|diff|status|add [^&|;`$]+|commit -m)|go test ./...|npm test)"}
    deny:
      - {tool: bash,  match: "rm|sudo|git push"}

whatsapp:
  reply_header: ""
  voice:
    enabled: true
    binary: /usr/local/bin/whisper
    model: base.en
    language: en

The approver:

  • edit/write scoped to /workspace — the container sees nothing else.
  • bash limited to safe git + test invocations.
  • git push explicitly denied — pushing decisions belong to a human.

Launch

# In the Podman quadlet, or bare metal:
rousseau whatsapp --allow 447900123456@s.whatsapp.net

Verification

  • Send a text: "Read /workspace/README.md and give me a one-line summary." — reply lands within 5 s.
  • Send a voice note: "Add a docstring to the main function in server.go" — whisper transcribes, the file is edited, git status shows the change.
  • rousseau session list --limit 3 shows the pair session.

Failure modes

  • Voice notes silently droppedwhatsapp.voice.enabled: false or whisper binary missing. rousseau doctor catches both.
  • Edits fail with "unique-string constraint violated" — the built-in edit tool refuses when the search string appears more than once (a safety rail). Include more surrounding context.
  • Transcription in the wrong language — set whatsapp.voice.language explicitly instead of relying on auto-detect.

Related pages

Type to search 150+ pages. Ranking: BM25 with title/description boost.