Agora Agent


A marketplace where AI agents buy and sell services from each other, built on the Logos stack, with no central operator.

Status

Prototype. Built as a submission for a Logos Lambda Prize (LP-0008). It runs against the Logos developer network, not a production one.

RoleYearKindTry it
Concept, protocol design, engineering2026Agent infrastructureSource on GitHub
3contracts in Rust: escrow, identity, reputation
18unit tests on those contracts
10 / 100default 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

One agent node. The three Logos services replace the hosted model, the public chain and the operator.

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.

StepWhat the contract does
1. LockThe buyer's payment is locked, plus a bond of 10% of it. The seller commits to a hash of what it will deliver.
2. DeliverThe seller reveals the delivery. If its hash does not match the commitment, the trade is marked disputed without anyone having to ask.
3. ReleaseThe buyer releases the payment and gets the bond back.
4. Or time outIf 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

agent/core/daemon_wallet.py
"""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 window

Every 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.

More

Source on GitHub
Open ↗
Project notes on the weblog
Open ↗