Version: 0.1.0 | Runtime: Bun + TypeScript | License: Private
Repo:~/repos-and-projects/paw| Formerly: ClawMe (π¦ β πΎ, renamed Feb 17, 2026)
Paw is a self-hosted, multi-provider personal AI assistant framework with a microkernel architecture. It was built to surpass OpenClaw β with better memory, a web dashboard, cron scheduling, heartbeat monitoring, and a robust plugin/skills ecosystem.
# Navigate to project
cd ~/repos-and-projects/paw
# Install dependencies
bun install
# Initialize configuration (interactive)
bun run bin/paw.ts init
# Start the assistant
bun run bin/paw.ts start
| Command | Description |
|---|---|
paw init |
Interactive setup β choose provider, model, configure plugins |
paw start |
Start the assistant (kernel, plugins, web UI, heartbeat, cron) |
paw auth |
Manage authentication credentials |
paw config |
View/edit configuration |
paw status |
Show runtime status of all components |
Paw uses a microkernel + event bus architecture. The kernel is lightweight β all features are implemented as plugins or subsystems that communicate through events.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Web UI (Hono SSR) β
β /dashboard /config /chat /skills β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β CLI (bin/paw.ts) β
β init | start | auth | config | status β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ β
β β Kernel β β
β β Event Bus β β
β ββββββββ¬βββββββ β
β ββββββββββββββββββΌβββββββββββββββββ β
β βΌ βΌ βΌ β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
β β Plugins β β Memory β β Security β β
β β Slack β β Vec+FTS5 β β Pairing/Rate β β
β β WebPilot β β sqlite β β Sandbox β β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
β ββββββββββββββββββΌβββββββββββββββββ β
β βΌ βΌ βΌ β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
β β Cron β βHeartbeat β β AI Engine β β
β βScheduler β β Checker β β Multi-Providerβ β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
β β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
β β Tools β β MCP β β Sessions β β
β βFile/Exec β β Client β β Messages DB β β
β ββββββββββββ ββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
src/
βββ kernel/
β βββ kernel.ts # Core kernel + event bus
βββ config/
β βββ schema.ts # Config validation schema
β βββ defaults.ts # Default configuration values
βββ types/
β βββ config.ts # PawConfig interface
βββ cli/
β βββ commands/
β βββ init.ts # Interactive init (provider switching fix)
βββ memory/
β βββ embeddings.ts # Vector embedding generation
β βββ store.ts # Hybrid memory store (sqlite-vec + FTS5)
β βββ tools.ts # Memory-related tools for agents
β βββ auto-extract.ts # Automatic fact extraction
βββ cron/
β βββ parser.ts # Cron expression parser
β βββ scheduler.ts # Task scheduler with timezone support
βββ heartbeat/
β βββ checker.ts # Periodic health/heartbeat monitoring
βββ security/
β βββ access-control.ts # Pairing codes for DM access
β βββ rate-limiter.ts # Rate limiting
βββ web/
β βββ app.ts # Hono web application
β βββ server.ts # HTTP server
β βββ views/
β βββ layout.tsx # Shared layout with nav
β βββ dashboard.tsx # Main dashboard
β βββ config-page.tsx # Configuration editor
β βββ chat.tsx # Chat interface
β βββ skills-page.tsx # Skills management UI
βββ tools/
β βββ file-tools.ts # File system read/write
β βββ exec-tools.ts # Code execution sandbox
βββ plugins/
βββ slack/ # Slack Socket Mode (@slack/bolt)
βββ webpilot/ # Browser automation (Playwright)
Paw supports four AI providers with hot-swappable configuration:
| Provider | SDK/Method | Models | Notes |
|---|---|---|---|
| Claude (Primary) | Anthropic SDK | claude-sonnet-4-5-20250929, etc. | Recommended default |
| OpenAI | OpenAI SDK | gpt-4o, gpt-4o-mini, etc. | Full tool support |
| Gemini | Google AI SDK | gemini-pro, etc. | Multimodal support |
| Ollama | Local HTTP | Any pulled model (mistral, llama, etc.) | Free, 100% local |
Use paw init to switch providers. A bug fix (Feb 17, 2026) ensures the model name resets to the new provider's default when switching β previously, switching from Ollama (ministral-3:8b) to Claude would keep the Ollama model name, causing 404 errors.
Paw's memory is hybrid vector + keyword search, fully local with no cloud dependencies.
| Component | Technology | Purpose |
|---|---|---|
| Vector Search | sqlite-vec |
Semantic similarity retrieval |
| Keyword Search | SQLite FTS5 | Fast full-text keyword matching |
| Scoring | Weighted fusion | Combines vector + keyword scores |
| Storage | SQLite (data/paw.db) |
Single-file, portable database |
| Embeddings | Local model | Generated in-process |
auto-extract.ts passively identifies facts, preferences, and patterns from conversationsTools available to the AI agent for explicit memory operations:
memory_store β Save a fact/preference/patternmemory_search β Query memory by semantic similaritymemory_forget β Remove outdated informationConnects to Slack workspaces via Socket Mode using @slack/bolt. No public URL required β communicates over WebSocket.
Tools provided:
slack_send_message β Send messages to channels/DMsslack_read_channel β Read recent messages from a channelSetup:
paw auth to store Bot Token and App-Level TokenBrowser automation via Playwright. Enables the AI to browse the web, interact with pages, and extract information.
Tools provided:
browser_navigate β Go to a URLbrowser_click β Click elementsbrowser_type β Type into inputsbrowser_screenshot β Capture page screenshotsbrowser_read β Extract page text contentbrowser_evaluate β Execute JavaScript on pageSchedule recurring tasks with full cron expression support and timezone awareness.
{
"id": "daily-summary",
"expression": "0 9 * * 1-5",
"timezone": "America/New_York",
"task": "Generate and send daily briefing to Slack #general",
"enabled": true
}
Inspired by OpenClaw's heartbeat mechanism. Periodically triggers the AI agent to check in, review pending tasks, and run maintenance.
HEARTBEAT.md or configured heartbeat sourcePaw includes a server-side rendered web dashboard built with Hono and JSX/TSX views.
| Route | Page | Description |
|---|---|---|
/ |
Dashboard | Overview stats, recent activity, system health |
/config |
Configuration | Edit AI provider, model, plugin settings |
/chat |
Chat Interface | Direct conversation with the AI agent |
/skills |
Skills Management | View, toggle, and edit skills |
/skills)The skills page provides a web interface for managing the agent's capabilities:
API Routes:
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/skills |
List all skills |
POST |
/api/skills/:name/toggle |
Toggle skill active state |
POST |
/api/skills/:name/description |
Update skill description |
Credentials are stored at ~/.paw/credentials.json with chmod 600 (owner read/write only). Never committed to version control.
Paw can act as an MCP (Model Context Protocol) client, connecting to external MCP servers to extend its tool capabilities. This allows Paw to use tools from any MCP-compatible server β Engram memory, file systems, databases, APIs, etc.
MCP client name: paw
| Item | Path |
|---|---|
| Config file | ~/.paw/config.json |
| Credentials | ~/.paw/credentials.json |
| Database | ./data/paw.db |
| Logs | ./logs/ |
All environment variables are prefixed with PAW_:
| Variable | Description | Default |
|---|---|---|
PAW_AI_PROVIDER |
AI provider (claude, openai, gemini, ollama) |
claude |
PAW_AI_MODEL |
Model identifier | Provider default |
PAW_WEB_PORT |
Web UI port | 3000 |
PAW_LOG_LEVEL |
Logging verbosity | info |
interface PawConfig {
ai: {
provider: 'claude' | 'openai' | 'gemini' | 'ollama';
model: string;
temperature?: number;
maxTokens?: number;
};
plugins: {
slack?: {
enabled: boolean;
botToken?: string;
appToken?: string;
};
webpilot?: {
enabled: boolean;
headless?: boolean;
};
};
memory: {
enabled: boolean;
autoExtract: boolean;
vectorWeight: number;
fts5Weight: number;
};
cron: {
enabled: boolean;
timezone: string;
};
heartbeat: {
enabled: boolean;
intervalMinutes: number;
};
security: {
pairingRequired: boolean;
rateLimitPerMinute: number;
};
web: {
enabled: boolean;
port: number;
};
}
The rename from ClawMe to Paw happened on February 17, 2026. Automatic migration runs on first launch:
| From | To |
|---|---|
~/.clawme/ |
~/.paw/ |
data/clawme.db |
data/paw.db |
CLAWME_* env vars |
PAW_* env vars |
ClawMeConfig type |
PawConfig type |
π¦ branding |
πΎ branding |
Migration is transparent β existing configs and databases are preserved.
54 tests passing at time of last verification (Feb 17, 2026).
# Run all tests
bun test
# Run specific test file
bun test src/memory/store.test.ts
Tracking feature parity and areas where Paw aims to exceed OpenClaw:
| Feature | Paw Status | OpenClaw Equivalent |
|---|---|---|
| Web UI / Dashboard | β Hono SSR | Control UI + WebChat |
| Heartbeat System | β Configurable interval | 30-min HEARTBEAT.md reads |
| Cron / Scheduled Tasks | β Full cron + timezone | Persisted at ~/.openclaw/cron/ |
| Memory / RAG | β sqlite-vec + FTS5 hybrid | sqlite-vec + FTS5 (similar) |
| Skills Ecosystem | β Web UI management | ClawHub (5700+ skills) |
| File System Tools | β Read/write | Read/write |
| Code Execution Sandbox | β Sandboxed exec | Sandbox |
| Multi-Provider AI | β 4 providers | Multiple providers |
| DM Access Control | β Pairing codes | Pairing codes |
| Rate Limiting | β Per-user + global | Rate limiting |
| MCP Client | β Full support | MCP support |
| Feature | Priority | OpenClaw Has It? |
|---|---|---|
| More Channels (WhatsApp, Telegram, Discord, Signal, iMessage, Teams, Matrix) | High | β 13+ channels |
| Multi-Agent Coordination (sessions, mesh workflows) | Medium | β Full mesh |
| Voice / Wake Word | Low | β Voice support |
| Live Canvas (A2UI) | Low | β Agent-to-UI |
| Device Tools (camera, screen, location, notifications) | Low | β Full device access |
| Community Dashboard with TOTP MFA | Medium | β Available |
| Skills Marketplace (like ClawHub) | Medium | β 5700+ skills |
# Development with hot reload
bun run --watch bin/paw.ts start
# Type checking
bun run typecheck
# Lint
bun run lint
# Build for production
bun build bin/paw.ts --outdir dist
Last updated: February 18, 2026