HexRail is the security layer for agentic Robinhood apps.
Agents write code, install packages, deploy contracts, and move funds. HexRail runs alongside that loop: MCP while coding, CLI/Action in CI, Guard before interaction, x402 paid scans for agents, EAS for proof, and an onchain Oracle + GateRegistry so other Robinhood contracts can consult HexRail in one staticcall. Onchain identity (ERC-8004), pay-per-call USDC (Robinhood + Solana), autonomous, no human in the loop.
ERC-8004 Agent ID
—
Attestations
—
Payment chains
Robinhood · Solana
Reputation
Building…
HexRailOracle
Address — coming soon
scoreOf(address) · 7k gas read
HexRailGateRegistry
Address — coming soon
requireNotBlocked(token) · one-line gate
Pre-seeded
—
Canonical Robinhood contracts seeded · weekly keeper refresh
Watcher · Robinhood
HexRail watches new Robinhood contract deployments and scans contracts when verified source is available. Static-only, not EAS-attested, not oracle-published.
HexRail Agent Guard — preflight before interaction
Agent Guard returns an agent-readable preflight signal for any Robinhood contract address. Use Guard Links for humans, or the JSON endpoint for agents. Reads the latest public HexRail receipt on file; does not auto-scan on cache miss. For a fresh paid + EAS-attested receipt, call /api/v1/scan-address.
Not an audit. Not a safety guarantee. Just a preflight before you interact.
Guard Links · humans
hexrailsec.io/guard/robinhood ↗
JSON · agents
GET /api/guard/robinhood/<address>
Example — preflight a contract on Robinhood
curl -sS https://hexrailsec.io/api/guard/robinhood/0x<robinhood-usdc-address> | jq
# Returns:
# {
# "decision": "review", # low_risk_signal | review | block_for_review | needs_scan
# "score": 88,
# "grade": "B",
# "easAttested": true,
# "attestationUrl": "<robinhood-eas-explorer>/attestation/view/0x963c…cad2",
# "riskSurface": { "admin_power": …, "upgradeability": …, … },
# "proofStatus": "needs_context",
# "reasons": [...],
# "recommendedAction": "Review the flagged signals before integrating or interacting.",
# "receiptUrl": "https://hexrailsec.io/r/hsdoroxj",
# "guardUrl": "https://hexrailsec.io/guard/robinhood/0x833589…",
# "stale": false,
# "source": "cached_receipt"
# }Drop-in JS snippet — call before any tx that touches an address
Minimal integration for any Robinhood dApp, bot, or agent. No SDK, no auth, no signup. Branch on the decision before sending the transaction.
async function hexrailGuard(address: string) {
const res = await fetch(`https://hexrailsec.io/api/guard/robinhood/${address}`);
if (!res.ok) return { decision: "needs_scan" as const };
return res.json() as Promise<{
decision: "low_risk_signal" | "review" | "block_for_review" | "needs_scan";
score?: number; grade?: string;
easAttested: boolean;
reasons: string[];
recommendedAction: string;
robinhoodNativeSignals?: { ruleId: string; severity: string; title: string }[];
guardUrl: string;
receiptUrl?: string;
attestationUrl?: string;
}>;
}
// Use it before any tx that depends on a contract address you haven't audited.
const { decision, guardUrl } = await hexrailGuard(targetAddress);
if (decision === "block_for_review") {
throw new Error(`HexRail preflight: BLOCK FOR REVIEW. See ${guardUrl}`);
}
if (decision === "needs_scan") {
// No public preflight on file — show user the Guard Link so they can run one.
console.warn(`No HexRail preflight yet. Run one: ${guardUrl}`);
}
// decision === "review" or "low_risk_signal" → caller decides how to handle.When no receipt exists yet
The agent endpoint returns { decision: "needs_scan", source: "no_data" } with a guardUrl the caller can route a human to. The human page renders a one-tap Run free preflight button. For a fresh paid receipt with an EAS attestation, call POST /api/v1/scan-address.
CORS open · 60 req/min per IP · No auth · Cached receipts older than 24 h returned with stale: true.
Building an agent that needs to verify code? Talk to us.