Parley

Private interests. Shared outcomes.

An agent-native freight exchange: independent AI agents negotiate for buyers and carriers without revealing their limits, and the exchange clears every deal at once when a sailing is cancelled.

Fetch.ai Track Submission 🤖

ASI:One agent: @freight-parley

Complete ASI:One workflow: https://asi1.ai/chat/a29fb94a-6d10-44e6-85a1-b81e50511f65

GitHub: https://github.com/Parth-Dua/freight-recovery-exchange

Agents: six uAgents on Agentverse (Parley plus five carriers), and a private buyer agent for every buyer. Each one is a separate party with its own private information, not a sub-task of another.

Parley (@freight-parley): buyer-facing agent on ASI:One. Runs each buyer's negotiating agent, keeps their budget private, shows offers and approvals as interactive cards, and takes payment over the Agent Payment Protocol. Agentverse profile

Buyer agents: one per buyer, started by Parley for each request. Each holds only its own buyer's budget, priority and deadline, negotiates for that buyer alone, and never shares those limits with carriers or other buyers.

Carrier agents. Five fictional shipping companies, each with its own key and its own private pricing policy. They only accept signed requests from Parley, so they negotiate with Parley rather than chatting with the public.

Problem: When a sailing is cancelled, every business on board competes for the same few slots on the next ships, and nobody will reveal what they can actually pay or accept.

Target users: Freight buyers (shippers) and ocean carriers.

Outcome: Agents negotiate prices for their own side under private limits. The exchange verifies every offer against real capacity and clears all stranded bookings together, so more cargo makes its deadline.


Inspiration 💡

In August 2026, global container schedule reliability fell to 49.9%, and late vessels arrived 6.81 days behind schedule on average (Sea-Intelligence).

Picture a ship booked from Jebel Ali to Mumbai. A security advisory in the Strait of Hormuz cancels the sailing. Now several businesses need replacement space at the same time, on the same few ships.

That sounds like a matching problem, but every party is hiding something. A buyer knows the most it can pay and how badly the cargo needs to arrive. A carrier knows its lowest acceptable rate and how empty its ship is. Neither gains anything by telling the other.

A central optimizer could ask everyone for their private numbers. Real businesses won't hand those over. We wanted a market where they don't have to.

That raised a second problem: even if every agent gets a good deal for itself, the deals can add up to a bad outcome for everyone. Parley is built to solve both.

What it does 🚢

Parley is a two-sided freight market where agents negotiate independently and the exchange coordinates the result.

1. Every party gets its own agent

Buyers talk to @freight-parley in ASI:One. A form card collects the route, deadline, container count, a private budget and an auto-approve limit for disruptions. Their agent finds eligible carriers and negotiates.

Carriers each run their own agent with their own pricing policy: a floor, an opening price, how far to concede when the ship is empty or full, disruption surcharges, cargo rules. They set these from a carrier dashboard. Five fictional carriers run in our market, each with a different strategy.

Nobody sees the other side's limits. A carrier might open at $6,000 per container and settle at $5,500 because its ship is half empty. A buyer might counter at $5,300 without revealing its real maximum. Information comes out through offers, not up front.

2. Why negotiation alone isn't enough

Three buyers are stranded by the same cancellation:

  • Buyer A has two containers due by October 25.
  • Buyers B and C each have one container due by October 22.

Two ships have space:

  • Beacon: two slots, arrives October 22.
  • Cove: two slots, arrives October 24.

If Buyer A grabs Beacon first, B and C both miss their deadlines, even though A could have taken Cove and still arrived on time. Every agent acted rationally, and two businesses were stranded for nothing.

The best deal for one shipment isn't the best outcome for the market. So Parley separates negotiation from allocation: agents agree on terms, then the exchange allocates across all affected bookings using verified capacity and deadlines.

In our controlled test, first-come-first-served recovered 1 of 3 buyers. Coordinated clearing recovered 3 of 3.

3. Recovery runs on its own

When a carrier withdraws a sailing, Parley:

  1. Finds every stranded booking and the carriers that could take it.
  2. Opens agent-to-agent negotiations with those carriers, in parallel.
  3. Checks every offer against live vessel capacity in Tiger Data.
  4. Clears the market with Google OR-Tools across all affected buyers.
  5. Rebooks automatically when the extra cost is inside the buyer's pre-approved limit, and sends an approval card when it isn't.
  6. Takes payment for any fare difference, confirms the new booking with the carrier, and tells the buyer.

It doesn't just recommend another ship. It carries the recovery through to a confirmed booking.

4. One interface per participant

  • ASI:One, for buyers. Booking, offers, payment, cancellation alerts and approvals all happen in chat, through interactive cards.
  • Carrier dashboard, for shipping companies. Sailings and space with a live ship view, the pricing rules their agent negotiates within, a log of every move the agent made, and a risk map where they withdraw a sailing.
  • Mission Control, for everyone watching. A read-only view of negotiations in parallel, the disruption war room, allocations, and a Time Machine that replays past events from stored market data.

How we built it 🛠️

Fetch.ai: agents and communication

  • uAgents for the buyer gateway and all five carriers, each with its own identity and signing key.
  • ASI:One + Agent Chat Protocol as the buyer's only interface, with interactive cards for forms, offers and approvals.
  • Agentverse mailbox registration for the gateway.
  • Agent Payment Protocol for checkout: Stripe test mode in the demo, with testnet FET verification also implemented.
  • Negotiation messages are typed and signed, matched to their session, time-limited, and capped at a fixed number of counter-offer rounds. Every reply is checked for transport errors, parse errors, carrier identity, signature, correlation, freshness and offer constraints before it counts.

Google OR-Tools: clearing the market

A CP-SAT model enforces vessel capacity, delivery deadlines and shipment-splitting rules, and optimizes in priority order:

  1. Recover critical shipments.
  2. Recover as many bookings as possible.
  3. Need as few buyer approvals as possible.
  4. Keep the extra cost low.
  5. Arrive as early as possible.

We also built a first-come-first-served baseline to measure the difference.

Tiger Data: the referee between agents that don't trust each other

Six independent agents negotiating at once is a recipe for overselling. Agents can be wrong, stale, retried or racing each other. Tiger is what makes every agreement real. Without it, Parley would be six agents taking each other's word for it.

  • One truth about capacity. Carrier agents read their own policy and inventory from Tiger, and the exchange re-checks every offer against Tiger before it counts. An agent can't promise a slot that's already gone.
  • No double-booking, even in parallel. Every container slot is its own row. Holds and bookings claim slots with FOR UPDATE SKIP LOCKED, conditional updates and partial unique indexes, so a slot can never have more than one active hold or booking, even when six negotiations finish at the same moment. A withdrawn sailing can never be held, and idempotency keys make retried or duplicate agent messages harmless.
  • The audit trail can't drift. Every inventory change writes its market_events row in the same transaction, so what the dashboards show always matches what happened.
  • Built on time series. market_events and per-minute sailing_capacity_snapshots are hypertables. A continuous aggregate (market_activity_1m, with a refresh policy) powers Market Intelligence, and Mission Control's Time Machine replays any incident from stored checkpoints plus the event log.
  • Safe approvals. Buyer approvals are serialized with advisory locks, so one approval can't be applied twice.

The rest of the stack

Python for orchestration, negotiation, booking and recovery. LangGraph for the buyer-side workflow. A FastAPI + IBM Carbon carrier dashboard. React + TypeScript for Mission Control.

Challenges we ran into 🧩

  • Negotiating without leaking limits. Agents had to bargain meaningfully without ever sending their owner's floor or budget. We kept private policy completely separate from the public terms in each message.
  • Individual vs. collective interest. A good deal for one buyer can sink another. Splitting bilateral negotiation from market-wide clearing fixed it.
  • Reliable agent messaging. Separate runtimes, duplicate messages, overlapping requests and reply matching all caused bugs. We isolated runtimes and added session tracking, validation and idempotency.
  • From offer to real booking. Finding a ship isn't rebooking. Holds, approvals, payment verification, confirmations and state changes all had to line up without double-booking or unauthorized spending.
  • Making it understandable. With many agents negotiating at once, it's hard to see why something happened. We built event-backed timelines and replay so every offer and decision can be traced.

Accomplishments that we're proud of 🏆

  • A real two-sided market. Five carrier agents with different business strategies negotiating against buyer agents, not one assistant split into helper roles.
  • Coordination that beats grabbing first: 3 of 3 stranded buyers recovered, against 1 of 3 for first-come-first-served.
  • End-to-end recovery, tested. In a recorded run, six negotiation sessions finished in about 20.5 seconds, all three affected buyers got replacement space, and the approval and confirmation steps ran.
  • Payment through the agent protocol, with a human approval step whenever a cost goes past the buyer's limit.
  • Zero oversold slots under parallel negotiation, enforced by Tiger at the row level, not by trusting agents.
  • An observable autonomous market: carrier analytics, negotiation traces, verified capacity and full replay from Tiger.

What we learned 🎓

Giving every participant an intelligent agent doesn't automatically make an intelligent market. Agents with their own goals and private information will find acceptable terms, and still collide when they compete for scarce space. That takes coordination above any single agent.

We also learned not every decision belongs to an LLM. Parley mixes agents with fixed business policies, optimization, a shared state and explicit approval limits, so each part has one job and every decision can be inspected.

What's next for Parley 🔮

Parley runs on a simulated market with fictional carriers, sailings and prices. It books no real freight.

Next: live vessel schedules, port congestion and risk feeds, real inventory, richer negotiation strategies, and stronger settlement between independent agents.

And freight is only the first market. Anywhere capacity is scarce and prices are private (air cargo, trucking, hotel rooms, cloud compute, energy), the same agents can negotiate and the same exchange can clear.

Built with

fetch.ai · uagents · agentverse · asi-one · agent-chat-protocol · agent-payment-protocol · langgraph · python · google-or-tools · tiger-data · timescaledb · postgresql · stripe · fastapi · ibm-carbon · react · typescript


Source: Sea-Intelligence, Global Liner Performance, Issue 181, September 29, 2026. https://sea-intelligence.com/press-room/410-global-schedule-reliability-continues-to-plummet-in-august

Built With

Share this project:

Updates

Submission history