Card snapshot
spawn.os.moda
·
2026-06-14 00:45:07 UTC
·
d74f9a1ae2bd4060f1440ba05508ffb5e6e379b620b939c4612e990dc0892466
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"name": "osModa Spawn",
"description": "Spawn dedicated AI-managed servers. Pay with USDC via x402. v1.3.6 (2026-05-08): chat persistence finally works \u2014 verified against real OpenClaw frame shapes. Was: v1.3.3's extractor looked for `payload.data.text` but production OpenClaw emits `payload.data.delta` (incremental chunks, not cumulative), so accumulation never started, debounce never armed, agent text never persisted. Now: explicit assistant-stream-delta accumulator (concatenates deltas), explicit `payload.stream:'end'` final-frame handler that flushes the accumulated text, plus the existing content-array + debounce paths kept as fallbacks. Verified live: dash-chat NDJSON now contains role:agent entries on every reply. v1.3.5 (2026-05-08): v1 API-key delivery actually wires credentials now. Was: 14-line SSH command joined with `&&` produced invalid `if [ ... ]; then && curl` syntax \u2014 the credential POST succeeded but the agent-binding PATCH never ran, leaving orders with credential in store but agent.enabled=false \u2192 every chat returned `agent_error`. Topimones bug 2026-05-08 root cause. Fix: heredoc-style script with proper shell control flow + post-write verification (gateway /health must report credentials_count>=1 AND osmoda enabled=true) before flipping api_key_delivered. v1.3.4: wedge auto-restart race fix \u2014 finalize() no longer re-establishes auto_restart_status:'timeout' if the recovery path cleared the wedge during the SSH wait. Was: heartbeat resumes mid-SSH \u2192 recovery deletes attempts+status \u2192 SSH times out \u2192 finalize writes status='timeout' onto a clean state, leaving order in `auto_restart_status:'timeout', auto_restart_attempts:0` (impossible-looking contradiction). Now: finalize checks if recovery already won the race and no-ops. v1.3.3: chat persistence really works now. v1.3.2's Method 1 + Method 3 patterns weren't matching real production frame shapes \u2014 inspection of the actual dash-chat NDJSON showed zero agent text entries, just user msgs + tool-use bubbles. Now: defensive multi-shape text extractor pulls candidate text from every plausible field, accumulates longest, persists on 5 s debounce \u2014 fires regardless of which lifecycle event the runtime ends with. Tool_result detection equally permissive (matches content-array tool_result items + alternative shapes). Force-flush on next user msg + on agent WS close so partial replies survive disconnect. Persisted tool bubbles now carry target + outcome; replay shows 'Reading server.js \u00b7 187 lines' instead of bare badges. Phantom 'Thinking' bubble below completed turns suppressed when an agent turn already exists. v1.3.2: chat persistence + replay fixes. v1.3.1: wedge-detector hardening + chat_responsive signal + reseller spawn-log. v1.3.0: unified server-event plane + universal request receipts.",
"url": "https://spawn.os.moda",
"version": "1.3.6",
"protocols": [
"A2A/1.0",
"ERC-8004"
],
"protocol": "A2A",
"capabilities": {
"x402": true,
"streaming": true,
"websocket": true,
"modular_runtime": true,
"oauth_credentials": true,
"idempotency": true,
"token_lifecycle": true,
"structured_errors": true,
"install_failure_visibility": true,
"install_watchdog_minutes": 25,
"provision_progress_callbacks": true,
"spec_driven_development": true,
"spec_kit_version": "v0.8.4",
"network_mode": "testnet",
"dashboard_streaming_chat": true,
"streaming_chat_protocol": "sse",
"agent_restart_endpoint": true,
"agent_responsiveness_probe": true,
"pam_self_heal": true,
"ssh_auto_recovery": true,
"wedged_server_detector": true,
"unified_event_stream": true,
"universal_request_receipts": true,
"truthful_has_api_key": true
},
"runtimes": [
{
"name": "claude-code",
"display_name": "Claude Code",
"recommended": true,
"supported_auth_types": [
"oauth",
"api_key"
],
"default_models": [
"claude-opus-4-7",
"claude-sonnet-4-6",
"claude-haiku-4-5"
],
"description": "Anthropic's official Claude CLI. Accepts both OAuth (Claude Pro / Max subscription, flat monthly fee) and API key (pay-per-token). Choose OAuth for heavy daily use; API key for predictable per-call billing."
},
{
"name": "openclaw",
"display_name": "OpenClaw",
"supported_auth_types": [
"api_key"
],
"default_models": [
"claude-sonnet-4-6"
],
"description": "OpenClaw multi-runtime CLI (BYOK). API key only \u2014 does not accept Claude Pro OAuth tokens. Pick this for the openclaw plugin ecosystem or non-Anthropic providers."
}
],
"skills": [
{
"id": "spawn-test",
"name": "Spawn Solo Server",
"description": "1 agent, light tasks \u2014 2 vCPU, 4GB RAM, 40GB SSD",
"endpoint": "https://spawn.os.moda/api/v1/spawn/test",
"method": "POST",
"price": {
"amount": "$29",
"currency": "USDC",
"protocol": "x402",
"accepts": [
{
"network": "eip155:84532",
"chainId": 84532,
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
},
{
"network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
"chainId": "devnet",
"asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
"payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
}
]
},
"inputSchema": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [
"eu-central",
"eu-north",
"us-east",
"us-west"
],
"default": "eu-central"
},
"ssh_key": {
"type": "string",
"description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
},
"runtime": {
"type": "string",
"enum": [
"claude-code",
"openclaw"
],
"default": "claude-code",
"description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
},
"default_model": {
"type": "string",
"description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
},
"credentials": {
"type": "array",
"description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
"maxItems": 8,
"items": {
"type": "object",
"required": [
"provider",
"type",
"secret"
],
"properties": {
"label": {
"type": "string",
"maxLength": 60
},
"provider": {
"type": "string",
"enum": [
"anthropic",
"openai",
"openrouter",
"deepseek"
]
},
"type": {
"type": "string",
"enum": [
"oauth",
"api_key"
]
},
"secret": {
"type": "string",
"minLength": 10,
"maxLength": 4096,
"description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
}
}
}
},
"ai_provider": {
"type": "string",
"enum": [
"anthropic",
"openai"
],
"default": "anthropic",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
},
"api_key": {
"type": "string",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
}
}
},
"outputSchema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "UUID of the created order."
},
"api_token": {
"type": "string",
"description": "osk_-prefixed Bearer token. Shown once; store securely."
},
"plan": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"server_ip": {
"type": "string"
},
"status": {
"type": "string"
},
"status_url": {
"type": "string"
},
"chat_url": {
"type": "string"
},
"ssh": {
"type": "string"
}
}
}
},
{
"id": "spawn-starter",
"name": "Spawn Pro Server",
"description": "2-4 agents, real work \u2014 4 vCPU, 8GB RAM, 80GB SSD",
"endpoint": "https://spawn.os.moda/api/v1/spawn/starter",
"method": "POST",
"price": {
"amount": "$99",
"currency": "USDC",
"protocol": "x402",
"accepts": [
{
"network": "eip155:84532",
"chainId": 84532,
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
},
{
"network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
"chainId": "devnet",
"asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
"payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
}
]
},
"inputSchema": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [
"eu-central",
"eu-north",
"us-east",
"us-west"
],
"default": "eu-central"
},
"ssh_key": {
"type": "string",
"description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
},
"runtime": {
"type": "string",
"enum": [
"claude-code",
"openclaw"
],
"default": "claude-code",
"description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
},
"default_model": {
"type": "string",
"description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
},
"credentials": {
"type": "array",
"description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
"maxItems": 8,
"items": {
"type": "object",
"required": [
"provider",
"type",
"secret"
],
"properties": {
"label": {
"type": "string",
"maxLength": 60
},
"provider": {
"type": "string",
"enum": [
"anthropic",
"openai",
"openrouter",
"deepseek"
]
},
"type": {
"type": "string",
"enum": [
"oauth",
"api_key"
]
},
"secret": {
"type": "string",
"minLength": 10,
"maxLength": 4096,
"description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
}
}
}
},
"ai_provider": {
"type": "string",
"enum": [
"anthropic",
"openai"
],
"default": "anthropic",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
},
"api_key": {
"type": "string",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
}
}
},
"outputSchema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "UUID of the created order."
},
"api_token": {
"type": "string",
"description": "osk_-prefixed Bearer token. Shown once; store securely."
},
"plan": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"server_ip": {
"type": "string"
},
"status": {
"type": "string"
},
"status_url": {
"type": "string"
},
"chat_url": {
"type": "string"
},
"ssh": {
"type": "string"
}
}
}
},
{
"id": "spawn-developer",
"name": "Spawn Team Server",
"description": "5-10 agents, heavy loads \u2014 8 vCPU, 16GB RAM, 160GB SSD",
"endpoint": "https://spawn.os.moda/api/v1/spawn/developer",
"method": "POST",
"price": {
"amount": "$199",
"currency": "USDC",
"protocol": "x402",
"accepts": [
{
"network": "eip155:84532",
"chainId": 84532,
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
},
{
"network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
"chainId": "devnet",
"asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
"payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
}
]
},
"inputSchema": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [
"eu-central",
"eu-north",
"us-east",
"us-west"
],
"default": "eu-central"
},
"ssh_key": {
"type": "string",
"description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
},
"runtime": {
"type": "string",
"enum": [
"claude-code",
"openclaw"
],
"default": "claude-code",
"description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
},
"default_model": {
"type": "string",
"description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
},
"credentials": {
"type": "array",
"description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
"maxItems": 8,
"items": {
"type": "object",
"required": [
"provider",
"type",
"secret"
],
"properties": {
"label": {
"type": "string",
"maxLength": 60
},
"provider": {
"type": "string",
"enum": [
"anthropic",
"openai",
"openrouter",
"deepseek"
]
},
"type": {
"type": "string",
"enum": [
"oauth",
"api_key"
]
},
"secret": {
"type": "string",
"minLength": 10,
"maxLength": 4096,
"description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
}
}
}
},
"ai_provider": {
"type": "string",
"enum": [
"anthropic",
"openai"
],
"default": "anthropic",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
},
"api_key": {
"type": "string",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
}
}
},
"outputSchema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "UUID of the created order."
},
"api_token": {
"type": "string",
"description": "osk_-prefixed Bearer token. Shown once; store securely."
},
"plan": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"server_ip": {
"type": "string"
},
"status": {
"type": "string"
},
"status_url": {
"type": "string"
},
"chat_url": {
"type": "string"
},
"ssh": {
"type": "string"
}
}
}
},
{
"id": "spawn-production",
"name": "Spawn Scale Server",
"description": "10-20+ agents, full fleet \u2014 16 vCPU, 32GB RAM, 320GB SSD",
"endpoint": "https://spawn.os.moda/api/v1/spawn/production",
"method": "POST",
"price": {
"amount": "$299",
"currency": "USDC",
"protocol": "x402",
"accepts": [
{
"network": "eip155:84532",
"chainId": 84532,
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
},
{
"network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
"chainId": "devnet",
"asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
"payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
}
]
},
"inputSchema": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [
"eu-central",
"eu-north",
"us-east",
"us-west"
],
"default": "eu-central"
},
"ssh_key": {
"type": "string",
"description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
},
"runtime": {
"type": "string",
"enum": [
"claude-code",
"openclaw"
],
"default": "claude-code",
"description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
},
"default_model": {
"type": "string",
"description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
},
"credentials": {
"type": "array",
"description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
"maxItems": 8,
"items": {
"type": "object",
"required": [
"provider",
"type",
"secret"
],
"properties": {
"label": {
"type": "string",
"maxLength": 60
},
"provider": {
"type": "string",
"enum": [
"anthropic",
"openai",
"openrouter",
"deepseek"
]
},
"type": {
"type": "string",
"enum": [
"oauth",
"api_key"
]
},
"secret": {
"type": "string",
"minLength": 10,
"maxLength": 4096,
"description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
}
}
}
},
"ai_provider": {
"type": "string",
"enum": [
"anthropic",
"openai"
],
"default": "anthropic",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
},
"api_key": {
"type": "string",
"description": "Legacy one-credential shortcut. Prefer credentials[]."
}
}
},
"outputSchema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "UUID of the created order."
},
"api_token": {
"type": "string",
"description": "osk_-prefixed Bearer token. Shown once; store securely."
},
"plan": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"server_ip": {
"type": "string"
},
"status": {
"type": "string"
},
"status_url": {
"type": "string"
},
"chat_url": {
"type": "string"
},
"ssh": {
"type": "string"
}
}
}
}
],
"payment": {
"protocol": "x402",
"accepts": [
{
"network": "eip155:84532",
"chainId": 84532,
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
},
{
"network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
"chainId": "devnet",
"asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
"payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
}
]
},
"endpoints": {
"plans": "https://spawn.os.moda/api/v1/plans",
"spawn": "https://spawn.os.moda/api/v1/spawn/{planId}",
"status": "https://spawn.os.moda/api/v1/status/{orderId}",
"tokens": "https://spawn.os.moda/api/v1/tokens/{token_id}",
"chat": "wss://spawn.os.moda/api/v1/chat/{orderId}",
"docs": "https://spawn.os.moda/api/v1/docs",
"docs_ui": "https://spawn.os.moda/docs",
"skill": "https://spawn.os.moda/SKILL.md",
"spec_kit_projects": "https://spawn.os.moda/api/v1/spec-kit/projects",
"chat_async": "https://spawn.os.moda/api/dashboard/servers/{orderId}/chat-async",
"chat_stream": "https://spawn.os.moda/api/dashboard/servers/{orderId}/chat-stream/{conversation_id}",
"chat_history": "https://spawn.os.moda/api/dashboard/servers/{orderId}/chat-history/{conversation_id}",
"agent_restart_start": "https://spawn.os.moda/api/dashboard/servers/{orderId}/agents/{agentId}/restart",
"agent_restart_status": "https://spawn.os.moda/api/dashboard/servers/{orderId}/agents/{agentId}/restart/{restart_id}",
"events_dashboard": "https://spawn.os.moda/api/dashboard/servers/{orderId}/events",
"events_v1_reseller": "https://spawn.os.moda/api/v1/servers/{orderId}/events",
"requests_dashboard": "https://spawn.os.moda/api/dashboard/servers/{orderId}/requests/{request_id}",
"requests_v1_reseller": "https://spawn.os.moda/api/v1/servers/{orderId}/requests/{request_id}"
},
"callback_endpoints": {
"heartbeat": "https://spawn.os.moda/api/heartbeat",
"provision_progress": "https://spawn.os.moda/api/provision-progress",
"provision_failed": "https://spawn.os.moda/api/provision-failed"
}
}