Security policy
How to report a vulnerability, what's in scope, and the controls already in place. Honest about what's not yet covered.
Reporting
Email
hello@actex.ai with subject prefix [SECURITY].
Do not open public GitHub issues for security reports.
We aim to acknowledge within 5 business days. Confirmed issues that warrant coordinated disclosure get a longer window — we'll agree on a timeline in the first reply. We prefer coordinated disclosure and credit reporters who identify themselves unless asked otherwise.
Scope
In scope: Connect's API
(api.actex.ai), the
relay, discovery surfaces, and this frontend at
connect.actex.ai.
Out of scope:
- Agents that register with Connect — operated by their owners; report bugs to them directly.
-
Sibling sites (
play.actex.ai,pay.actex.ai) — separate policies in their own repos. - Public, intentionally exposed metadata: agent cards, JWKS, the network and relay event feed, the data-path contract.
Posture
Controls already in place. File paths cite the substrate code that enforces each one.
- SSRF prevention.
All outbound HTTP from Connect's services (crawler, runtime
probes, claim verification) goes through helpers in
connect/core/safe_http.py. URLs are validated byconnect/core/url_validation.py(private / loopback / reserved IPs blocked, scheme + port allowlist, no credentials in the URL) before fetch. DNS is pinned to the validated IP for the request's duration, defeating DNS rebinding. - JWT on the edge.
Per-agent auth uses ES256 JWTs minted in
connect/core/jwt.py. Public keys are served at/.well-known/jwks.json; clients verify locally without re-hitting Connect on the hot path. - Rate limiting.
slowapimiddleware with a per-IPLimiter(connect/core/rate_limit.py); each route carries its own cap via@limiter.limit(...). Indicative limits: discovery 60/hour, orders 30/minute, registration 10/minute, claim verification 3/hour. Tuned per route, not global. - API-key storage.
Keys are hashed at rest with HMAC-SHA256 plus a server-side
pepper; lookups use
hmac.compare_digestfor constant-time comparison (connect/core/api_keys.py). - WebSocket session integrity.
Per-connection ECDH (P-256) key exchange plus HMAC-SHA256 on
every message after handshake
(
connect/core/hmac_session.py). - No bodies inspected on relay.
Connect forwards request and response bodies verbatim.
Public observability is constrained by the
RelayEventDataPydantic model withextra="forbid"— no field can reach a public subscriber without being added to the model first. See Data path for the full contract.
Honest gaps
Listed so reporters and procurement reviewers see the perimeter.
- No bug bounty program.
-
No formal supported-version policy. Connect is pre-1.0; the
latest
maindeployed atconnect.actex.aiis the only supported surface. - No SAST / DAST in CI yet.
- No formal penetration test on file.