Personal AI assistant via Matrix Chat - A slightly saner alternative to OpenClaw
Go
2
370 commits
updated Oct 2, 2026
A saner alternative to OpenClaw.
OpenCrow is a Matrix bot that bridges chat messages to pi, a coding agent with built-in tools, session persistence, auto-compaction, and multi-provider LLM support. Instead of reimplementing all of that in Go, OpenCrow spawns pi as a long-lived subprocess via its RPC protocol and acts as a thin bridge. By default, the bot behaves as a chat agent plus a separate background agent for reminders and external triggers. It can also expose an authenticated text-turn API for use as a Home Assistant conversation agent, backed by a third Pi session, and an MCP endpoint that lets another AI assistant hand requests to a fourth.
Setting OPENCROW_MATRIX_ROOM_ID gives background work and voice file delivery
a stable default room, and enables multi-room invite handling.
graph LR
Matrix -->|message| Inbox[(Inbox)]
Reminders[(reminders)] -->|due| Inbox
Trigger["trigger.pipe"] -->|external| Inbox
HA["Home Assistant Assist"] -->|text turn| HTTP["voice HTTP API"] --> Inbox
Client["MCP client"] -->|ask| MCPAPI["MCP endpoint"] --> Inbox
Inbox -->|chat items| Chat["chat worker"] -->|RPC| ChatPi["chat pi"]
Inbox -->|triggers| Background["background worker"] -->|RPC| BackgroundPi["background pi"]
Inbox -->|voice turns| Voice["voice worker"] -->|RPC| VoicePi["voice pi"]
Inbox -->|MCP requests| MCP["MCP worker"] -->|RPC| MCPPi["MCP pi"]
ChatPi -->|response| Matrix
BackgroundPi -->|response| Matrix
VoicePi -->|text| HTTP --> HA
MCPPi -->|text| MCPAPI --> Client
The Go service receives Matrix messages, optional HTTP voice turns, and optional MCP requests, forwards them to the appropriate Pi process, and routes the response back to the original transport.
[!WARNING] There is no whitelisting, permission system, or tool filtering. Trying to bolt that onto LLM tool use is inherently futile — the model will find a way around it. The only real protection is running OpenCrow in a containerized or sandboxed environment. Use a NixOS container, VM, or similar isolation. The included NixOS module does exactly that. Don't run it on a machine where you'd mind the LLM running arbitrary commands.
Go
86.0%
Nix
5.8%
Python
5.4%
TypeScript
2.8%
Personal AI assistant via Matrix Chat - A slightly saner alternative to OpenClaw
Go
2
370 commits
updated Oct 2, 2026
A saner alternative to OpenClaw.
OpenCrow is a Matrix bot that bridges chat messages to pi, a coding agent with built-in tools, session persistence, auto-compaction, and multi-provider LLM support. Instead of reimplementing all of that in Go, OpenCrow spawns pi as a long-lived subprocess via its RPC protocol and acts as a thin bridge. By default, the bot behaves as a chat agent plus a separate background agent for reminders and external triggers. It can also expose an authenticated text-turn API for use as a Home Assistant conversation agent, backed by a third Pi session, and an MCP endpoint that lets another AI assistant hand requests to a fourth.
Setting OPENCROW_MATRIX_ROOM_ID gives background work and voice file delivery
a stable default room, and enables multi-room invite handling.
graph LR
Matrix -->|message| Inbox[(Inbox)]
Reminders[(reminders)] -->|due| Inbox
Trigger["trigger.pipe"] -->|external| Inbox
HA["Home Assistant Assist"] -->|text turn| HTTP["voice HTTP API"] --> Inbox
Client["MCP client"] -->|ask| MCPAPI["MCP endpoint"] --> Inbox
Inbox -->|chat items| Chat["chat worker"] -->|RPC| ChatPi["chat pi"]
Inbox -->|triggers| Background["background worker"] -->|RPC| BackgroundPi["background pi"]
Inbox -->|voice turns| Voice["voice worker"] -->|RPC| VoicePi["voice pi"]
Inbox -->|MCP requests| MCP["MCP worker"] -->|RPC| MCPPi["MCP pi"]
ChatPi -->|response| Matrix
BackgroundPi -->|response| Matrix
VoicePi -->|text| HTTP --> HA
MCPPi -->|text| MCPAPI --> Client
The Go service receives Matrix messages, optional HTTP voice turns, and optional MCP requests, forwards them to the appropriate Pi process, and routes the response back to the original transport.
[!WARNING] There is no whitelisting, permission system, or tool filtering. Trying to bolt that onto LLM tool use is inherently futile — the model will find a way around it. The only real protection is running OpenCrow in a containerized or sandboxed environment. Use a NixOS container, VM, or similar isolation. The included NixOS module does exactly that. Don't run it on a machine where you'd mind the LLM running arbitrary commands.
Go
86.0%
Nix
5.8%
Python
5.4%
TypeScript
2.8%