openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
142 lines (141 loc) • 3.92 kB
JSON
{
"id": "crabbox",
"categories": [
"infrastructure"
],
"doctorContract": {
"stateMigrations": [
{
"id": "crabbox-warm-profile-v3",
"doctorOnly": true
}
]
},
"name": "Crabbox Worker Provider",
"description": "Cloud worker provider and lease-backed sandbox backend for the Crabbox CLI.",
"cliCommands": [
{
"name": "crabbox",
"description": "Run model-backed commands and manage Crabbox warm images",
"hasSubcommands": true
}
],
"activation": {
"onStartup": false,
"onCommands": [
"crabbox"
],
"onConfigPaths": [
"plugins.entries.crabbox.config.sandbox"
]
},
"commandAliases": [
{
"name": "crabbox",
"kind": "cli"
}
],
"contracts": {
"workerProviders": [
"crabbox"
],
"tools": [
"crabbox"
]
},
"skills": [
"./skills"
],
"toolMetadata": {
"crabbox": {
"profiles": [
"coding"
]
}
},
"configGroups": [
{
"id": "sandbox",
"title": "Sandbox",
"order": 10,
"properties": [
"sandbox"
]
},
{
"id": "warm-images",
"title": "Warm images",
"order": 20,
"properties": [
"warmImages"
]
}
],
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"sandbox": {
"type": "object",
"additionalProperties": false,
"description": "Lease a Crabbox box for tool-call isolation with agents.defaults.sandbox.backend=crabbox. Requires a direct provider with fixed lease IDs.",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"description": "Crabbox provider for sandbox leases; defaults to the configured Crabbox selection."
},
"class": {
"type": "string",
"minLength": 1,
"description": "Crabbox machine class for sandbox leases."
},
"ttl": {
"type": "string",
"pattern": "^\\d+(?:ms|s|m|h)$",
"description": "Maximum lease lifetime passed to crabbox warmup --ttl."
},
"idleTimeout": {
"type": "string",
"pattern": "^\\d+(?:ms|s|m|h)$",
"description": "Idle release passed to crabbox warmup --idle-timeout."
},
"binary": {
"type": "string",
"minLength": 1,
"description": "Explicit crabbox executable; defaults to the discovered binary."
}
}
},
"warmImages": {
"type": "object",
"additionalProperties": false,
"properties": {
"refreshAfter": {
"type": "string",
"default": "24h",
"maxLength": 9,
"pattern": "^(?:[1-9][0-9]*[hd]|(?:[6-9][0-9]|[1-9][0-9]{2,})m)(?![\\s\\S])",
"description": "Refresh age, at least 1h. Use 1–8 whole digits followed by m, h, or d. Pinned checkpoints are exempt. Requires Gateway restart."
},
"retainUnused": {
"type": "string",
"default": "14d",
"maxLength": 9,
"pattern": "^(?:[1-9][0-9]*d|(?:2[4-9]|[3-9][0-9]|[1-9][0-9]{2,})h|(?:14[4-9][0-9]|1[5-9][0-9]{2}|[2-9][0-9]{3}|[1-9][0-9]{4,})m)(?![\\s\\S])",
"description": "Unused retention, at least 1d (24h or 1440m). Use 1–8 whole digits followed by m, h, or d. Pinned checkpoints are exempt. Requires Gateway restart."
},
"keepPrevious": {
"type": "integer",
"enum": [
0,
1
],
"default": 0,
"description": "Retain one previous checkpoint generation for rollback. Pinned predecessors are always retained. Requires Gateway restart."
}
}
}
}
}
}