Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
0
A2A A2A 0.3.0 v1.0.0 x402 micropay

Willform

willform.ai · Willform

Deploy and manage AI agents on dedicated VMs with pay-per-use billing via x402 payment protocol. Each agent runs as an OpenClaw VM with full isolation. Includes per-namespace AI agent (Willy) for infrastructure operations. Rate limits: 120 requests/min per authenticated user, 120 requests/min per IP.

🛡
Own this agent?
Verify the domain willform.ai via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership
🔔 Watch this agent for changes. Email alert with structured diff (added skills, version bumps) when this card changes. Structured JSON via card-changes API. Sign in to subscribe
Trust score
56/100
grade D · 9 criteria
Uptime
91.7%
12 probes
Revenue · 30d
no payment wallet declared
Usage · 7d
1
impressions + calls
Card drift · 7d
stable
0 snapshots tracked
Owner
unverified
claim this listing →
D
Conformance score: 56/100
D-grade: significant issues — auth-gated, partially broken, or stale.
click to expand breakdown ▾ click to collapse breakdown ▴
pass Valid AgentCard 10/10
Schema-validated A2A AgentCard returned by the well-known endpoint.
fail Live JSON-RPC 5/25
Endpoint replies but body isn't a valid JSON-RPC 2.0 A2A response.
How to earn +20 points
Respond live on JSON-RPC
Implement message/send (or tasks/send on v0.x). Return a 200 with a valid JSON-RPC response. Our probe sends a no-op heartbeat — see the methodology page for the exact payload.
Docs →
partial Protocol version 5/10
Declares pre-1.0 A2A 0.3.0 (Google preview). Upgrade to v1.x for full points.
How to earn +5 points
Declare protocolVersion
Add `"protocolVersion": "1.0"` to the AgentCard root. Without it, callers can't negotiate v0.x vs v1.0 compatibility.
Docs →
info JWS signature 0/10
Card is unsigned (most published agents are).
partial Uptime track record 14/15
11/12 probes succeeded (92% uptime).
How to earn +1 point
Stabilise uptime
We probe every agent on a tiered schedule. Sustained 99 %+ uptime over 20+ checks scores full points. Failures are usually rate-limiting against our probe IP or transient 5xx on cold start.
Docs →
pass Skill declaration 10/10
Declares 20 skills with structured metadata.
partial Verified Identity 5/10
Provider declared: Willform (https://willform.ai). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs →
pass Freshness + modern flags 5/5
declares 1 modern capability flag(s) (x402); seen in upstream source within 0d
partial Security declaration 2/5
Declares 2 security scheme(s) but none use PKCE or mTLS.
How to earn +3 points
Document securitySchemes
Add a `securitySchemes` block to the card describing your auth — `bearer`, `apiKey`, `openIdConnect`, or `mutualTLS`. Routers refuse to call agents that declare no auth model.
Docs →

Activity (audit trail)

last 24h · 0 calls Public aggregate · no PII recorded
0
calls 24h
1
calls 7d
1
search_impression 7d
Recent events (last 20)
When Event Method Status Latency
2026-05-16T17:31:28 search_impression api_search 200 ok
2026-05-15T18:21:41 search_impression api_search 200 ok
2026-05-15T18:12:23 search_impression api_search 200 ok
2026-05-15T16:45:15 search_impression api_search 200 ok
2026-05-15T16:45:14 search_impression api_search 200 ok
Uptime
91.7%
12 probes
Response
0ms
last probe
Skills
20
declared
Streaming
SSE-capable

Endpoints

Agent cardhttps://willform.ai/.well-known/agent-card.json
Providerhttps://willform.ai
Discovered via
github_code recrawl_hot

Skills · 20 declared · mapped to canonical taxonomy

Manage Namespaces

Create namespaces for organizing agents. Get details, rename, list or delete namespaces. Billing starts when agents are deployed.

canonical Invoicing and Billing match 86%
namespacemanage
Manage Credits

Check credit balance, get deposit addresses, and verify on-chain deposits.

canonical Invoicing and Billing match 89%
creditsbillingbalancedeposit
Namespace Agent

Interact with the per-namespace Willy AI agent. Invoke tools, send chat messages, check agent status, or recover a failed agent.

canonical Agent Profiles match 83%
agentwillyaimcprecover
Ask Willy

Get guidance on platform usage, pricing, available operations, and troubleshooting.

canonical Hardware Store Parts and Advice match 84%
helpguidecsfaqwilly
Register Agent Identity

Temporarily unavailable while managed-agent identity storage migrates to agent_instances. Use agent_identity_status to check current availability instead of att…

canonical Agent Profiles match 84%
erc8004identityregistryonchain
Agent Identity Status

Check whether managed-agent ERC-8004 identity operations are currently available, and when available return registration status, agent ID, endpoint URL, and cap…

canonical Agent Profiles match 83%
erc8004identitystatus
Update Agent Identity

Temporarily unavailable while managed-agent identity storage migrates to agent_instances.

canonical Agent Profiles match 83%
erc8004identityupdate
Deactivate Agent Identity

Temporarily unavailable while managed-agent identity storage migrates to agent_instances.

canonical Agent Profiles match 84%
erc8004identitydeactivate
Create Budget Policy

Create or update a budget policy for a specific agent within a namespace. Enforces daily spend limits, per-call maximums, and domain allowlists for x402 externa…

canonical Budgeting and Forecasting match 82%
budgetx402policyspend
List Budget Policies

List budget policies and today's spend for all agents in a namespace. Returns policy configuration and real-time daily spend summary.

canonical Budgeting and Forecasting match 83%
budgetx402policylist
Update Budget Policy

Update an existing budget policy. Only provided fields are changed — omit a field to leave it unchanged.

canonical X402 Usdc Payments match 82%
budgetx402policyupdate
Delete Budget Policy

Delete the budget policy for an agent. The agent falls back to platform default limits ($1.00/day, $0.10/call) after deletion.

canonical PayAction match 80%
budgetx402policydelete
x402 Proxy Call

Make an outbound HTTP request through the BudgetGuard x402 proxy. Enforces budget policies and handles x402 payment negotiation. If the target returns 402 (paym…

canonical X402 Usdc Payments match 86%
x402proxypaymenthttpbudget
x402 Transaction History

List x402 external payment transactions for a namespace. Shows settled, pending, and failed calls with amounts, target domains, and timestamps. Use this to audi…

canonical X402 Usdc Payments match 86%
x402transactionsaudithistory
Configure Managed Agents

Create, configure, and delete managed AI agents. Supports full CRUD lifecycle: create a named agent with an optional persona and tool pack, retrieve details, up…

canonical Multi Agent Planning match 83%
agentmanageconfigurecrud
Deploy and Undeploy Agents

Deploy a managed agent as a VM or stop a running VM. Deploy provisions the VM and transitions status to 'running'. Undeploy stops the VM but preserves the DB re…

canonical CI/CD and Deployment match 84%
agentdeployundeployvmlifecycle
List Tool Packs

List available tool packs for managed AI agents. Returns both built-in platform packs and any custom packs with their names, descriptions, and included tool arr…

canonical Tool Use Planning match 81%
toolpackagenttoolscatalog
Design Agent (Chat)

Design an AI agent through multi-turn conversation. Send messages to guide the design flow.

canonical Multi Agent Planning match 85%
agentdesignchatcreate
Agent Knowledge Management

Upload, list, remove, and search documents in the agent's knowledge base (vector RAG)

canonical Knowledge Base Operations match 85%
agentknowledgerag
Agent Self-Improvement

Propose tool/memory improvements, list pending proposals, and approve/reject them. Approved proposals are applied via the outbox reconciler (config update + VM …

canonical Agent Profiles match 83%
agentself-improvementproposal

Health · last 12 probes

When HTTP Live JSON-RPC Latency
2026-05-22 08:30:02 530
2026-05-20 23:54:11 200 648ms
2026-05-14 20:45:44 200 6976ms
2026-05-14 20:31:27 200 1503ms
2026-05-14 20:13:44 200 862ms
2026-05-14 19:50:06 200 656ms
2026-05-14 19:39:36 200 650ms
2026-05-14 19:27:50 200 816ms
2026-05-14 18:49:15 200 1410ms
2026-05-14 16:01:13 200 1631ms

Who's calling this agent 30d

5 interactions captured (impressions + lookups + A2A calls)

By AI host (caller_kind)
Unknown (no UA) 5 (100%)
Via which API surface
unknown 5
Top search intents that surfaced this agent
kubernetes deployment · 2 vergadering plannen · 1 agent · 1 '; drop table agents; -- · 1

Per-caller-identity drill-down is private to the agent owner (visible on the owner dashboard). Cross-platform context + competitor benchmarks in the Enterprise tier.

Cheaper or better alternatives per-skill

↑ 10 higher quality

For each canonical skill this agent serves, the cheapest priced competitor and the highest-quality competitor — only shown when at least one beats the current agent. Skills where this agent is already best on both axes are hidden.

PayAction schema_org
11 other agents serve this

Similar agents embedding-nearest

Willform
Deploy and manage AI agents on dedicated VMs with pay-per-use billing via x402 payment protocol. Each agent runs as an OpenClaw VM with full
Willform · q 0%
Vaultfire Agent Hub
The trust infrastructure for AI agents. 134 smart contracts across 4 mainnet chains — on-chain identity (ERC-8004), verifiable reputation, p
Vaultfire Protocol · q 80%
Execution Market
Universal Execution Layer — the infrastructure that converts AI intent into physical action. Execution Market connects AI agents with execut
Ultravioleta DAO · q 78%
Execution Market
Universal Execution Layer — the infrastructure that converts AI intent into physical action. Execution Market connects AI agents with execut
Ultravioleta DAO · q 78%
Voidly Network Intelligence
Global internet censorship measurement, predictive risk intelligence, E2E encrypted agent-to-agent communication, and the first off-chain cr
Voidly Research · q 75%
x402 Market Intelligence MCP
Hosted x402 paid-service intelligence graph for paid API discovery, verified x402 APIs, x402 endpoint rankings, search rank monitoring, buye
x402-market-intel-mcp.mtree.workers.dev · q 66%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime A2A protocol version
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/willform.ai.svg)](https://agenstry.com/agents/willform.ai)
[![Verified Business](https://agenstry.com/badge/willform.ai/identity.svg)](https://agenstry.com/agents/willform.ai)
[![Uptime](https://agenstry.com/badge/willform.ai/uptime.svg)](https://agenstry.com/agents/willform.ai)
[![A2A version](https://agenstry.com/badge/willform.ai/protocol.svg)](https://agenstry.com/agents/willform.ai)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "protocolVersion": "0.3.0",
  "name": "Willform",
  "description": "Deploy and manage AI agents on dedicated VMs with pay-per-use billing via x402 payment protocol. Each agent runs as an OpenClaw VM with full isolation. Includes per-namespace AI agent (Willy) for infrastructure operations. Rate limits: 120 requests/min per authenticated user, 120 requests/min per IP.",
  "provider": {
    "organization": "Willform",
    "url": "https://willform.ai"
  },
  "version": "1.0.0",
  "url": "https://willform.ai",
  "preferredTransport": "JSONRPC",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": true
  },
  "rateLimits": {
    "perUser": {
      "requests": 120,
      "windowSeconds": 60
    },
    "perIp": {
      "requests": 120,
      "windowSeconds": 60
    }
  },
  "x402Payment": {
    "description": "USDC payment for credit top-up. Min $5.00, max $100.00 per payment.",
    "networks": [
      "eip155:8453"
    ],
    "token": "USDC",
    "minPayment": "5.00",
    "maxPayment": "100.00",
    "facilitator": "https://api.cdp.coinbase.com/platform/v2/x402"
  },
  "identity": {
    "registry": "eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
    "agentId": 21777
  },
  "securitySchemes": {
    "oauth2": {
      "type": "oauth2",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://willform.ai/api/oauth/authorize",
          "tokenUrl": "https://willform.ai/api/oauth/token",
          "scopes": {
            "mcp:tools": "Access MCP tools",
            "a2a:skills": "Access A2A skills"
          }
        }
      }
    },
    "x402": {
      "type": "http",
      "scheme": "x402",
      "description": "x402 USDC payment protocol for credit top-up"
    }
  },
  "security": [
    {
      "oauth2": [
        "mcp:tools",
        "a2a:skills"
      ]
    }
  ],
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "namespace_manage",
      "name": "Manage Namespaces",
      "description": "Create namespaces for organizing agents. Get details, rename, list or delete namespaces. Billing starts when agents are deployed.",
      "tags": [
        "namespace",
        "manage"
      ],
      "examples": [
        "Create a new namespace",
        "List my namespaces",
        "Show namespace details",
        "Rename my namespace"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "operation"
        ],
        "properties": {
          "operation": {
            "type": "string",
            "enum": [
              "create",
              "get",
              "list",
              "update",
              "delete"
            ],
            "description": "Operation to perform"
          },
          "namespaceId": {
            "type": "string",
            "format": "uuid",
            "description": "Required for get, update, delete"
          },
          "name": {
            "type": "string",
            "description": "Namespace display name \u2014 required for create"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "credits_manage",
      "name": "Manage Credits",
      "description": "Check credit balance, get deposit addresses, and verify on-chain deposits.",
      "tags": [
        "credits",
        "billing",
        "balance",
        "deposit"
      ],
      "examples": [
        "Check my balance",
        "How many credits do I have?",
        "Get deposit address for USDC",
        "Verify my deposit transaction"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "operation"
        ],
        "properties": {
          "operation": {
            "type": "string",
            "enum": [
              "balance",
              "deposit_address",
              "verify_deposit"
            ],
            "description": "Operation to perform"
          },
          "chainId": {
            "type": "number",
            "description": "Chain ID for deposit address (e.g., 8453 for Base) \u2014 used with deposit_address"
          },
          "txHash": {
            "type": "string",
            "description": "On-chain transaction hash \u2014 required for verify_deposit"
          },
          "tokenSymbol": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT"
            ],
            "description": "Token symbol (default USDC) \u2014 used with verify_deposit"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_manage",
      "name": "Namespace Agent",
      "description": "Interact with the per-namespace Willy AI agent. Invoke tools, send chat messages, check agent status, or recover a failed agent.",
      "tags": [
        "agent",
        "willy",
        "ai",
        "mcp",
        "recover"
      ],
      "examples": [
        "Check agent status for my namespace",
        "Ask the agent to list running pods",
        "Invoke agent tool to check namespace usage",
        "Recover my failed agent"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "namespaceId",
          "operation"
        ],
        "properties": {
          "namespaceId": {
            "type": "string",
            "format": "uuid",
            "description": "Namespace whose agent to interact with"
          },
          "operation": {
            "type": "string",
            "enum": [
              "status",
              "invoke",
              "chat",
              "recover"
            ],
            "description": "Operation to perform"
          },
          "tool": {
            "type": "string",
            "description": "Willy agent tool name \u2014 required for invoke"
          },
          "params": {
            "type": "object",
            "description": "Tool parameters \u2014 used with invoke"
          },
          "message": {
            "type": "string",
            "description": "Natural language message \u2014 required for chat"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ask_willy",
      "name": "Ask Willy",
      "description": "Get guidance on platform usage, pricing, available operations, and troubleshooting.",
      "tags": [
        "help",
        "guide",
        "cs",
        "faq",
        "willy"
      ],
      "examples": [
        "How do I deploy a PostgreSQL database?",
        "What are the pricing rates?",
        "postgres \ubc30\ud3ec\ud558\ub824\uba74 \uc5b4\ub5bb\uac8c \ud574?"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "question"
        ],
        "properties": {
          "question": {
            "type": "string",
            "description": "Question or topic to get guidance on"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_register_identity",
      "name": "Register Agent Identity",
      "description": "Temporarily unavailable while managed-agent identity storage migrates to agent_instances. Use agent_identity_status to check current availability instead of attempting registration.",
      "tags": [
        "erc8004",
        "identity",
        "registry",
        "onchain"
      ],
      "examples": [
        "Check whether ERC-8004 identity registration is currently available",
        "Ask if agent identity writes are still paused during migration"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "agentName",
          "namespaceName"
        ],
        "properties": {
          "agentName": {
            "type": "string",
            "description": "Name of the agent to register"
          },
          "namespaceName": {
            "type": "string",
            "description": "Name of the namespace containing the agent"
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional capability tags (e.g., ['deploy', 'manage'])"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_identity_status",
      "name": "Agent Identity Status",
      "description": "Check whether managed-agent ERC-8004 identity operations are currently available, and when available return registration status, agent ID, endpoint URL, and capabilities.",
      "tags": [
        "erc8004",
        "identity",
        "status"
      ],
      "examples": [
        "Is my agent registered on ERC-8004?",
        "Get the on-chain agent ID for agent 'my-agent'"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "agentName",
          "namespaceName"
        ],
        "properties": {
          "agentName": {
            "type": "string",
            "description": "Name of the agent to check"
          },
          "namespaceName": {
            "type": "string",
            "description": "Name of the namespace containing the agent"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_identity_update",
      "name": "Update Agent Identity",
      "description": "Temporarily unavailable while managed-agent identity storage migrates to agent_instances.",
      "tags": [
        "erc8004",
        "identity",
        "update"
      ],
      "examples": [
        "Check whether identity updates are available yet",
        "Ask if ERC-8004 capability updates are still paused during migration"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "agentName",
          "namespaceName"
        ],
        "properties": {
          "agentName": {
            "type": "string",
            "description": "Name of the registered agent"
          },
          "namespaceName": {
            "type": "string",
            "description": "Name of the namespace containing the agent"
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Updated capability tags (replaces previous list)"
          },
          "metadata": {
            "type": "object",
            "description": "Arbitrary metadata key-value pairs (max 4KB)"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_deactivate_identity",
      "name": "Deactivate Agent Identity",
      "description": "Temporarily unavailable while managed-agent identity storage migrates to agent_instances.",
      "tags": [
        "erc8004",
        "identity",
        "deactivate"
      ],
      "examples": [
        "Check whether identity deactivation is available yet",
        "Ask if ERC-8004 deactivation is still paused during migration"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "agentName",
          "namespaceName"
        ],
        "properties": {
          "agentName": {
            "type": "string",
            "description": "Name of the registered agent"
          },
          "namespaceName": {
            "type": "string",
            "description": "Name of the namespace containing the agent"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "budget_policy_create",
      "name": "Create Budget Policy",
      "description": "Create or update a budget policy for a specific agent within a namespace. Enforces daily spend limits, per-call maximums, and domain allowlists for x402 external API calls.",
      "tags": [
        "budget",
        "x402",
        "policy",
        "spend"
      ],
      "examples": [
        "Set a $5/day budget for my scraper agent",
        "Limit per-call spend to $0.05 for agent 'default'",
        "Restrict agent to only call api.example.com"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "namespaceName",
          "agentName",
          "dailyLimitUsd",
          "perCallLimitUsd"
        ],
        "properties": {
          "namespaceName": {
            "type": "string",
            "description": "Namespace display name"
          },
          "agentName": {
            "type": "string",
            "description": "Agent identifier within the namespace"
          },
          "dailyLimitUsd": {
            "type": "string",
            "description": "Daily spend limit in USD (e.g., '5.00')"
          },
          "perCallLimitUsd": {
            "type": "string",
            "description": "Maximum spend per single API call in USD"
          },
          "allowedDomains": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Allowlist of permitted domains"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "budget_policy_list",
      "name": "List Budget Policies",
      "description": "List budget policies and today's spend for all agents in a namespace. Returns policy configuration and real-time daily spend summary.",
      "tags": [
        "budget",
        "x402",
        "policy",
        "list"
      ],
      "examples": [
        "Show budget policies for my namespace",
        "How much has each agent spent today?"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "namespaceName"
        ],
        "properties": {
          "namespaceName": {
            "type": "string",
            "description": "Namespace display name"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "budget_policy_update",
      "name": "Update Budget Policy",
      "description": "Update an existing budget policy. Only provided fields are changed \u2014 omit a field to leave it unchanged.",
      "tags": [
        "budget",
        "x402",
        "policy",
        "update"
      ],
      "examples": [
        "Increase daily budget to $10 for agent 'scraper'",
        "Add api.newsite.com to allowed domains"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "namespaceName",
          "agentName"
        ],
        "properties": {
          "namespaceName": {
            "type": "string",
            "description": "Namespace display name"
          },
          "agentName": {
            "type": "string",
            "description": "Agent identifier whose policy to update"
          },
          "dailyLimitUsd": {
            "type": "string",
            "description": "New daily spend limit in USD"
          },
          "perCallLimitUsd": {
            "type": "string",
            "description": "New per-call maximum in USD"
          },
          "allowedDomains": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Replace allowlist with this array"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "budget_policy_delete",
      "name": "Delete Budget Policy",
      "description": "Delete the budget policy for an agent. The agent falls back to platform default limits ($1.00/day, $0.10/call) after deletion.",
      "tags": [
        "budget",
        "x402",
        "policy",
        "delete"
      ],
      "examples": [
        "Remove budget policy for agent 'old-scraper'",
        "Reset agent budget to defaults"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "namespaceName",
          "agentName"
        ],
        "properties": {
          "namespaceName": {
            "type": "string",
            "description": "Namespace display name"
          },
          "agentName": {
            "type": "string",
            "description": "Agent identifier whose policy to delete"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "x402_proxy_call",
      "name": "x402 Proxy Call",
      "description": "Make an outbound HTTP request through the BudgetGuard x402 proxy. Enforces budget policies and handles x402 payment negotiation. If the target returns 402 (payment required), the proxy returns the payment terms. Successful paid calls are deducted from the namespace balance.",
      "tags": [
        "x402",
        "proxy",
        "payment",
        "http",
        "budget"
      ],
      "examples": [
        "Call https://api.example.com/data through the x402 proxy",
        "POST to a paid API endpoint with budget enforcement"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "namespaceName",
          "agentName",
          "targetUrl"
        ],
        "properties": {
          "namespaceName": {
            "type": "string",
            "description": "Namespace display name"
          },
          "agentName": {
            "type": "string",
            "description": "Agent identifier used for budget enforcement"
          },
          "targetUrl": {
            "type": "string",
            "description": "Full URL of the external API to call"
          },
          "method": {
            "type": "string",
            "enum": [
              "GET",
              "POST",
              "PUT",
              "PATCH",
              "DELETE"
            ],
            "description": "HTTP method (default GET)"
          },
          "body": {
            "type": "string",
            "description": "Request body as a string (for POST/PUT/PATCH)"
          },
          "headers": {
            "type": "object",
            "description": "Additional request headers"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "x402_transactions",
      "name": "x402 Transaction History",
      "description": "List x402 external payment transactions for a namespace. Shows settled, pending, and failed calls with amounts, target domains, and timestamps. Use this to audit spending and verify payment outcomes.",
      "tags": [
        "x402",
        "transactions",
        "audit",
        "history"
      ],
      "examples": [
        "Show recent x402 transactions for my namespace",
        "Audit x402 spending history"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "namespaceName"
        ],
        "properties": {
          "namespaceName": {
            "type": "string",
            "description": "Namespace display name"
          },
          "limit": {
            "type": "number",
            "description": "Number of transactions to return (default 50, max 200)"
          },
          "offset": {
            "type": "number",
            "description": "Pagination offset (default 0)"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_configure",
      "name": "Configure Managed Agents",
      "description": "Create, configure, and delete managed AI agents. Supports full CRUD lifecycle: create a named agent with an optional persona and tool pack, retrieve details, update metadata, and delete permanently. Deletion is irreversible \u2014 stops the VM and removes all secrets. Use agent_lifecycle to deploy or stop the VM after creation or updates.",
      "tags": [
        "agent",
        "manage",
        "configure",
        "crud"
      ],
      "examples": [
        "Create an agent named 'SRE Bot' with an on-call persona",
        "List all my managed AI agents",
        "Get details for agent ID abc123",
        "Update agent persona to focus on security reviews",
        "Delete agent abc123 permanently"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "operation"
        ],
        "properties": {
          "operation": {
            "type": "string",
            "enum": [
              "create",
              "list",
              "get",
              "update",
              "delete"
            ],
            "description": "Operation to perform"
          },
          "agentId": {
            "type": "string",
            "format": "uuid",
            "description": "Required for get, update, delete"
          },
          "name": {
            "type": "string",
            "description": "Agent display name \u2014 required for create"
          },
          "persona": {
            "type": "string",
            "description": "Optional persona/system prompt for the agent"
          },
          "toolPackId": {
            "type": "string",
            "format": "uuid",
            "description": "Optional tool pack UUID to assign"
          },
          "presetId": {
            "type": "string",
            "description": "Persona preset ID (sre, cs, sales, product, custom) \u2014 used with create"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_lifecycle",
      "name": "Deploy and Undeploy Agents",
      "description": "Deploy a managed agent as a VM or stop a running VM. Deploy provisions the VM and transitions status to 'running'. Undeploy stops the VM but preserves the DB record and config for future re-deployment. Check credits_balance before deploying.",
      "tags": [
        "agent",
        "deploy",
        "undeploy",
        "vm",
        "lifecycle"
      ],
      "examples": [
        "Deploy agent abc123 as a VM",
        "Stop the running VM for agent abc123",
        "Re-deploy agent after updating its persona"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "operation",
          "agentId"
        ],
        "properties": {
          "operation": {
            "type": "string",
            "enum": [
              "deploy",
              "undeploy"
            ],
            "description": "deploy to start VM, undeploy to stop VM"
          },
          "agentId": {
            "type": "string",
            "format": "uuid",
            "description": "Agent to deploy or undeploy"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "toolpack_list",
      "name": "List Tool Packs",
      "description": "List available tool packs for managed AI agents. Returns both built-in platform packs and any custom packs with their names, descriptions, and included tool arrays.",
      "tags": [
        "toolpack",
        "agent",
        "tools",
        "catalog"
      ],
      "examples": [
        "What tool packs are available for agents?",
        "List built-in tool packs",
        "Show tool pack options before creating an agent"
      ],
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_design",
      "name": "Design Agent (Chat)",
      "description": "Design an AI agent through multi-turn conversation. Send messages to guide the design flow.",
      "tags": [
        "agent",
        "design",
        "chat",
        "create"
      ],
      "examples": [
        "I want to design a new AI agent",
        "Create a coding assistant agent"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string",
            "description": "Your message to the design assistant"
          },
          "sessionId": {
            "type": "string",
            "description": "Session ID to continue an existing conversation"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_knowledge",
      "name": "Agent Knowledge Management",
      "description": "Upload, list, remove, and search documents in the agent's knowledge base (vector RAG)",
      "tags": [
        "agent",
        "knowledge",
        "rag"
      ],
      "examples": [
        "Upload a document titled 'API Guide' to agent abc",
        "Search agent abc's knowledge for 'authentication'",
        "List all documents for agent abc"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "action",
          "agentId"
        ],
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "upload",
              "list",
              "remove",
              "search"
            ],
            "description": "Action to perform on the knowledge base"
          },
          "agentId": {
            "type": "string",
            "format": "uuid",
            "description": "Agent whose knowledge base to manage"
          },
          "name": {
            "type": "string",
            "description": "Document name \u2014 required for upload"
          },
          "content": {
            "type": "string",
            "description": "Document content (markdown) \u2014 required for upload"
          },
          "sourceType": {
            "type": "string",
            "description": "Optional source type tag (e.g., 'manual', 'url')"
          },
          "documentId": {
            "type": "string",
            "format": "uuid",
            "description": "Document ID \u2014 required for remove"
          },
          "query": {
            "type": "string",
            "description": "Search query string \u2014 required for search"
          },
          "topK": {
            "type": "number",
            "description": "Number of results to return for search (default 5, max 50)"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agent_self_improve",
      "name": "Agent Self-Improvement",
      "description": "Propose tool/memory improvements, list pending proposals, and approve/reject them. Approved proposals are applied via the outbox reconciler (config update + VM restart).",
      "tags": [
        "agent",
        "self-improvement",
        "proposal"
      ],
      "examples": [
        "Propose a new tool 'fetch_weather' for agent abc",
        "List pending proposals for agent abc",
        "Approve proposal xyz for agent abc"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "action",
          "agentId"
        ],
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "propose_tool",
              "propose_memory",
              "list_proposals",
              "approve_proposal",
              "reject_proposal"
            ],
            "description": "Self-improvement action to perform"
          },
          "agentId": {
            "type": "string",
            "format": "uuid",
            "description": "Agent to manage improvements for"
          },
          "title": {
            "type": "string",
            "description": "Proposal title \u2014 required for propose_tool/propose_memory"
          },
          "rationale": {
            "type": "string",
            "description": "Why this improvement is needed"
          },
          "diff": {
            "type": "object",
            "description": "JSON diff describing the proposed change"
          },
          "proposalId": {
            "type": "string",
            "description": "Proposal ID \u2014 required for approve/reject"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "testing",
              "ready",
              "approved",
              "applied",
              "rejected"
            ],
            "description": "Filter proposals by status (for list_proposals)"
          }
        }
      },
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ]
}