No description
  • Rust 98.4%
  • Just 1.3%
  • Shell 0.2%
  • Dockerfile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
microchipster 3efd8fb307
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
feat(ux): acknowledge image/document receipt with processing status notice
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.
2026-10-09 18:01:17 -07:00
.github/workflows Pin GitHub CI Rust toolchain to 1.93.0 2026-03-07 10:38:35 +02:00
docs refactor: replace the !bai command prefix with !ai 2026-10-08 18:04:51 -07:00
etc refactor: replace the !bai command prefix with !ai 2026-10-08 18:04:51 -07:00
examples feat(library): embeddable answers engine and machine-readable CLI 2026-10-08 15:53:55 -07:00
src feat(ux): acknowledge image/document receipt with processing status notice 2026-10-09 18:01:17 -07:00
.dockerignore mcp implementation for search 2026-04-17 14:26:45 -07:00
.editorconfig Initial commit 2024-09-12 13:44:06 +03:00
.gitignore mcp implementation for search 2026-04-17 14:26:45 -07:00
.pre-commit-config.yaml Add prek pre-commit hooks via mise, fix formatting and clippy warnings 2026-02-10 14:33:19 +02:00
backlog-methodology.md mcp backlog 2026-04-17 12:48:07 -07:00
Cargo.lock refactor!: remove the anthropic provider and all audio handling 2026-10-08 14:51:56 -07:00
Cargo.toml refactor!: remove the anthropic provider and all audio handling 2026-10-08 14:51:56 -07:00
CHANGELOG.md refactor: replace the !bai command prefix with !ai 2026-10-08 18:04:51 -07:00
Dockerfile fix(media): fix vision probe rejection and add HEIC/AVIF support 2026-10-09 04:37:41 -07:00
Dockerfile.ci basic pdf support 2026-03-30 21:54:23 -07:00
justfile Refactor dev services to support homeserver choice (Continuwuity or Synapse) 2026-02-18 05:28:32 +02:00
LICENSE Initial commit 2024-09-12 13:44:06 +03:00
mise.toml Add prek pre-commit hooks via mise, fix formatting and clippy warnings 2026-02-10 14:33:19 +02:00
README.md refactor: replace the !bai command prefix with !ai 2026-10-08 18:04:51 -07:00
renovate.json Add Renovate configuration for automated dependency updates 2026-02-18 06:06:02 +02:00
rust-toolchain.toml update to latest rust 2026-05-07 19:03:53 -07:00

robbot logo

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/completions and /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

🧩 Library and CLI

robbot also works without Matrix, as an embeddable Rust crate and as a scriptable command.

  • CLI: robbot ask "question" (alias of robbot cli). Add --json for machine output (answer, sources, model, mode, thread_id, elapsed_ms), --quiet to suppress progress lines, and --ephemeral to 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) or Engine::new(EngineConfig) builds the engine from backends, MCP servers, and optional thread-summary settings. engine.ask(...), ask_with(...) and ask_in_session(...) return an Answer { text, sources, model_id, mode }. See examples/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.