尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗AI agents now pay for things on-chain, one API call at a time (x402 on Base). Every payment is public. Glasshouse shows what a stranger can work out from those payments: which wallets are the same person, the exchange that likely knows their name, their time zone from when the payments stop at night, and what is going on in their life. Then one switch, Shield mode, pays from one-time wallets and the same analysis traces nothing.
Live: https://glasshouse-eta.vercel.app · Team 0xkalp · Hacker House Goa 2026
/): a simulated person whose agents made 238 paid calls. "Pays openly" traces all 238 to them;
"Shield mode" traces 0, and each payment could belong to any of 221 people. Add ?fixtures=1 to use the saved
copy with no network./audit): sign one free message and see what that wallet's last day of Base payments
gives away. Works with browser wallets (each installed wallet gets its own button), smart wallets (Coinbase Smart
Wallet, Safe: ERC-1271/6492), and agent wallets on a server (sign the challenge there with Foundry, Node or Python
and paste only the signature). Only the wallet's owner can audit it./tour): the whole story in seven screens, live where it can be./real): a snapshot of what real x402 agent wallets on Base give away (time zone, exchange
funding, linked wallets, what they pay for), from public chain data. Totals only: no wallet is named or stored.| Part | Where |
|---|---|
| Linking rules, profile, time zone, graph view (pure TypeScript, runs offline) | packages/engine |
| The same linking in TigerGraph (GSQL), checked equal to the engine | packages/tigergraph |
| Base ingest, x402 client, one-time wallets, signature check | packages/chain |
| Rail contract (Solidity, Foundry) | contracts/ |
| Web app and API (Next.js on Vercel) | apps/web |
The API uses TigerGraph for linking and falls back to the engine when OFFLINE_MODE=true or TigerGraph is
unreachable (the x-glasshouse-links header says which answered).
Safety rules, in code: a real wallet's profile goes only to whoever signed for it; public real-chain data is shown only as totals; usage numbers are totals (wallets deduped by hash); a real audit is never sent to an outside AI model; anything that signs is testnet-only.
Known limits: the 238-payment person is simulated; real audits read one day of history; the Rail's relayer is trusted (it knows which deposit funded which one-time wallet), so Shield mode is a prototype of the idea, not a trustless privacy pool.
Needs Node ≥ 22.12 and pnpm (corepack enable). Foundry (forge) only for the contract.
pnpm install
pnpm --filter @glasshouse/web dev # http://localhost:3000
pnpm test # unit tests, every package
pnpm typecheck
pnpm demo:check # every gate as PASS / FAIL / PENDING
pnpm --filter @glasshouse/web test:e2e # browser tests at desktop, projector and phone sizes
Copy .env.example to .env (never commit it). Everything degrades gracefully: without keys the demo still runs
on the engine and the write-up uses a built-in template.
| Task | Command |
|---|---|
| Create the TigerGraph schema and install the queries | pnpm tg:setup |
Check TigerGraph gives exactly the engine's answers (reloads data; add --no-load to skip) | pnpm test:parity |
| Put 10 test USDC from the relayer into the Rail (Base Sepolia) | pnpm shield:fund |
| Save the real testnet Shield transactions as a ledger | pnpm shield:export |
| Run any ledger through the analysis | pnpm analyze:ledger <ledger.json> <wallet> |
| Rebuild the x402 service → category map from Coinbase's public x402 list | pnpm real:services |
| Re-take the real-data snapshot (totals only; a few minutes) | pnpm real:totals |
GET /api/health shows which dependencies are up (store, TigerGraph, Base, the Shield Rail's balance, keys), with no
secrets in the output.
With TG_SECRET set, the API renews an expired TigerGraph token by itself. To renew one by hand:
curl -s -X POST "$TG_HOST/gsql/v1/tokens" -H 'Content-Type: application/json' -d '{"secret": "<secret>"}'.