Skip to content

ian/hybrid

Repository files navigation

Hybrid

Drop-in OpenClaw replacement with native XMTP messaging.

Hybrid is a TypeScript agent runtime with 100% OpenClaw feature parity β€” your SOUL.md, AGENTS.md, memory files, and skills work without modification. On top of that, you get a decentralized messaging layer via XMTP, a 3-layer PARA memory system, multi-user access control, and a channel adapter framework for connecting to any network.

Port your OpenClaw instance in under 10 minutes. Deploy to Fly.io, Cloudflare Workers, or any Node.js host.


Why Hybrid

OpenClaw gave agents persistent memory, skills, and a scheduler. Hybrid keeps all of that and adds the missing pieces for real-world multi-user deployment:

  • Messaging β€” agents live on XMTP, a decentralized messaging protocol. Users reach your agent from any XMTP-compatible app, no account required beyond a wallet.
  • Multi-user memory β€” each user's memory is isolated by wallet address. Owners get full access; guests get their own private slice.
  • Structured knowledge β€” beyond flat markdown files, Hybrid adds a PARA-based entity graph with atomic facts, decay tiers, and fact supersession.
  • Channel adapters β€” XMTP today, Telegram or Slack tomorrow. A uniform adapter interface with local HTTP IPC, so channels are independently deployable.

OpenClaw Compatibility

Everything that works in OpenClaw works in Hybrid. Same files, same format, same behavior.

OpenClaw Hybrid
SOUL.md + AGENTS.md config βœ… βœ…
MEMORY.md auto-memory βœ… βœ…
memory/*.md indexed files βœ… βœ…
Session transcripts (memory/conversations/{userId}/{conversationId}.json) βœ… βœ…
Vector search (sqlite-vec) βœ… βœ…
BM25 / FTS hybrid search βœ… βœ…
Embedding providers (openai, gemini, voyage, mistral, local, auto) βœ… βœ…
Daily logs (memory/logs/YYYY-MM-DD.md) βœ… βœ…
Skills (SKILL.md format) βœ… βœ…
Scheduler (cron / every / at) βœ… βœ…
Per-user memory isolation ❌ βœ…
PARA knowledge graph ❌ βœ…
Atomic facts + decay tiers ❌ βœ…
Fact supersession ❌ βœ…
Multi-user ACL (wallet-based) ❌ βœ…
XMTP native messaging ❌ βœ…
Channel adapter framework ❌ βœ…
ENS + Basename resolution ❌ βœ…

Quickstart

Porting from OpenClaw

Your config files, memory, and skills work without modification.

1. Scaffold into a new directory

npm create hybrid my-agent
cd my-agent

2. Copy your OpenClaw files over

cp /path/to/openclaw/SOUL.md   ./SOUL.md
cp /path/to/openclaw/AGENTS.md ./AGENTS.md
cp /path/to/openclaw/MEMORY.md ./MEMORY.md
cp -r /path/to/openclaw/memory ./memory
cp -r /path/to/openclaw/skills ./skills

3. Add new skills (optional)

hybrid skills add github:cloudflare/skills/wrangler
hybrid skills add github:you/my-skill

4. Set your env vars

cp .env.example .env

Then fill in .env:

OPENROUTER_API_KEY=your_key    # or ANTHROPIC_API_KEY

# XMTP identity β€” generate a wallet key for your agent
AGENT_WALLET_KEY=0x...
XMTP_ENV=production

5. Register and run

hybrid register    # one-time: registers your wallet on the XMTP network
hybrid dev

Your agent is reachable at its wallet address from any XMTP client. Send it a DM at xmtp.chat.


Onboarding

When you first create a Hybrid agent, it includes a BOOTSTRAP.md file that defines the first-run onboarding experience.

First Run

  1. Configure ACL β€” Add your wallet address to ACL.md:

    ## Owners
    
    - 0xyour_wallet_address
  2. Start the agent:

    pnpm dev
  3. Chat with your agent β€” The agent will:

    • Ask about its identity (name, personality, emoji)
    • Learn about you (name, preferences, timezone)
    • Discuss boundaries and behavior
    • Delete BOOTSTRAP.md when complete
  4. Onboarding complete β€” Your agent now has a unique identity!

How It Works

  • Owner-only: During onboarding, only the owner can interact with the agent
  • State tracking: Progress is saved in workspace-state.json
  • Automatic completion: The agent detects when BOOTSTRAP.md is deleted and marks onboarding complete
  • OpenClaw compatible: Uses the same BOOTSTRAP.md format and flow

Adding More Users

After onboarding, add more owners or guests to ACL.md:

  • Owners can access all memory and modify agent configuration
  • Guests get isolated memory and can only create their own user profile

Multi-Tenant Profiles

Each user gets their own profile:

users/
β”œβ”€β”€ 0xalice/
β”‚   └── USER.md    ← Alice's preferences
└── 0xbob/
    └── USER.md    ← Bob's preferences

The agent maintains its identity (IDENTITY.md, SOUL.md) across all users.


Starting fresh

npm create hybrid my-agent
cd my-agent
cp .env.example .env   # fill in OPENROUTER_API_KEY and AGENT_WALLET_KEY
hybrid register
hybrid dev

Project Structure

Running hybrid init <name> generates this project structure:

my-agent/
β”œβ”€β”€ package.json                 # Project config (name replaced)
β”œβ”€β”€ .gitignore                   # Ignores credentials/, sessions/, memory/, etc.
β”œβ”€β”€ .env.example                 # Environment template
β”‚
β”œβ”€β”€ credentials/                 # Access control
β”‚   └── xmtp-allowFrom.json      # Created during init with owner wallet
β”‚
β”œβ”€β”€ skills/                      # Copied from core skills
β”‚   β”œβ”€β”€ memory/SKILL.md
β”‚   β”œβ”€β”€ xmtp/SKILL.md
β”‚   └── skills-manager/SKILL.md
β”‚
β”œβ”€β”€ skills-lock.json             # Locks installed skill versions
β”‚
└── [Agent Configuration Files]
    β”œβ”€β”€ SOUL.md                  # Agent personality & principles
    β”œβ”€β”€ IDENTITY.md              # Name, creature, vibe, emoji
    β”œβ”€β”€ USER.md                  # Human profile template
    β”œβ”€β”€ AGENTS.md                # Workspace rules & memory system
    β”œβ”€β”€ TOOLS.md                 # Local notes (cameras, SSH, etc.)
    β”œβ”€β”€ BOOTSTRAP.md             # First-run setup guide
    └── HEARTBEAT.md             # Periodic task checklist

Key Files

File Purpose
SOUL.md Agent personality, principles, and behavior style
IDENTITY.md Name, creature type, vibe, emoji, avatar
USER.md Human profile β€” name, preferences, context
AGENTS.md Workspace rules, memory system, group chat behavior
TOOLS.md Local notes β€” camera names, SSH aliases, TTS voices
BOOTSTRAP.md First-run onboarding guide (deleted after setup)
HEARTBEAT.md Periodic task checklist for proactive behavior

Init Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    hybrid init <name>                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  1. Copy templates/agent/ β†’ <name>/                         β”‚
β”‚     - package.json (with name replaced)                     β”‚
β”‚     - SOUL.md, IDENTITY.md, USER.md, AGENTS.md             β”‚
β”‚     - TOOLS.md, BOOTSTRAP.md, HEARTBEAT.md                 β”‚
β”‚     - .gitignore, .env.example                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  2. Copy core skills/ β†’ <name>/skills/                      β”‚
β”‚     - memory/                                               β”‚
β”‚     - xmtp/                                                 β”‚
β”‚     - skills-manager/                                       β”‚
β”‚                                                             β”‚
β”‚     Create skills-lock.json with core skill references      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  3. Prompt: "Enter your wallet address (owner):"           β”‚
β”‚                                                             β”‚
β”‚     Input: 0xAbC123...                                      β”‚
β”‚                                                             β”‚
β”‚     β†’ Create credentials/xmtp-allowFrom.json               β”‚
β”‚       { "version": 1, "allowFrom": ["0xabc123..."] }       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Output:                                                    β”‚
β”‚                                                             β”‚
β”‚  βœ… Created agent at: my-agent/                             β”‚
β”‚                                                             β”‚
β”‚  Next steps:                                                β”‚
β”‚    cd my-agent                                              β”‚
β”‚    npm install  # or pnpm install                           β”‚
β”‚    hybrid dev   # Start development                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Agent Runtime Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Agent Process                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚   SOUL.md   β”‚    β”‚  IDENTITY.mdβ”‚    β”‚   USER.md   β”‚     β”‚
β”‚  β”‚ Personality β”‚    β”‚ Who am I?   β”‚    β”‚ Human info  β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚         β”‚                  β”‚                  β”‚              β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                            β–Ό                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                   System Prompt                       β”‚   β”‚
β”‚  β”‚  [IDENTITY] + [SOUL] + [AGENTS] + [TOOLS] + [USER]   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                            β”‚                                β”‚
β”‚                            β–Ό                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              Claude Agent SDK                        β”‚   β”‚
β”‚  β”‚  query({ prompt, options }) β†’ conversation stream    β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                            β”‚                                β”‚
β”‚                            β–Ό                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                   Skills Layer                       β”‚   β”‚
β”‚  β”‚  ./skills/*/SKILL.md β†’ Tool definitions              β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
Owners can read all memory β€” shared, per-user, and the `memory/` directory. Guests only read and write their own slice. If there's no `ACL.md`, everyone is treated as an owner (to allow initial onboarding). Set up ACL immediately after first run to restrict access.
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Memory

Hybrid has a 3-layer memory system. All three layers are indexed together into SQLite for unified search.

Layer 1 β€” PARA Knowledge Graph

Structured entity storage inspired by the PARA method. The agent can create named entities in four buckets β€” projects, areas, resources, archives β€” and attach atomic facts to each one.

memory/life/
  areas/people/Alice/
    items.json     ← all facts, including superseded ones
    summary.md     ← hot + warm facts only, used for search indexing

Each fact has a decay tier based on how recently and how often it's been accessed:

Tier Condition
Hot accessed in the last 7 days, or 5+ accesses in the last 14 days
Warm accessed in the last 30 days, or 10+ total accesses
Cold not accessed in 30+ days

Cold facts are excluded from search and from summary.md β€” but never deleted. When a fact becomes outdated, supersession marks the old fact as superseded and links it to the new one. Both stay in items.json as a history trail.

Layer 2 β€” Daily Log

An append-only chronological log. Each day gets its own file:

memory/logs/2026-03-02.md

The agent logs facts, decisions, and actions throughout a session. Entries are timestamped and tagged [FACT], [DECISION], or [ACTION]. Nothing is ever rewritten β€” the file only grows.

Layer 3 β€” Auto Memory

A structured MEMORY.md with five fixed sections: User Preferences, Learnings, Decisions, Context, Notes. The agent appends dated bullet points to the relevant section as it learns things about the user.

Per-User Isolation

Every user's memory is scoped to their wallet address:

memory/users/0xabc.../MEMORY.md    ← guest's private memory
MEMORY.md                                  ← shared memory (owners only)

Access control is defined in ACL.md at the project root:

## Owners

- 0xabc123...    # Added 2026-03-01

Owners can read all memory β€” shared, per-user, and the memory/ directory. Guests only read and write their own slice. If there's no ACL file, everyone is treated as an owner (to allow initial onboarding). Once you add your first owner to the ACL, all other users default to guest.

Search

Queries run both vector search (semantic, via sqlite-vec) and BM25 keyword search (FTS5) in parallel. Results are merged with a 70/30 weighting by default and filtered by a minimum relevance score. If no embedding provider is configured, it falls back to keyword-only.


Scheduler

The scheduler lets the agent take action on a time-based trigger β€” run a cron job, fire after an interval, or execute once at a specific time. Jobs are persisted to SQLite and survive restarts.

Schedule Types

// One-time β€” fires once at a specific time
{ kind: "at", at: "2026-03-15T09:00:00Z" }

// Interval β€” fires every N milliseconds
{ kind: "every", everyMs: 3_600_000 }  // every hour

// Cron β€” standard cron expression with optional timezone
{ kind: "cron", expr: "0 9 * * 1-5", tz: "America/New_York" }

How It Works

The scheduler uses precise setTimeout calls β€” it computes the exact millisecond of the next job and sleeps until then. There's no fixed polling loop. A maintenance heartbeat runs at most every 60 seconds to handle edge cases.

When a job fires, the scheduler sends the agent an agent turn β€” a message it processes just like a user message. The agent's response can optionally be delivered to a recipient via a channel adapter (e.g. sent as an XMTP message).

// Example job payload
{
  kind: "agentTurn",
  message: "Send the daily summary to the team",
  delivery: {
    mode: "announce",
    channel: "xmtp",
    to: "0xrecipient..."
  }
}

Error Handling

Failed jobs back off exponentially before retrying:

Consecutive failures Delay before retry
1 30 seconds
2 1 minute
3 5 minutes
4 15 minutes
5+ 1 hour

Jobs that appear stuck (running for more than 2 hours) are automatically unstuck on the next scheduler start.


Architecture

                    XMTP network β€’ HTTP β€’ Scheduler callbacks
                                      β”‚
                                      β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚       Channel Adapters           β”‚
                    β”‚  @hybrd/channels  (port 8455)    β”‚
                    β”‚  XMTP adapter β†’ HTTP IPC         β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                      β”‚
                                      β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚        Agent Server              β”‚
                    β”‚  hybrid/agent  (port 8454)       β”‚
                    β”‚                                  β”‚
                    β”‚  SOUL.md + AGENTS.md             β”‚
                    β”‚  Memory search (vector + BM25)   β”‚
                    β”‚  MCP: memory tools               β”‚
                    β”‚  MCP: scheduler tools            β”‚
                    β”‚  Claude Code SDK β†’ SSE stream    β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚            β”‚
               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            └───────────────┐
               β–Ό                                            β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      @hybrd/memory        β”‚              β”‚       @hybrd/scheduler        β”‚
β”‚                           β”‚              β”‚                               β”‚
β”‚  Layer 1: PARA graph      β”‚              β”‚  cron / interval / one-time   β”‚
β”‚    projects / areas /     β”‚              β”‚  Precise timer, no polling    β”‚
β”‚    resources / archives   β”‚              β”‚  Exponential error backoff    β”‚
β”‚                           β”‚              β”‚  Delivers via channel adapter β”‚
β”‚  Layer 2: Daily log       β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚    logs/YYYY-MM-DD.md     β”‚
β”‚                           β”‚
β”‚  Layer 3: Auto memory     β”‚
β”‚    MEMORY.md              β”‚
β”‚                           β”‚
β”‚  SQLite + sqlite-vec      β”‚
β”‚  Multi-user ACL           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Packages

Package Description
hybrid/agent Agent runtime: HTTP server + XMTP sidecar
hybrid/gateway Cloudflare Workers gateway + container lifecycle
@hybrd/memory 3-layer PARA memory, multi-user ACL, hybrid search
@hybrd/scheduler Agentic cron/interval/one-time scheduler
@hybrd/channels Channel adapter framework (XMTP, ...)
@hybrd/xmtp XMTP client, plugin, ENS/Basename resolvers
@hybrd/cli hybrid CLI: build, dev, deploy, skills
@hybrd/types Shared TypeScript type definitions
@hybrd/utils Shared utilities
create-hybrid Project scaffolding (npm create hybrid)

Deployment

Fly.io

hybrid deploy fly

Cloudflare Workers + Containers

hybrid deploy cf

Any Node.js host

hybrid build
# Ship dist/ to your server and run start.sh

Monorepo Development

pnpm install
pnpm build      # Build all packages
pnpm test       # Run tests
pnpm lint       # Lint (biome)
pnpm typecheck  # Type check

License

MIT

About

Hybrid - Typescript framework for building crypto AI agents.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors