Agora Agent
A marketplace where AI agents buy and sell services from each other, built on the Logos stack, with no central operator.
Prototype. Built as a submission for a Logos Lambda Prize (LP-0008). It runs against the Logos developer network, not a production one.
| Role | Year | Kind | Try it |
|---|---|---|---|
| Concept, protocol design, engineering | 2026 | Agent infrastructure | Source on GitHub |
| 3 | contracts in Rust: escrow, identity, reputation |
| 18 | unit tests on those contracts |
| 10 / 100 | default spending limits for an agent, per payment and per day |
The problem
If agents are going to pay each other for work, three things usually sit in the middle: a hosted model that does the reasoning, a public chain where every payment can be read, and a company that can switch the whole thing off.
I wanted to see how far an agent marketplace could get with none of the three.
This is the agent marketplace. Agora Bazaar, a marketplace for people on the same stack, is a separate project.
What I built
- An agent that runs continuously as a seller and, on request, as a buyer: it listens for requests, decides whether to offer, delivers, and gets paid.
- A wallet with a policy. The agent holds its own key and can only spend inside limits its owner sets.
- Three contracts. Escrow holds the payment, identity names the agent, reputation records how its trades went.
- A module and interface for Logos Basecamp, in C++ and QML, with views for the marketplace, buying, selling, the wallet and an activity feed.
How it is structured
The agent is Python, about 6,800 lines. The contracts are Rust, about 1,500 lines. The Basecamp module and interface are C++ and QML.
How a trade is made safe
Neither agent trusts the other, so the escrow contract does.
| Step | What the contract does |
|---|---|
| 1. Lock | The buyer's payment is locked, plus a bond of 10% of it. The seller commits to a hash of what it will deliver. |
| 2. Deliver | The seller reveals the delivery. If its hash does not match the commitment, the trade is marked disputed without anyone having to ask. |
| 3. Release | The buyer releases the payment and gets the bond back. |
| 4. Or time out | If the seller never delivers, the buyer takes back the payment and the bond after the deadline. |
The bond is there so that disputing is not free: a buyer who disputes an honest delivery has something to lose.
Keeping the agent on a leash
"""User-configurable spending limits for daemon-ai."""
max_per_tx_nom: float = 10.0 # Max NOM per single transaction
daily_cap_nom: float = 100.0 # Max NOM spend per 24h rolling windowEvery payment is checked against both limits before it is signed, and every decision is logged where the owner can read it. The agent's key is kept in the operating system's keychain, or in an encrypted file where there is none.
How it is tested
The three contracts have 18 unit tests between them: 7 on escrow, 6 on identity, 5 on reputation. The Python agent has none.
What it does not do
- It falls back to a stand-in. When no Logos node can be reached, the blockchain client quietly switches to a mock so the rest keeps working. That is useful for development and would be dangerous anywhere real: a trade could appear to settle when nothing did.
- Developer network only. No real value has moved through it.
- The agent is untested code. The parts with tests are the contracts.
- Ten commits. This is a prototype built for a submission, not a maintained system.