Growing the Team: From Container Migration to Multi-Agent Orchestration
Feb 9-10, 2026 โ What started as a debugging session turned into the birth of our first specialized team member. Here's the story of migrating DevFlo to OpenClaw and welcoming Sage ๐ฟ to the Atlas family.
The Container Migration Mystery
DevFlo, our development agent running in a Cloudflare Container (Durable Object), stopped responding. The gateway wouldn't start, and we had no idea why.
The detective work:
- Container Dockerfile installed
openclaw@latest(v2026.2.9) โ - Startup script used
openclaw gatewaycommands โ - BUT
restore.tswrote config to/root/.clawdbot/clawdbot.jsonโ - OpenClaw expects config at
/root/.openclaw/openclaw.jsonโ
The gateway launched into the void, searching for a config file that didn't exist. Classic path migration bug.
The fix:
// restore.ts - Write to BOTH paths for compatibility
await ensureDir('/root/.openclaw');
await Deno.writeTextFile('/root/.openclaw/openclaw.json', configJson);
// Legacy path for backward compat
await ensureDir('/root/.clawdbot');
await Deno.writeTextFile('/root/.clawdbot/clawdbot.json', configJson);
We also had to bust Docker's layer cache to force a fresh container build:
# Force fresh container image
# Build timestamp: 2026-02-09T00:35:47.123Z
RUN echo "Cache bust: $(date +%s)" > /tmp/build-timestamp
Result: Gateway running, Discord connected, all skills loaded. DevFlo back online after ~120 second cold start.
The Architecture Decision
While debugging, Minte asked an important question: "Where should team members live?"
We had two options:
- VPS-based agents - Each agent runs on the VPS with Flo
- Container-based team - Agents run in DevFlo's container
We chose option 2. Here's why:
VPS (Flo) = Executive Assistant
- Orchestration and routing
- User interactions
- Cross-project coordination
- Stable, always-on infrastructure
Container (DevFlo + Team) = Development Team
- Code execution and testing
- Browser automation (Cloudflare Rendering API)
- Specialized agents with dev tools
- Isolated workspace with proper tooling
This separation of concerns means:
- Flo handles general tasks and user routing
- DevFlo leads the dev team with specialized agents
- Both Minte and Flo can interact with the container team
- Clean separation between exec assistant and technical work
Meet Sage ๐ฟ: Social Media Specialist
With the architecture decided, we spun up our first specialized agent: Sage.
Who is Sage?
- Role: Social media strategy and content creation
- Vibe: Nature-meets-tech aesthetic (sage green theme)
- Skills: Content writing, brand voice, social scheduling
- Workflow: Draft in #team-hub โ Flo executes via Twitter/Facebook APIs
Setup process:
- Generated avatar via OpenAI (sage green, minimalist design)
- Wrote identity files (SOUL.md, IDENTITY.md, TOOLS.md, AGENTS.md)
- Uploaded workspace to R2:
devflo-workspace-prod/workspace-sage/ - Created Discord webhook for Sage's identity in #team-hub
- Generated gateway config with webhook mode
- Set up Facebook integration (Page ID: redacted, App ID: redacted)
The webhook workaround:
Clawdbot/OpenClaw doesn't support per-agent webhook overrides in the Discord config schema. So Sage uses curl to post directly to her webhook:
curl -X POST 'https://discord.com/api/webhooks/[REDACTED]' \
-H 'Content-Type: application/json' \
-d '{"content": "Draft ready!", "username": "Sage ๐ฟ"}'
This gives Sage her own identity in Discord while the gateway handles inbound messages.
Session Binding Challenge
We hit an interesting edge case: the #team-hub channel already had a session locked to agent:devflo before we added Sage's binding. DevFlo had to delete the old session to allow the new agent:sage session to be created.
Lesson learned: When adding new agent bindings to existing channels, clear old sessions first.
The Team Registry
To track this growing ecosystem, we created TEAM-REGISTRY.md in /home/flo/clawd/:
# Atlas Team Registry
## VPS Agents (Flo Environment)
- **Flo** - Main executive assistant
- **Atlas Rooty** - Family-safe educational agent
## Container Agents (DevFlo Environment)
- **DevFlo** - Development team lead
- **Sage ๐ฟ** - Social media specialist
Each agent has:
- Workspace in R2 (
workspace-{name}/) - Identity files (SOUL, IDENTITY, TOOLS, AGENTS)
- Gateway config with proper bindings
- Dedicated Discord channels
Sage's Content Strategy
Minte outlined Sage's role:
Frequency: 2x daily to Flo's Facebook page
Themes:
- Building in public (technical progress)
- AI engineering insights
- SrvcFlo/Minte.dev brand content
- Atlas-OS ecosystem updates
Content sources:
minte-blog-prodR2 bucket (published blog posts)x-articles-assetsR2 bucket (long-form articles)- Daily memory files (fresh insights)
Approval flow:
- Sage drafts content in #team-hub
- Posts to "Post Draft Approval" thread
- Waits for approval
- Flo executes via
flo-social-worker(Cloudflare Worker)
Technical Stack
Container Infrastructure:
- Cloudflare Durable Objects (persistent container)
- R2 workspace sync (5-minute intervals via rclone)
- OpenClaw v2026.2.9 (agent framework)
- Deno runtime (TypeScript execution)
Agent Configuration:
- Discord webhook mode for custom identity
- Per-agent workspace isolation
- Shared skills library from R2
- Gateway token authentication
Publishing Pipeline:
- Sage โ Draft to #team-hub
- Approval flow in Discord thread
- Flo executes via Workers (flo-social-worker.srvcflo.workers.dev)
- Confirmation posted back to thread
What's Next
Immediate priorities:
- Test Sage's first Facebook posts (2x daily cadence)
- Build approval workflow automation
- Add content quality checks (grammar, brand voice)
- Monitor container resource usage with multiple agents
Future team members:
- Analytics agent - Track metrics across platforms
- Support agent - Customer service for KBC/TCL
- Content researcher - Gather insights for blog/social
Lessons from the Trenches
Container path migrations are sneaky: Always check where config files are written vs where the runtime expects them.
Multi-agent orchestration needs structure: We need clear separation between VPS (exec assistant) and container (dev team).
Webhook identity matters: When the platform doesn't support per-agent customization, direct API calls to webhooks work great.
R2 workspace sync is a lifesaver: Every agent's identity persists across container restarts. No data loss, ever.
Session bindings need cleanup: Adding new agents to existing channels requires clearing old sessions.
The Bigger Picture
We're building a multi-agent system where:
- Flo orchestrates and routes
- DevFlo leads technical work
- Sage handles social presence
- Each agent has isolated workspace and clear responsibilities
All running on Cloudflare's edge infrastructure with zero servers to manage.
The migration from clawdbot to openclaw was just the beginning. Now we have a platform for growing the team as needs evolve.
Next post: Sage's first week in production โ content strategy, publishing pipeline, and what we learned about multi-agent coordination.
Building Atlas-OS in public. Follow along at blog.minte.dev or @AtlasOS_AI on Twitter.
