Search projects, hackathons, sponsors and tech

    ← All projects

    Graphitti

    A visual workflow builder for onchain and offchain automation

    Demo

    About

    Graphitti is an execution layer for AI agents with a visual workflow builder for onchain finance . You connect triggers, actions and plugin nodes on a canvas, run the workflow in the browser, then publish that same workflow as a paid marketplace listing. New users stay on the canvas. Developers and agents call it over HTTP or MCP. Teams share a Privy org treasury. The app never holds the private key. Watching the chain, sending USDC, and letting an agent call the flow still happen in three places. Ops checks Uniswap or a vault on a dashboard, signs from another wallet, and pastes an API key into Slack if a bot should run it. Someone either clicks every transfer, or the bot has no spend cap. Graphitti puts that work in one workflow. Kelp's April 2026 rsETH incident is what that looks like in practice. A forged LayerZero message released about 116,500 rsETH from the Ethereum OFT adapter with no matching burn on the source chain. Circulating supply went up. Collateral in the LRT vault did not. Unbacked rsETH was still being used as lending collateral while people compared dashboards. Graphitti does not patch Kelp. It watches the same invariant. From-scratch Substreams index mainnet backing and Arbitrum OFT supply every block and write the rows to Supabase backing_snapshots. The workflow reads the latest row. If supply is more than 50 bps above backing, it pages ops on Telegram so they can pause rsETH as collateral. If the numbers still match, it sends a backing-OK heartbeat so you know the monitor ran. Shipped examples include Uniswap large-swap Telegram alerts, the Kelp backing monitor, Arc DeFi treasury readiness, FPL top-two USDC payouts on Arc, Stripe invoices into Privy USDC, gasless contractor payroll, an Aave/Uniswap USDC keeper, and payroll that auto-sends at the cap then queues an intent. Eliza OS plugins (plugin-the-graph, plugin-privy) can search subgraphs and call the same listed workflows. Payroll and intents run on Base Sepolia USDC. Arc is Testnet for CCTP preflight and x402 marketplace settlement.

    How it's made

    The app is a Next.js 16 / React 19 canvas on React Flow, with Postgres and Drizzle for workflows, integrations, and Better Auth sessions. - A Privy embedded wallet is bound to that user. - Teams get a Privy org wallet on top, with a payee book, a 10 USDC auto cap, and transfer intents for anything larger. - Graphitti stores wallet ids, not keys. - Plugin steps talk to APIs with fetch. The same graph then runs from the browser, an HTTP route, MCP (search_workflows / call_workflow), or a Hub listing. The Graph is the read path. - Uniswap large-swap alerts hit Gateway GraphQL against a live Uniswap V3 Ethereum subgraph, so we did not have to index that protocol ourselves. - Kelp is the from-scratch piece. We wrote Substreams in Rust that, every Ethereum block, compare mainnet rsETH supply and LRTDepositPool collateral with Arbitrum OFT supply (the same invariant the April 2026 forged LayerZero mint broke). - Graph Studio would not take a Substreams-powered subgraph for that package, so we did not ship a fake subgraph. Two SQL sinks write into Supabase. A Postgres trigger merges the rows into backing_snapshots and sets should_alert above 50 bps. - The canvas only reads the latest row and Telegram-pages ops. Writes and settlement are split on purpose. - Payroll and intents use Privy wallet-actions on Base Sepolia USDC. - Bridge preflight and prize-pool sends use Circle CCTP and Arc Testnet (eip155:5042002). - Arc has two USDCs, which we had to treat separately: native gas USDC is 18 decimals, marketplace USDC is the 6-decimal ERC-20. - Paid listings return HTTP 402 with Circle Gateway nanopayments over x402. The caller signs EIP-3009 TransferWithAuthorization against GatewayWalletBatched and retries with PAYMENT-SIGNATURE. No long-lived API key. Owner wfb_ keys skip the payment gate so we can test our own listings. Eliza OS plugins (plugin-the-graph, plugin-privy) wrap the same catalogs we published as @graphitti/graph-core and @graphitti/privy-core, so an agent can search subgraphs and call a listed workflow without a second integration. - Stripe, Telegram, and the FPL API sit on that same plugin bus. - Docs are Mintlify. The production app is on Vercel.