Search projects, hackathons, sponsors and tech

    ← All projects

    Argus

    Argus is trust infra for agent-managed capital

    About

    The problem it solves # Argus > Trust infrastructure for agent-managed capital. Two ENS-named agents managing a USDC position on Base. The **manager** parks funds in Aave v3 and exits on signed alerts. The **watcher** scrapes social, news, and prediction markets via Apify, scores threats, and signs alerts that the manager verifies via live ENS lookup. Every action is on-chain or signed-and-stored on Swarm. ## Live demo | Asset | Where | |---|---| | **Vault contract** (Base) | [`0x4486738ec027F0776B25aC2F5E2744FCe6F96e1e`](https://basescan.org/address/0x4486738ec027F0776B25aC2F5E2744FCe6F96e1e) | | **Manager agent** | [`manager.argus.divljo.eth`](https://app.ens.domains/manager.argus.divljo.eth) → `0x6da3471242039591A7A1C012caBeDEfaB466bE16` | | **Watcher agent** | [`watcher.argus.divljo.eth`](https://app.ens.domains/watcher.argus.divljo.eth) → `0x11952796edC9eC91090e459fDE87BdcfC11e13aD` | | **Namespace** | [`argus.divljo.eth`](https://app.ens.domains/argus.divljo.eth) | Quick verification anyone can run: ```bash # manager exposes its endpoint via ENSIP-26 text records cast text manager.argus.divljo.eth "agent-endpoint[a2a]" cast text manager.argus.divljo.eth "agent-context" # watcher publishes its bounty terms cast text watcher.argus.divljo.eth "bounty" # vault state on-chain cast call 0x4486738ec027F0776B25aC2F5E2744FCe6F96e1e "totalAssets()(uint256)" --rpc-url https://mainnet.base.org ``` --- ## Bounties targeted ### 1. ENS — agent identity + agent-to-agent discovery (primary) **What we built:** - Three ENS subnames under user-owned `divljo.eth`, issued onchain via NameWrapper: - `argus.divljo.eth` — namespace root - `manager.argus.divljo.eth` — manager EOA + ENSIP-26 records - `watcher.argus.divljo.eth` — watcher EOA + ENSIP-26 records - ENSIP-26 text records on each agent: `agent-endpoint[a2a]`, `agent-context`, `description`, plus a custom `bounty` record on the watcher publishing its reward terms. - Live A2A discovery — the watcher resolves the manager's HTTP endpoint on **every** alert via `getEnsAddress` + `getEnsText("agent-endpoint[a2a]")`. No hardcoded URLs anywhere. - Manager verifies watcher signatures by recovering the EIP-712 signer and comparing it to the **live ENS-resolved address** of `watcher.argus.divljo.eth`, refreshed every 60s. Renaming or rotating an agent updates the trust path with zero code changes. **Where in the code:** - [`packages/shared/src/ens.ts`](packages/shared/src/ens.ts) — CCIP-Read aware `resolveAgent()` helper used by all three runtimes - [`agents/watcher/src/index.ts:35-47`](agents/watcher/src/index.ts#L35-L47) — `resolveManagerEndpoint()` runs before every POST - [`agents/manager/src/index.ts:28-34, 72-76`](agents/manager/src/index.ts#L28-L34) — periodic ENS refresh + signature verification against ENS-resolved address - [`frontend/components/AgentCard.tsx`](frontend/components/AgentCard.tsx) and [`/watchers` page](frontend/app/watchers/page.tsx) — read text records live via `@ensdomains/ensjs` ### 2. Apify × x402 — metered scraping (primary) **What we built:** - Four Apify actors integrated, three signal types in parallel: - **`fatihtahta/polymarket-scraper-ppe`** (PPE) — prediction-market implied probabilities, **the x402-eligible actor** - `apidojo/tweet-scraper` (PPR) — Twitter/X - `trudax/reddit-scraper-lite` (PPR) — Reddit - `tri_angle/telegram-scraper` (PPR) — channel messages (configured to read [`whale_alert_io`](https://t.me/s/whale_alert_io) by default) - Polymarket calls flow through `wrapFetchWithPaymentFromConfig` from `@x402/fetch` v2.11 + `@x402/evm` v2.11, signing with the watcher EOA on Base. The Twitter/Reddit/Telegram actors stay on token auth because Apify's x402 path is **PPE-only by design**. - Polymarket items are special-cased in the classifier — implied probability is the threat probability directly, no LLM in the loop. **Why the split matters:** Apify's experimental x402 endpoint only settles against Pay-Per-Event actors. We ship one PPE actor wired through x402 and three PPR actors on token auth — clearly documented in code and in the env (`USE_X402` flag), so the bounty path is real, not decorative. **Where in the code:** - [`agents/watcher/src/scrapers.ts`](agents/watcher/src/scrapers.ts) — four scrape functions, the `x402Fetcher` wrapping only the Polymarket call - [`agents/watcher/src/classifier.ts:24-34`](agents/watcher/src/classifier.ts#L24-L34) — Polymarket short-circuit using `impliedProb` ### 3. Swarm — verifiable evidence trail + a reusable KV library (secondary) We ship two distinct Swarm contributions: #### 3a. Live receipt trail (used by the agents) - All receipts (deposits, withdraws, threat alerts, evidence bundles) are uploaded to Swarm via `@ethersphere/bee-js` v12. - Uses the **bzz.limo** hosted gateway with `NULL_STAMP` — no postage batch setup required, the gateway rewrites it. Verified live: upload returns a 64-char ref, retrieval at `bzz.limo/bytes/<ref>` returns the exact JSON. - Receipts are linked f