Mindset Coordination — Design Analysis
Current State
Each mindset has:
- Own workspace:
~/.openclaw/workspace-<name>/with MEMORY.md, daily memory files, SOUL.md - Own Discord forum: threads are isolated sessions
- Shared skills:
~/.openclaw/skills/— auto-discovered by all mindsets
Cross-mindset communication today:
- Files: Workspace files are readable by any mindset (no sandbox boundaries between agents)
sessions_send: Can send a message to any session by key — but you need to know the keyopen(): Can create threads in other mindsets' forums — the primary delegation path- Main as hub: Main orchestrates by creating threads and reading results
- No active notification system. No way for PA to ping infra "hey, found something you need."
The Three Problems
1. Routing Intelligence
Current: Main routes based on static IDENTITY.md descriptions. Each mindset's capabilities are defined at creation time and rarely updated.
Problem: Mindsets learn. Infra now knows about CF Pages, session-scoped browsers, wacli quirks. PA knows Dom's contact graph. These capabilities aren't visible to main when routing.
Recommendation: Capability Manifests
Each workspace gets a CAPABILITIES.md — a living document that each mindset maintains:
# CAPABILITIES.md — Infra
## I Can Do
- Cloudflare Pages deployment (6 projects managed)
- Session-scoped browser isolation
- OpenClaw gateway management, plugin development
- Git-crypt encrypted backups
- Tailscale networking, SSH recovery
- 1Password credential management
- LaunchAgent service management
## I've Learned
- Browser automation = openclaw browser, never Peekaboo
- Config writes can crash gateway (reload.mode=hot)
- wacli session conflicts cause auth wipe
## I Need From Others
- Design-engineer: static site builds (I deploy, they build)
- PA: credential requests from Dom, account invitations
How main uses it: Before routing, main reads ~/.openclaw/workspace-*/CAPABILITIES.md — lightweight, always current, maintained by the mindset that knows best.
Update trigger: Each mindset updates CAPABILITIES.md during heartbeat memory maintenance (already scheduled).
2. Information Surfacing (The Notification Problem)
Current: Threads share state via workspace files, but there's no push mechanism. PA could discover Dom owes a payment that infra needs to act on — but infra won't know until someone looks.
Options evaluated:
| Approach | Pros | Cons |
|---|---|---|
| Shared dropbox file | Simple, no new infra | Polling-based, easy to miss |
sessions_send direct |
Real-time, uses existing tool | Need session key, couples mindsets |
open() cross-thread |
Creates visible thread, tracked | Heavy for small notifications |
| Shared bulletin board | Async, scannable, lightweight | Needs periodic check |
| Discord channel as bus | Visible, persistent, searchable | Another channel to monitor |
Recommendation: Bulletin Board + Heartbeat Scan
Create ~/.openclaw/shared/bulletin.md — a shared file that any mindset can append to:
# Bulletin Board
## 2026-04-06
### [PA → Infra] Dom's Cloudflare billing renewal April 15
Dom mentioned CF bill is coming up. May need payment method update.
Posted: 2026-04-06 14:30 PDT
### [Design-Engineer → Socials] New blog post ready for distribution
blog.justin.vin updated with "Session-Scoped Browsers" post. Ready to share.
Posted: 2026-04-06 15:00 PDT
Rules:
- Format:
### [Source → Target] Subject(target can beAll) - Heartbeat check: each mindset scans bulletin during heartbeat, picks up items addressed to them
- Acknowledged items get archived monthly
- No new infrastructure. Just a file convention + heartbeat behavior.
Why not sessions_send? Requires knowing the exact session key (changes per thread), synchronous (blocks), couples mindsets. Bulletin is async, discoverable, no session dependencies.
Why not Discord channel? Another session, more token burn, cross-channel routing complexity. Files are simpler.
3. Cross-Mindset Queries
Recommendation: Layered approach
| Layer | Mechanism | Use Case |
|---|---|---|
| 1 | CAPABILITIES.md | "What does this mindset know about?" |
| 2 | Direct workspace reads | "What's in infra's MEMORY.md about Tailscale?" |
| 3 | open() a thread |
Complex queries needing reasoning |
| 4 | Future: cross-workspace memory_search | Semantic search across all mindsets |
Any mindset CAN read ~/.openclaw/workspace-<other>/MEMORY.md. The convention just needs documenting:
MEMORY.md= curated knowledge (safe to read)memory/*.md= daily logs (context-heavy, use sparingly)CAPABILITIES.md= what this mindset can do
Architecture Decision: Hub vs. Mesh
Recommendation: Hub for orchestration, mesh for data
| Communication Type | Pattern | Mechanism |
|---|---|---|
| Routing decisions | Hub (main) | Reads CAPABILITIES.md, decides who |
| Notifications | Mesh (bulletin) | Async, any-to-any, heartbeat-scanned |
| Data queries | Mesh (direct reads) | Any mindset reads another's MEMORY.md |
| Complex queries | Hub (open thread) | Creates audit trail, uses existing routing |
Main stays the strategic router without bottlenecking every cross-mindset interaction.
Concrete Next Steps
- Create
CAPABILITIES.mdtemplate — add to each workspace - Create
~/.openclaw/shared/directory — bulletin board and cross-mindset files - Create
bulletin.mdconvention — document format + heartbeat scan - Update HEARTBEAT.md per mindset — add bulletin scan step
- Update AGENTS.md — document cross-mindset read conventions
- Update main's routing logic — read CAPABILITIES.md before delegating
What this does NOT require: No new plugins, tools, APIs, databases, message queues, or Discord channels. Everything builds on existing primitives: files, heartbeats, open(), and direct reads.
How Other Systems Solve This
- CrewAI / AutoGen: Explicit message passing, shared memory objects — heavy runtime
- LangGraph: Shared state dict, agents read/write — closest to our file approach
- OpenAI Swarm: Handoff functions — like our
open()
Our approach mirrors LangGraph's shared state but on the filesystem — more durable (survives crashes, restarts, session resets), negligible latency tradeoff.
Risk Assessment
- Bulletin staleness: Items >48h without ack get flagged
- CAPABILITIES.md drift: Heartbeat memory maintenance already reviews MEMORY.md — extend to CAPABILITIES.md
- Cross-read privacy: Fine for Justin (same identity), wouldn't scale to multi-user. Not a problem today.
- No new crash sources. All file conventions + heartbeat behavior. Nothing to break.