The commitment
Rousseau-agent ships zero telemetry. The list of things rousseau explicitly does not do:
- No analytics endpoint. There is no
metrics.rousseau-agent.devor equivalent. - No crash-report upload. Panics land in stderr; nothing is uploaded anywhere.
- No license server. There is no periodic check-in and no seat verification.
- No unique installation identifier. The binary is byte-identical across every install of the same tag.
- No feature-flag service. Every switch in rousseau is in
config.yamlor a CLI flag. - No update ping.
rousseau versionis a local lookup; there is no "checking for updates" round trip.
How to verify
The rousseau binary is open source (MIT, see LICENSE). Every network call is grep-able:
grep -rn 'http.Get\|http.Post\|http.Client\|http.NewRequest\|net/http' \
/path/to/rousseau-agent/internal/ | head
Every hit lands in one of these categories:
| Package | Purpose |
|---|---|
internal/llm/anthropic/ |
Anthropic API calls (via the official SDK). |
internal/llm/openai/ |
OpenAI-compatible endpoint calls. |
internal/transport/telegram/ |
Telegram Bot API. |
internal/transport/matrix/ |
Matrix client-server API. |
internal/transport/whatsapp/ |
Whatsmeow websockets to Meta. |
internal/transport/slack/, discord/ |
Socket Mode / Discord Gateway. |
internal/transport/imessage/ |
BlueBubbles server (on your LAN). |
internal/transport/sms/ |
Twilio / Vonage. |
internal/transport/email/ |
IMAP + SMTP. |
None of them are analytics endpoints. Every one is either the LLM provider you configured or the transport you enabled.
Run the daemon under strace -e network or watch it with ss -tanp — the only sockets you will see are to the endpoints listed above.
Structured logging is local
Rousseau uses log/slog (internal/cli/root.go). By default the handler writes to stderr, which under the Quadlet unit lands in the systemd journal. Nothing is streamed off-host. If you want to ship logs to Loki, Datadog, or elsewhere, you configure that pipeline yourself — see Guides: Observability.
Comparison
| Product | Analytics | Crash upload | License server |
|---|---|---|---|
| rousseau-agent | none | none | none |
| Vendor A (typical SaaS coding assistant) | yes | yes | yes |
| Vendor B (managed control plane) | yes | opt-out | yes |
Rousseau's operating model is: you bring the LLM key, you host the daemon. There is no piece of rousseau that runs on servers Sebastien controls.
What rousseau does send to LLM providers
By definition, when you route messages through Anthropic, Bedrock, Vertex, OpenAI, or any other API, that provider sees the message content. This is inherent to how LLM inference works — rousseau is a client, not a shim.
Two mitigations if the provider's data-handling matters to you:
- Run against a self-hosted model. Ollama, vLLM, LM Studio, or any OpenAI-compatible endpoint. Nothing leaves your machine. See Guides: Self-hosted vLLM.
- Use Bedrock or Vertex in a region with a data-processing addendum. Both AWS and GCP publish per-region data-residency guarantees.
What the WhatsApp bridge sees
The unofficial WhatsApp Web protocol implemented by whatsmeow speaks to Meta's servers — that traffic is outside rousseau's control. Meta sees your messages the same way it does when you use WhatsApp Web from a browser. If Meta seeing your messages is not acceptable, do not run the WhatsApp bridge.
The whatsmeow client is publicly auditable — every packet is documented; there are no rousseau-specific network calls layered on top.
Related
- Security — trust boundaries and audit posture.
- Privacy — the site-level privacy posture.
- Providers: OpenAI-compatible — self-hosted inference.
- Guides: Self-hosted vLLM — a worked example.