Negotiation is the setting where two or more LLM agents with conflicting preferences must reach a joint decision through an exchange of offers. It is not coordination, where agents share a goal — here each agent wants a different outcome and can walk away. That structure has a precise mathematical skeleton: utilities that score outcomes, reservation values that define the walk-away point, a bargaining zone in which a deal is possible, and a protocol governing who speaks when. When you wire an LLM into a marketplace, a resource-allocation loop, or a deal-maker, you are asking it to search that structure. This piece lays out the mechanics — offers, reservation values, ZOPA, Pareto-efficiency, concession, multi-issue tradeoffs — and how to measure whether the agents are any good.
The negotiation problem, stated cleanly
A negotiation has a set of possible agreements and one distinguished outcome, no-deal. Each agent i has a utility function u_i mapping every agreement to a real number, plus a utility for no-deal. Agents take turns proposing; a deal is struck only when someone accepts a standing offer, and if no one ever accepts, everyone gets their no-deal utility.
Two features make this hard for an LLM. Preferences are private — A does not know how much B values each outcome, so part of the game is inferring it from B’s moves — and the interests conflict: an agent that is too greedy walks away with the no-deal payoff, while one too soft leaves value on the table. Everything below is machinery for that tension: score the outcomes, find where a deal can live, and move through it deliberately.
Utility functions: outcomes to numbers
Before an agent can negotiate it needs a utility function that turns a proposed outcome into a comparable number. For a single-price deal this is often just the price. A common linear form for a buyer with maximum willingness-to-pay v is u_buyer(p) = v − p, and for a seller with cost c, u_seller(p) = p − c.
An explicit u_i makes the agent’s behaviour legible and testable. An LLM asked to ‘get a good deal’ in free text has no anchor; one handed a utility function has a gradient to climb and a number you can log. Give the agent a scoring rule, or elicit one, and hold it fixed so later analysis — welfare, efficiency — refers to the same scale it was optimising.
Reservation values and the walk-away point
The reservation value (or reservation price) is the utility of no-deal — the worst agreement an agent will still accept rather than leave. For a buyer it is the maximum price they will pay; for a seller, the minimum they will take. Any offer worse than the reservation value should be rejected, because walking away is strictly better.
Reservation values usually come from an outside option: the best deal available elsewhere. If a seller can sell to a third party for 80, their reservation price is 80 and no lower offer is rational. This is the single most important number to make an LLM agent respect. A frequent failure is an agent that, eager to ‘close,’ accepts a price below its own reservation value — a deal literally worse than no deal. Pin it in the agent’s state and check every acceptance against it.
The bargaining zone (ZOPA)
Put the two reservation values on one axis and a deal becomes visible. Suppose a buyer will pay up to b and a seller will accept down to s. If s ≤ b, every price in [s, b] beats no-deal for both sides. That interval is the Zone of Possible Agreement, or ZOPA.
seller floor s = 80 buyer ceiling b = 100
ZOPA = [80, 100] width = b − s = 20
any price p in [80,100] leaves both better off than walking awayTwo consequences follow. If s > b the ZOPA is empty and no rational deal exists — a competent agent should detect this and stop. When the ZOPA is non-empty, its width is the total surplus available, and where inside it the price lands decides how that surplus splits. Negotiation is the fight over where in the ZOPA you settle.
Offer and counter-offer protocols
Agents rarely name a price and stop; they exchange offers. In the standard alternating protocol, A proposes, B accepts or counter-offers, and control passes back and forth until someone accepts or a deadline hits. The protocol turns private preferences into observable signals: each offer leaks information about the proposer’s reservation value.
Two protocol details change the whole game. A deadline forces closure — without one, two polite LLMs loop through near-identical offers forever. A discount or per-round cost makes delay expensive, pushing agents to concede sooner. First-mover advantage is real too: the opening offer anchors the range.
Multi-issue tradeoffs, logrolling, and Pareto efficiency
Real negotiations bundle several issues — price, delivery time, warranty, quantity — which the parties rarely weight equally, and that asymmetry is the source of joint value. If a buyer cares intensely about fast delivery and barely about warranty while the seller feels the reverse, each can concede the issue they value little for the one they value a lot. This trade is logrolling. Model each agent’s utility as a weighted sum over issues, u_i = Σ_k w_ik · x_k, where x_k is the settlement on issue k and w_ik is agent i’s weight on it.
A deal is Pareto-efficient if no alternative makes one agent better off without making another worse. On a single price axis every deal is trivially efficient, but with several issues agents can settle on an inefficient bundle — both accept, yet a different bundle would raise both. Strong negotiators push toward the Pareto frontier, from which no mutual improvement remains; an LLM that haggles every issue to the midpoint in isolation systematically leaves that joint value uncollected.
A worked multi-issue example
Take two issues, price and delivery speed, each scored 0 to 10. The buyer weights delivery heavily and price lightly, w_buyer = (price 0.3, delivery 0.7); the seller is the mirror, w_seller = (price 0.7, delivery 0.3).
compromise-on-both: price=5, delivery=5
u_buyer = 0.3·5 + 0.7·5 = 5.0
u_seller = 0.7·5 + 0.3·5 = 5.0
logrolled: seller gives fast delivery, buyer gives on price
price=3 (buyer concedes), delivery=9 (seller concedes)
u_buyer = 0.3·3 + 0.7·9 = 7.2
u_seller = 0.7·7 + 0.3·1 = 5.2Both agents do better under the logrolled deal — 7.2 vs 5.0 for the buyer, 5.2 vs 5.0 for the seller — because each conceded the issue it cared about least. The compromise was accepted-but-inefficient; the logrolled deal sits closer to the Pareto frontier. Discovering it requires each agent to reveal, through its offers, which issue it truly values.
Concession strategies
Over a bounded number of rounds an agent must decide how fast to give ground. A concession strategy maps the round number to how much of the distance from your ideal toward your reservation value you yield. Three archetypes recur: a tough (Boulware) strategy concedes only late; a conceder gives ground quickly to lock in a deal; a linear strategy splits the gap evenly across rounds.
A convenient parametric family sets the offer at round t of T as offer(t) = ideal − (ideal − reservation) · (t/T)^β. With β > 1 the agent is tough; with β < 1 it is a conceder. The trade is stark: tougher strategies capture more surplus when a deal closes but raise the risk of hitting the deadline with nothing. Tuning β against the deadline and discount is much of the art — exactly the knob to expose when you script an LLM negotiator rather than leave concession to free-text whim.
Evaluation: agreement rate and social welfare
Single-run outcomes are noisy, so evaluate over many randomised scenarios. Four numbers carry most of the signal. Agreement rate is the fraction of negotiations that reach a deal — too low means agents are too tough or fail to find a non-empty ZOPA; near 100% may mean they are pushovers accepting bad deals.
Individual utility measures how well an agent does for itself. Social welfare — the sum Σ_i u_i at the settlement — measures total value created, and is maximised on the Pareto frontier. Distance to the frontier asks whether the surplus they split was the most available. Report these together: an agent that wins big on individual utility while tanking social welfare is exploiting its partner, whereas high welfare with a fair split marks competent, cooperative-yet-self-interested negotiation.
Implications for small CPU-bound agents
Much of the negotiation skeleton lives outside the language model. Utilities, reservation values, ZOPA checks, and concession schedules are cheap arithmetic a scaffold can compute and hand to the model as structured state. That matters for small, CPU-hosted SLMs, whose weakness is exactly the multi-step arithmetic these computations demand.
The practical division of labour lets the SLM do what it is good at — parsing a free-text offer, phrasing a persuasive counter, reading tone — while the harness owns the numbers: score every offer, reject anything below reservation value, and pick the next offer from an explicit concession schedule. This keeps each model call short and makes behaviour auditable, because every decision traces to a number you can inspect. A well-scaffolded small model negotiating over clean utilities will reliably beat a larger model asked to freelance it all in prose.