Estado de la sesión semanal
Presupuesto restante
$3.82
de $5.00 asignados esta sesión
Transacciones confirmadas
12
$1.18 gastados · 0 bloqueados
Límite por tarea
$0.50
máx. por llamada individual
Pagos bloqueados
0
política: fail-closed activa
Flujo del protocolo x402
Orquestador
set_policy()
delega con
SpendingPolicy
SpendingPolicy
ContentAgent
preToolCheck()
HTTP GET
(sin auth)
(sin auth)
API 402-gated
responde 402
negocia precio
& firma tx
& firma tx
Base Mainnet
tx confirmada
HTTP retry
+ receipt
+ receipt
Respuesta API
200 OK + datos
🛡️
SpendingPolicy — ContentAgent
Per-task budget
$0.50
Per-session budget
$5.00
Rate limit
30 tx/h
Red activa
Base
Sepolia
Destinatarios permitidos:
api.imagegen.io
api.seoaudit.io
api.socialscheduler.io
🔌
APIs externas 402-gated — CULTIVA IA
| ImageGenAPI | api.imagegen.io/generate | $0.05/img |
| SEOAuditAPI | api.seoaudit.io/check | $0.02/url |
| SocialScheduler | api.socialscheduler.io/post | $0.01/post |
Cartera no custodiada — ERC-4337 smart account. El orquestador fija la política; el agente no puede escalar sus propios límites de gasto.
{">"}
orchestrator.ts — ContentAgent CULTIVA IA
// orchestrator.ts — CULTIVA IA ContentAgent
import { Client } from "@modelcontextprotocol/sdk/client";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio";
const APIS = {
imageGen: { endpoint: "api.imagegen.io", cost: 0.05 },
seoAudit: { endpoint: "api.seoaudit.io", cost: 0.02 },
social: { endpoint: "api.socialscheduler.io", cost: 0.01 },
};
async function runWeeklySession() {
const key = process.env.WALLET_PRIVATE_KEY;
if (!key) throw new Error("WALLET_PRIVATE_KEY no configurada");
const transport = new StdioClientTransport({
command: "npx", args: ["agentwallet-sdk@6.0.0"],
env: { WALLET_PRIVATE_KEY: key, PATH: process.env.PATH ?? "" },
});
const agentpay = new Client({ name: "cultiva-orchestrator", version: "2.1.0" });
await agentpay.connect(transport);
// ① Fijar política ANTES de delegar al agente
const policy = await agentpay.callTool({
name: "set_policy",
arguments: {
per_task_budget: 0.50,
per_session_budget: 5.00,
allowlisted_recipients: Object.values(APIS).map(a => a.endpoint),
rate_limit: { max_tx_per_hour: 30 },
},
});
if (policy.isError) throw new Error("Política fallida — no delegar");
// ② Ejecutar tareas con preToolCheck en cada llamada
await paidTask(agentpay, APIS.imageGen, "Generar imagen semana 25");
await paidTask(agentpay, APIS.seoAudit, "Auditar cultivaia.es");
await paidTask(agentpay, APIS.social, "Publicar LinkedIn post");
// ③ Auditoría post-sesión
const txLog = await agentpay.callTool({ name: "list_transactions" });
console.log("[CULTIVA] Sesión completada:", txLog);
}
📋
Log de transacciones — Sesión semana 25
Política activa: fail-closed. Cualquier fallo en check_spending bloquea la acción. Sin fallback a acceso no metered.
| Hora | Servicio | Importe | Hash | Estado |
|---|---|---|---|---|
| 09:02:11 | ImageGenAPI × 5 | $0.25 | 0xa3f2...1e09 | ● CONFIRMADO |
| 09:04:33 | SEOAuditAPI × 8 | $0.16 | 0xb91c...7f44 | ● CONFIRMADO |
| 09:07:55 | SocialScheduler × 7 | $0.07 | 0xd04a...2b13 | ● CONFIRMADO |
| 09:09:18 | ImageGenAPI × 8 | $0.40 | 0xc77e...9a02 | ● CONFIRMADO |
| 09:10:02 | ImageGenAPI × 6 | $0.30 | — | ✕ BLOQUEADO |
Total gastado: $0.88 · Bloqueados: 1 · Ahorrado por política: $0.30
BASE SEPOLIA
Guía de implementación para CULTIVA IA
📦
Pin de dependencias
Usar siempre
agentwallet-sdk@6.0.0 exacto. Nunca @latest en herramientas que gestionan claves privadas.🔑
Política antes de delegar
Llamar
set_policy() SIEMPRE antes de que el agente ejecute cualquier tarea. Verificar éxito — fallo silencioso = sin controles.🧾
Auditoría post-sesión
Ejecutar
list_transactions() en el hook post-tarea. Log estructurado para facturación a cliente y detección de anomalías.