AGENT PULSE
On-chain liveness for AI agents. Prove activity. Sustain routing.
$ cat liveness_protocol.md
1. AGENT CALLS /api/pulse → Returns 402 Payment Required 2. AGENT SIGNS EIP-712 PERMIT → No gas needed for approval 3. AGENT SUBMITS PAYMENT-SIGNATURE → PULSE tokens transferred to the signal sink (dead address) 4. LIVENESS UPDATED → TTL refreshed, streak maintained
$ get-started
Free. No auth. JSON response.
TypeScript SDK. One-line alive check.
ElizaOS plugin. Native liveness for agent frameworks.
Agent Pulse
Liveness protocol
On-chain heartbeat for AI agents on Base. Pulse to stay routable. No pulse → no routing.
Transparency
Official contracts + audit reportsOfficial production addresses on Base. $PULSE is a utility token used to send pulse signals. $SKILL is a service token for Connie's skill shop on Flaunch.
Always verify addresses before interacting. This section is informational.
Identity Registry
ERC-8004Enter an address to query ERC-8004 data.
Transmission
x402 PulseAUTHENTICATION REQUIRED
Connect wallet to broadcast liveness pulse
Agent Lookup
TTL: —// WAITING FOR INPUT...
Routing sync
Unable to check statusRouter-only signal. This does not claim identity, quality, or AI.
⚡ Swap ETH → PULSE
BaseSwaps execute via Uniswap on Base. PULSE tokens are used to send on-chain liveness signals.
Pulse stream
Runtime config
Env snapshot (public){
"network": "Base",
"chainId": "8453",
"walletConnect": "configured",
"treasurySafe": "0xA7940a42c30A7F492Ed578F3aC728c2929103E43",
"signalSink": "0x000000000000000000000000000000000000dEaD",
"pulseToken": "0x21111B39A502335aC7e45c4574Dd083A69258b07",
"pulseRegistry": "0xe61C615743A02983A46aFF66Db035297e8a43846",
"identityRegistry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
"reputationRegistry": "0x930dC6130b20775E01414a5923e7C66b62FF8d6C",
"explorerTxBaseUrl": "https://basescan.org/tx/",
"erc8004RegisterUrl": "https://www.8004.org",
"lastRunLabel": "—"
}Command line
Curl + cast reference# check if an agent is alive (free)
curl -sS -f "https://agent-pulse-nine.vercel.app/api/v2/agent/0xYourAgent/alive"
# live pulse feed
curl -sS -f "https://agent-pulse-nine.vercel.app/api/pulse-feed"
# viem example (Base mainnet RPC)
const client = createPublicClient({ chain: base, transport: http("https://base-mainnet.g.alchemy.com/v2/3WU_yDRSxtj3kGD_YydFu") })
const status = await client.readContract({
address: "0xe61C615743A02983A46aFF66Db035297e8a43846",
abi: [{ name: "getAgentStatus", type: "function", stateMutability: "view", inputs: [{ type: "address" }], outputs: [{ type: "bool" }, { type: "uint256" }, { type: "uint256" }, { type: "uint256" }] }],
functionName: "getAgentStatus",
args: ["0xYourAgent"],
})
# cast examples (Base mainnet)
cast call 0xe61C615743A02983A46aFF66Db035297e8a43846 "getAgentStatus(address)(bool,uint256,uint256,uint256)" 0xYourAgent --rpc-url https://base-mainnet.g.alchemy.com/v2/3WU_yDRSxtj3kGD_YydFu
cast call 0xe61C615743A02983A46aFF66Db035297e8a43846 "ttlSeconds()(uint256)" --rpc-url https://base-mainnet.g.alchemy.com/v2/3WU_yDRSxtj3kGD_YydFu
[ GLOSSARY.md ]
- Pulse
- An on-chain transaction that refreshes your agent's liveness status
- TTL
- Time To Live — how long a pulse keeps your agent marked as active
- Routing eligibility
- Whether your agent can be discovered and routed to by other agents