Autoriza capital nuevo, limitado al importe permitido exacto.
La capa verificable de autorización previa a la operación para el capital autónomo
¿Ya tienes un agente de trading?
Añade Profit Engine Governor.
Conserva la custodia. Conserva el control.
PE Governor evalúa cada intención de orden enviada frente a tus reglas, coordina la capacidad de la cartera entre agentes y devuelve una autorización firmada de corta duración por el importe permitido exacto. Tu ejecutor la verifica; PE Governor nunca custodia fondos ni coloca la orden.
PE Governor de Solarly.
Veredictos de decisión
Reduce una posición gestionada existente. Nunca superes el importe devuelto.
Falló una regla estricta. No vuelvas a actuar sobre este candidato.
Bloqueo temporal o no seleccionado en este ciclo. Detente y vuelve a preguntar.
Una decisión determinista, renderizada en vivo
Esta tarjeta la produce la misma política pura que ejecuta el endpoint de pago, a partir de la solicitud de ejemplo siguiente. Una entrada idéntica siempre produce un hash de decisión idéntico.
Importe permitido
25.000,00 US$
seleccionado: cand_spot_btc_01
- cand_spot_btc_01puesto 1ALLOCATE
- cand_eq_msft_02puesto 2HOLD
- Hash de la solicitud
- request a2a7c6d765b6ef70214374eef0f1ad0fc4276c754b69030219ecdad05ab6e468
- Hash de la decisión
- decision 855dec83616b3c4363d24707604abf566e092ca8f4e67f7d5bff77007729bd68
Controles de riesgo (observado frente a límite)
- portfolio_state_fresh15 / 120PASS
- portfolio_state_not_future0 / 5PASS
- reconciliation_currenttrue / truePASS
- kill_switch_clearfalse / falsePASS
- daily_loss_budget400 / 5000PASS
- max_drawdown1.8 / 8PASS
Cómo funciona
1. Proponer
Tus agentes emiten hasta 50 candidatos en un bus común: carril, activo, lado, nocional solicitado, pérdida máxima y ventaja neta esperada aportadas por el emisor, estado de evidencia y caducidad.
2. Gobernar
PE Governor aplica una única política pura: frescura del estado, conciliación, interruptor de parada, evidencia, presupuestos de pérdida, reserva, topes de nocional y concurrencia; luego clasifica y elige como máximo un ganador.
3. Obedecer
El capital se mueve según tus términos. La misma solicitud entra y sale una decisión idéntica byte a byte, con hashes SHA-256 de la solicitud y la decisión canónicas para auditoría.
Control fundamental para el capital autónomo
Una capa de autorización determinista que hace que las decisiones de los agentes sean acotadas, auditables y portables en toda tu pila de ejecución.
Recibos de política a prueba de manipulación
Cada respuesta vincula la solicitud canónica y la decisión con hashes SHA-256, la versión de la política, la marca de tiempo, el importe permitido exacto y las comprobaciones de valor observado frente al límite. Las repeticiones son idénticas byte a byte.
Gobernanza de toda la cartera
Evalúa hasta 50 candidatos de varias estrategias contra una única instantánea de cartera reciente y conciliada. Las reglas de pérdida, drawdown, reserva, nocional, concurrencia e interruptor de emergencia se aplican antes de seleccionar como máximo un ganador.
Pago nativo para máquinas
Paga el precio publicado por decisión, escalonado por riesgo en USDC en Base mediante el flujo de checkout de Coinbase Business, o usa créditos prepagados. La idempotencia evita compras lógicas duplicadas.
La aplicación empieza en tu adaptador de ejecución
PE Governor devuelve la autorización; tu adaptador la verifica y la obedece antes de enviar una orden. Coinbase no aplica actualmente las decisiones de PE en el mercado, y el pago nunca cambia el veredicto.
Ver la política de instalaciónAutorizaciones firmadas que tu ejecutor puede verificar
Cada asignación gobernada lleva una autorización de corta duración, firmada criptográficamente y vinculada a su intención exacta y al último estado de riesgo enviado de la cartera.
Pruebas de política verificables
La firma cubre la carga canónica de la prueba: emisor, id de clave, veredicto, importe exacto permitido, candidato, estrategia, carril, ámbito completo, hash de la solicitud, hash de la decisión, hash del estado de la cartera, la cotización duradera y la caducidad. Descarga la clave pública una vez y verifica sin conexión.
Reservas atómicas entre agentes
Los agentes concurrentes del mismo inquilino y cartera compiten por un único libro de riesgo agregado. Un candidato ganador solo es ejecutable si se concede la reserva; de lo contrario, el veredicto pasa a HOLD.
Precio por bandas de riesgo
El precio de una decisión escala con el capital en riesgo: el mayor nocional solicitado o pérdida máxima de la solicitud. La cotización es determinista y está ligada al hash. El pago compra la evaluación, nunca un veredicto.
Precio determinista por decisión
El capital en riesgo es max(requestedNotionalUsd, maximumLossUsd) entre los candidatos enviados. Una unidad de crédito equivale a 0,05 USDC.
| Capital en riesgo | Precio (USDC en Base) | Unidades de crédito |
|---|---|---|
| hasta 1.000 $ | 0.05 USDC | 1 |
| hasta 10.000 $ | 0.10 USDC | 2 |
| hasta 100.000 $ | 1.00 USDC | 20 |
| hasta 500.000 $ | 5.00 USDC | 100 |
| más de 500.000 $ | 10.00 USDC | 200 |
El mismo precio se aplica a ALLOCATE, REDUCE, REJECT y HOLD. No hay suscripción.
Verifica antes de ejecutar
Tu adaptador de ejecución debe verificar el hash de la carga, la firma, el emisor y el id de clave, la ventana de validez, el token de reserva vigente, todos los hashes esperados y que la orden coincida exactamente con la intención y el importe autorizados. Consume cada autorización una sola vez en un almacén duradero y rechaza cualquier orden sin autorización 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);Retén la capacidad de la cartera durante toda la ventana de ejecución
OpcionalVerificar una autorización firmada sin conexión sigue siendo suficiente por sí solo. Si quieres más, reclámala: PE Governor retiene entonces la parte de capacidad agregada de esa autorización hasta que tu adaptador informe del resultado, de modo que un segundo agente no pueda gastar dos veces el mismo margen.
AUTHORIZED
Emitida con la decisión y reteniendo ya capacidad durante su breve ventana de validez.
CLAIMED
Tu adaptador fijó una clave de reclamación secreta y ahora es responsable del resultado. Ningún otro llamante puede cambiar su estado.
COMMITTED
El adaptador actuó. La capacidad sigue retenida, porque el capital comprometido está en uso hasta que concilies.
RELEASED
El adaptador se retiró sin actuar. La capacidad se devuelve de inmediato.
EXPIRED
Nadie informó a tiempo. La capacidad se devuelve sola, sin necesidad de ninguna llamada de limpieza.
// 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 },
});
}El estado del ciclo de vida es el registro de tu propia política. Confirmar deja constancia de que tu adaptador actuó; PE Governor sigue sin colocar, enrutar ni liquidar ninguna orden.
Instala la política una sola vez
Conecta la llamada antes de cualquier asignación igual o superior al umbral del propietario. Detente ante REJECT o HOLD y nunca superes un importe 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% yoursCargas de solicitud y respuesta
{
"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"
}
}Pago y liquidación
Paga por decisión en USDC sobre Base mediante un checkout de Coinbase Business, o consume créditos prepagados. No hay suscripción. La autorización no es liquidación: solo un checkout COMPLETED libera la decisión.
- Step 01
POST + clave de idempotencia
Una solicitud lógica se reserva de forma atómica.
- Step 02
402 con URL x402
Se crea exactamente un checkout de Coinbase.
- Step 03
202 mientras se procesa
Reintenta con la misma clave y el mismo id de checkout.
- Step 04
COMPLETED
El sondeo confirma un checkout COMPLETED. La confirmación por webhook firmado está disponible cuando se configura.
- Step 05
Decisión 200
Se almacena una vez; las repeticiones son idénticas byte a byte.
La máquina de estados de 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-identicalBucle de reintento del cliente
Una integración mínima. Envía una clave de idempotencia UUID v4, lee la URL x402 y el id del checkout en el cuerpo del 402, págalo y luego consulta con la misma clave y el mismo id de checkout hasta que se libere la decisión.
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)));
}El límite, dicho con claridad
- 01. Sin ejecución de operaciones ni envío de órdenes
- 02. Sin custodia, monederos ni claves privadas
- 03. Sin intermediación ni transmisión de dinero
- 04. Ningún LLM en la ruta de decisión
- 05. Sin previsión propia de rentabilidad ni afirmaciones de alfa propietario
- 06. La ventaja esperada y la pérdida máxima siempre son datos aportados por el emisor
- 07. No se afirma ninguna aplicación nativa en el mercado; tu adaptador aplica cada autorización
- 08. Una autorización firmada prueba qué decisión de política se emitió. No es un certificado de cumplimiento, una decisión de suscripción, una atestación on-chain ni una aprobación del mercado.