Skip to content
🧭
Atlas troubleshooting route

Troubleshooting Guide

Use Troubleshooting when something already feels wrong and you need the fastest path from symptom to the first evidence-producing check.
Validated Β· Oct 6, 2026Revalidated on October 6 against the consolidated hero opening scan, the shared local-nav contract, and the documented Watchtower fallback states plus partial-coverage cues this route tells readers to trust first; this pass also converged the inter-agent communication workflow's bridge connectivity example onto the family's verb-first bridge call vocabulary. Symptom triage, diagnostic ladders, and escalation paths remain aligned with the current nine-agent network model.
Take the first move now

Pick the symptom that matches and jump straight to the first check before you read the deeper route map.

New here and stuck?

Start with the symptom, not the whole playbook

If this is your first time in Atlas, use this symptom matrix to pick the most likely first move and the next page that will help. You do not need to read the full troubleshooting guide before taking action.

Symptom
β€œThe agent never replied.”
Start with
Open Watchtower first
Open Watchtower guide β†’
Why this path
Confirm whether the agent is actually quiet or the message never arrived before you change routing or ownership.
Symptom
β€œThe bridge call failed or got rejected.”
Start with
Why this path
Sort the failure into auth, routing, or target-agent handling before you change the workflow or escalate.
Symptom
β€œI do not know which agent should own this.”
Start with
Compare owners on Capabilities
Compare agents on Capabilities β†’
Why this path
Step back from debugging so you can identify the right specialist before you chase the wrong path.
Symptom
β€œThe cycle ran, but I do not understand what happened next.”
Start with
Follow one workflow trace
Open Example Workflow trace β†’
Why this path
Use one end-to-end example so the handoff and closeout pattern becomes visible before you inspect isolated steps.
Symptom
β€œThe command looks right, but timing or scheduling is off.”
Start with
Check Coordination timing rules
Open Coordination timing rules β†’
Why this path
Review the schedule and timezone together first because most surprises are UTC-versus-local-time mistakes.
Symptom
β€œI am too new for debugging. I need the basic map first.”
Start with
Re-open Getting Started
Open Getting Started map β†’
Why this path
Leave the street-level page and rebuild the first-run overview before you try to diagnose a symptom.
Atlas opened, but the page looks empty

Check source, then role, then initial sync

If you can authenticate and open Atlas but the UI still feels blank, do not start by assuming the app is broken. The fastest triage path is to verify where the data should come from, then whether your role can see it, then whether the system has completed its first sync or bootstrap step.

Fresh rule: if Watchtower now shows an explicit unavailable or partial-data message, read that message first. Observability data unavailable means OpenObserve failed to load on that refresh; cron summary cards showing β€” or Cron data is partialmean agent responses are missing, not that the underlying job count is zero.
Diagnostic question
What should be filling this screen?
Check
Confirm the source
Useful signal
Name whether the page depends on Atlas content, a backing index, or another linked surface before you treat blank output as breakage.
If the source is unclear, step back to Home, Capabilities, or Network before debugging permissions.
Diagnostic question
Should this viewer be allowed to see the missing content?
Check
Confirm the role
Useful signal
Decide whether the route expects a specific access tier, internal-only context, or a public-safe subset so you do not misdiagnose an intentional boundary.
If the role is wrong, route to the owner who controls the surface or use the public-safe path Atlas documents.
Diagnostic question
Has the content source actually populated yet?
Check
Confirm initial sync state
Useful signal
Find the first successful sync, seed, or ingest step before you treat the absence as drift or UI failure.
If bootstrap never completed, follow the owner workflow for that source instead of editing Atlas copy first.
Fast rule: empty does not always mean broken. If you do not know the source, role, and first-sync state yet, you are still in triage, not diagnosis.
Where to start

Match your symptom to the right first tool β€” then follow the detailed section below.

πŸ”‡
Agent not responding
Watchtower + docker logs
Check last activity timestamp and container status first.
🐒
Slow or hanging request
Observability events
Filter by service and look for duration outliers.
πŸŒ‰
Bridge call failing
Bridge debug pattern
Trace request ID end-to-end through the Debug Flows below.
⏰
Cron fired at wrong time
Check cron expr + timezone
Most cron timing bugs are UTC vs local timezone mismatches.
πŸ”
Advisor 401 / auth rejected
Bridge token + gateway auth
Expired or missing gateway token on bridge calls.
🧠
Truncated / confused responses
Session context overflow
Long sessions hit context limits. Check token usage.
πŸ”€
Merge conflict during cycle
Rebase onto main + resolve
Another push landed on the same files. Rebase and resolve.
πŸ”Œ
502 after gateway restart
Wait 60s + retry
Gateway isn't fully warm yet despite health check passing.
Fastest first move

Use these triage ladders when you only know the symptom

If you landed here mid-problem, do not read the whole page first. Pick the ladder that sounds closest, run the first check, and only go deeper if that first signal points you there.

πŸ”‡ Silent agent

The agent went quiet

First check

Open Watchtower and check the last-seen timestamp, then confirm the container is still running.

What a useful signal looks like

Recent activity exists and the container is healthy, so the problem is probably upstream delivery or routing rather than a dead process.

Likely cause pattern

Most often this is a crashed container, a wedged gateway, or the message never reaching the agent in the first place.

Next move: If the container is missing or unhealthy, jump to Agent Not Responding below. If it is healthy, follow the Bridge or delivery path next.
🐒 Slow request

The request is hanging or feels slow

First check

Look at observability events first and sort by duration so you can find the slow hop before reading logs.

What a useful signal looks like

One service clearly stands out as the long pole, which means you can focus on that hop instead of guessing across the whole network.

Likely cause pattern

Slowdowns usually come from one dependency, one overloaded agent, or a wait state that is happening exactly where the trace says it is.

Next move: Once you know the slow hop, use the slow-performance workflow below to inspect that service and rule out downstream backpressure.
πŸŒ‰ Bridge failure

A bridge call failed

First check

Start with the request or correlation ID and trace it across both sides of the bridge before changing anything.

What a useful signal looks like

You can see the send event on one side and the receive or auth failure on the other, which tells you whether this is transport, auth, or target-side handling.

Likely cause pattern

The usual culprits are auth mismatches, wrong target routing, or a target agent that accepted the call but failed during execution.

Next move: Use the Bridge debug flow and compare the request timeline hop by hop until the missing event becomes obvious.
⏰ Timing bug

Cron ran at the wrong time

First check

Read the cron expression and timezone together. Most surprises are correct expressions interpreted in the wrong timezone.

What a useful signal looks like

You can explain the observed fire time once you convert UTC and local time consistently, which means the schedule is wrong, not the scheduler.

Likely cause pattern

This is usually a UTC vs local-time mismatch, a mistaken daylight-saving assumption, or an expression that means something slightly different than intended.

Next move: Fix the schedule only after you can state the intended timezone in plain English. Then re-check the next expected fire time before moving on.
Top-level route contracts

Pick the lane, then the page

Atlas stays easier to scan when the route map reads like navigation first. Start with the lane that matches your question, then expand the full page-job model only when you need the deeper contract details.

Current lane: Operations
TroubleshootingHere

Symptom-first page for named failures, first checks, and practical fixes.

What to do when it hurtsCurrent pageHigh-change

Change pace: Check recent updates first. These pages move when the network or live support surfaces change.

Best next move
Then confirm the live surface or root system

After the symptom is named, jump to the live-status companion or root system to verify what is happening now.

Open Watchtower Guide
Start here

Entry

Use these pages when you are still orienting and need the safest first click before you pick an owner or system.

3 pages
Home

Shortest whole-site overview before you choose a deeper page.

Steady
Getting Started

Guided first-five-minutes path for readers who want a tour instead of a reference page.

Steady
FAQ

Question-first shortcut when the reader starts with confusion instead of a route plan.

Steady
Who owns the work

Ownership

Use these pages when your real question is who should handle the work, how it moves, or which charter owns the surface.

4 pages
Projects & Charters

Charter and surface ownership map for the network.

Steady
Capabilities

Worker-selection page for choosing the right agent and understanding execution boundaries.

Steady
Coordination

Decision-and-handoff layer for how work gets routed between people, agents, and systems.

Steady
Workflows

Execution-story page for how real work usually unfolds from intake to visible closeout.

Steady
How the network is built

Systems

Use these pages when you need the map, structure, services, and interfaces behind the network instead of the people or routing rules.

5 pages
Network Topology

Whole-network reference map of agents, systems, and relationships.

High-change
Architecture

Rationale layer for why the network is shaped this way and what tradeoffs drove it.

Stable reference
Bridge

Communication-system page for how agents ask, hand off, and consult one another.

Steady
Infrastructure

Platform-surface page for where the network runs and which services or access layers support it.

High-change
API Reference

Interface reference for endpoints, payloads, and package-level service details.

Steady
What to do when it hurts

Operations

Use these pages when something feels broken, you need a concrete next check, or you need the live-status companion surface.

2 pages
TroubleshootingHere

Symptom-first page for named failures, first checks, and practical fixes.

High-change
Watchtower Guide

Operational companion page for when the question is about live health and current status rather than static explanation.

High-change
Need a different surface?

Use the route split only after the first troubleshooting move points away from this page

This is a street-level debugging page. Stay here when you already have a symptom and need the fastest check, the most likely cause pattern, or the shortest route to a concrete recovery step.

If the first diagnostic move tells you this is really a live-status, ownership, handoff, rationale, or full-trace question, use the route split below instead of scanning the rest of Troubleshooting linearly.
Shortest path through this page

Move from signal to proof in three steps

1. Match the symptom

Use the first-run cards or quick diagnostic when you only know what feels wrong.

2. Pick the narrow playbook

Jump to the issue block or workflow that matches the failure instead of reading the whole page.

3. Copy commands last

Use the command reference only after you know which system or check you are actually trying to run.

Atlas boundary

Atlas explains debugging, it does not replace runtime truth

Atlas is still an educational map. This page shows how to reason about failures and where to look next, but it is not the place to confirm live health, restart services, or inspect current metrics directly.

Use Watchtower for live status, Capabilities for ownership, Coordination for handoffs, and Workflows when you need one full narrative trace.
How debugging works

Every interaction leaves a trace

The Saffron Network is designed to be observable. When something goes wrong, the evidence is already there β€” in logs, observability events, and gateway state. You just need to know where to look.

  1. Check Watchtower β€” View recent events and agent activity
  2. Query the current observability source β€” Filter the live telemetry stream by service and time to find the failure point
  3. Inspect agent logs β€” docker logs <agent-name> shows crashes, OOM errors, and exceptions
  4. Test in isolation β€” Call services directly to rule out cascading dependencies
  5. Follow the chain β€” Trace requests through Bridge calls using correlation IDs

Common Issues

🚨Agent Not RespondingNo reply or recent activity β€” check the container, gateway, then the live event trail.β–Ά

Symptoms:

  • Bridge calls timeout
  • No response in Slack/WhatsApp
  • Watchtower shows no recent activity

Debugging Steps:

  1. Check if container is running:
    docker ps | grep <agent-name>
  2. Check container logs:
    docker logs --tail 100 <agent-name>
    Look for: crashes, OOM errors, unhandled exceptions
  3. Check gateway status:
    docker exec <agent-name> openclaw status
  4. Check live observability events:
    curl "<observability-url>/events?service=<agent>&limit=50" \
      -H "Authorization: Bearer $OBS_COLLECTOR_TOKEN"

Common Causes:

  • Process crashed (check exit code in docker ps -a)
  • Out of memory (Docker OOM killer)
  • Deadlock or hung request (restart container)
  • Gateway config error (check gateway.toml syntax)

Fix:

docker restart <agent-name>
⏱️Bridge Call TimeoutsA bridge waits past its timeout β€” separate target health, auth, and downstream work.β–Ά

Symptoms:

  • Error: "Bridge timeout after 60s"
  • Caller hangs waiting for response

Debugging Steps:

  1. Check if target agent is reachable:
    curl http://host.docker.internal:<port>/health
  2. Check live bridge telemetry:
    curl "<observability-url>/events?service=bridge&event=call&limit=20" \
      -H "Authorization: Bearer $OBS_COLLECTOR_TOKEN"
    Look for: long duration_ms values, error-level events
  3. Test the target agent directly:
    docker exec <target-agent> openclaw status

Common Causes:

  • Target agent is processing a long task (LLM call, tool execution)
  • Target agent is stuck in a loop
  • Network issue (rare on localhost)
  • Target agent's gateway is overloaded (too many concurrent requests)

Fix:

  • If agent is busy but healthy: wait or retry later
  • If agent is stuck: docker restart <target-agent>
  • If happens frequently: increase timeout or optimize target agent's performance
⏰Cron Jobs Not RunningThe scheduled job never appears β€” verify enablement, next run, history, and timezone.β–Ά

Symptoms:

  • Scout cycle didn't run at expected time
  • No Slack notification from scheduled task
  • Watchtower cron shows Cron data is partial
  • Summary cards show β€” plus an all-agents fetch-failed warning instead of counts

Debugging Steps:

  1. Read the Watchtower state message before the counts:
    If Watchtower says Cron data is partial, some agents answered and some did not. If summary cards show β€” with an all-agents failure banner, treat the entire summary as unavailable rather than zero.
  2. List all cron jobs:
    curl "<gateway-url>/api/cron/list"
    Check: enabled field, nextRun timestamp
  3. Check job run history:
    curl "<gateway-url>/api/cron/runs?jobId=<job-id>"
    Look for: error field, completed field
  4. Check gateway logs during scheduled time:
    docker logs scout --since 10m

Common Causes:

  • Job is disabled (check enabled: false)
  • Gateway was down/restarting during scheduled time
  • Previous run still executing (won't start concurrent run)
  • Cron expression has wrong timezone (default is UTC)
  • One or more agent gateways failed to answer the cron list request, so Watchtower can only show partial coverage

Fix:

  • Manually trigger: curl -X POST <gateway-url>/api/cron/run?jobId=<id>
  • Re-enable: Update job with enabled: true
  • Adjust schedule if timezone is wrong
  • If Watchtower coverage is partial or unavailable, restore agent/gateway connectivity first, then refresh before trusting the summary cards again
πŸ”ŒService UnreachableA service returns connection errors β€” check health, ports, and the owning gateway.β–Ά

Symptoms:

  • Error: "ECONNREFUSED" or "Connection refused"
  • Memory / knowledge search failing
  • OpenObserve or Watchtower observability surface not responding
  • Watchtower shows Observability data unavailable
  • Code execution requests timing out

Debugging Steps:

  1. Check if the service process is running:
    ps aux | grep <service-name>
  2. Try a direct health check:
    curl http://localhost:<service-port>/health
  3. If Watchtower named the failure, trust the category:
    Observability data unavailable means the route loader could not load OpenObserve data on that refresh. Treat it as source-health trouble, not an empty event feed.
  4. Check service logs β€” look for crash messages or startup errors:
    tail -f <service-log-path>

Common Causes:

  • Service crashed or was stopped
  • Port conflict (another process using the same port)
  • Service not restarted after a host reboot
  • Upstream OpenObserve connectivity failed, so Watchtower rendered an explicit unavailable state instead of stale empty data

Fix:

Restart the affected service using its startup script. Check the Infrastructure page for each service’s expected port and startup method.

πŸ“ŠMemory or Performance IssuesA run is slow or crashes β€” find the long pole before tuning memory or concurrency.β–Ά

Symptoms:

  • Agent responses getting slower
  • Container keeps restarting
  • Mac mini fans running loud

Debugging Steps:

  1. Check container resource usage:
    docker stats --no-stream
    Look for: high CPU%, high MEM%
  2. Check host resources:
    top -o cpu # or htop
  3. Check disk usage:
    df -h docker system df # Docker disk usage
  4. Check session_status for token usage:

    High token counts = expensive operations

Common Causes:

  • Memory leak in agent (growing context, cached data)
  • Too many concurrent operations
  • Large file operations (logs, databases)
  • Docker volume running out of space

Fix:

  • Restart agent: docker restart <agent>
  • Clean up disk: docker system prune -a
  • Trim old logs/data from workspaces
  • Increase Docker resource limits in Docker Desktop settings
⏰Cron Timing Edge CasesThe expression is valid but fires unexpectedly β€” compare UTC, local time, and daylight saving.β–Ά

Symptoms:

  • Scout cycle ran an hour early or late (DST shift)
  • Cron job fires at UTC midnight instead of local midnight
  • Two cycles ran close together then a long gap with no runs
  • nextRun timestamp doesn't match expected schedule

Root Cause Patterns:

  • Missing timezone: Cron expressions default to UTC. A job meant to run at 8 AM CT needs tz: "America/Chicago" β€” without it, it runs at 8 AM UTC (3 AM CT).
  • DST transitions: everyMs-based jobs aren't affected by DST, but cron-based jobs are. "0 8 * * *" with tz: "America/Chicago" will correctly shift with DST.
  • Stagger jitter: Jobs with staggerMs add random jitter to the scheduled time β€” this is intentional to avoid thundering-herd, but makes timing look unpredictable.
  • Previous run still executing: If a cycle runs long, the next scheduled fire is skipped (no concurrent runs for the same job).

Fix:

  • Always set tz explicitly on cron-scheduled jobs
  • Use cron schedule kind (not everyMs) when you need wall-clock alignment
  • Check /api/cron/runs?jobId=<id> for skipped runs β€” they show as skipped: true
🧠Session Context OverflowResponses truncate or lose the thread β€” inspect context pressure and split the work.β–Ά

Symptoms:

  • Agent responses become truncated, generic, or start repeating earlier context
  • Agent forgets instructions given earlier in the session
  • Tool calls fail with "context length exceeded" or similar errors
  • Model switches to a cheaper fallback unexpectedly

Root Cause Patterns:

  • Long-running session: Sessions accumulate context with every message and tool response. A charter cycle that reads many files and makes many edits fills the context window fast.
  • Large tool outputs: Reading entire files, getting verbose API responses, or listing large directories bloats the context.
  • Repeated full-file reads: Reading the same file multiple times in one session duplicates content in context.
  • Sub-agent output: Spawned sub-agents return their full output to the parent session, which can be very large.

Debugging Steps:

  1. Check session token usage: Use openclaw status or the session status card β€” look for token counts approaching the model's limit.
  2. Review the session transcript: Identify which messages or tool responses are disproportionately large.
  3. Check if a fallback model was used: Some gateways auto-fallback when context overflows β€” look for model switch events in logs.

Fix:

  • For operators: Start a fresh session or use limit and offset when reading files to get only the lines you need
  • For cycle design: Use lightContext: true on cron jobs to reduce inherited context weight
  • For sub-agents: Request concise summaries rather than full output dumps
  • For large files: Read targeted sections with offset/limit instead of entire files
πŸ”€Branch Merge Conflict During CycleSync-in or push finds overlapping edits β€” preserve intent, rebase, then verify the affected path.β–Ά

Symptoms:

  • PR merge blocked by merge conflict
  • Git rebase or merge fails during sync-in
  • CI fails on a branch that was passing locally
  • git status shows "both modified" on files you didn't expect to conflict

Root Cause Patterns:

  • Concurrent cycles: Another agent or a manual edit pushed to the same branch or base while this cycle was running.
  • Stale working branch: The feature branch fell behind main because it was created hours or days ago and main has moved forward.
  • Shared data files: Files like progress logs, scratchpads, or freshness tags are frequently modified by multiple actors β€” these are the most common conflict points.
  • Squash-merge divergence: If main was squash-merged and the branch still has the original commits, git sees them as different and conflicts appear on files touched by both.

Debugging Steps:

  1. Identify conflicting files: git diff --name-only --diff-filter=U
  2. Check what changed on main: git log --oneline main..origin/main β€” were the same files modified?
  3. Decide conflict strategy: For data files (logs, timestamps), newer usually wins. For code, manual resolution is needed.

Fix:

  • Rebase onto current main: git fetch origin && git rebase origin/main
  • Resolve conflicts: For data files, accept the newer version; for code, merge both changes carefully
  • If rebase is too tangled: Create a fresh branch from current main and cherry-pick the relevant commits
  • Prevention: Keep branches short-lived β€” rebase onto main at the start of each cycle
πŸ”ŒGateway 502 / Not Ready After RestartThe gateway reports 502 just after restart β€” allow warm-up, then verify readiness before retrying.β–Ά

Symptoms:

  • Bridge calls return 502 Bad Gateway immediately after a gateway restart
  • Health endpoint returns 200 but bridge calls still fail
  • Cron jobs fail with connection errors for the first 30-60 seconds after restart
  • openclaw status shows healthy but tool calls hang or error

Root Cause Patterns:

  • Cold-start delay: After a gateway restart, the HTTP server binds quickly but the model client, tool registry, and session store take time to initialize. The health endpoint reports "up" before the system is fully ready.
  • Session replay: Long sessions need time to load history before they can accept new messages β€” calls arriving during replay get rejected.
  • Dependency warmup: Tools that connect to external services (database, search index) need their own connection pools established.
  • Cron race condition: If a cron job fires during the restart window, it hits the gateway before it's ready and fails β€” and depending on config, may not retry.

Debugging Steps:

  1. Check gateway uptime: docker inspect --format={{.State.StartedAt}} <agent> β€” was it recently restarted?
  2. Check gateway logs for "ready" message: docker logs <agent> --tail 30 β€” look for "gateway ready" or "session loaded" entries
  3. Retry after 60 seconds: Most gateways are fully operational within 30-60 seconds of container start

Fix:

  • Immediate: Wait 60 seconds and retry β€” the gateway will be ready
  • For cron jobs: Use staggerMs or a startup delay to avoid firing during the cold-start window
  • For bridge callers: Implement a retry with backoff (2-3 retries, 10-30 second intervals) for 502 responses
  • For operators: Check the gateway's "ready" log line before assuming it's fully operational
πŸ”Advisor Returns 401 / Auth RejectedAn advisor call is rejected β€” verify the token path, identity, and target scope.β–Ά

Symptoms:

  • Bridge call returns 401 Unauthorized
  • Bridge call returns 403 Forbidden
  • Advisor freshness gate fails with auth error (not timeout)
  • Bridge works from one agent but not another

Root Cause Patterns:

  • Expired gateway token: Bridge calls authenticate using the gateway token (gatewayToken). If the target gateway rotated its token, the caller still has the old one.
  • Missing token in bridge config: The bridge script reads the token from environment or config β€” if it's unset, the call goes out without auth.
  • Wrong gateway URL: If the target gateway moved to a new port or host, the bridge points at the old address.
  • Agent allowlist mismatch: Some gateways restrict which agents can bridge in. If the caller's identity isn't in the allowlist, the gateway rejects the connection.

Debugging Steps:

  1. Check the exact error: 401 = bad/missing token, 403 = authenticated but not authorized
  2. Verify caller's bridge config: Check gatewayToken and gatewayUrl for the target in the caller's environment
  3. Test target gateway health: curl http://<target-host>:<port>/health
  4. Compare tokens: The caller's configured token must match the target gateway's current token

Fix:

  • Update the caller's bridge config with the current gateway token
  • If the target gateway was reconfigured, update the URL in the caller's bridge config
  • For allowlist issues: update the target gateway's agents.allowedAgents to include the caller

Debugging Workflows

πŸ”ŽTrace a Failed RequestFollow one request ID hop by hop until the first missing or failed event appears.β–Ά

Scenario: User sent a message to Clawdy, no response.

  1. Check Watchtower β†’ Recent Activity view
    Did Clawdy receive the message? Any errors?
  2. Check Clawdy logs:
    docker logs clawdy --tail 50 --timestamps
    Look for errors, crashes, unhandled exceptions
  3. Check gateway status:
    docker exec clawdy openclaw status
    Is gateway healthy? Session active?
  4. Check messaging provider:
    WhatsApp/Slack outage? Credential expired?
  5. Test manually:
    docker exec -it clawdy bash # Inside container: try openclaw commands
🐌Investigate Slow PerformanceSort the trace by duration to isolate the service or wait state causing the slowdown.β–Ά

Scenario: Scout cycles taking much longer than usual.

  1. Check session_status: High token usage? Expensive model calls?
  2. Query the current telemetry stream:
    curl "<observability-url>/events?service=delegation&limit=20" \
      -H "Authorization: Bearer $OBS_COLLECTOR_TOKEN" | jq .
    Look for duration_ms values β†’ What's taking longest?
  3. Check Codex usage: Is coding-muscle being called excessively?
  4. Check LLM API latency: Provider issue? (Z.AI or OpenAI status page)
  5. Profile specific operations: Add timing logs to identify bottlenecks
πŸŒ‰Debug Inter-Agent CommunicationCompare send, receive, auth, and response events across both sides of the bridge.β–Ά

Scenario: Scout β†’ Advisor call is failing.

  1. Test bridge connectivity:
    docker exec scout bridge call advisor "test message"
  2. Check bridge observability:
    curl "<observability-url>/events?service=bridge&event=call" \
      -H "Authorization: Bearer $OBS_COLLECTOR_TOKEN" | jq '.events[] | select(.meta.target=="advisor")'
  3. Verify target agent gateway is reachable:
    # Each agent exposes a health endpoint at its gateway address:
    curl "http://host.docker.internal:<gateway-port>/health"
    See the Infrastructure page for each agent’s gateway port.
  4. Check both agent logs: Caller and callee
  5. Test with minimal message: Rule out payload size issues
βš–οΈAtticus Governance IssuesA proposal pauses or rejects unexpectedly β€” trace the decision and its stated policy reason.β–Ά

Scenario: Proposal sent to Atticus received no response, or decision outcome is unexpected.

  1. Check Atticus gateway is reachable:
    curl http://host.docker.internal:<atticus-gateway-port>/health
  2. Query recent Atticus decisions:
    curl "<observability-url>/events?service=atticus&limit=10" \
      -H "Authorization: Bearer $OBS_COLLECTOR_TOKEN" | jq .
    Look for decision.made or decision.escalated events and their reasoning.
  3. Check if escalated to Jake: If Atticus returned needs-human, check #atticus-digest in Slack for the escalation notification.
  4. Review the proposal against policies: See Governance Policies β€” was the proposal clearly in-scope? Boundary cases often get escalated rather than auto-approved.
  5. Check Atticus logs:
    docker logs atticus --tail 50 --timestamps

Quick Reference: Debugging Commands

Docker

docker ps β€” Running containers
docker ps -a β€” All containers (including stopped)
docker logs <name> β€” View logs
docker logs -f <name> β€” Follow logs (live)
docker restart <name> β€” Restart container
docker exec -it <name> bash β€” Enter container shell
docker stats β€” Resource usage

OpenClaw

openclaw status β€” Gateway health
openclaw gateway start β€” Start gateway
openclaw gateway stop β€” Stop gateway
openclaw gateway restart β€” Restart gateway

Observability Collector

GET /events?service=X&limit=N
Query events by service/time
GET /services
List active services

Cron Jobs

GET /api/cron/list
List all jobs
POST /api/cron/run?jobId=X
Trigger job manually

⚠️ When to Escalate to Humans

  • System-wide outage: Multiple agents down, can't be resolved by restart
  • Data loss: Missing files, corrupted databases, deleted content
  • Security concerns: Unexpected network activity, suspicious logs
  • Infrastructure changes needed: New services, port changes, credential rotation
  • Persistent performance degradation: Issues that reoccur after fixes

For these situations, notify Jake/Derek in Slack with: what's wrong, what you tried, and what you need.

Prevention & Reference

API Reference

Endpoint docs, port numbers, and auth details for every shared service.

Open API Reference
Governance (Atticus)

Troubleshoot proposal rejections and governance escalations.

Open Governance (Atticus)
FAQ

Common questions with direct answers β€” often faster than debugging.

Open FAQ
Infrastructure

Host, ports, Docker layout β€” useful context when debugging networking issues.

Open Infrastructure