{"id":45240614,"url":"https://github.com/opencrust-org/opencrust","last_synced_at":"2026-03-05T20:28:44.868Z","repository":{"id":338749951,"uuid":"1158960069","full_name":"opencrust-org/opencrust","owner":"opencrust-org","description":"Personal AI assistant platform, rewritten in Rust from OpenClaw","archived":false,"fork":false,"pushed_at":"2026-02-21T23:31:11.000Z","size":7267,"stargazers_count":7,"open_issues_count":37,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-22T01:01:14.122Z","etag":null,"topics":["ai","ai-assistant","chatbot","discord-bot","llm","open-source","personal-assistant","rust","rust-lang","telegram-bot"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opencrust-org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-16T06:09:55.000Z","updated_at":"2026-02-21T23:31:03.000Z","dependencies_parsed_at":"2026-02-21T22:02:03.194Z","dependency_job_id":null,"html_url":"https://github.com/opencrust-org/opencrust","commit_stats":null,"previous_names":["moecandoit/opencrust","opencrust-org/opencrust"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/opencrust-org/opencrust","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencrust-org%2Fopencrust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencrust-org%2Fopencrust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencrust-org%2Fopencrust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencrust-org%2Fopencrust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opencrust-org","download_url":"https://codeload.github.com/opencrust-org/opencrust/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencrust-org%2Fopencrust/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29730221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T20:09:16.275Z","status":"ssl_error","status_checked_at":"2026-02-22T20:09:13.750Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-assistant","chatbot","discord-bot","llm","open-source","personal-assistant","rust","rust-lang","telegram-bot"],"created_at":"2026-02-20T21:14:21.162Z","updated_at":"2026-03-05T20:28:44.854Z","avatar_url":"https://github.com/opencrust-org.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.png\" alt=\"OpenCrust\" width=\"280\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eOpenCrust\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eThe secure, lightweight open-source AI agent framework.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/opencrust-org/opencrust/actions\"\u003e\u003cimg src=\"https://github.com/opencrust-org/opencrust/actions/workflows/ci.yml/badge.svg?branch=main\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/opencrust-org/opencrust/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/opencrust-org/opencrust/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/opencrust-org/opencrust?style=flat\" alt=\"Stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/opencrust-org/opencrust/issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/opencrust-org/opencrust\" alt=\"Issues\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/opencrust-org/opencrust/issues?q=label%3Agood-first-issue+is%3Aopen\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/opencrust-org/opencrust/good-first-issue?color=7057ff\u0026label=good%20first%20issues\" alt=\"Good First Issues\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/aEXGq5cS\"\u003e\u003cimg src=\"https://img.shields.io/badge/discord-join-5865F2?logo=discord\u0026logoColor=white\" alt=\"Discord\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#why-opencrust\"\u003eWhy OpenCrust?\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#security\"\u003eSecurity\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#architecture\"\u003eArchitecture\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#migrating-from-openclaw\"\u003eMigrate from OpenClaw\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nA single 16 MB binary that runs your AI agents across Telegram, Discord, Slack, WhatsApp, and iMessage - with encrypted credential storage, config hot-reload, and 13 MB of RAM at idle. Built in Rust for the security and reliability that AI agents demand.\n\n\u003c!-- TODO: Add VHS terminal demo GIF here (#103) --\u003e\n\n## Quick Start\n\n```bash\n# Install (Linux, macOS)\ncurl -fsSL https://raw.githubusercontent.com/opencrust-org/opencrust/main/install.sh | sh\n\n# Interactive setup - pick your LLM provider and channels\nopencrust init\n\n# Start - on first message, the agent will introduce itself and learn your preferences\nopencrust start\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eBuild from source\u003c/summary\u003e\n\n```bash\n# Requires Rust 1.85+\ncargo build --release\n./target/release/opencrust init\n./target/release/opencrust start\n\n# Optional: include WASM plugin support\ncargo build --release --features plugins\n```\n\u003c/details\u003e\n\nPre-compiled binaries for Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), and Windows (x86_64) are available on [GitHub Releases](https://github.com/opencrust-org/opencrust/releases).\n\n## Why OpenCrust?\n\n### vs OpenClaw, ZeroClaw, and other AI agent frameworks\n\n| | **OpenCrust** | **OpenClaw** (Node.js) | **ZeroClaw** (Rust) |\n|---|---|---|---|\n| **Binary size** | 16 MB | ~1.2 GB (with node_modules) | ~25 MB |\n| **Memory at idle** | 13 MB | ~388 MB | ~20 MB |\n| **Cold start** | 3 ms | 13.9 s | ~50 ms |\n| **Credential storage** | AES-256-GCM encrypted vault | Plaintext config file | Plaintext config file |\n| **Auth default** | Enabled (WebSocket pairing) | Disabled by default | Disabled by default |\n| **Scheduling** | Cron, interval, one-shot | Yes | No |\n| **Multi-agent routing** | Planned (#108) | Yes (agentId) | No |\n| **Session orchestration** | Planned (#108) | Yes | No |\n| **MCP support** | Stdio | Stdio + HTTP | Stdio |\n| **Channels** | 5 | 6+ | 4 |\n| **LLM providers** | 14 | 10+ | 22+ |\n| **Pre-compiled binaries** | Yes | N/A (Node.js) | Build from source |\n| **Config hot-reload** | Yes | No | No |\n| **WASM plugin system** | Optional (sandboxed) | No | No |\n| **Self-update** | Yes (`opencrust update`) | npm | Build from source |\n\n*Benchmarks measured on a 1 vCPU, 1 GB RAM DigitalOcean droplet. [Reproduce them yourself](bench/).*\n\n## Security\n\nOpenCrust is built for the security requirements of always-on AI agents that access private data and communicate externally.\n\n- **Encrypted credential vault** - API keys and tokens stored with AES-256-GCM encryption at `~/.opencrust/credentials/vault.json`. Never plaintext on disk.\n- **Authentication by default** - WebSocket gateway requires pairing codes. No unauthenticated access out of the box.\n- **User allowlists** - per-channel allowlists control who can interact with the agent. Unauthorized messages are silently dropped.\n- **Prompt injection detection** - input validation and sanitization before content reaches the LLM.\n- **WASM sandboxing** - optional plugin sandbox via WebAssembly runtime with controlled host access (compile with `--features plugins`).\n- **Localhost-only binding** - gateway binds to `127.0.0.1` by default, not `0.0.0.0`.\n\n## Features\n\n### LLM Providers\n\n**Native providers:**\n\n- **Anthropic Claude** - streaming (SSE), tool use\n- **OpenAI** - GPT-4o, Azure, any OpenAI-compatible endpoint via `base_url`\n- **Ollama** - local models with streaming\n\n**OpenAI-compatible providers:**\n\n- **Sansa** - regional LLM via [sansaml.com](https://sansaml.com)\n- **DeepSeek** - DeepSeek Chat\n- **Mistral** - Mistral Large\n- **Gemini** - Google Gemini via OpenAI-compatible API\n- **Falcon** - TII Falcon 180B (AI71)\n- **Jais** - Core42 Jais 70B\n- **Qwen** - Alibaba Qwen Plus\n- **Yi** - 01.AI Yi Large\n- **Cohere** - Command R Plus\n- **MiniMax** - MiniMax Text 01\n- **Moonshot** - Kimi K2\n\n### Channels\n- **Telegram** - streaming responses, MarkdownV2, bot commands, typing indicators, user allowlist with pairing codes, photo/vision support, voice messages (Whisper STT), document/file handling\n- **Discord** - slash commands, event-driven message handling, session management\n- **Slack** - Socket Mode, streaming responses, allowlist/pairing\n- **WhatsApp** - Meta Cloud API webhooks, allowlist/pairing\n- **iMessage** - macOS native via chat.db polling, group chats, AppleScript sending ([setup guide](docs/imessage-setup.md))\n\n### MCP (Model Context Protocol)\n- Connect any MCP-compatible server (filesystem, GitHub, databases, web search)\n- Tools appear as native agent tools with namespaced names (`server.tool`)\n- Configure in `config.yml` or `~/.opencrust/mcp.json` (Claude Desktop compatible)\n- CLI: `opencrust mcp list`, `opencrust mcp inspect \u003cname\u003e`\n\n### Personality (DNA)\n- On first message, the agent introduces itself and asks a few questions to learn your preferences\n- Writes `~/.opencrust/dna.md` with your name, communication style, guidelines, and the bot's own identity\n- No config files to edit, no wizard sections to fill out - just a conversation\n- Hot-reloads on edit - change `dna.md` and the agent adapts immediately\n- Migrating from OpenClaw? `opencrust migrate openclaw` imports your existing `SOUL.md`\n\n### Agent Runtime\n- Tool execution loop - bash, file_read, file_write, web_fetch, web_search, schedule_heartbeat (up to 10 iterations)\n- SQLite-backed conversation memory with vector search (sqlite-vec + Cohere embeddings)\n- Context window management - rolling conversation summarization at 75% context window\n- Scheduled tasks - cron, interval, and one-shot scheduling\n\n### Skills\n- Define agent skills as Markdown files (SKILL.md) with YAML frontmatter\n- Auto-discovery from `~/.opencrust/skills/` - injected into the system prompt\n- CLI: `opencrust skill list`, `opencrust skill install \u003curl\u003e`, `opencrust skill remove \u003cname\u003e`\n\n### Infrastructure\n- **Config hot-reload** - edit `config.yml`, changes apply without restart\n- **Daemonization** - `opencrust start --daemon` with PID management\n- **Self-update** - `opencrust update` downloads the latest release with SHA-256 verification, `opencrust rollback` to revert\n- **Restart** - `opencrust restart` gracefully stops and starts the daemon\n- **Runtime provider switching** - add or switch LLM providers via the webchat UI or REST API without restarting\n- **Migration tool** - `opencrust migrate openclaw` imports skills, channels, and credentials\n- **Conversation summarization** - rolling summary at 75% context window, session summaries persisted across restarts\n- **Interactive setup** - `opencrust init` wizard for provider and channel configuration\n\n## Migrating from OpenClaw?\n\nOne command imports your skills, channel configs, credentials (encrypted into the vault), and personality (`SOUL.md` as `dna.md`):\n\n```bash\nopencrust migrate openclaw\n```\n\nUse `--dry-run` to preview changes before committing. Use `--source /path/to/openclaw` to specify a custom OpenClaw config directory.\n\n## Configuration\n\nOpenCrust looks for config at `~/.opencrust/config.yml`:\n\n```yaml\ngateway:\n  host: \"127.0.0.1\"\n  port: 3888\n\nllm:\n  claude:\n    provider: anthropic\n    model: claude-sonnet-4-5-20250929\n    # api_key resolved from: vault \u003e config \u003e ANTHROPIC_API_KEY env var\n\n  ollama-local:\n    provider: ollama\n    model: llama3.1\n    base_url: \"http://localhost:11434\"\n\nchannels:\n  telegram:\n    type: telegram\n    enabled: true\n    bot_token: \"your-bot-token\"  # or TELEGRAM_BOT_TOKEN env var\n\nagent:\n  # Personality is configured via ~/.opencrust/dna.md (auto-created on first message)\n  max_tokens: 4096\n  max_context_tokens: 100000\n\nmemory:\n  enabled: true\n\n# MCP servers for external tools\nmcp:\n  filesystem:\n    command: npx\n    args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/tmp\"]\n```\n\nSee the [full configuration reference](docs/) for all options including Discord, Slack, WhatsApp, iMessage, embeddings, and MCP server setup.\n\n## Architecture\n\n```\ncrates/\n  opencrust-cli/        # CLI, init wizard, daemon management\n  opencrust-gateway/    # WebSocket gateway, HTTP API, sessions\n  opencrust-config/     # YAML/TOML loading, hot-reload, MCP config\n  opencrust-channels/   # Discord, Telegram, Slack, WhatsApp, iMessage\n  opencrust-agents/     # LLM providers, tools, MCP client, agent runtime\n  opencrust-db/         # SQLite memory, vector search (sqlite-vec)\n  opencrust-plugins/    # WASM plugin sandbox (wasmtime)\n  opencrust-media/      # Media processing (scaffolded)\n  opencrust-security/   # Credential vault, allowlists, pairing, validation\n  opencrust-skills/     # SKILL.md parser, scanner, installer\n  opencrust-common/     # Shared types, errors, utilities\n```\n\n| Component | Status |\n|-----------|--------|\n| Gateway (WebSocket, HTTP, sessions) | Working |\n| Telegram (streaming, commands, pairing, photos, voice, documents) | Working |\n| Discord (slash commands, sessions) | Working |\n| Slack (Socket Mode, streaming) | Working |\n| WhatsApp (webhooks) | Working |\n| iMessage (macOS, group chats) | Working |\n| LLM providers (14: Anthropic, OpenAI, Ollama + 11 OpenAI-compatible) | Working |\n| Agent tools (bash, file_read, file_write, web_fetch, web_search, schedule_heartbeat) | Working |\n| MCP client (stdio, tool bridging) | Working |\n| Skills (SKILL.md, auto-discovery) | Working |\n| Config (YAML/TOML, hot-reload) | Working |\n| Personality (DNA bootstrap, hot-reload) | Working |\n| Memory (SQLite, vector search, summarization) | Working |\n| Security (vault, allowlist, pairing) | Working |\n| Scheduling (cron, interval, one-shot) | Working |\n| CLI (init, start/stop/restart, update, migrate, mcp, skills) | Working |\n| Plugin system (WASM sandbox) | Scaffolded |\n| Media processing | Scaffolded |\n\n## Contributing\n\nOpenCrust is open source under the MIT license. Join the [Discord](https://discord.gg/aEXGq5cS) to chat with contributors, ask questions, or share what you're building. See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions, code guidelines, and the crate overview.\n\n### Current priorities\n\n| Priority | Issue | Description |\n|----------|-------|-------------|\n| **P0** | [#103](https://github.com/opencrust-org/opencrust/issues/103) | README and positioning |\n| **P0** | [#104](https://github.com/opencrust-org/opencrust/issues/104) | Website: opencrust.org |\n| **P0** | [#105](https://github.com/opencrust-org/opencrust/issues/105) | Discord community |\n| **P1** | [#106](https://github.com/opencrust-org/opencrust/issues/106) | Built-in starter skills |\n| **P1** | [#107](https://github.com/opencrust-org/opencrust/issues/107) | Scheduling hardening |\n| **P1** | [#108](https://github.com/opencrust-org/opencrust/issues/108) | Multi-agent routing |\n| **P1** | [#109](https://github.com/opencrust-org/opencrust/issues/109) | Install script |\n| **P1** | [#110](https://github.com/opencrust-org/opencrust/issues/110) | Linux aarch64 + Windows releases |\n| **P1** | [#80](https://github.com/opencrust-org/opencrust/issues/80) | MCP: HTTP transport, resources, prompts |\n\nBrowse all [open issues](https://github.com/opencrust-org/opencrust/issues) or filter by [`good-first-issue`](https://github.com/opencrust-org/opencrust/issues?q=label%3Agood-first-issue+is%3Aopen) to find a place to start.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencrust-org%2Fopencrust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopencrust-org%2Fopencrust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencrust-org%2Fopencrust/lists"}