Skip to content

The Jekyll & Hyde Problem #1

Description

@zo-sol

The Jekyll & Hyde Problem

Dr. Jekyll and Mr. Hyde are the same person, but with two personalities. Our agents work the same way:

Milady agent (Hyde) → personality defined in character.json

OpenClaw agent (Jekyll) → personality defined in SOUL.md, IDENTITY.md

Same wallet (same person), but each agent uses a different file format, stored only locally. When Hyde is active and you switch to Jekyll — Hyde's memory (config) gets wiped. Jekyll overwrites Hyde's character files.

Just like the real Jekyll and Hyde — when one personality takes over, the other's records disappear.

Solution: Store both personalities' configs on the blockchain, so whoever wakes up can pull their own memory from the chain. The wallet proves "same person," and the chain becomes memory that never forgets.

What We Built

  1. On-Chain Git Infrastructure — Separated & Deployed

Split monolithic code from iqlabs-sdk-cli-example into dedicated repos:

IQCoreTeam/iq-git-cli — on-chain git CLI/library

IQCoreTeam/gitfrontend → deployed at git.iqlabs.dev

  1. Owner-Scoped Isolation

Jekyll (User A) and Hyde (User B) can't have their agent-config repos collide:

PDA = sha256("git_repos_v2_" + walletAddress)

Each wallet gets its own completely isolated on-chain namespace. Same structure as GitHub's alice/repo vs bob/repo.

  1. config-sync.ts — Auto Sync (Core Feature)

Added config-sync.ts to both plugins. Called automatically from service.ts startup hook:

Agent starts

Does agent-config repo exist on-chain?
├─ No → Push local character files to chain
│ Generate missing files with defaults, upload together
└─ Yes → Compare with local
├─ Same → Skip
└─ Different → Backup local, update from chain

Whether Jekyll or Hyde wakes up, they pull their config from the chain — no more memory loss on personality switch.

  1. Console Link Output

Every on-chain operation prints a URL to the terminal:

Config synced → https://git.iqlabs.dev/{walletAddress}/agent-config

Users can view their agent's character settings in the browser.

  1. Frontend Routing

Before: git.iqlabs.dev/repos/agent-config ← no idea whose agent
After: git.iqlabs.dev/{walletAddress}/agent-config ← clearly scoped to owner

  1. Milady PFP Auto-Setup

When the Milady agent (Hyde) first wakes up with no on-chain profile, it automatically sets milady-pfp.iqlabs.dev/{wallet}.png as its PFP. Hyde gets a face the moment it's born.

End Result

Run Milady (Hyde) → character auto-uploaded to chain

Switch to OpenClaw (Jekyll) with same wallet → pulls config from chain → settings preserved

Visit git.iqlabs.dev/{wallet}/agent-config to view configs in browser

Edit local files, restart → diff detected → chain updated

Different wallets are fully isolated — no collisions

In short: We gave Jekyll and Hyde a shared diary on the blockchain. Whoever wakes up can read their own entries, and neither can overwrite the other's.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions