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

Verdict 01ALLOCATE

Autoriza capital nuevo, limitado al importe permitido exacto.

Verdict 02REDUCE

Reduce una posición gestionada existente. Nunca superes el importe devuelto.

Verdict 03REJECT

Falló una regla estricta. No vuelvas a actuar sobre este candidato.

Verdict 04HOLD

Bloqueo temporal o no seleccionado en este ciclo. Detente y vuelve a preguntar.

01Una decisión determinista, renderizada en vivo

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.

ALLOCATEpe-governor-policy-1.0.0

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

Phase 01

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.

Phase 02

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.

Phase 03

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.

02Control fundamental para el capital autónomo

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ón
03Autorizaciones firmadas que tu ejecutor puede verificar

Autorizaciones 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.

Precio determinista por decisión
Capital en riesgoPrecio (USDC en Base)Unidades de crédito
hasta 1.000 $0.05 USDC1
hasta 10.000 $0.10 USDC2
hasta 100.000 $1.00 USDC20
hasta 500.000 $5.00 USDC100
más de 500.000 $10.00 USDC200

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.

verify-authorization.ts
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);
Claves de verificación
04Retén la capacidad de la cartera durante toda la ventana de ejecución

Retén la capacidad de la cartera durante toda la ventana de ejecución

Opcional

Verificar 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.

  1. AUTHORIZED

    Emitida con la decisión y reteniendo ya capacidad durante su breve ventana de validez.

  2. CLAIMED

    Tu adaptador fijó una clave de reclamación secreta y ahora es responsable del resultado. Ningún otro llamante puede cambiar su estado.

  3. COMMITTED

    El adaptador actuó. La capacidad sigue retenida, porque el capital comprometido está en uso hasta que concilies.

  4. RELEASED

    El adaptador se retiró sin actuar. La capacidad se devuelve de inmediato.

  5. EXPIRED

    Nadie informó a tiempo. La capacidad se devuelve sola, sin necesidad de ninguna llamada de limpieza.

authorization-lifecycle.ts
// 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.

05Instala la política una sola vez

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-policy.txt
# 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% yours

Cargas de solicitud y respuesta

06Solicitud — pe-governor-request.v1
request.json
{
  "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"
    }
  ]
}
07Respuesta — pe-governor-decision.v1
decision.json
{
  "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"
  }
}
08Pago y liquidación

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.

  1. Step 01

    POST + clave de idempotencia

    Una solicitud lógica se reserva de forma atómica.

  2. Step 02

    402 con URL x402

    Se crea exactamente un checkout de Coinbase.

  3. Step 03

    202 mientras se procesa

    Reintenta con la misma clave y el mismo id de checkout.

  4. Step 04

    COMPLETED

    El sondeo confirma un checkout COMPLETED. La confirmación por webhook firmado está disponible cuando se configura.

  5. 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

Bucle 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.

retry-loop.ts
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)));
}

Guía completa: primera compra

09El límite, dicho con claridad

El límite, dicho con claridad

  1. 01. Sin ejecución de operaciones ni envío de órdenes
  2. 02. Sin custodia, monederos ni claves privadas
  3. 03. Sin intermediación ni transmisión de dinero
  4. 04. Ningún LLM en la ruta de decisión
  5. 05. Sin previsión propia de rentabilidad ni afirmaciones de alfa propietario
  6. 06. La ventaja esperada y la pérdida máxima siempre son datos aportados por el emisor
  7. 07. No se afirma ninguna aplicación nativa en el mercado; tu adaptador aplica cada autorización
  8. 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.