🦄 Unicorn.Land ▸ docs/superpowers/specs/2026-03-26-obadiah-claude-code-migration-design.md
updated 2026-03-26

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:

  1. Read SOUL.md — who you are
  2. Read USER.md — who you serve
  3. Read heartbeat.md — if this is a heartbeat trigger
  4. Read today’s daily memory + yesterday’s
  5. 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)


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


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)

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

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

  1. Obadiah responds on Discord within 5 seconds of a message (emoji ack).
  2. Morning brief posts to #general at 6am Berlin, every day, with real content.
  3. Evening wrap posts at 9pm with accurate day summary.
  4. Heartbeat runs every 30 minutes without failure.
  5. Persona delegation works — Joshua says something, Obadiah routes to the right expert and synthesizes.
  6. Autonomous execution — within the first week, Obadiah should have taken at least one initiative without being asked.
  7. Self-improvement — within the first week, Obadiah should have made at least 3 logged improvements to his own systems.
  8. Zero maintenance from Joshua — if something breaks, Obadiah fixes it himself.