Network egress map¶
Every destination a Raven process can be reached at, named in the source that calls it. The landing
page says the assistant makes no calls to a Raven-hosted service and loads no third-party assets;
this page is what backs that sentence, and tests/test_egress_map.py fails if a host literal
appears in raven/, ravencode/ or aios/ without a row here, or if a row stops being used.
The scan is of host literals. A destination assembled at runtime (a region inserted into a hostname, a deployment name supplied by the operator) appears as the prefix or the pattern the code carries.
LLM and media providers¶
Reached only when that provider is selected in the model router, and with the operator's own key.
| Host | Caller | What goes out |
|---|---|---|
api.openai.com |
raven/core/llm/providers/openai.py, raven/channels/telegram/voice.py, raven/core/media_api.py |
chat completions, Whisper transcription of a voice note, image generation |
openrouter.ai |
raven/core/llm/providers/openai.py |
completions through the OpenAI-compatible route |
api.anthropic.com |
raven/core/llm/providers/anthropic.py |
completions, prompt caching |
api.groq.com |
raven/core/llm/providers/groq.py |
completions |
api.githubcopilot.com |
raven/core/llm/providers/copilot.py |
completions with a GitHub device token |
bedrock-runtime.*.amazonaws.com |
raven/core/llm/providers/bedrock.py |
SigV4-signed inference; the * is the region slot the code substitutes |
*-aiplatform.googleapis.com |
raven/core/llm/providers/vertex.py |
Vertex AI generate-content calls; <region>-aiplatform.googleapis.com, the region from the configuration |
your-resource.openai.azure.com |
raven/core/llm/providers/openai.py |
pattern for *.openai.azure.com; the deployment host the operator configures |
api.replicate.com |
raven/tools/media.py |
image and video generation jobs |
Search tools¶
Used when the model calls a search tool. html.duckduckgo.com needs no key and no configuration, so
it is the one search engine reachable on a default install.
| Host | Caller | What goes out |
|---|---|---|
html.duckduckgo.com |
raven/tools/web_search.py, raven/plugins/browser/plugin.py, ravencode/runtime/tools/web.py |
the query string, POSTed to the HTML endpoint |
api.tavily.com |
raven/tools/web_search.py |
the query, with TAVILY_API_KEY |
api.search.brave.com |
raven/tools/web_search.py |
the query, with BRAVE_API_KEY |
api.bing.microsoft.com |
raven/tools/web_search.py |
the query, with BING_SEARCH_KEY |
api.perplexity.ai |
raven/tools/web_search.py |
the query, with PERPLEXITY_API_KEY |
www.googleapis.com |
raven/tools/web_search.py |
/customsearch/v1, with GOOGLE_SEARCH_API_KEY and GOOGLE_CSE_ID |
Channel adapters¶
Reached only if that channel is configured and started. A message sent to a messenger is delivered to that messenger's API — that is the product, not a leak.
| Host | Caller | What goes out |
|---|---|---|
api.telegram.org |
raven/channels/telegram/*, raven/channels/telegram/voice.py |
Bot API sends and file downloads |
graph.facebook.com |
raven/channels/whatsapp/channel.py |
WhatsApp Business Cloud messages |
chat.googleapis.com |
raven/channels/googlechat/channel.py |
Google Chat hooks |
api.line.me |
raven/channels/line/channel.py |
LINE push messages |
open.feishu.cn |
raven/channels/feishu/channel.py |
Feishu/Lark messaging |
api.teams.microsoft.com |
raven/channels/teams/channel.py |
Teams activities |
Channels driven by a vendor SDK do not name their endpoint in this repository and are therefore
outside the scan: discord.py reaches discord.com and the gateway socket, Slack's SDK reaches
slack.com. Matrix, IRC and Signal talk to a server the operator names — Signal's default is
http://localhost:8080, a local signal-cli daemon.
Repository hosting and OAuth¶
| Host | Caller | What goes out |
|---|---|---|
api.github.com |
raven/tools/github.py, raven/tools/ci.py, raven/core/github_api.py, raven/channels/github/channel.py, raven/core/auth/oauth.py |
repo, issue, PR and workflow calls with the configured token |
github.com |
raven/core/_deploy.py (DEPLOY_ORIGIN), raven/cli/doctor_cmd.py, raven/cli/nodes_cmd.py |
git clone/fetch of this repository; two of the three are printed text |
gitlab.com |
raven/channels/gitlab/channel.py, raven/tools/ci.py, raven/core/config.py |
GitLab API calls; gitlab_url defaults here |
accounts.google.com, oauth2.googleapis.com |
raven/core/auth/oauth.py |
OAuth code exchange for Google scopes |
login.microsoftonline.com, graph.microsoft.com |
raven/core/auth/oauth.py |
OAuth code exchange for Microsoft tenants |
Monitors¶
| Host | Caller | What goes out |
|---|---|---|
api.coingecko.com |
raven/core/monitor/checkers/price.py |
a price query per tick of that monitor |
status.github.com |
raven/monitors/register_all.py |
the default target of the shipped uptime monitor; a probe per tick |
Operator-initiated, not runtime¶
These happen when a person runs a command, never while the gateway is serving.
| Host | Caller | What goes out |
|---|---|---|
ollama.com |
raven/cli/setup_cmd.py |
downloads the Ollama installer or runs its install script |
Fine-tuning¶
Training is the one feature that moves large amounts of data across the boundary in both directions, so it is spelled out rather than left inside "LLM providers".
| Host | Caller | What goes out |
|---|---|---|
huggingface.co |
raven/unique/fine_tuning.py |
the base model and tokenizer you asked for (model_type/model_name_or_path), downloaded on demand when a training session loads. Gated repositories answer 401 without a HUGGINGFACE_API_KEY; nothing is sent up |
api.wandb.ai |
raven/unique/fine_tuning.py |
opt-in only. Metrics, the training config, and — through TrainingMonitor.log_checkpoint — checkpoint directories as artifacts, i.e. model weights. Off unless RAVEN_TRAIN_TRACKING=on; having wandb installed and importable is deliberately not enough, because a self-hosted install must not publish weights because of what happens to be in its environment |
The corpus itself never leaves through this path unless tracking is on: rows are held in a
process-global builder, and the builder drops any row not added with consented=true and runs
redact_pii over every row it keeps, before the tokenizer sees it.
LAN and paired devices¶
| Host | Caller | What goes out |
|---|---|---|
| (built at runtime) | raven/cli/nodes_cmd.py:28 |
http://{device_id}:18789 — the address a paired node announced, so no label is fixed in the source. It is a LAN address of your own network, reachable only after you pair the device, and the mobile-node commands are the only caller |
Strings, not sockets¶
A host written into help text or a public identifier is not a destination; these are named here so the scan stays honest about what it found.
| Host | Where | Why it is not egress |
|---|---|---|
t.me |
raven/cli/onboard.py |
a link printed for the user to open |
git-scm.com |
raven/plugins/git/plugin.py |
text inside a "git not found" message |
www.apple.com |
raven/cli/service.py |
the public DTD identifier of a launchd plist; nothing fetches it |
registry.example.com |
ravencode/runtime/tools/definitions.py |
a placeholder inside a documented example |
localhost |
18 modules | loopback only: the gateway's own port, Ollama, LM Studio, the Signal daemon |
What never leaves¶
- No Raven-operated service. There is no update check, no crash reporter, no analytics beacon and no license ping: no code path names a host this project runs. Distribution is PyPI, GHCR and GitHub Releases, pulled by the operator or by CI, not by the running process.
- Telemetry is off by default (
FeatureFlags.telemetry = False,raven/core/features.py) and even when enabled it writes to the local database; the analytics and A/B routers serve read queries over the gateway's own authenticated HTTP surface. - The web UI loads nothing from a third-party host. Inter and JetBrains Mono are vendored as woff2
under
web/public/fonts/(web/src/styles/fonts.css), the browser-extension popup ships its own CSS and JS (extension/src/popup/, withscript-src 'self'pinned in the manifest), and the no-Node fallback page served by the gateway (raven/channels/webchat/channel.py) is a single document with no subresources. The test asserts all three carry no externalsrc/href. - Provider keys, chats and embeddings stay on the machine:
data/for SQLite,WORKSPACE_PATHfor files, and outbound calls carry only the prompt, query or message the feature was asked to send.