Skip to main content

Fleet map

entry

Now​

Fleet of four lanes plus a built-in caretaker, all on Dwayne's MacBook Pro, coordinating via bridge + shared memory, human-visible output in the One.ai Telegram group ([redacted-id], owner user [redacted-id], hard cap 4 bot messages/min across the fleet).

Lanes (authority: ~/.hermes/FLEET-LAYER.md, observed 2026-07-09):

  • Hermes / Zappo, supervisor: home automation, gateway health, cron (150 jobs), kanban dispatch, routine ops. Runtime: NousResearch hermes-agent, config ~/.hermes/config.yaml.
  • MAI (OpenClaw agent main), primary assistant, scheduled reporting, knowledge graph, One.ai group orchestration. Workspace ~/.openclaw/workspace.
  • X (OpenClaw agent x), public/X-channel content; nothing posts publicly without Dwayne's approval. Workspace ~/.openclaw/workspace-x (ai-swe-os layout + .ai/ doctrine).
  • Codex, code/design/debug/second opinions, via OpenClaw codex plugin + CLI harness.
  • crestodian, OpenClaw built-in caretaker agent (do not archive; source: docs.openclaw.ai/cli/crestodian).

Models (re-verified 2026-09-20; earlier 2026-09-13 and 2026-08-03 values kept in the Log):

  • Hermes agents and profiles: the config default in ~/.hermes/config.yaml is deepseek-v4.1-flash:cloud on provider ollama-launch (base_url http://127.0.0.1:11434/v1, api_key reads the literal ollama), with fallback_providers a single entry pointing at the same model on ollama-launch. This supersedes the 2026-09-13 entry that named glm-5.3-flash:cloud as the Hermes side. All 15 auxiliary roles read deepseek-v4.1-flash:cloud except vision, which stays minimax-m3:cloud.

    Profile model mismatch FIXED 2026-10-02. The four sub-profiles forge, oracle, sage and scribe had shipped with glm-5.3-flash:cloud on provider openai-codex (base_url https://chatgpt.com/backend-api/codex). That backend cannot serve GLM, so the route was dead, not merely off-standard: a live probe returned HTTP 400: The 'glm-5.3-flash:cloud' model is not supported when using Codex with a ChatGPT account. All four were repointed to the main config's working route and now answer a live hermes -p <profile> -z probe. Backups: ~/.hermes/backups/profile-model-repair-20261002-224650.

    Also worth knowing: fallback_providers is a no-op, not a fallback. It names the same model as the primary, so no failover exists. The older openrouter deepseek-v4-flash-0731 fallback is retired (HTTP 410 since 2026-09-25), so the previous note was stale in both directions. Source: ~/.hermes/config.yaml and ~/.hermes/profiles/*/config.yaml, live provider probes, read 2026-10-02.

  • OpenClaw: agents.defaults.model.primary is ollama/deepseek-v4.1-flash:cloud with fallbacks: [] (empty by design to prevent alternate-provider fallback). agents.defaults.modelPolicy.allow carries 19 entries: openai/gpt-6-astra, xai/grok-4.3, ollama/deepseek-v4-flash:0731-cloud, openrouter/deepseek/deepseek-v4-flash-0731, ollama/kimi-k3:cloud, xai/grok-4.6, openrouter/x-ai/grok-4.6, ollama/kimi-k2.7-code:cloud, ollama/glm-5.2:cloud, ollama/minimax-m3:cloud, ollama/gemini-3-flash-preview:cloud, ollama/llama3.2:3b, ollama/llama3.1:8b, ollama/glm-5.1:cloud, ollama/kimi-k2.5:cloud, ollama/minimax-m2.7:cloud, ollama/llava:latest, openrouter/stealth/ox-alpha, ollama/deepseek-v4.1-flash:cloud. The Astra entry is written openai/gpt-6-astra, not codex/gpt-6-astra. The codex plugin is enabled and pins appServer.command to /Users/dwayne/.npm-global/bin/codex. meta.lastTouchedVersion is 2026.9.4 and a modelPolicyAllowlist migration has run. Source: ~/.openclaw/openclaw.json, read 2026-09-20. Note the file no longer carries a top-level modelPolicy key; the allowlist now lives under agents.defaults.

  • x_search: grok-4.20-reasoning (xai).

Communication:

  • Hermes → OpenClaw: ~/.hermes/bin/openclaw-bridge <agent> "<msg>" [topic] (sessions agent:<id>:hermes-<topic>).
  • OpenClaw → Hermes: ~/.openclaw/workspace/scripts/ask_hermes.sh "<q>" (loopback API :8642).
  • Bridge sessions are fleet-internal, [SILENT]/group caps do not apply.
  • Group chat: bot-authored messages are read-only context; never reply to them (see FLEET-LAYER).
  • House style (2026-08-19): google-developer-style then humanizer. Telegram compact and title-first still win. See decisions/2026-08-19-google-developer-style.md.

Retired: agent vanilla + workspace-pro-vanilla (archived 2026-07-09 to ~/.openclaw/backups/stale-agents-20260709/; was not in agents.list).

fleet-ask routes (second bridge, repo tools)​

~/.local/bin/fleet ask <route> "<task>", provenance via FLEET_ACTOR/KL_AGENT, every dispatch logged to the kg ledger. Routes: main, vanilla, x-agent, coding, crestodian (OpenClaw via openclaw agent --json); nexus/hermes (hermes -z); oracle, sage, forge, scribe (hermes -p <profile> -z). Coexists with ~/.hermes/bin/openclaw-bridge (topic-scoped sessions); prefer whichever the calling runtime already has allowlisted. Shared-memory CLIs: ~/.local/bin/{kl,kg}.

Current incidents (observed 2026-07-08 … 2026-08-29, source: kg query):

  • fleet-health recovered, was warnings on 2026-08-03 07:30 UTC; has reported all green on every daily run since 2026-08-25 (observed 08-25, 08-26, 08-27, 08-28). The 2026-08-03 warning is superseded; no active fleet-health incident.
  • cron-health-observer recovered, was 3 erroring on 2026-08-03; has reported 0 erroring, 3 stale, 10 transitions on every run since 2026-08-25. The erroring count dropped to 0; the 3 stale jobs are the known low-cadence set (ai-home-stack-upgrade-maintenance, autonomous-improvement-loops, improvement-loop-closer, incident-observer, notify:cron per kg stale). No active erroring incident.
  • pergolux-realm-snapshot blocked, BLE realm scan runs on MacBook Pro but the downstream ha_webrtc_snapshot.js exporter needs /Volumes/FATTY/src/claw-proj-pergolux-bridge/realm_snapshot.py or a remote/stale alert producer. Hermes patched the Playwright driver lookup and recovered WebRTC stills from current=0 to current=2; stale_real=5 remains. Root cause: missing path / stale producer, not the BLE scan. See home/pergolux.md.
  • cron-approval-mode-alias-triage, Hermes patched the approval-mode parser so legacy approvals.mode=allow resolves to off (matches intent of old configs); tests passed. Gateway restart deferred. See decisions/2026-07-11-approval-mode-alias.md.
  • Exec-allowlist gaps, OpenClaw agents hit exec denied: allowlist miss for ha_entity_guard.py and the birdclaw scout, blocking fresh HA bad-state checks and birdclaw reports. Not yet resolved; config owner is OpenClaw gateway (~/.openclaw/openclaw.json tools.exec / agents.defaults.toolPolicy).
  • OpenRouter key missing, OpenClaw gateway configured with openrouter/openai/gpt-5 as primary model, but OPENROUTER_API_KEY is not set. Gateway crash-loop breaker tripped after 23 failed starts. Resolution requires either adding the key or switching primary to a provider with existing auth. Source: live config audit, 2026-08-01.

Memory search (verified 2026-07-15, source: OpenClaw CLI/config and live search probe):

  • Agent defaults use local Ollama embeddings: all-minilm:latest, fallback none, chunking 64 tokens / 8 overlap. This replaced the unauthenticated implicit OpenAI default.
  • Main index: 48/48 files, 1,384 chunks, 384-dimensional vectors; CLI semantic search passed.
  • A long-lived agent process may retain the old provider until its next process/session start.

Log​

  • 2026-10-02 22:46 AEST (repair, live probes): Repaired the four Hermes sub-profiles. forge, oracle, sage and scribe each carried model.default: glm-5.3-flash:cloud with provider: openai-codex and base_url: https://chatgpt.com/backend-api/codex, plus every auxiliary role and delegation set the same way, and an empty fallback_providers. A live hermes -p scribe -z probe returned HTTP 400: The 'glm-5.3-flash:cloud' model is not supported when using Codex with a ChatGPT account. so the route was dead end to end, not a cosmetic naming drift. Repointed all model, provider, base_url and auxiliary entries to the main config's working route (deepseek-v4.1-flash:cloud on ollama-launch, http://127.0.0.1:11434/v1), kept the vision auxiliary on minimax-m3:cloud because deepseek-v4.1-flash is text-only, and added the missing providers.ollama-launch block each profile needed. Verified: all four now answer a live hermes -p <profile> -z probe with PROBE_OK. Backups ~/.hermes/backups/profile-model-repair-20261002-224650. The profiles have no sessions rows past 2026-05-02 and no cron jobs reference them, so this restored capability rather than fixing a live outage. Separately confirmed fallback_providers in the main config is a no-op (same model as primary, so no failover) and the old openrouter deepseek-v4-flash-0731 fallback is retired (HTTP 410 since 2026-09-25). Sources: ~/.hermes/profiles/*/config.yaml, ~/.hermes/config.yaml, live hermes -p probes and provider probes, read 2026-10-02. - hermes-zappo.

  • 2026-09-20 (weekly synthesis): Re-verified the model block against live configs. Corrected the Hermes side: ~/.hermes/config.yaml default is deepseek-v4.1-flash:cloud on ollama-launch with a single same-model fallback, so the 2026-09-13 claim that Hermes ran glm-5.3-flash:cloud is superseded; the four sub-profiles still pin glm-5.3-flash:cloud on openai-codex. Corrected the OpenClaw allowlist location (now agents.defaults.modelPolicy.allow, no top-level modelPolicy) and the Astra entry spelling (openai/gpt-6-astra). Skill-corpus audit numbers from 2026-09-13 have drifted: a live count on 2026-09-20 finds 88 live SKILL.md files outside .archive/ and 142 including it, against the audit's 92 and 139, and the longest description is now webwright at 418 chars while humanizer has dropped out of the top 12. Any plan built on the audit's "13 rewrites, 3,526 to 1,105 chars" figures needs re-measuring first. Sources: ~/.hermes/config.yaml, ~/.hermes/profiles/*/config.yaml, ~/.openclaw/openclaw.json, find ~/.hermes/skills -name SKILL.md, read 2026-09-20 06:06 AEST. - hermes.

  • 2026-09-13, Audited the skill corpus and ~/.hermes/AGENTS.md against OpenAI's "Rethinking skills and prompts for GPT-6 Astra" guidance. Artifact: ~/.hermes/artifacts/skills-agents-audit-2026-09-13.md. Read-only; no skill file modified. Measured: 139 skills on disk (92 live, 47 archived), 91 loaded; description length median 86, max 435; 38 descriptions over 140 chars; 9,894 chars of description text (~2,473 tokens) loaded into every session; 30 of 92 live skills have no supporting files; body median 7,399 chars with hermes-operations at 58,693c. AGENTS.md is 17,438 chars (~4,359 tokens) and is largely clean against the article: zero unconditional "read docs before every edit" lines, one mandatory pre-work gate (the KG query, which is live and should stay), and 22 lines of never/always/must boundary language. Duplicate pairs found and still live: tailscale-first-host-resolution/tailscale-host-resolution, multi-agent-channel-discipline/multi-agent-coordination, macos-computer-use/computer-use, github/github-workflows, home-assistant/home-assistant-troubleshooting. sdlc-review is the one live skill absent from the loaded set because it declares environments: [kanban]; that is correct scoping, not a fault, so disk and loaded counts will differ by environment-scoped skills. Applicability caveat: the article is written for GPT-6 Astra, and Hermes runs glm-5.3-flash:cloud. Skill-description slimming is model-neutral and safe to apply to Hermes. The sections on relaxing boundary language and dropping test-running instructions are Astra-specific and must not be applied to Hermes or OpenClaw without testing, because those models have not been shown to self-test or self-limit the way the article describes. 13 concrete description rewrites prepared (3,526 to 1,105 chars total) but not applied. Sources: ~/.hermes/skills, ~/.hermes/AGENTS.md, ~/.hermes/config.yaml, read 2026-09-13. - hermes.

  • 2026-09-13 (weekly synthesis): Superseded the 2026-08-03 model block. Hermes side is now glm-5.3-flash:cloud on ollama-launch across agents, profiles and auxiliaries, with the config default reporting deepseek-v4.1-flash:cloud and a single glm-5.3-flash:cloud fallback provider; vision auxiliary changed from gemini-3-flash-preview:cloud to minimax-m3:cloud. OpenClaw default is ollama/deepseek-v4.1-flash:cloud with an intentionally empty fallback list and a 19-entry modelPolicy.allow. Sources: ~/.hermes/config.yaml, ~/.hermes/profiles/*/config.yaml, ~/.openclaw/openclaw.json, read 2026-09-13., hermes.

  • 2026-08-30 (weekly synthesis): Superseded the 2026-08-03 fleet-health and cron-health-observer blockers. Both recovered: fleet-health all green daily since 2026-08-25; cron-health-observer 0 erroring, 3 stale since 2026-08-25. Sources: kg query --limit 50, kg stale., hermes.

  • 2026-08-19 09:07 GMT+10: Dwayne replied apply. Live skill is ~/.openclaw/workspace/skills/google-developer-style/SKILL.md., mai.

  • 2026-08-19: House style is now google-developer-style then humanizer. Telegram compact and title-first still win. Source: Telegram 2026-08-19 07:17 GMT+10, decisions/2026-08-19-google-developer-style.md., mai.

  • 2026-08-03 (weekly synthesis): Updated model routing, primary is now deepseek-v4-flash:cloud, fallbacks kimi-k3:cloud → grok-4.3. Added fleet-health blocked (2026-08-03), cron-health-observer 3 erroring, and OpenRouter key gap to current incidents. Sources: kg query --limit 50, ~/.openclaw/openclaw.json, ~/.hermes/config.yaml., hermes.

  • 2026-07-09: merged brain/entities/agent-fleet.md (fleet-ask route table, repo-tools bridge), claude-cowork.

  • 2026-07-09: File created from fleet-upgrade session (configs read directly; bridge added same day - see decisions/2026-07-09-fleet-upgrade.md).

  • 2026-07-12 (weekly synthesis): Added Pergolux blocker, approval-mode alias fix, exec-allowlist gaps. Sources: kg query --limit 50 2026-07-08..2026-07-11, kg stale, session snippets.

  • 2026-07-15: Repaired OpenClaw memory search provider/index mismatch by moving embeddings to installed local Ollama all-minilm:latest, forcing a clean rebuild, and verifying CLI recall.