?

Invocation

rousseau [--config <path>] <command> [flags]

Every command reads defaults from ~/.config/rousseau/config.yaml (or the file passed via --config). Flags override env vars, env vars override the file, the file overrides hard-coded defaults.

Global flags

Flag Type Default Notes
--config string $XDG_CONFIG_HOME/rousseau/config.yaml Load configuration from this file. Absent means the default XDG path.
--help, -h bool Print help for the current command.

Command tree

rousseau
├── chat                Bubble Tea TUI
├── whatsapp            WhatsApp bridge (whatsmeow)
├── signal              Signal bridge (signal-cli JSON-RPC)
├── telegram            Telegram Bot API long-polling
├── matrix              Matrix client-server API
├── slack               Slack Socket Mode
├── discord             Discord Gateway
├── sms                 SMS send-only (Twilio / Vonage)
├── imessage            BlueBubbles-backed iMessage bridge
├── email               IMAP inbound + SMTP outbound
├── mcp                 MCP JSON-RPC 2.0 server over stdio
├── cron                Manage scheduled prompts
├── session             Inspect / delete session store
├── skills              List / show / lint skills
├── doctor              Diagnose the local installation
├── status              Print daemon status
├── init                Write a default config to ~/.config/rousseau/
└── version             Print version, commit, build date

rousseau chat

Open the interactive Bubble Tea TUI.

Flag Type Default Notes
--session string Resume an existing session by ID.
--title string timestamp Title for a new session.

rousseau whatsapp

Run the WhatsApp bridge. Prints a QR code on first launch.

Flag Type Default Notes
--store string $XDG_DATA_HOME/rousseau/whatsapp.db Path to the whatsmeow device store.
--allow []string none Restrict inbound handling to these JIDs. Repeatable. Never leave empty on a public number.

rousseau signal

Run the Signal bridge. Spawns signal-cli jsonRpc as a subprocess.

Flag Type Default Notes
--account string from signal.account E.164 phone number the daemon runs as.
--binary string signal-cli Path to the signal-cli executable.
--allow []string none Restrict inbound to these E.164 numbers.

rousseau telegram

Run the Telegram Bot API long-poller.

Flag Type Default Notes
--token string from telegram.token BotFather token.
--allow []string none Restrict inbound to these chat IDs.

rousseau matrix

Run the Matrix bridge.

Flag Type Default Notes
--homeserver-url string from config e.g. https://matrix.org.
--access-token string from config Bot's access token.
--user-id string from config Bot's Matrix user ID (@bot:matrix.org).
--allow []string none Restrict inbound to these user IDs.

rousseau slack

Run the Slack Socket Mode bridge.

Flag Type Default Notes
--app-token string from config xapp-... Socket Mode token.
--bot-token string from config xoxb-... Bot User OAuth token.
--allow []string none Restrict inbound to these Slack user IDs.

rousseau discord

Run the Discord Gateway bridge.

Flag Type Default Notes
--token string from config Bot token.
--allow []string none Restrict inbound to these Discord user IDs.

rousseau sms

Send-only SMS via Twilio or Vonage. No inbound.

Flag Type Default Notes
--provider string from config twilio or vonage.
--from string from config E.164 sender number.
--account-sid string from config Twilio Account SID.
--auth-token string from config Twilio auth token or Vonage secret.
--api-key string from config Vonage API key.

rousseau imessage

BlueBubbles-backed iMessage bridge.

Flag Type Default Notes
--base-url string http://localhost:1234 BlueBubbles server URL.
--password string from config BlueBubbles server password.
--chat-guid string from config Outbound target.
--poll-interval duration 5s How often to poll for new messages.
--allow []string none Restrict inbound.

rousseau email

Email bridge over IMAP + SMTP.

Flag Type Default Notes
--imap-addr string from config e.g. imap.example.com:993.
--imap-username, --imap-password string from config IMAP credentials.
--smtp-addr string from config e.g. smtp.example.com:587.
--smtp-username, --smtp-password string from config SMTP credentials.
--from string from config Envelope sender.
--poll-interval duration 30s IMAP poll cadence.
--allow []string none Restrict inbound sender addresses.

rousseau mcp

Start the MCP server on stdio. No flags — every knob lives in config.yaml.

rousseau cron

Subcommand Description
cron add Add a scheduled prompt. Flags: --name, --schedule (5-field cron), --prompt, --deliver-to.
cron list List every job with on/off status and last-run timestamp.
cron remove <name-or-id> Delete a job.
cron enable <name-or-id> Enable a disabled job.
cron disable <name-or-id> Disable an enabled job (without deleting).

rousseau session

Subcommand Description
session list List sessions in the store, newest first.
session search <query> FTS5 search across every session's message content.
session show <id> Print a session's message history.
session delete <id> Delete a session.

rousseau skills

Subcommand Description
skills list List discovered skills from skills_dir.
skills show <name> Print a skill's YAML front-matter and body.
skills lint Validate skills for schema conformance.

rousseau doctor

Walk every runtime dependency and every config choice. Prints a status report with rows tagged ok, warn, fail, info. Exit code 1 if any row is fail.

No flags today; extend via --config at the global level.

rousseau status

Print a compact daemon-status summary — provider, session count, cron jobs. Read-only.

rousseau init

Write a default config.yaml to ~/.config/rousseau/. Refuses to overwrite an existing file unless --force is passed.

Flag Type Default Notes
--force bool false Overwrite an existing config.

rousseau version

Print version, commit hash, and build date. Stamped at build time via -ldflags.

Exit codes

Code Meaning
0 Command completed successfully.
1 Command failed. Error is printed to stderr.

See Reference: Exit Codes for the daemon signal semantics.

Environment variables

Every config field can be overridden by an environment variable using the ROUSSEAU_ prefix and _ as the section separator: ROUSSEAU_LOG_LEVEL=debug, ROUSSEAU_ANTHROPIC_API_KEY=sk-ant-..., etc.

The special case is ANTHROPIC_API_KEY (without prefix) — it is picked up directly by the config loader to match convention.

Troubleshooting

unknown command when passing a subcommand

Rousseau's subcommands are declared in internal/cli/root.go. If rousseau <cmd> reports unknown, either the flag is misspelled or you are on an older binary. rousseau version shows what you have.

Repeatable flags need multiple invocations

--allow accepts one JID per flag. Repeat the flag for multiple values: --allow A --allow B, not --allow A,B.

Env vars silently ignored

Rousseau uses ROUSSEAU_ prefix + underscore section separator: anthropic.model becomes ROUSSEAU_ANTHROPIC_MODEL. Case matters.

rousseau chat shows only a blank screen

The Bubble Tea TUI needs an ANSI-capable terminal. Set TERM=xterm-256color and run interactively (not under nohup or a pipe).

Command exits 0 immediately

Some flags (--help, --version variants) short-circuit. If your command doesn't run, check the flags you passed.

Related pages

Further reading

  • internal/cli/root.go — the Cobra tree.
  • internal/cli/chat.go, internal/cli/whatsapp.go, internal/cli/slack.go, … — one file per subcommand.
  • internal/config/config.go — env var / flag resolution.

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