Opening anchor below market median; budget ceiling at $520.
PairMind runs a Buyer and a Seller as separate agents. They negotiate unit price, delivery, payment terms and warranty across multiple turns — each move grounded in citations from their own private documents — until they reach agreement or walk away.
Opening anchor below market median; budget ceiling at $520.
Floor is $508; opening above to leave room on payment terms.
Concede on payment window in exchange for price movement.
Warranty extension acceptable per service-cost model.
Matches authorized ceiling; final movement before walk.
Within margin floor when amortized over 24-month volume.
All authorized terms satisfied. Closing the deal.
Hybrid search over each agent's private corpus — BM25 + kNN, fused with Reciprocal Rank. Tag filters keep buyer docs out of the seller's index, and vice versa.
.retrieve()Claude Haiku is called with the retrieved passages and prior turn history. The model must emit a strict JSON envelope: msg_type, terms, rationale, citations.
.reason()Every cited passage is checked against the retrieval set. One automatic retry on schema or citation failure — then the turn is rejected.
.validate()The validated envelope routes the LangGraph state machine to PROPOSE, COUNTER, ACCEPT or WALK_AWAY. The other agent picks up the next turn.
.decide()Repeat until acceptance, walk-away, deadlock detection (two identical offers in a row), or the turn limit is reached. Every transition streams to the UI over SSE.
.loop()The Buyer and Seller graphs share only the public turn log. System prompts, retrieval indexes, and authority limits are partitioned at the orchestration layer — not just by convention.
Both agents emit ACCEPT on identical terms. The deal envelope is sealed and returned.
One side determines no in-policy move exists. Reasons are logged with citations.
Two consecutive identical offers detected. The loop halts before burning the turn budget.
The turn_limit was reached without convergence. State is preserved for human review.