No description
- Rust 98.4%
- Just 1.3%
- Shell 0.2%
- Dockerfile 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
CI (main and tags) / Unit testing and linting (push) Has been cancelled
CI (main and tags) / docker-clean-metadata (push) Has been cancelled
CI (main and tags) / docker-build (amd64, self-hosted) (push) Has been cancelled
CI (main and tags) / docker-build (arm64, ubuntu-24.04-arm) (push) Has been cancelled
When a user sends an image or document, the bot now immediately sends a
brief notice (e.g. '📷 Received your image — running OCR to capture any
text and analyzing it with the vision model…') before the LLM call.
This keeps users engaged during processing without being spammy.
|
||
| .github/workflows | ||
| docs | ||
| etc | ||
| examples | ||
| src | ||
| .dockerignore | ||
| .editorconfig | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| backlog-methodology.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| Dockerfile | ||
| Dockerfile.ci | ||
| justfile | ||
| LICENSE | ||
| mise.toml | ||
| README.md | ||
| renovate.json | ||
| rust-toolchain.toml | ||
robbot
🤖 robbot is a Matrix bot focused on a small runtime surface, static named OpenAI-compatible backends, and optional MCP-backed search/crawling.
It is configured with a fixed list of named backends such as openrouter, ollama, or cerebras, and users can switch between those backend names at runtime with !ai model <backend-name>. Backends can also opt into named MCP servers for URL search and crawling.
🌟 Features
- static named backends defined in config as
{ name, api_key?, model, url } - optional shared MCP server registry with explicit per-backend tool access
- explicit small-model tool-result summarization before MCP output is replayed to the main assistant
- OpenAI-compatible API focus with
/v1/chat/completionsand/v1/models - text-first conversations in Matrix rooms and threads
- room-level backend switching plus thread-local backend overrides
- support for image inputs plus built-in PDF handling: direct text extraction, bounded OCR fallback, then page-image fallback
- encrypted Matrix communication and persisted room/global state
🚀 Getting Started
- For playbook installation, see Setting up robbot
- For local runs and hacking, see development documentation
- For runtime behavior, see usage and configuration
🧩 Library and CLI
robbot also works without Matrix, as an embeddable Rust crate and as a scriptable command.
- CLI:
robbot ask "question"(alias ofrobbot cli). Add--jsonfor machine output (answer,sources,model,mode,thread_id,elapsed_ms),--quietto suppress progress lines, and--ephemeralto skip saving the session. Piped stdin is read as the question when no message is given, e.g.echo "what is the casimir effect?" | robbot ask --json --ephemeral. - Crate:
robbot::Engine::from_yaml(&yaml)orEngine::new(EngineConfig)builds the engine from backends, MCP servers, and optional thread-summary settings.engine.ask(...),ask_with(...)andask_in_session(...)return anAnswer { text, sources, model_id, mode }. Seeexamples/ask.rs.
📚 Documentation
See the bot's documentation for the rest of the docs tree.
📜 Changes
See CHANGELOG.md for historical changes inherited from the fork and newer robbot-specific work.