Files
heretek-openclaw-core/openclaw.json
T
John Doe 0665483c61 Fix Agent Lifecycle: Steward primary agent, heartbeat & visibility
- Remove 'main' agent from config, it was incomplete and incorrect
- Add role='orchestrator' and primary=true to steward agent
- Implement automatic agent registration on Gateway connect
- Add heartbeat mechanism (30s interval) with uptime/memory metrics
- Add /agent-status HTTP endpoint for online/offline state tracking
- Add getHealth() and getHeartbeatStatus() methods to AgentClient
- Create DEBUG_AGENT_LIFECYCLE.md with full documentation

Fixes reported issues:
1. 'Steward wasn't the primary agent - main was' → Steward now primary
2. 'Agents weren't even online' → Auto-registration + heartbeat
3. 'No visibility on agents' → /agent-status endpoint
2026-04-01 12:34:52 -04:00

667 lines
17 KiB
JSON

{
"meta": {
"lastTouchedVersion": "2026.3.31",
"lastTouchedAt": "2026-04-01T03:57:21.359Z"
},
"wizard": {
"lastRunAt": "2026-04-01T03:57:21.348Z",
"lastRunVersion": "2026.3.31",
"lastRunCommand": "configure",
"lastRunMode": "local"
},
"auth": {
"profiles": {
"litellm:default": {
"provider": "litellm",
"mode": "api_key"
}
}
},
"models": {
"mode": "merge",
"providers": {
"litellm": {
"baseUrl": "http://localhost:4000",
"api": "openai-completions",
"models": [
{
"id": "agent/steward",
"name": "steward",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/alpha",
"name": "alpha",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/beta",
"name": "beta",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/charlie",
"name": "charlie",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/examiner",
"name": "examiner",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/explorer",
"name": "explorer",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/sentinel",
"name": "sentinel",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/coder",
"name": "coder",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/dreamer",
"name": "dreamer",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/empath",
"name": "empath",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/historian",
"name": "historian",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/arbiter",
"name": "arbiter",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/catalyst",
"name": "catalyst",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/chronos",
"name": "chronos",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/coordinator",
"name": "coordinator",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/echo",
"name": "echo",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/habit-forge",
"name": "habit-forge",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/metis",
"name": "metis",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/nexus",
"name": "nexus",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/perceiver",
"name": "perceiver",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/prism",
"name": "prism",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "agent/sentinel-prime",
"name": "sentinel-prime",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
},
{
"id": "claude-opus-4-6",
"name": "Claude Opus 4.6",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 8192
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "litellm/claude-opus-4-6",
"fallbacks": [
"litellm/agent/steward",
"litellm/agent/sentinel-prime",
"litellm/agent/sentinel",
"litellm/agent/prism",
"litellm/agent/perceiver",
"litellm/agent/nexus",
"litellm/agent/metis",
"litellm/agent/historian",
"litellm/agent/habit-forge",
"litellm/agent/explorer",
"litellm/agent/examiner",
"litellm/agent/empath",
"litellm/agent/echo",
"litellm/agent/dreamer",
"litellm/agent/coordinator",
"litellm/agent/coder",
"litellm/agent/chronos",
"litellm/agent/charlie",
"litellm/agent/catalyst",
"litellm/agent/beta",
"litellm/agent/arbiter",
"litellm/agent/alpha"
]
},
"compaction": {
"mode": "safeguard"
},
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
},
"models": {
"litellm/agent/steward": {},
"litellm/agent/sentinel-prime": {},
"litellm/agent/sentinel": {},
"litellm/agent/prism": {},
"litellm/agent/perceiver": {},
"litellm/agent/nexus": {},
"litellm/agent/metis": {},
"litellm/agent/historian": {},
"litellm/agent/habit-forge": {},
"litellm/agent/explorer": {},
"litellm/agent/examiner": {},
"litellm/agent/empath": {},
"litellm/agent/echo": {},
"litellm/agent/dreamer": {},
"litellm/agent/coordinator": {},
"litellm/agent/coder": {},
"litellm/claude-opus-4-6": {
"alias": "LiteLLM"
},
"litellm/agent/chronos": {},
"litellm/agent/charlie": {},
"litellm/agent/catalyst": {},
"litellm/agent/beta": {},
"litellm/agent/arbiter": {},
"litellm/agent/alpha": {}
}
},
"list": [
{
"id": "steward",
"name": "steward",
"workspace": "/root/.openclaw/agents/steward/workspace",
"agentDir": "/root/.openclaw/agents/steward",
"model": "litellm/agent/steward",
"role": "orchestrator",
"primary": true
},
{
"id": "alpha",
"name": "alpha",
"workspace": "/root/.openclaw/agents/alpha/workspace",
"agentDir": "/root/.openclaw/agents/alpha",
"model": "litellm/agent/alpha"
},
{
"id": "beta",
"name": "beta",
"workspace": "/root/.openclaw/agents/beta/workspace",
"agentDir": "/root/.openclaw/agents/beta",
"model": "litellm/agent/beta"
},
{
"id": "charlie",
"name": "charlie",
"workspace": "/root/.openclaw/agents/charlie/workspace",
"agentDir": "/root/.openclaw/agents/charlie",
"model": "litellm/agent/charlie"
},
{
"id": "examiner",
"name": "examiner",
"workspace": "/root/.openclaw/agents/examiner/workspace",
"agentDir": "/root/.openclaw/agents/examiner",
"model": "litellm/agent/examiner"
},
{
"id": "explorer",
"name": "explorer",
"workspace": "/root/.openclaw/agents/explorer/workspace",
"agentDir": "/root/.openclaw/agents/explorer",
"model": "litellm/agent/explorer"
},
{
"id": "sentinel",
"name": "sentinel",
"workspace": "/root/.openclaw/agents/sentinel/workspace",
"agentDir": "/root/.openclaw/agents/sentinel",
"model": "litellm/agent/sentinel"
},
{
"id": "coder",
"name": "coder",
"workspace": "/root/.openclaw/agents/coder/workspace",
"agentDir": "/root/.openclaw/agents/coder",
"model": "litellm/agent/coder"
},
{
"id": "dreamer",
"name": "dreamer",
"workspace": "/root/.openclaw/agents/dreamer/workspace",
"agentDir": "/root/.openclaw/agents/dreamer",
"model": "litellm/agent/dreamer"
},
{
"id": "empath",
"name": "empath",
"workspace": "/root/.openclaw/agents/empath/workspace",
"agentDir": "/root/.openclaw/agents/empath",
"model": "litellm/agent/empath"
},
{
"id": "historian",
"name": "historian",
"workspace": "/root/.openclaw/agents/historian/workspace",
"agentDir": "/root/.openclaw/agents/historian",
"model": "litellm/agent/historian"
},
{
"id": "arbiter",
"name": "arbiter",
"workspace": "/root/.openclaw/agents/arbiter/workspace",
"agentDir": "/root/.openclaw/agents/arbiter",
"model": "litellm/agent/arbiter"
},
{
"id": "catalyst",
"name": "catalyst",
"workspace": "/root/.openclaw/agents/catalyst/workspace",
"agentDir": "/root/.openclaw/agents/catalyst",
"model": "litellm/agent/catalyst"
},
{
"id": "chronos",
"name": "chronos",
"workspace": "/root/.openclaw/agents/chronos/workspace",
"agentDir": "/root/.openclaw/agents/chronos",
"model": "litellm/agent/chronos"
},
{
"id": "coordinator",
"name": "coordinator",
"workspace": "/root/.openclaw/agents/coordinator/workspace",
"agentDir": "/root/.openclaw/agents/coordinator",
"model": "litellm/agent/coordinator"
},
{
"id": "echo",
"name": "echo",
"workspace": "/root/.openclaw/agents/echo/workspace",
"agentDir": "/root/.openclaw/agents/echo",
"model": "litellm/agent/echo"
},
{
"id": "habit-forge",
"name": "habit-forge",
"workspace": "/root/.openclaw/agents/habit-forge/workspace",
"agentDir": "/root/.openclaw/agents/habit-forge",
"model": "litellm/agent/habit-forge"
},
{
"id": "metis",
"name": "metis",
"workspace": "/root/.openclaw/agents/metis/workspace",
"agentDir": "/root/.openclaw/agents/metis",
"model": "litellm/agent/metis"
},
{
"id": "nexus",
"name": "nexus",
"workspace": "/root/.openclaw/agents/nexus/workspace",
"agentDir": "/root/.openclaw/agents/nexus",
"model": "litellm/agent/nexus"
},
{
"id": "perceiver",
"name": "perceiver",
"workspace": "/root/.openclaw/agents/perceiver/workspace",
"agentDir": "/root/.openclaw/agents/perceiver",
"model": "litellm/agent/perceiver"
},
{
"id": "prism",
"name": "prism",
"workspace": "/root/.openclaw/agents/prism/workspace",
"agentDir": "/root/.openclaw/agents/prism",
"model": "litellm/agent/prism"
},
{
"id": "sentinel-prime",
"name": "sentinel-prime",
"workspace": "/root/.openclaw/agents/sentinel-prime/workspace",
"agentDir": "/root/.openclaw/agents/sentinel-prime",
"model": "litellm/agent/sentinel-prime"
}
]
},
"messages": {
"ackReactionScope": "group-mentions"
},
"commands": {
"native": "auto",
"nativeSkills": "auto",
"restart": true,
"ownerDisplay": "raw"
},
"gateway": {
"mode": "local",
"auth": {
"mode": "token",
"token": "7258fcbc368cedf3578b38ea3952f5b96ff778e3e6c58345"
}
},
"approvals": {
"exec": {
"mode": "disabled"
}
}
}