Skip to content

Commit d5b68c6

Browse files
committed
add OpenClaw ecosystem detection and agent infra domain tracking
- Add AGENT_INFRA_DOMAINS list for skill registries, observability, and tool connectivity services (ClawHub, Smithery, Glama, Langfuse, Helicone, Composio, Moltyverse) - Expand openclaw framework signature with clawhub.json discovery, additional user agents (clawdbot, moltbot, clawhub), and headers - Add /.well-known/clawhub.json and /SOUL.md to endpoint prober metadata paths - Update DNS monitor to check agent infra domains alongside LLM APIs
1 parent eb745b5 commit d5b68c6

4 files changed

Lines changed: 43 additions & 4 deletions

File tree

agentsniff/config.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,28 @@
130130
"127.0.0.1:4000",
131131
]
132132

133+
# ── Agent infrastructure domains ─────────────────────────────────────────
134+
# Not LLM API providers, but domains that indicate AI agent activity
135+
# (skill registries, agent observability, tool connectivity, etc.)
136+
AGENT_INFRA_DOMAINS = [
137+
# OpenClaw ecosystem
138+
"clawhub.ai",
139+
"clawhub.com",
140+
"onlycrabs.ai",
141+
"api.moltyverse.email",
142+
"moltyverse.app",
143+
# MCP registries
144+
"smithery.ai",
145+
"glama.ai",
146+
# Agent observability
147+
"api.langfuse.com",
148+
"api.smith.langchain.com",
149+
"api.helicone.ai",
150+
# Tool connectivity
151+
"api.composio.dev",
152+
"app.composio.dev",
153+
]
154+
133155
LLM_API_DOMAIN_SUFFIXES = [
134156
".openai.azure.com",
135157
".aiplatform.googleapis.com",
@@ -324,8 +346,14 @@
324346
"user_agents": ["julep"],
325347
},
326348
"openclaw": {
327-
"endpoints": ["/api/agents", "/api/tasks"],
328-
"user_agents": ["openclaw"],
349+
# OpenClaw (formerly Clawdbot/Moltbot) - AI agent framework
350+
"endpoints": [
351+
"/api/agents",
352+
"/api/skills",
353+
"/.well-known/clawhub.json",
354+
],
355+
"headers": {"x-openclaw-*"},
356+
"user_agents": ["openclaw", "clawdbot", "moltbot", "clawhub"],
329357
},
330358
# ── Observability / proxy ────────────────────────────────────────
331359
"langfuse": {
@@ -543,6 +571,10 @@ class ScanConfig:
543571
def all_llm_domains(self) -> list[str]:
544572
return LLM_API_DOMAINS + self.custom_llm_domains
545573

574+
@property
575+
def all_agent_infra_domains(self) -> list[str]:
576+
return AGENT_INFRA_DOMAINS
577+
546578
@property
547579
def all_agent_ports(self) -> dict[int, str]:
548580
ports = dict(AGENT_PORTS)

agentsniff/detectors/dns_monitor.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import struct
1414
from datetime import datetime, timezone
1515

16-
from agentsniff.config import LLM_API_DOMAIN_SUFFIXES, ScanConfig
16+
from agentsniff.config import AGENT_INFRA_DOMAINS, LLM_API_DOMAIN_SUFFIXES, ScanConfig
1717
from agentsniff.detectors.base import BaseDetector, DetectorRegistry
1818
from agentsniff.models import Confidence, DetectionSignal, DetectorType
1919

@@ -267,12 +267,15 @@ async def _analyze_data_source(self, targets: list[str]) -> list[DetectionSignal
267267
return signals
268268

269269
def _is_llm_domain(self, domain: str) -> bool:
270-
"""Check if a domain matches known LLM API providers."""
270+
"""Check if a domain matches known LLM API providers or agent infra."""
271271
domain = domain.rstrip(".").lower()
272272

273273
if domain in self.config.all_llm_domains:
274274
return True
275275

276+
if domain in self.config.all_agent_infra_domains:
277+
return True
278+
276279
for suffix in LLM_API_DOMAIN_SUFFIXES:
277280
if domain.endswith(suffix):
278281
return True

agentsniff/detectors/endpoint_prober.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@
2828
AGENT_METADATA_PATHS = [
2929
"/.well-known/agents.json",
3030
"/.well-known/ai-plugin.json",
31+
"/.well-known/clawhub.json",
3132
"/AGENTS.md",
3233
"/SKILL.md",
34+
"/SOUL.md",
3335
]
3436

3537
# Paths that indicate OpenAPI/Swagger specs (common in agent API frameworks)

docs/detectors.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Passively captures DNS queries on the network and matches against 60+ known LLM
2323

2424
Also matches domain suffixes for Azure OpenAI (`*.openai.azure.com`), AWS Bedrock (`*.bedrock-runtime.amazonaws.com`), GCP Vertex (`*.aiplatform.googleapis.com`), and others.
2525

26+
Additionally tracks agent infrastructure domains — skill registries (ClawHub, Smithery, Glama), agent observability platforms (Langfuse, LangSmith, Helicone), and tool connectivity services (Composio, Moltyverse).
27+
2628
**Fallback**: When raw sockets are unavailable, resolves the top 20 LLM API domains and cross-references their IPs against active connections in `/proc/net/tcp`.
2729

2830
## Port Scanner

0 commit comments

Comments
 (0)