B Buffy Agent
Buffy Agent Blog · Product & Architecture

OpenClaw + Buffy Architecture: Adapters Around One Behavior Core

A reference architecture for building OpenClaw agents on top of Buffy’s behavior core so habits, tasks, routines, reminders and memory stay consistent.

Most agent stacks fail the same way: you build a “habit agent”, then a “todo agent”, then a “Slack agent”, and each one develops its own logic and state. After a month, behavior drifts and you can’t tell which system is the source of truth.

Buffy’s architecture is designed to prevent that: one behavior core, many adapters.

This post explains the architecture boundary between OpenClaw workflows and Buffy’s behavior core, and why it’s the simplest way to scale agents across channels without duplicating product logic.

What “one behavior core” means (definition)

  • Term: a behavior core is the single place where activities (habits, tasks, routines), reminders, and memory live, so every channel behaves consistently.
  • What you’ll learn:
    • where OpenClaw stops (orchestration + UX) and the core starts (state + timing)
    • how adapters normalize messages without duplicating habit/task rules
    • how multi-channel becomes an integration problem you can scale, not a drift problem you can only patch

The core idea: adapters are replaceable, the behavior core is not

OpenClaw is great at composing agent workflows. But you don’t want OpenClaw to become the place where long-lived behavior state and scheduling logic lives.

Instead:

  • OpenClaw: orchestration and UX.
  • Buffy core: activities + reminders + memory + event history.
  • Adapters: ChatGPT/Telegram/Slack/internal tools.

Reference flow

flowchart TD
  User[User] --> OpenClaw[OpenClaw_Workflow]
  OpenClaw --> Adapter[Thin_Interface_Adapter]
  Adapter --> BuffyAPI[Buffy_API]
  BuffyAPI --> Core[Buffy_Behavior_Core]
  Core --> Data[Memory_Event_History]
  Core --> Reply[Reply_or_Action_Payload]
  Reply --> Adapter
  Adapter --> User
  Core --> Worker[Reminder_Worker_Scheduler]
  Worker --> Channels[Telegram_Slack_ChatGPT_Internal]
  Channels --> User

Why this boundary matters

1. Consistency across agents

If the behavior logic lives in the core, every surface behaves the same:

  • “Create habit” means the same thing in ChatGPT and Slack.
  • “Snooze 20m” updates the same activity and history everywhere.
  • Reminders follow the same rules regardless of channel.

2. Multi-channel becomes an integration problem

When you add a new channel:

  • You build a thin adapter that normalizes messages.
  • You do not rewrite the habit/task logic.

That’s the pattern described in:

3. Long-term memory stays coherent

If memory is managed in one place (episodic logs + semantic patterns), you can build features like:

  • “notice that evenings slip after late meetings”
  • “shift reminders to mornings”

…without each agent inventing its own interpretation of the past.

For the memory model, see:

Where to start

If you’re building or evaluating OpenClaw agent workflows, follow this sequence:

  1. Start with the product boundary
  2. Map the core to your behavior model
  3. Then go deep on integration paths

Where to go next

Further reading