skip to content
JS John Sosoka

OpenPaw

A friendly LangChain/LangGraph multi-agent runner with persistent workspaces, scheduled tasks, and hierarchical agent management

GitHub →

OpenPaw

Overview

OpenPaw is a multi-channel AI agent framework built on LangGraph and LangChain. It gives each agent its own workspace — complete with personality files, custom tools, scheduled tasks, and sandboxed filesystem — then gets out of the way. Agents can ingest documents, browse the web, search the internet, and manage their own files, making them well-suited for research, information processing, and long-running autonomous workflows.

The framework handles orchestration so you can focus on what your agents actually do. Give them a schedule and they’ll check in on their own.

Features

First-Class Document Processing

Multi-Agent Orchestration

Scheduling & Autonomy

Communication & Channels

Memory & Persistence

Workspace Isolation

Architecture

OpenPaw uses a layered architecture with a stability contract: dependencies flow downward only.

CLI
runtime/orchestrator
workspace/runner ──── channels/
│ └── builtins/
agent/runner └── stores/
model/

Core Components

LayerPurpose
model/Pure dataclasses — no framework imports, shared vocabulary
core/Config loading, timezone handling, workspace assembly
agent/LangGraph ReAct loop, middleware, tool execution
workspace/Lifecycle management, message processing, queue handling
runtime/Orchestrator, scheduling, session management, sub-agents
stores/File-backed persistence with atomic writes
channels/Telegram, Discord adapters with unified interface
builtins/Optional tools and processors with prerequisite checking

Message Flow

  1. Channel Adapter — Receives platform event, validates sender, runs processor pipeline
  2. Command Router — Checks for slash commands (executed immediately)
  3. Queue Manager — Assigns to lane (main/subagent/cron), applies queue mode logic
  4. Message Processor — Dequeues, runs auto-compact check, invokes agent
  5. Middleware Stack — Queue-aware behavior, approval gating
  6. Agent Execution — LangGraph ReAct loop with tool calls
  7. Response Delivery — Returns via channel adapter, logs metrics

Queue Modes

ModeBehavior
Collect (default)Messages accumulate, processed together when agent finishes
SteerAgent monitors for new messages, adjusts course mid-task
InterruptNew messages abort current run immediately

Usage

Quick Start

Terminal window
# Clone and install
git clone https://github.com/johnsosoka/OpenPaw.git
cd OpenPaw
poetry install
# Scaffold a workspace
poetry run openpaw init my_agent \
--model anthropic:claude-sonnet-4-20250514 \
--channel telegram
# Configure
cp config.example.yaml config.yaml
# Add API keys to agent_workspaces/my_agent/config/.env
# Run
poetry run openpaw -c config.yaml -w my_agent

Workspace Structure

agent_workspaces/my_agent/
├── agent/ # Identity and extensions
│ ├── AGENT.md # Capabilities and behavior
│ ├── USER.md # User context
│ ├── SOUL.md # Core personality
│ ├── HEARTBEAT.md # Session scratchpad
│ ├── tools/ # Custom @tool functions
│ └── skills/ # Skill directories
├── config/ # Configuration
│ ├── agent.yaml # Per-workspace settings
│ ├── .env # API keys
│ └── crons/ # Scheduled tasks
├── data/ # Framework state
│ ├── TASKS.yaml # Persistent tasks
│ └── uploads/ # User files
├── memory/ # Archives and logs
│ ├── conversations/ # Conversation exports
│ └── logs/ # Session logs
└── workspace/ # Agent work area
├── downloads/ # Browser downloads
└── screenshots/ # Browser captures

In-Chat Commands

CommandDescription
/helpList available commands
/statusShow model, context, tasks, token usage
/newArchive conversation, start fresh
/compactSummarize and continue
/model <provider:model>Switch LLM at runtime
/queue <mode>Change queue mode

Custom Tool Example

from langchain_core.tools import tool
@tool
def get_current_sprint(project: str) -> str:
"""Return current sprint goals for a Jira project.
Args:
project: The Jira project key
Returns:
Summary of current sprint goals
"""
return fetch_sprint_data(project)

Drop the file in agent/tools/ — it auto-loads on restart.

Technology Stack

Multi-Provider LLM Support

OpenPaw supports multiple LLM providers through a unified interface:

Switch models at runtime with /model provider:model — no restart required.

Documentation

Full documentation available at: https://johnsosoka.github.io/OpenPaw/

License

PolyForm Noncommercial 1.0.0