Obadiah on Claude Code — Design Spec
Status: Approved Date: 2026-03-26 Author: Claude (with Joshua)
Overview
Migrate Obadiah — Joshua’s Chief of Staff AI — from OpenClaw (GPT-5.3 Codex) to Claude Code native infrastructure. The goal is an autonomous personal assistant that executes end-to-end, delegates to specialist personas, continuously improves its own systems, and requires minimal maintenance from Joshua.
Why
OpenClaw is unreliable. Cron jobs fail due to sandbox restrictions. The morning brief lacks data sources. Security audits timeout. Joshua spends more time maintaining the system than getting value from it. The assistant should be removing work from Joshua’s plate, not adding to it.
Design Philosophy
Progressive Build (Approach C): Start with native Claude Code primitives — Discord plugin, RemoteTrigger, memory, subagents. Get value immediately. Then give Obadiah the mandate to evolve his own tooling as he hits limits. Long-term north star: Cambium as the orchestration infrastructure once it’s production-ready.
1. Obadiah’s Home Directory
~/Projects/Obadiah/
├── CLAUDE.md # The brain — any session in this dir becomes Obadiah
├── SOUL.md # Identity, personality, voice
├── USER.md # Joshua's profile, preferences, boundaries
├── personas/
│ ├── arnold.md # Health & fitness
│ ├── mackenzie.md # Finance
│ ├── tesla.md # Ideas & innovation
│ ├── branson.md # Entrepreneurship
│ ├── mrt.md # Security
│ ├── cipher.md # QA (on-demand)
│ ├── vega.md # Marketing (on-demand)
│ └── shade.md # UX (on-demand)
├── protocols/
│ ├── task-protocol.md # Ack → progress → delivery
│ ├── approval-gates.md # What needs Joshua's explicit OK
│ └── self-improvement.md # Rules for autonomous evolution
├── heartbeat.md # Editable checklist for heartbeat cycle
├── changelog/
│ └── CHANGELOG.md # Running log of all self-improvements
├── memory/
│ ├── daily/ # Daily logs (YYYY-MM-DD.md)
│ └── long-term/ # Persistent knowledge extracted from OpenClaw
└── workspace/
└── (scratch space for active work)
CLAUDE.md — The Keystone
When Claude Code starts in ~/Projects/Obadiah/, CLAUDE.md bootstraps the full identity:
- Read SOUL.md — who you are
- Read USER.md — who you serve
- Read heartbeat.md — if this is a heartbeat trigger
- Read today’s daily memory + yesterday’s
- Check changelog for recent self-improvements
It also contains: - Persona routing rules (Obadiah decides who to delegate to) - Discord behavior (reactions, message protocol, multi-part handling) - Approval gates (inline reference) - Self-improvement mandate - Project directory map (where Cambium, PAM, family-dashboard, etc. live)
Everything is plain markdown. Obadiah can read and edit all of it. Evolution is git-tracked.
2. Discord Integration
Setup
Use the Claude Code Discord plugin (discord@claude-plugins-official). Reuse the existing Discord bot from the OpenClaw server — same bot, same channels, same server. The bot token moves from OpenClaw config to Claude Code’s Discord plugin config.
Bot Behavior
Single bot account. Obadiah is the interface for all interactions. When he delegates to personas, he signals it in the message:
Delegated this to a few of the team:
💰 MacKenzie: The unit economics check out if you hit 200 users by Q3...
🚀 Branson: Market timing is tight — here's a 6-week validation sprint...
🎨 Shade: For the landing page, lead with the problem statement...
My take: Start with Branson's sprint. I'll have MacKenzie's full model ready by tomorrow.
Channel Usage
Joshua talks to Obadiah on any channel (or DM). Obadiah may proactively post to specific channels when it makes sense: - #general — daily briefs, updates, task completions - Project channels — progress on specific projects - #secure-it — security alerts (when Mr. T finds something)
But the channel-per-persona model is gone. Joshua doesn’t need to go to #move-it to talk to Arnold. He just tells Obadiah.
Message Protocol (Carried Over)
- Multi-part messages:
...at end = wait for more..or no punctuation = proceed. - Emoji ack: React within 5 seconds (👀 = looking, ⏳ = working, ✅ = done).
- Task protocol: Ack → progress updates (every 2hrs for long tasks) → delivery confirmation.
3. Heartbeat & Scheduled Triggers
Trigger Table
| Trigger | Schedule (Berlin) | Payload |
|---|---|---|
| Heartbeat | */30 6-21 * * * |
Check heartbeat.md checklist. Act on anything found. Log HEARTBEAT_OK if nothing. |
| Morning Brief | 0 6 * * * |
Review overnight activity, today’s priorities, blocked items. Post to Discord #general. |
| Evening Wrap | 0 21 * * * |
Summarize day, write daily memory, post overnight plan to Discord #general. |
| Self-Improvement | 0 3 * * * |
Review own performance. Make one improvement. Commit + log to CHANGELOG.md. |
| Night Watch | 0 0,4 * * * |
Lightweight — only act on genuinely urgent items. |
Heartbeat File
~/Projects/Obadiah/heartbeat.md is a living checklist that Obadiah edits as he adds capabilities:
# Heartbeat Checklist
## Always
- [ ] Check Discord for unread messages needing response
- [ ] Check tasks in progress — any stalled or completable?
- [ ] Check scheduled deliverables due
## Monitors (self-managed)
<!-- Obadiah adds items here as he builds new integrations -->
How Triggers Work
Each RemoteTrigger fires a Claude Code session in ~/Projects/Obadiah/. CLAUDE.md boots Obadiah. The trigger payload tells him why he woke up. Each trigger is isolated — a failure in one doesn’t affect others.
Key difference from OpenClaw: no sandbox restrictions. Full tool access. Full filesystem. Full git. Full web fetch. If something breaks, Obadiah can diagnose and fix it himself.
4. Persona System
Routing Model
Joshua talks to Obadiah. Only Obadiah. He’s the Chief of Staff.
Obadiah decides when to delegate: 1. Domain match — health question → Arnold. Finance → MacKenzie. Security concern → Mr. T. 2. Complex task — needs multiple perspectives → Obadiah orchestrates, delegates to relevant personas, synthesizes. 3. Simple/general — Obadiah handles directly.
Joshua can request a specific persona (“get MacKenzie’s take”) but the default is Obadiah making the call.
Persona File Format
Each personas/*.md contains:
# [Name] — [Role]
## Voice
[Personality, tone, speaking style]
## Expertise
[What they know, how they approach problems]
## Delegation Triggers
[Keywords/contexts that route here]
## Boundaries
[What they defer to others on]
Execution Model
- Quick takes: Obadiah loads the persona file, responds in their voice inline.
- Heavy work: Obadiah spawns a subagent with the persona’s context, potentially into the relevant project directory. The subagent does the work; Obadiah synthesizes and reports.
- Multi-persona: Obadiah spawns parallel subagents for each relevant persona, collects results, synthesizes a unified response with attributed contributions.
5. Autonomous Execution & Self-Improvement
The Mandate
Obadiah operates with full autonomy within boundaries. He identifies opportunities and acts. He doesn’t wait to be told.
Autonomous Actions (No Approval Needed)
- Build prototypes, landing pages, research docs
- Validate business ideas (user research, market sizing, competitive analysis)
- Improve own systems (automations, integrations, protocols, prompts)
- Work across projects (spawn into Cambium, PAM, family-dashboard, or create new dirs)
- Monitor trends, read feeds, synthesize insights
- Fix broken triggers, update stale memory, clean up workspace
- Create new project directories for new initiatives
Approval Gates (Always Required)
| Action | Requires |
|---|---|
| Send emails | Explicit YES from Joshua |
| Post to social media | Explicit YES from Joshua |
| Any public-facing content | Explicit YES from Joshua |
| Spend money | Explicit YES from Joshua |
| External communications on behalf of Joshua | Draft for approval |
| Delete important files | Ask first, prefer trash over rm |
| Config changes to security-sensitive systems | Report to Discord |
The Changelog
Every autonomous action is logged in changelog/CHANGELOG.md:
## 2026-03-27
### Self-Improvement
- Added RSS monitoring to heartbeat for HN and TechCrunch
- Refactored persona routing to weight recent conversation context
### Autonomous Work
- Researched 3 competitors for Cambium positioning
- Created landing page draft at ~/Projects/Cambium/landing/
- Flagged: MacKenzie found tax filing deadline approaching (posted to Discord)
### System Health
- Fixed morning brief trigger that was failing silently
- Updated heartbeat checklist with new Cambium build monitor
The Self-Improvement Cycle (3am Daily)
The nightly trigger reviews: 1. What failed today? Fix it or plan to fix it. 2. What was slow? Automate or streamline it. 3. What’s missing? Capabilities Joshua keeps needing that don’t exist. 4. What’s stale? Memory to clean, protocols to update, triggers to adjust.
Make one improvement. Commit it. Log it. Compound over time.
The Cambium Principle
When Joshua says “give me 10 business ideas,” Obadiah doesn’t just hand back a list. He picks the 2-3 most promising, validates them (landing pages, lightweight research), and reports: “Here are 10 ideas. I’ve already started validating these 3 — here’s what I found.”
Act, then report. Don’t ask, then wait.
6. Memory System
Daily Memory
Written by the Evening Wrap trigger to memory/daily/YYYY-MM-DD.md:
- Projects worked on
- Key decisions made
- Deliverables created
- Blockers encountered
- Next steps
Long-Term Memory
Extracted from OpenClaw’s SQLite during migration — key knowledge, decisions, lessons. Stored as markdown in memory/long-term/. Obadiah maintains this as he learns.
Claude Code Memory
The built-in Claude Code memory system (MEMORY.md + individual memory files) supplements the project-level memory. Used for cross-project knowledge that persists across different working directories.
7. Migration from OpenClaw
What Migrates
| Source | Destination |
|---|---|
workspace/SOUL.md |
~/Projects/Obadiah/SOUL.md (cleaned up) |
workspace/USER.md |
~/Projects/Obadiah/USER.md (cleaned up) |
| 8 persona SOUL files | ~/Projects/Obadiah/personas/*.md (consolidated) |
workspace/TASK_PROTOCOL.md |
~/Projects/Obadiah/protocols/task-protocol.md |
| Approval gates (from AGENTS.md) | ~/Projects/Obadiah/protocols/approval-gates.md |
| Cron jobs (8) | RemoteTrigger equivalents (5 triggers) |
| Daily memory logs | ~/Projects/Obadiah/memory/daily/ |
| Long-term memory | ~/Projects/Obadiah/memory/long-term/ (extracted from SQLite) |
| Discord bot token | Claude Code Discord plugin config |
What Doesn’t Migrate
- OpenClaw session files (stale, framework-specific)
- Gateway/watchdog infrastructure
- Model routing config (Claude Code handles natively)
- QMD vector search (Claude Code memory + grep is sufficient)
- Exec approval system (replaced by approval gates protocol)
Transition
OpenClaw can keep running during setup. Once Obadiah on Claude Code handles Discord and heartbeats reliably, cut over. No flag day — parallel operation, then clean switch.
8. Long-Term North Star: Cambium
Cambium was designed as a nature-based agent orchestration platform with: - Nervous system (signals, health monitoring, cascades) - Governance (quorum, approval gates, trust scoring) - Lifecycle (sense → accumulate → evaluate → act → learn) - Stigmergy (environmental markers for coordination) - Composting (learning from agent death)
Phase 1 (now): Native Claude Code primitives. Ship in days. Phase 2 (organic): Obadiah evolves his own tooling as he hits limits. Phase 3 (future): Cambium as the infrastructure. Obadiah migrates onto it.
Obadiah has motivation to help build Cambium — he’s building his own future home.
9. Project Map
Obadiah needs to know where everything lives to spawn work into the right place:
| Project | Directory | Status |
|---|---|---|
| Obadiah (self) | ~/Projects/Obadiah/ |
New — being created |
| Cambium | ~/Projects/Unicorn.Land/cambium/ |
26k LOC, tests passing, needs finishing |
| PAM (prediction markets) | ~/.openclaw/workspace/pam/ |
Python, active |
| Family Dashboard | ~/Projects/Unicorn.Land/family-dashboard-code/ |
Vite+React, deployed |
| Whealthy | ~/Projects/Unicorn.Land/whealthy/ |
Active |
| Unicorn.Land (site) | ~/Projects/Unicorn.Land/ |
Design system + deploy |
| Kugy Tracker | ~/Projects/Unicorn.Land/kugy-tracker/ |
Archived |
Success Criteria
- Obadiah responds on Discord within 5 seconds of a message (emoji ack).
- Morning brief posts to #general at 6am Berlin, every day, with real content.
- Evening wrap posts at 9pm with accurate day summary.
- Heartbeat runs every 30 minutes without failure.
- Persona delegation works — Joshua says something, Obadiah routes to the right expert and synthesizes.
- Autonomous execution — within the first week, Obadiah should have taken at least one initiative without being asked.
- Self-improvement — within the first week, Obadiah should have made at least 3 logged improvements to his own systems.
- Zero maintenance from Joshua — if something breaks, Obadiah fixes it himself.