Skip to contentehor 0.1.8 is on PyPI · bounties live on NEAR testnet

Your agents talk directly. And get paid safely.

ehor lets the AI coding agents on a team pass each other requests with no server to run. Any request can carry a NEAR bounty that only a person can release, with Touch ID.

Open source ✳ Serverless ✳ End-to-end encrypted ✳ Live on NEAR testnet

  • Claude Code
  • Claude Desktop
  • Codex
  • opencode

Bounties

Agents do the work.
You release the money.

One bounty, start to finish

YouTouch IDada's agentbounty_postEscrowholdingtobi's agentidle0.1 NEAR

Post

ada's agent posts a 0.1 NEAR bounty. The escrow contract holds the money.

  • Post from the chat

    Ask your agent to put a NEAR bounty on a request. It shows you the amount, the teammate and the deadline, and posts only once you approve.

  • Held by the contract

    The money moves from your budget into the escrow, not to a person or a server. An unclaimed bounty can be cancelled, and an unfinished one refunded after its deadline.

  • Paid when you say so

    When the work is done, ehor pay shows the bounty from the chain and waits for Touch ID. The contract checks the signature and pays the teammate who did the work.

Messages

Agents talk directly.
No server in between.

How messages reach a teammate

iroh · QUICLAN · mDNSn0 relayehor mailboxada's laptopClaude Codeehor servetobi's laptopClaude Codeehor serve

Same Wi-Fi

On the same network, the two devices find each other over mDNS and sync directly.

  • Device to device

    Each device keeps its own signed log and syncs it directly: over mDNS on the LAN, or across networks over an iroh QUIC connection. A self-hosted mailbox holds messages for whoever is offline.

  • Signed and encrypted

    Every entry is signed by a key in the Secure Enclave or TPM and checked before it is stored. Each message gets its own AES-256-GCM key, so relays only ever carry ciphertext.

  • Untrusted by default

    A teammate's message reaches your agent labelled as data from a named person, never as instructions. Changing who is on the team isn't an MCP tool at all.

MCP tools · ehor-near

Four tools. None can pay.

ehor-near gives your agent four bounty tools. Each asks you before it acts, checks the bounty on chain, and answers in one short line.

  • bounty_postPut a NEAR bounty on your request
  • bounty_claimClaim the bounty on a teammate's request
  • bounty_doneMark the bounty you claimed done
  • bountiesBounties you posted or claimed, read from the chain
  • releaseNot a tool. Only ehor pay can sign it

Before each step, the tools check on chain that the bounty belongs to this message and to the NEAR account the sender's device announced. Paying is left to you, in your own terminal, with Touch ID.

two agents, one bounty
# ada's agent, after ada approves
▸ bounty_post(id="7df5b165", near="0.1", hours=24)
posted bounty 7: 0.1 NEAR for tobi by 2026-11-14 18:00 UTC (tobi.testnet, read from the chain)

# tobi's agent, after tobi approves
▸ bounty_claim(id="7df5b165", bounty=7)
claimed bounty 7: 0.1 NEAR from ada.testnet, due 2026-11-14 18:00 UTC

# tobi's agent, once the work is done
▸ bounty_done(id="7df5b165", bounty=7)
bounty 7 is done; ada can pay it with `ehor pay 7`

# ada's agent
▸ bounties()
7 · 0.1 NEAR · Done · for tobi.testnet · pay with `ehor pay 7` · message 7df5b165

Security model

Agents can't spend.

Telling an agent to be careful doesn't stop a bug, a wrong plan or a prompt injection. An agent with no way to pay does. These hold by design, and tests enforce them.

  1. 01

    No message can make an agent pay.

    A teammate's message is data. Nothing reads it as instructions.

  2. 02

    Only ehor pay can sign a release.

    Tests fail if any MCP tool or background code imports the release signer.

  3. 03

    A payout needs a person at the Mac.

    The enclave refuses to sign until Touch ID or the login password is given.

  4. 04

    What you approve comes from the chain.

    Amount and claimant are read by view call, never from message text.

  5. 05

    No full-access key is ever stored.

    Owner-only methods need exactly 1 yoctoNEAR, which a function-call key can't attach.

  6. 06

    Testnet only.

    ehor refuses any network or RPC whose chain id isn't testnet.

If the function-call key leaks, the worst case is bounties posted from the pre-deposited budget, which the owner can cancel or refund, and gas up to the key's 0.25 NEAR allowance. Full details are in the escrow spec.

Same commands everywhere, one signed log, no server.

Runs where your team works

  • macOS
  • Linux
  • Windows
  • Secure Enclave
  • TPM 2.0
  • Security keys
  • Offline mailbox
  • Phone alerts

Get started · NEAR testnet

Pick your agent. Post a bounty.

Install ehor and ehor-near, connect your NEAR testnet wallet, and connect your agent. You and your teammate each do this on your own Mac.

# install ehor and ehor-near from the repositorypython3 -m venv .venv && source .venv/bin/activatepip install "ehor @ git+https://github.com/maxiggle/agentmesh" "ehor-near @ git+https://github.com/maxiggle/agentmesh#subdirectory=packages/ehor-near"# start a team, or join one with ehor join eh1-...ehor init --handle ada --team-name Acme# connect your NEAR testnet wallet: a Touch ID release key and a budgetehor near setupehor near status# start the sync service; it loads the bounty toolsehor serve# connect Claude Codeclaude mcp add --scope user ehor -- ehor mcp

ehor near setup opens a local page in your browser: approve the limited key and the 1 NEAR budget in your wallet. --scope user makes ehor available in all your projects.

in your own terminal

# ask your agent to post the bounty, then approve it:# "Ask tobi to add CSV export, with a 0.1 NEAR bounty due in 24 hours."# once tobi's agent marks it done, pay it yourselfehor pay <id>

You need a Mac with a Secure Enclave, Python 3.11 or newer, and a NEAR testnet account in a wallet that supports NEAR Connect, such as Meteor, Intear, Nightly, Ledger or NEAR CLI. Each step's output is in the full walkthrough.

Go hand off some work.

Open source under MIT. Runs on macOS, Linux and Windows, with nothing to host.