Autorize capital novo, limitado ao valor permitido exato.
A camada verificável de autorização pré-negociação para capital autônomo
Já tem um agente de trading?
Adicione o Profit Engine Governor.
Mantenha a custódia. Mantenha o controle.
O PE Governor avalia cada intenção de ordem enviada segundo as suas regras, coordena a capacidade da carteira entre agentes e devolve uma autorização assinada de curta duração para o valor permitido exato. Seu executor a verifica; o PE Governor nunca assume custódia nem envia a ordem.
PE Governor da Solarly.
Vereditos de decisão
Reduza uma posição gerenciada existente. Nunca ultrapasse o valor retornado.
Uma regra rígida falhou. Não volte a agir sobre este candidato.
Bloqueio temporário ou não selecionado neste ciclo. Aguarde e pergunte de novo.
Uma decisão determinística, renderizada ao vivo
Este cartão vem da mesma política pura executada pelo endpoint pago, a partir da requisição de exemplo abaixo. Entrada idêntica sempre gera hash de decisão idêntico.
Valor permitido
US$ 25.000,00
selecionado: cand_spot_btc_01
- cand_spot_btc_01posição 1ALLOCATE
- cand_eq_msft_02posição 2HOLD
- Hash da requisição
- request a2a7c6d765b6ef70214374eef0f1ad0fc4276c754b69030219ecdad05ab6e468
- Hash da decisão
- decision 855dec83616b3c4363d24707604abf566e092ca8f4e67f7d5bff77007729bd68
Verificações de risco (observado vs. limite)
- portfolio_state_fresh15 / 120PASS
- portfolio_state_not_future0 / 5PASS
- reconciliation_currenttrue / truePASS
- kill_switch_clearfalse / falsePASS
- daily_loss_budget400 / 5000PASS
- max_drawdown1.8 / 8PASS
Como funciona
1. Propor
Seus agentes emitem até 50 candidatos em um barramento comum: trilha, ativo, lado, nocional solicitado, perda máxima e ganho líquido esperado informados pelo chamador, status de evidência e expiração.
2. Governar
O PE Governor aplica uma única política pura: atualidade do estado, reconciliação, kill switch, evidências, orçamentos de perda, reserva, tetos de nocional e concorrência — depois classifica e escolhe no máximo um vencedor.
3. Obedecer
O capital se move nos seus termos. Mesma requisição na entrada, decisão idêntica byte a byte na saída, com hashes SHA-256 da requisição e da decisão canônicas para auditoria.
Controle fundamental para capital autônomo
Uma camada de autorização determinística que torna as decisões dos agentes limitadas, auditáveis e portáveis por toda a sua pilha de execução.
Recibos de política à prova de adulteração
Cada resposta vincula a requisição canônica e a decisão com hashes SHA-256, versão da política, carimbo de tempo, valor permitido exato e verificações de observado versus limite. As repetições permanecem idênticas byte a byte.
Governança de todo o portfólio
Avalie até 50 candidatos de várias estratégias contra um único snapshot de portfólio recente e reconciliado. Regras de perda, drawdown, reserva, nocional, concorrência e kill switch se aplicam antes de no máximo um vencedor ser selecionado.
Pagamento nativo para máquinas
Pague o preço publicado por decisão, em faixas de risco em USDC na Base pelo fluxo de checkout da Coinbase Business, ou use créditos pré-pagos. A idempotência evita compras lógicas duplicadas.
A aplicação começa no seu adaptador de execução
O PE Governor devolve a autorização; seu adaptador a verifica e a obedece antes de enviar uma ordem. A Coinbase não aplica atualmente as decisões do PE na corretora, e o pagamento nunca muda o veredito.
Ler a política de instalaçãoAutorizações assinadas que seu executor pode verificar
Cada alocação governada carrega uma autorização de curta duração, assinada criptograficamente e vinculada à sua intenção exata e ao último estado de risco enviado da carteira.
Provas de política verificáveis
A assinatura cobre a carga canônica da prova: emissor, id da chave, veredito, valor exato permitido, candidato, estratégia, trilha, escopo completo, hash da solicitação, hash da decisão, hash do estado da carteira, a cotação durável e a expiração. Baixe a chave pública uma vez e verifique offline.
Reservas atômicas entre agentes
Agentes concorrentes no mesmo inquilino e carteira disputam um único livro de risco agregado. Um candidato vencedor só se torna executável se a reserva for concedida; caso contrário, o veredito é rebaixado para HOLD.
Preço por faixas de risco
O preço de uma decisão acompanha o capital em risco — o maior nocional solicitado ou perda máxima da solicitação. A cotação é determinística e vinculada ao hash. O pagamento compra a avaliação, nunca um veredito.
Preço determinístico por decisão
Capital em risco é max(requestedNotionalUsd, maximumLossUsd) entre os candidatos enviados. Uma unidade de crédito equivale a 0,05 USDC.
| Capital em risco | Preço (USDC na Base) | Unidades de crédito |
|---|---|---|
| até US$ 1.000 | 0.05 USDC | 1 |
| até US$ 10.000 | 0.10 USDC | 2 |
| até US$ 100.000 | 1.00 USDC | 20 |
| até US$ 500.000 | 5.00 USDC | 100 |
| acima de US$ 500.000 | 10.00 USDC | 200 |
O mesmo preço vale para ALLOCATE, REDUCE, REJECT e HOLD. Não há assinatura.
Verifique antes de executar
Seu adaptador de execução deve verificar o hash da carga, a assinatura, o emissor e o id da chave, a janela de validade, o token de reserva vigente, todos os hashes esperados e se a ordem corresponde exatamente à intenção e ao valor autorizados. Consuma cada autorização uma única vez em um armazenamento durável e recuse qualquer ordem sem autorização vigente.
import { verifyAuthorizationForOrder } from "./pe-authorization";
// 1. Fetch and cache the published Ed25519 verification key (kid + issuer).
const { issuer, keys } = await (await fetch("/api/pe/v1/keys")).json();
// 2. Gate every order on a live, exactly matching authorization.
const check = await verifyAuthorizationForOrder({
proof: decision.proof, // returned with every 200
publicKeyBase64Url: keys[0].x,
order: {
candidateId, strategyId, assetId, lane, side, reduceOnly,
amountUsd: decision.allocationAmountUsd, // must equal permittedAmountUsd exactly
tenantId, portfolioId, agentId, ownerId, accountScope,
},
expected: {
issuer,
keyId: keys[0].kid,
policyVersion: decision.policyVersion,
requestHash: decision.audit.requestHash,
decisionHash: decision.audit.decisionHash,
portfolioStateHash: decision.proof.payload.portfolioStateHash,
quoteHash: decision.priceQuote.quoteHash,
reservationFencingToken: decision.proof.payload.reservation.fencingToken,
},
// Durable single-use store: ONE atomic operation, never has() then add().
replayStore: {
consumeIfUnused: async (id) => {
const { rowCount } = await db.query(
"INSERT INTO used_authorizations (id) VALUES ($1) ON CONFLICT DO NOTHING",
[id],
);
return rowCount === 1; // false => already consumed
},
},
});
if (!check.valid) throw new Error(check.reason); // never place the order
placeOrder(decision.allocationAmountUsd);Reserve a capacidade da carteira por toda a janela de execução
OpcionalVerificar uma autorização assinada offline continua sendo suficiente por si só. Se quiser mais, reivindique-a: o PE Governor passa a reter a parcela de capacidade agregada daquela autorização até seu adaptador informar o desfecho, de modo que um segundo agente não gaste a mesma folga duas vezes.
AUTHORIZED
Emitida junto com a decisão e já retendo capacidade durante sua curta janela de validade.
CLAIMED
Seu adaptador vinculou uma chave de reivindicação secreta e agora responde pelo desfecho. Nenhum outro chamador pode alterá-la.
COMMITTED
O adaptador agiu. A capacidade segue retida, porque o capital comprometido está em uso até a conciliação.
RELEASED
O adaptador recuou sem agir. A capacidade volta imediatamente.
EXPIRED
Ninguém retornou a tempo. A capacidade volta sozinha, sem nenhuma chamada de limpeza.
// Optional. Offline verification of the proof is still sufficient.
const { authorizationId } = decision.lifecycle;
const claimKey = crypto.randomUUID() + crypto.randomUUID(); // >= 32 chars, keep it
const claim = await fetch(`/api/pe/v1/authorizations/${authorizationId}/claim`, {
method: "POST",
headers: { "x-pe-claim-key": claimKey },
});
if (!claim.ok) return; // someone else owns this authorization
try {
await placeOrderWithYourOwnExecutor(intent); // PE Governor never does this
await fetch(`/api/pe/v1/authorizations/${authorizationId}/commit`, {
method: "POST",
headers: { "x-pe-claim-key": claimKey },
});
} catch {
// stand down and give the capacity straight back
await fetch(`/api/pe/v1/authorizations/${authorizationId}/release`, {
method: "POST",
headers: { "x-pe-claim-key": claimKey },
});
}O estado do ciclo de vida é o registro da sua própria política. Confirmar apenas registra que seu adaptador agiu; o PE Governor continua sem colocar, rotear ou liquidar qualquer ordem.
Instale a política uma única vez
Ligue a chamada antes de qualquer alocação igual ou acima do limite do proprietário. Pare em REJECT ou HOLD e nunca ultrapasse um valor REDUCE.
# Install once, obey always.
BEFORE any allocation >= OWNER_THRESHOLD_USD:
decision = POST /api/pe/v1/governor # same-origin; production clients resolve it against https://governor.solarly.ai
if decision.decision in ("REJECT", "HOLD"):
stop() # no order, no retry loop
if decision.decision == "REDUCE":
size = min(intended_size, decision.allocationAmountUsd)
if decision.decision == "ALLOCATE":
size = decision.allocationAmountUsd # never more
execute(size) # execution is 100% yoursPayloads de requisição e resposta
{
"schema": "pe-governor-request.v1",
"requestedAt": "2026-08-11T22:30:00.000Z",
"ownerId": "owner_demo",
"portfolio": {
"asOf": "2026-08-11T22:29:45.000Z",
"reconciliationCurrent": true,
"killSwitchEngaged": false,
"equityUsd": 250000,
"cashAvailableUsd": 90000,
"grossNotionalUsd": 120000,
"dailyNotionalUsedUsd": 30000,
"realizedLossTodayUsd": 400,
"drawdownPct": 1.8,
"openPositions": [
{
"assetId": "ETH-USD",
"lane": "SPOT",
"notionalUsd": 20000,
"managed": true
}
]
},
"constraints": {
"capitalReserveUsd": 25000,
"installThresholdUsd": 1000,
"maxCandidateNotionalUsd": 25000,
"maxPositionNotionalUsd": 40000,
"maxPortfolioNotionalUsd": 200000,
"maxDailyNotionalUsd": 75000,
"remainingLossBudgetUsd": 3000,
"maxDailyLossUsd": 5000,
"maxDrawdownPct": 8,
"maxConcurrentPositions": 12,
"maxConcurrentPositionsPerLane": 6,
"maxPortfolioStalenessSeconds": 120,
"minimumEdgeBpsByLane": {
"EQUITIES": 25,
"SPOT": 30,
"FUTURES": 40
}
},
"candidates": [
{
"candidateId": "cand_spot_btc_01",
"sourceLane": "SPOT",
"strategyId": "carry_basis_v3",
"assetId": "BTC-USD",
"side": "BUY",
"reduceOnly": false,
"requestedNotionalUsd": 30000,
"maximumLossUsd": 1200,
"expectedNetEdgeBps": 85,
"evidenceStatus": "READY",
"createdAt": "2026-08-11T22:28:00.000Z",
"expiresAt": "2026-08-11T22:40:00.000Z",
"metadata": {
"venue": "primary",
"confidence": 0.71
}
},
{
"candidateId": "cand_eq_msft_02",
"sourceLane": "EQUITIES",
"strategyId": "gap_fade_v2",
"assetId": "MSFT",
"side": "BUY",
"reduceOnly": false,
"requestedNotionalUsd": 12000,
"maximumLossUsd": 900,
"expectedNetEdgeBps": 40,
"evidenceStatus": "READY",
"createdAt": "2026-08-11T22:27:10.000Z",
"expiresAt": "2026-08-11T22:45:00.000Z"
}
]
}{
"schema": "pe-governor-decision.v1",
"policyVersion": "pe-governor-policy-1.0.0",
"generatedAt": "2026-08-11T22:30:00.000Z",
"decision": "ALLOCATE",
"selectedCandidateId": "cand_spot_btc_01",
"allocationAmountUsd": 25000,
"reasons": [
"ALLOCATION_PERMITTED"
],
"portfolioChecks": [
{
"check": "portfolio_state_fresh",
"status": "PASS",
"observed": 15,
"limit": 120
},
{
"check": "portfolio_state_not_future",
"status": "PASS",
"observed": 0,
"limit": 5
},
{
"check": "reconciliation_current",
"status": "PASS",
"observed": true,
"limit": true
},
{
"check": "kill_switch_clear",
"status": "PASS",
"observed": false,
"limit": false
},
{
"check": "daily_loss_budget",
"status": "PASS",
"observed": 400,
"limit": 5000
},
{
"check": "max_drawdown",
"status": "PASS",
"observed": 1.8,
"limit": 8
}
],
"candidates": [
{
"candidateId": "cand_spot_btc_01",
"decision": "ALLOCATE",
"allocationAmountUsd": 25000,
"rank": 1,
"expectedAfterCostProfitUsd": 212.5,
"reasons": [
"SIZE_CONSTRAINED_BY_LIMITS",
"ALLOCATION_ELIGIBLE"
],
"riskChecks": [
{
"check": "evidence_ready",
"status": "PASS",
"observed": "READY",
"limit": "READY"
},
{
"check": "candidate_unexpired",
"status": "PASS",
"observed": "2026-08-11T22:40:00.000Z",
"limit": "2026-08-11T22:30:00.000Z"
},
{
"check": "maximum_loss_bounded",
"status": "PASS",
"observed": 1200,
"limit": 30000
},
{
"check": "remaining_loss_budget",
"status": "PASS",
"observed": 1200,
"limit": 3000
},
{
"check": "install_threshold",
"status": "PASS",
"observed": 30000,
"limit": 1000
},
{
"check": "lane_minimum_edge_bps",
"status": "PASS",
"observed": 85,
"limit": 30
},
{
"check": "capital_reserve",
"status": "PASS",
"observed": 65000,
"limit": 0
},
{
"check": "max_candidate_notional",
"status": "BLOCKED",
"observed": 30000,
"limit": 25000
},
{
"check": "max_position_notional",
"status": "PASS",
"observed": 40000,
"limit": 40000
},
{
"check": "max_portfolio_notional",
"status": "PASS",
"observed": 80000,
"limit": 200000
},
{
"check": "max_daily_notional",
"status": "PASS",
"observed": 45000,
"limit": 75000
},
{
"check": "lane_concurrency",
"status": "PASS",
"observed": 1,
"limit": 6
},
{
"check": "portfolio_concurrency",
"status": "PASS",
"observed": 1,
"limit": 12
},
{
"check": "permitted_size_usd",
"status": "PASS",
"observed": 25000,
"limit": 30000
}
]
},
{
"candidateId": "cand_eq_msft_02",
"decision": "HOLD",
"allocationAmountUsd": 0,
"rank": 2,
"expectedAfterCostProfitUsd": 48,
"reasons": [
"ALLOCATION_ELIGIBLE",
"NOT_SELECTED_THIS_CYCLE"
],
"riskChecks": [
{
"check": "evidence_ready",
"status": "PASS",
"observed": "READY",
"limit": "READY"
},
{
"check": "candidate_unexpired",
"status": "PASS",
"observed": "2026-08-11T22:45:00.000Z",
"limit": "2026-08-11T22:30:00.000Z"
},
{
"check": "maximum_loss_bounded",
"status": "PASS",
"observed": 900,
"limit": 12000
},
{
"check": "remaining_loss_budget",
"status": "PASS",
"observed": 900,
"limit": 3000
},
{
"check": "install_threshold",
"status": "PASS",
"observed": 12000,
"limit": 1000
},
{
"check": "lane_minimum_edge_bps",
"status": "PASS",
"observed": 40,
"limit": 25
},
{
"check": "capital_reserve",
"status": "PASS",
"observed": 65000,
"limit": 0
},
{
"check": "max_candidate_notional",
"status": "PASS",
"observed": 12000,
"limit": 25000
},
{
"check": "max_position_notional",
"status": "PASS",
"observed": 40000,
"limit": 40000
},
{
"check": "max_portfolio_notional",
"status": "PASS",
"observed": 80000,
"limit": 200000
},
{
"check": "max_daily_notional",
"status": "PASS",
"observed": 45000,
"limit": 75000
},
{
"check": "lane_concurrency",
"status": "PASS",
"observed": 0,
"limit": 6
},
{
"check": "portfolio_concurrency",
"status": "PASS",
"observed": 1,
"limit": 12
},
{
"check": "permitted_size_usd",
"status": "PASS",
"observed": 12000,
"limit": 12000
}
]
}
],
"execution": {
"performed": false,
"custody": false,
"brokerage": false,
"orderPlacement": false,
"walletControl": false,
"note": "PE Governor returns a decision only. It never executes trades, holds custody, controls wallets, or places orders."
},
"alpha": {
"independentReturnForecast": false,
"proprietaryAlphaClaim": false,
"expectedEdgeSource": "caller_supplied",
"maximumLossSource": "caller_supplied"
},
"audit": {
"engine": "pe-governor",
"deterministic": true,
"llmUsed": false,
"policyVersion": "pe-governor-policy-1.0.0",
"requestHash": "a2a7c6d765b6ef70214374eef0f1ad0fc4276c754b69030219ecdad05ab6e468",
"generatedAt": "2026-08-11T22:30:00.000Z",
"decisionHash": "855dec83616b3c4363d24707604abf566e092ca8f4e67f7d5bff77007729bd68"
}
}Pagamento e liquidação
Pague por decisão em USDC na Base através de um checkout da Coinbase Business, ou consuma créditos pré-pagos. Não há assinatura. Autorização não é liquidação: só um checkout COMPLETED libera a decisão.
- Step 01
POST + chave de idempotência
Uma requisição lógica é reservada atomicamente.
- Step 02
402 com URL x402
Exatamente um checkout da Coinbase é criado.
- Step 03
202 durante o processamento
Tente de novo com a mesma chave e o mesmo id de checkout.
- Step 04
COMPLETED
O polling confirma um checkout COMPLETED. A confirmação por webhook assinado fica disponível quando configurada.
- Step 05
Decisão 200
Armazenada uma vez; as repetições são idênticas byte a byte.
A máquina de estados dos códigos HTTP
POST /api/pe/v1/governor (X-Idempotency-Key: uuid-v4)
|
v
402 Payment Required --payment.x402Url--> client pays the checkout
| |
|<---- retry: same key + X-Checkout-Id ------+
v
202 Accepted checkout ACTIVE / PROCESSING --> back off, retry
|
v
checkout COMPLETED (polling; signed webhook when configured)
|
v
200 OK pe-governor-decision.v1, stored once, replays byte-identicalLaço de repetição do cliente
Uma integração mínima. Envie uma chave de idempotência UUID v4, leia a URL x402 e o id do checkout no corpo do 402, pague e depois consulte com a mesma chave e o mesmo id até a decisão ser liberada.
import { randomUUID } from "node:crypto";
const ENDPOINT = "/api/pe/v1/governor"; // same-origin; resolves against https://governor.solarly.ai
const idempotencyKey = randomUUID(); // UUID v4, one per logical decision
// 1. First call: body + idempotency key. No payment yet, so expect 402.
let res = await fetch(ENDPOINT, {
method: "POST",
headers: { "content-type": "application/json", "x-idempotency-key": idempotencyKey },
body: JSON.stringify(governorRequest),
});
if (res.status !== 402) throw new Error(`unexpected status ${res.status}`);
// 2. Read the x402 URL and checkout id straight off the 402 body.
const { payment } = await res.json();
const x402Url: string = payment.x402Url; // where the client pays
const checkoutId: string = payment.checkoutId; // echo this back on every retry
// 3. Pay with your x402 client. The authorization response is NOT settlement:
// only a COMPLETED checkout releases the decision.
await x402Client.pay(x402Url, { amount: payment.amount, asset: payment.currency });
// 4. Poll the same request with the same key + checkout id, backing off.
for (let attempt = 0; attempt < 12; attempt++) {
res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-idempotency-key": idempotencyKey, "x-checkout-id": checkoutId },
}); // body may be omitted on retries
if (res.status === 200) {
const decision = await res.json(); // pe-governor-decision.v1
console.log(decision.decision, decision.allocationAmountUsd, decision.audit.decisionHash);
break;
}
if (res.status !== 202) throw new Error(await res.text()); // 402/409 are terminal
await new Promise((r) => setTimeout(r, Math.min(500 * 2 ** attempt, 8000)));
}O limite, dito com clareza
- 01. Sem execução de operações e sem envio de ordens
- 02. Sem custódia, carteiras ou chaves privadas
- 03. Sem corretagem ou transmissão de dinheiro
- 04. Nenhum LLM no caminho da decisão
- 05. Sem previsão própria de retorno e sem alegação de alfa proprietário
- 06. Ganho esperado e perda máxima são sempre entradas fornecidas pelo chamador
- 07. Nenhuma imposição nativa na corretora é alegada; seu adaptador aplica cada autorização
- 08. Uma autorização assinada comprova qual decisão de política foi emitida. Não é certificado de conformidade, decisão de subscrição, atestação on-chain nem aprovação da corretora.