SNHP

Consultor gratuito de negociação baseado em teoria dos jogos para agentes de IA, além de sessões pagas com recibo e memória de agente.

Documentação

SNHP

smithery badge

Matemática de negociação gratuita para agentes de IA. Uma chamada, sem conta. Seu agente traz o LLM; o SNHP traz a teoria dos jogos — seu próximo movimento matematicamente ótimo em qualquer negociação, preço único e multi-questão, sem LLM, roda localmente. Quando você precisar com registro: sessões com recibo por $2. Quando você precisar que ele lembre: memória do agente (custódia cega — você criptografa antes de salvar; armazenamos apenas o texto cifrado e não podemos lê-lo).

PyPI License: Apache 2.0  ·  snhp.dev  ·  Manifesto

🏆 O Ranking de Negociação

arena.snhp.dev/leaderboard.html — qual IA sai com mais dinheiro? Modelos Claude, um divisor ingênuo, um genoma evoluído em uma simulação ao vivo e bots da comunidade negociam os mesmos acordos multi-questão retidos contra o motor SNHP, pontuados contra a fronteira exata de Pareto. Cada partida é uma negociação real registrada, reproduzível no navegador. Resultado principal: modelos de fronteira, sozinhos, perdem para o bot ingênuo de dividir a diferença — conectados ao motor no meio do acordo, ficam quase ótimos.

Coloque seu bot no ranking: exponha um endpoint HTTP que fale snhp-gauntlet/1 e envie por DM para @ryuxik a URL. O executor vive em arena/gauntlet/ — protocolo, assentos, pontuação e o bot inicial de 25 linhas. Especificação legível por máquina: arena.snhp.dev/llms.txt.

Instalação

uvx snhp            # zero-install: runs the stdio MCP server on demand
# or
pip install snhp

Conecte-o a qualquer cliente MCP (Claude Desktop, Cursor, Cline, …):

{ "mcpServers": { "snhp": { "command": "uvx", "args": ["snhp"] } } }

Ou chame a matemática diretamente — dólares simples entram, o movimento sai (a ferramenta negotiate):

from gametheory.negotiation.plain_terms import negotiate_turn

negotiate_turn(
    side="sell", walk_away=4000, target=6000,
    counterparty_offers=[4200, 4500], rounds_left=6,
)
# -> {'action': 'counter', 'recommended_price': 5752.2,
#     'message': 'Thanks for the offer. The best I can do on this is $5,752.20.', ...}

Acordos multi-questão fazem logrolling automaticamente — o SNHP infere as prioridades do outro lado e propõe o pacote que maximiza o excedente conjunto (conceda o que você menos valoriza para segurar o que você mais valoriza):

from gametheory.negotiation.bundle import negotiate_bundle

negotiate_bundle(
    issues=[
        {"name": "price",   "options": [100, 120, 140], "my_utility": [1.0, 0.5, 0.0], "their_utility": [0.0, 0.5, 1.0]},
        {"name": "support", "options": ["basic", "priority"], "my_utility": [1.0, 0.0], "their_utility": [0.0, 1.0]},
    ],
    my_priorities={"price": 0.8, "support": 0.2},
)
# -> recommended_offer {'price': 100, 'support': 'priority'} + the trade logic behind it

Cartão de agente hospedado, MCP transmissível e uma demonstração ao vivo: snhp.dev.

O que há aqui

snhp/                   Core algorithm + NegMAS agent + B2B tournament harness
gametheory/             Productization layer (FastAPI, MCP, Tier 1/2/3 endpoints)
gametheory/negotiation/ Plain-terms single- + multi-issue (logrolling) engines
gametheory/server/      HTTP + MCP entry points
gametheory/tests/       pytest suite
SNHP_Whitepaper/        Protocol description + 3 component PRDs

Desenvolver a partir do código-fonte

git clone https://github.com/ryuxik/snhp && cd snhp
python -m venv venv && source venv/bin/activate
pip install -e ".[test]"

python -m pytest gametheory/tests/                  # test suite
uvicorn gametheory.server.http:app --reload         # local API (catalog at /v1/catalog)
snhp                                                # stdio MCP server

Âncora empírica

Vários números diferentes — mantenha-os separados

Estas são medições distintas; confundi-las é o erro fácil. Elas estão ordenadas por quanto peso podem carregar, não por quando as executamos. A primeira foi pré-registrada e validada em dados que nunca tinha visto; as demais não foram, e são relatadas aqui com as ressalvas que isso implica.

1. O desafio de certificação (pré-registrado, retido) — o número em que confiar. A utilidade própria média de um agente certificado supera uma linha de base de dividir a diferença em +0.1086 em n=360 negociações semeadas (60 cenários × 2 papéis × 3 oponentes roteirizados congelados: ingênuo, linha-dura, concessor), p=0.0001, separando tanto no conjunto público quanto em um conjunto retido que nunca havia sido usado. O pool de contrapartes e a estatística foram congelados em arena/gauntlet/PREREG-pool.md antes de o código existir. Ele carrega mais peso precisamente porque poderia ter falhado no registro — e um corte anterior deste certificado falhou (três estatísticas saturadas contra uma contraparte fixa; veja arena/gauntlet/certs/SEPARATION.md), razão pela qual o protocolo foi re-registrado em vez de reajustado. O escopo é exatamente o pool declarado e nada mais amplo.

2. Margem competitiva frente a frente (não registrada antecipadamente). Em um LLM com suporte SNHP vs um LLM sem SNHP, quanto mais do excedente o lado SNHP captura? Na execução comprometida entre fornecedores (gametheory/server/static/e6_cross_vendor.json, Sonnet+SNHP vs Haiku, n=20 sementes pareadas), a margem agrupada é ~+12,5% (mean h3_margin ≈ 0.125, 29/40 sinais positivos). Algum texto publicado ainda cita isso como "~12% melhor frente a frente." Leia com as ressalvas: n=20, LLM-vs-LLM, preço de questão única, sem pré-registro, e o oponente é um prompt geral vanilla — contra um competente, a vantagem cai pela metade (veja o teste de linha de base forte abaixo). Onde isso e (1) discordarem, prefira (1).

3. Ganho de bem-estar conjunto em autojogo (uma métrica de cooperação, NÃO a mesma coisa). Negociação de contrato B2B com dois Sonnet, n=20 sementes pareadas:

CondiçãoBem-estar conjunto (fronteira ≈ 1,57, estimada)
Sonnet vanilla (prompt geral, sem SNHP)1,40
SNHP puro vs SNHP puro (apenas matemática)1,45
Sonnet + ferramenta MCP SNHP (ambos os lados)1,59
Haiku + ferramenta MCP SNHP (entre modelos)1,61

Ganho de ambos os lados adotando a ferramenta SNHP: +0,186 de bem-estar conjunto, teste de sinais 18/20, p=0,0004. (Os 1,59/1,61 excedem ligeiramente a estimativa da fronteira de 1,57 — a fronteira foi estimada em uma grade grosseira, então trate-os como "na fronteira", não "além dela".) Custo: $0,025 por confronto no preço de 2026-04.

4. O teste de construir vs comprar: SNHP vs um prompt de produção FORTE

Os números (2) e (3) acima são contra um prompt geral vanilla. A questão mais afiada — "por que não apenas dar um bom prompt ao LLM?" — é respondida executando o SNHP contra um prompt de produção forte (snhp/llm_strong_baseline.py, cujo prompt de sistema até inclui conselhos de logrolling). No contrato de 4 questões, Haiku+ferramenta SNHP vs Haiku+prompt forte, n=12 sementes pareadas (python -m snhp.strong_baseline_headtohead, resultado comprometido em gametheory/server/static/strong_baseline_headtohead.json):

MétricaValor
Margem de utilidade (SNHP − linha de base forte)+0,077, IC 95% [+0,039, +0,115] (exclui 0)
Participação do SNHP no excedente conjunto54% (IC [52%, 56%])
Teste de sinais8/12 positivos, 0 negativos

O SNHP vence até um prompt de produção forte — mas por aproximadamente metade da vantagem que mostra contra um fraco. Ressalvas: n=12, Haiku (não Sonnet), um domínio de contrato; reexecute com n maior / um modelo mais forte para apertar o IC.

Efeito de rede: o prêmio de cooperação exige que ambos os lados estejam ancorados no SNHP. Confrontos assimétricos (Sonnet+SNHP vs Sonnet vanilla) perdem 0,11 de utilidade vs jogo simétrico com suporte. O modo conselheiro entre pares só dispara quando a contraparte publicou uma atestação SNHP verificável.

Demonstração ao vivo (reprodução do trace real da API na semente=42): https://snhp.dev/demo.html

Classificação no torneio (honesta, por mercado)

No round-robin comprometido (leaderboard/results/leaderboard.json, n_rounds=20), a classificação do SNHP por utilidade média depende do mercado:

Mercado (BATNA)Classificação SNHPTopo do campo
Mercado do comprador (assimétrico)#1 de 21SNHP 0,508
Mercado do vendedor (assimétrico)#1 de 21SNHP 0,520
Simétrico (neutro)5º de 21Logroller 0,525, The Closer, Cialdini, Principled, depois SNHP 0,512

Então o SNHP é #1 nos mercados assimétricos e no meio do pacote no simétrico — não leia isso como "#1 geral." Sua variância é a menor do campo. Em n_rounds=100 o campo simétrico se reestabiliza ainda mais e Aspiration lidera.

Este agente NegMAS (snhp/negmas_agent.py) é um artefato de pesquisa e NÃO é o recomendador do produto enviado — as alegações do produto abaixo são medidas no código enviado, não neste torneio.

Veja gametheory/evals/README.md para o runbook de avaliação/ajuste.

Níveis

  • Nível 1 — Negociação: recomendadores do lado vendedor + comprador, detecção de ataque de âncora, commit-reveal criptográfico de primeiro movimento, e-mails de resposta redigidos por LLM (pagos).
  • Nível 2 — Leilões: Vickrey / BNE de primeiro preço / ascendente inglês, reserva ótima de Myerson, recomendação de formato, simulação MC.
  • Nível 3 — Design de mecanismos: Gale-Shapley, leilão ótimo assimétrico de Myerson, preço fixado de Gallego-van Ryzin.

Nível 4 (jogos de coalizão) adiado até um comprador pagante pedir.


mcp-name: io.github.ryuxik/snhp-negotiation