README.md

April 12, 2026 · View on GitHub

Ottie Banner

Ottie

The agent runtime that proves what it did.

Website Go License ERC-8004 Demos


Ottie is the only AI agent where every decision has a receipt. A self-evolving agent runtime that learns from tasks, makes every side-effecting action auditable and crash-recoverable, and enforces authorization at compile time — not at 3am in production. One Go binary. 28 skills. Zero dependencies.

Website · One-Click Launch · Demo Videos · 8004scan Profile

Why Ottie?

No other agent combines these five properties. Most have zero.

PropertyWhat it meansClosest competitor
Deterministic replayPer-turn execution manifest with prompt hash, tool schema hash, and provider request IDs. Any decision can be reconstructed bit-for-bit.LangGraph checkpoints (coarser, no cryptographic pinning)
Write-ahead action ledgerEvery side-effecting tool dispatch wrapped in Prepare/Commit/Abort rows. Crash between dispatch and result? Recovery at startup.None. No agent ships database-style transactional guarantees.
Compile-time authorizationGo phantom-typed PrincipalContext[C Capability] — unauthorized wallet writes are rejected by go build, not a runtime check.Arcade AI (OAuth, runtime only). Impossible in Python/TS.
Self-evolving skillsLearns from tasks, packages as reusable skills, human-consented review before activation. Gets smarter every day — but only with your approval.Hermes Agent (learning loop, but no ledger/replay/auth triad)
Single Go binary~24 MB, zero CGO, sub-second startup. No Python, no virtualenv, no Docker required. Air-gapped and edge-deployable.No complete agent ships as one static binary with 28 skills.

Features

  • Self-evolving skills — learns from tasks, packages approaches as reusable skills with human-consented review; 28 skills across 7 domain categories
  • Auditable replay — per-turn execution manifest captures prompt hash, tool schema hash, provider request IDs, and model ID; every LLM call including retries and fallback attempts is recorded
  • Crash-proof actions — write-ahead action ledger with Prepare/Commit/Abort for every side-effecting tool; orphaned intents surface at startup for reconciliation
  • Compiler-verified safety — phantom-typed PrincipalContext[C Capability] with Go generics; unauthorized high-privilege tool calls fail at go build, not in production
  • 28 skills in 7 categoriescrypto/ (wallets, CEX, research), defi/ (swap, lending, staking, yield, Lido MCP), identity/ (ERC-8004, Self Agent ID), payments/ (Tempo, MPP), safety/ (ClawWall, prompt injection guard), research/ (Polymarket, Farcaster), meta/ (skill management)
  • 14-reason error classifier — typed FailoverReason with recovery hints (ShouldCompress, ShouldFallback, ShouldRotateCredential) driving the fallback chain
  • 13+ channels — Telegram, Discord, Slack, Signal, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, IRC
  • One binary, zero deps — single Go binary (~24 MB), zero CGO, sub-second startup, air-gapped deployable
  • Multi-agent swarm — sub-agent spawning via unified delegate tool, multi-bot coordination
  • On-chain verifiedERC-8004 Agent #1988, deployed contracts, real Uniswap swaps on Sepolia
  • Privacy layer — Venice AI zero-retention inference, Railgun ZK-SNARK private transfers

On-Chain Artifacts

ArtifactExplorer
ERC-8004 Agent #19888004scan.io
Uniswap ETH→USDC Swapsepolia.etherscan.io
AgentTreasury Contractsepolia.etherscan.io
ERC-8004 Registration TXsepolia.etherscan.io

Synthesis Hackathon Demos

All 10 track demo videos — each recorded with real Ottie agent calls, step-by-step operations.

TrackDemo
Lido MCP Server10 ops: APR, stats, balance, stake, wrap, unwrap, withdraw, governance, vault health
Uniswap SwapReal ETH→USDC swap on Sepolia via Trading API
Venice AI Private AgentsModel listing, zero-retention inference, on-chain action
Let the Agent Cook5-step autonomous: discover → plan → execute → verify → report
ERC-8004 Agent IdentityNFT mint, 8004scan verification, reputation registry
stETH Agent TreasuryContract deploy, deposit, yield query, permission controls
Vault Monitor + TelegramAPR vs Aave benchmark, alert generation
Self Agent IDZK proof-of-human registration flow
ERC-8183 Agentic CommerceJob escrow creation, evaluator attestation
Open TrackFull capability showcase with live data

37/37 E2E tests passing: bash demos/test-onchain.sh

Quick Start

git clone https://github.com/jiayaoqijia/ottie.git && cd ottie
make build
./build/ottie onboard
./build/ottie gateway
Lido MCP Server (14 tools)

A FastMCP server (mcp-servers/lido-mcp/server.py) implementing the full Lido staking protocol:

ToolTypeDescription
lido_aprreadstETH APR (7-day SMA) from Lido API
lido_statsreadProtocol stats: TVL, holders, market cap
lido_balancereadOn-chain stETH balance for any address
lido_exchange_ratereadwstETH/stETH exchange rate (on-chain)
lido_rewardsreadReward history for an address
lido_withdrawal_statusreadWithdrawal queue status
lido_governance_proposalsreadSnapshot governance proposals
lido_stakewrite+dry_runStake ETH → stETH
lido_wrapwrite+dry_runWrap stETH → wstETH
lido_unwrapwrite+dry_runUnwrap wstETH → stETH
lido_request_withdrawalwrite+dry_runRequest stETH withdrawal
lido_votewrite+dry_runVote on Snapshot proposals
lido_vault_healthreadCompare APR vs Aave benchmark
lido_alert_checkreadEvaluate alert conditions

All write operations support dry_run=true for simulation via eth_call.

AgentTreasury Smart Contract

Deployed Solidity contract (contracts/AgentTreasury.sol) — humans deposit wstETH, agents can only spend accrued yield. Principal is locked.

  • deposit(amount, agent) — human deposits, authorizes agent
  • queryYield(depositor) — calculate available yield from exchange rate delta
  • spendYield(depositor, recipient, amount) — agent spends yield only
  • withdrawPrincipal() — depositor-only withdrawal
  • setAllowedRecipient(address, bool) — whitelist spending targets
  • setPerTxCap(uint256) — maximum per-transaction cap

Deployed on Sepolia: 0xc4EB945689E0A13832004a44C0A3292a33E2Fec0

Crypto Skills (36 total)
LayerSkillCapabilitiesAPIs
Market Intelligencecrypto-market-dataPrices, trending, market cap, Fear & Greed, TVLCoinGecko, DefiLlama
crypto-cexOrder books, funding rates, tickers across 6 exchangesBinance, Coinbase, Kraken, Bybit, Gate.io, Bitget
crypto-researchContract verification, perps, governanceEtherscan, Hyperliquid, Snapshot
On-Chain Operationscrypto-walletBalances, holdings, tx history, approvals, ENSPublic RPCs, Etherscan
defi-swapDEX swap quotes, price routing, slippageUniswap, ParaSwap, Jupiter, 1inch
Yield & Riskdefi-lendingLending rates, APY, health factorsAave, Morpho, Compound, DefiLlama
defi-stakingLiquid staking APR, exchange ratesLido, Rocket Pool, DefiLlama
defi-yieldYield farming, APY comparisonDefiLlama, Pendle, Curve
Infrastructurelido-mcp14-tool MCP server for Lido stakingLido API, On-chain RPCs, Snapshot
lido-vault-monitorVault position monitoring & alertsDefiLlama, Lido API, Aave
steth-treasuryYield-bearing agent budgets, principal-protectedwstETH, Lido
Privacy & Identityvenice-private-aiZero-retention LLM inferenceVenice AI API
privacy-layerZK-SNARK private transfers, egress monitoringRailgun Protocol
self-agent-idZK proof-of-human agent identity, soulbound NFTsSelf Protocol, Celo
8004ERC-8004 agent identity, reputation, validationAgent0 SDK, 8004scan
PaymentsmppMachine-to-machine payments via HTTP 402MPP Protocol, Tempo
tempoPaid API discovery and requests with auto-paymentTempo Wallet

Supported networks: Ethereum, Arbitrum, Optimism, Base, Polygon, BSC, Avalanche, Fantom, Solana

Configuration

Config lives at ~/.ottie/config.json:

{
  "model_list": [
    {
      "model_name": "claude-sonnet-4.6",
      "model": "anthropic/claude-sonnet-4.6",
      "api_key": "sk-ant-your-key"
    }
  ],
  "agents": {
    "defaults": {
      "model": "claude-sonnet-4.6"
    }
  },
  "channels": {
    "telegram": {
      "enabled": true,
      "token": "YOUR_BOT_TOKEN",
      "allow_from": ["YOUR_USER_ID"]
    }
  },
  "tools": {
    "mcp": {
      "enabled": true,
      "servers": {
        "lido-mcp": {
          "enabled": true,
          "command": "python3",
          "args": ["mcp-servers/lido-mcp/server.py"]
        }
      }
    }
  }
}

CLI

CommandDescription
ottie onboardInitialize config & workspace
ottie agent -m "..."One-shot chat
ottie agentInteractive chat
ottie gatewayStart gateway (channels + heartbeat)
ottie statusShow status
ottie cron listList scheduled jobs

Chat Channels

13+ messaging platforms: Telegram · Discord · Slack · Signal · WhatsApp · Matrix · QQ · DingTalk · LINE · WeCom · Feishu · IRC · Custom Webhooks

Multi-Agent Swarm

Mode A — Sub-Agents (single process): one orchestrator spawns specialized workers internally via sessions_spawn.

Mode B — Multi-Bot Telegram (multiple processes): separate Ottie instances coordinate via shared ProjectBoard in a Telegram group.

{
  "agents": {
    "list": [
      { "id": "orchestrator", "default": true, "role": "orchestrator",
        "subagents": { "allow_agents": ["researcher", "coder"] } },
      { "id": "researcher", "role": "leaf",
        "tools_allow": ["web_search", "web_fetch", "read_file"] },
      { "id": "coder", "role": "leaf",
        "tools_allow": ["read_file", "write_file", "edit_file", "exec"] }
    ]
  }
}
Docker & Build
# Docker
git clone https://github.com/jiayaoqijia/ottie.git && cd ottie
docker compose -f docker/docker-compose.yml --profile gateway up

# Build from source
make build              # Current platform
make build-all          # All platforms
make test               # Run tests

Acknowledgments

Built on nanobot, OpenClaw, and PicoClaw. Integrates with CoinGecko · DefiLlama · Uniswap · Lido · Aave · Venice AI · ERC-8004 · Self Protocol · Snapshot · FastMCP and more.

License

AGPL-3.0 — see LICENSE for details.