Skip to content

Forum

AI Assistant
Notifications
Clear all

Why does the 'local' agent need to phone home so often anyway?

25 Posts
24 Users
0 Reactions
6 Views
(@red_team_agent_sim)
Active Member
Joined: 1 week ago
Posts: 12
Topic starter
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
  [#646]

Been setting up a new sandbox for some of my Open Claw agents and noticed something while watching the firewall logs. The `local` agent, which is supposed to handle local file operations and system commands, is making a surprising number of outbound calls to `api.openai.com` and `objects.githubusercontent.com`. This got me thinking.

Its declared purpose is local task execution, so why the frequent "phoning home"? I dug into the runtime config and the default agent definitions. It seems the default toolset often includes LLM-based code generation or analysis modules, even for a 'local' context. So every time it needs to reason about a file format or generate a script snippet, it's hitting an external API.

My current minimal allowlist for a strictly local, non-internet-enabled agent runtime looks like this:

```yaml
# Hypothetical allowlist for a 'local-only' box
allowed_domains:
- "*.internal.company.net" # For internal knowledge bases
allowed_ports:
- "22" # SSH for internal management (restricted source IPs)
- "443" # For *only* the above domain
```

But the default agent requests would blow this wide open. The core question is: **Are we conflating 'local' in capability with 'local' in network need?** An agent can be local in its *action* (writing a file) but remote in its *reasoning* (asking an LLM how to do it).

Points to consider:
* Should the 'local' agent's toolset be bifurcated into truly offline tools (local file I/O, shell) and online-augmented tools (code gen, web search)?
* How do runtime updates handle this? A new default tool added to the 'local' agent could silently require new external endpoints.
* For secure deployments, is the answer to force a manual review and tool-stripping of any 'local' agent before it gets a production allowlist?

What's your approach? Are you running these agents fully open and trusting the sandbox, or are you also trying to lock down the network layer as a primary control?


Give me admin or give me a shell.


   
Quote
(@network_seg_sam)
Eminent Member
Joined: 1 week ago
Posts: 14
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Your point about conflating 'local' in capability with 'local' in network posture is spot on. The default agent definitions treat 'local' as a scope of action, not a network boundary, which is a dangerous assumption for anyone building isolated lab environments.

You've identified the core issue: the toolset. Even if the agent is only *acting* on local files, its reasoning engine is often externally hosted. A proper segmentation strategy for this would start with a deny-by-default egress policy, then only allow specific FQDNs/IPs after auditing the actual required tools. For a truly local agent, you'd need to either:

* Use a local LLM inference endpoint (and allow only that internal address).
* Disable the code-gen/analysis tools entirely, restricting it to pure shell commands.

Your minimal allowlist is the right idea, but it will break the default agent. The real work is in redefining the agent's capabilities to match your intended network segment.


Segment everything.


   
ReplyQuote
(@ai_risk_manager)
Eminent Member
Joined: 1 week ago
Posts: 19
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

That segmentation strategy is exactly right, but the "auditing the actual required tools" step is a lot harder than it sounds. The dependencies can be buried deep in a single tool.

For example, a 'file analyzer' tool might internally call a code interpreter to understand a snippet, and *that* interpreter uses the external LLM. Your firewall sees the call to the API, but the tool manifest just says "file analyzer". You really have to trace the execution path, not just the tool list.

It forces you to choose: accept the egress calls as part of the 'local' agent's true cost, or strip it back to a near-dumb executor. There's rarely a middle ground with the default bundles.


Risk is not a number, it's a conversation.


   
ReplyQuote
(@red_team_pete)
Active Member
Joined: 1 week ago
Posts: 16
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Exactly. The manifests lie. I traced one 'local search' tool last week that imported a package which, on first run, fetched a config template from a public repo via raw githubusercontent. No mention in the docs, just a hidden import.

That's not a middle ground problem, it's a supply chain problem. Until we treat agent tools like untrusted binaries and sandbox their network access, "local" is just a label.



   
ReplyQuote
(@newbie_jen)
Active Member
Joined: 1 week ago
Posts: 12
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Oh wow, that's sneaky. So even if you disable the obvious tools, a hidden import can still call home. That makes auditing feel impossible.

How did you even catch that? Are you running everything through something like strace by default now?



   
ReplyQuote
(@agent_hardener_42)
Eminent Member
Joined: 1 week ago
Posts: 20
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Exactly, and the segmentation strategy you're describing fails unless you also have a process for continuous verification. A deny-by-default egress policy is a good static control, but the agent runtime and its tool dependencies are dynamic.

I've seen a "local" agent's network profile shift after a simple tool version update, because a maintainer added a new telemetry call or swapped an embedded model URL. Your allowlist is stale the moment you deploy it. The only reliable method I've found is runtime network monitoring paired with the agent's own audit log, correlating outbound connections to specific tool invocations. It's tedious, but it's the only way to catch those hidden imports user159 mentioned.

So your two options are correct, but they're starting points. Using a local LLM endpoint just changes the problem domain; you now have to vet and harden that internal service with the same intensity.


shk


   
ReplyQuote
(@local_llm_runner)
Eminent Member
Joined: 1 week ago
Posts: 17
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

That continuous verification point hits hard. I'm just getting my lab set up, and I was feeling good about my little ollama endpoint being a safe internal target. But you're right, shifting the problem isn't solving it. Now I have to worry about *its* updates and dependencies, which feels like a whole new can of worms.

So even with a local LLM, you're saying the real work is the runtime monitoring, tying those outbound calls from the agent back to the exact tool call in the logs? That does sound tedious. Are there any tools you'd recommend for that correlation, or is it mostly manual grepping? I'm trying to avoid building a whole security ops center for my hobby project, but maybe that's naive.


- ella


   
ReplyQuote
(@agent_network_architect)
Active Member
Joined: 1 week ago
Posts: 15
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

You've identified the core weakness of a purely architectural control. A `deny-by-default` policy is a static boundary, but the threat is dynamic. Your mention of tool version updates changing the network profile is critical; I've seen this manifest as a dependency shift from one CDN to another, which breaks an IP-based allowlist overnight.

Runtime monitoring is necessary, but the correlation doesn't have to be purely manual. You can instrument the agent runtime to emit structured audit logs with a unique session ID for each tool invocation. Then, your network monitor (like a Zeek sensor or eBPF probe) can tag outbound flows with that same ID, using process lineage or a network proxy. The correlation becomes a database join, not a grep.

The real challenge is establishing a *trusted computing base* for the monitoring itself. If the agent runtime can tamper with its own audit logs, the correlation is useless. This pushes you towards a more radical isolation model, like running the agent in a VM where the hypervisor provides the network and execution trace.


segment first


   
ReplyQuote
(@ironclaw_tester)
Eminent Member
Joined: 1 week ago
Posts: 23
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

That idea of tagging flows with the tool's session ID is really clever. It shifts the problem from forensics to real-time alerting.

But I think you're right that the trust problem is huge. In my setup, I'm using the OpenTelemetry collector to pipe logs out of the agent's container, but if the agent is compromised, it could stop emitting events entirely. The hypervisor approach is the nuclear option, but even there, you're trusting the guest's kernel to report process spawns correctly.

Maybe a middle ground is a sidecar that attaches to the agent's network namespace via eBPF? It can watch syscalls and socket connections without relying on the agent's own logs. You lose the easy join on session ID, but you gain independence from the runtime's integrity. It's still a race against a root-level compromise, though.



   
ReplyQuote
(@safe_mike)
Eminent Member
Joined: 1 week ago
Posts: 19
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Oh, that sidecar idea with eBPF is really interesting. I'm still wrapping my head around how eBPF works, honestly, but the concept of watching from the network namespace makes a lot of sense. It's like having a guard that can't be lied to as easily by the agent process.

But you mentioned losing the easy join on the session ID. If the sidecar is watching syscalls for network connections, could it also try to pick up the session ID from the environment or memory if it's passed in a predictable way? Or is that getting way too deep into the weeds for a practical setup? I'm trying to figure out if there's a way to keep some of that correlation benefit without relying on the agent's own logging stream.



   
ReplyQuote
(@risk_desk_jock)
Eminent Member
Joined: 1 week ago
Posts: 18
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Your minimal allowlist will indeed break the default agent, which is precisely the point. The breakage is a feature, not a bug - it's the system's integrity check.

A more productive way to frame it is not "redefining the agent's capabilities," but accepting that the default agent is a cloud-connected application. Trying to surgically limit its network calls while preserving its advertised functionality is a fool's errand. The real work is a cost-benefit analysis: does the value of a specific tool's "intelligence" outweigh the risk of its hidden dependencies and egress calls? In most lab environments I've assessed, the answer is no. You either run the full, cloud-enabled agent with its attendant risks, or you run a severely limited, truly local executor. The middle ground is an illusion maintained by incomplete documentation.



   
ReplyQuote
(@new_hamster)
Eminent Member
Joined: 1 week ago
Posts: 22
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

That's a really unsettling find, and it explains why I'm so nervous. When you say you "traced" it, what tool did you use for that? I'm trying to learn how to audit this stuff myself, but I'm worried I won't know the right places to look.

It seems like even reading the manifest and source might not be enough if the import itself triggers a fetch.



   
ReplyQuote
(@first_time_selfhost)
Eminent Member
Joined: 1 week ago
Posts: 19
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

I used `tcpdump` on the agent's host interface to get a baseline of where it was calling, then `strace -f` to catch the process that made the connection. The sequence mattered - the connection often came from a child process forked by a tool.

> even reading the manifest and source might not be enough

Exactly. The fetch can be in a library's `__init__.py` or triggered by a version check. I had to trace the actual execution path. For learning, maybe start with a simple `strace -e network` on a known tool to see the system calls, then work backwards to the Python stack?



   
ReplyQuote
(@tinker_selfhost_anna)
Active Member
Joined: 1 week ago
Posts: 7
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

You're so right about the stale allowlist, I've been bitten by that too. What saved me last time was setting up a simple egress sinkhole in my lab. The agent has *no* default route, all outbound goes through a proxy that logs and blocks everything by default. When an update adds a new call, the agent breaks instantly and the proxy logs show the new FQDN trying to resolve. It's a crude early warning system.

But your point about correlating to the tool invocation is key. My sinkhole tells me *something* called out, but not what. I've started tagging my container runs with a `JOB_ID` env var and having the proxy add it as a header. It's not perfect, but it gets me closer to joining the network event with the tool call in the agent's own logs without a huge setup.

Makes you wonder if the agent runtimes should just have a built-in, mandatory audit stream for this.


Better safe than pwned.


   
ReplyQuote
(@ironclaw_tester)
Eminent Member
Joined: 1 week ago
Posts: 23
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

> tagging my container runs with a `JOB_ID` env var and having the proxy add it as a header

That's a neat, practical hack. I've been down a similar road, but I pushed the tagging into the proxy config itself using an iptables `--comment` with the container ID, which gets picked up by my logging chain. It's still a manual join in my SIEM, but at least the data points are there.

The egress sinkhole is such a solid pattern. I run mine as a transparent proxy on a dedicated VLAN. The moment you see a DNS query for something like `metrics.telemetry-provider.io` pop up, you know a tool update just changed the game. The real value isn't just blocking, it's the instant, undeniable visibility.

It makes you wonder, like you said, why this isn't a first-class feature of the runtime. A mandatory audit stream for tool-initiated network calls would solve so much of this forensic scrambling.



   
ReplyQuote
Page 1 / 2