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.
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.
D
Conformance score: 56/100
D-grade: significant issues — auth-gated, partially broken, or stale.
click to expand breakdown ▾
click to collapse breakdown ▴
Activity (audit trail)
last 24h · 0 calls Public aggregate · no PII recordedRecent 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 | — |
Endpoints
| Agent card | https://willform.ai/.well-known/agent-card.json |
| Provider | https://willform.ai |
Skills · 20 declared · mapped to canonical taxonomy
Create namespaces for organizing agents. Get details, rename, list or delete namespaces. Billing starts when agents are deployed.
Check credit balance, get deposit addresses, and verify on-chain deposits.
Interact with the per-namespace Willy AI agent. Invoke tools, send chat messages, check agent status, or recover a failed agent.
Get guidance on platform usage, pricing, available operations, and troubleshooting.
Temporarily unavailable while managed-agent identity storage migrates to agent_instances. Use agent_identity_status to check current availability instead of att…
Check whether managed-agent ERC-8004 identity operations are currently available, and when available return registration status, agent ID, endpoint URL, and cap…
Temporarily unavailable while managed-agent identity storage migrates to agent_instances.
Temporarily unavailable while managed-agent identity storage migrates to agent_instances.
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…
List budget policies and today's spend for all agents in a namespace. Returns policy configuration and real-time daily spend summary.
Update an existing budget policy. Only provided fields are changed — omit a field to leave it unchanged.
Delete the budget policy for an agent. The agent falls back to platform default limits ($1.00/day, $0.10/call) after deletion.
Make an outbound HTTP request through the BudgetGuard x402 proxy. Enforces budget policies and handles x402 payment negotiation. If the target returns 402 (paym…
List x402 external payment transactions for a namespace. Shows settled, pending, and failed calls with amounts, target domains, and timestamps. Use this to audi…
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…
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…
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…
Design an AI agent through multi-turn conversation. Send messages to guide the design flow.
Upload, list, remove, and search documents in the agent's knowledge base (vector RAG)
Propose tool/memory improvements, list pending proposals, and approve/reject them. Approved proposals are applied via the outbox reconciler (config update + VM …
Health · last 12 probes
Who's calling this agent 30d
5 interactions captured (impressions + lookups + A2A calls)
unknown
5
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
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.
Similar agents embedding-nearest
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.
Markdown / HTML snippets
[](https://agenstry.com/agents/willform.ai) [](https://agenstry.com/agents/willform.ai) [](https://agenstry.com/agents/willform.ai) [](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.
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"
]
}
]
}