githubinferredactive
roger
provenance:github:EMSERO/roger
AI agent gateway — multi-provider LLM router with Telegram, Discord, Slack channels, browser automation, and cron scheduling. Single Go binary.
README
<p align="center">
<img src="logo.svg" alt="Roger" width="350">
</p>
[](https://github.com/EMSERO/roger/actions/workflows/ci.yml)
[](https://github.com/EMSERO/roger/releases)
[](https://goreportcard.com/report/github.com/EMSERO/roger)
[](LICENSE)
**You give the task. Roger handles it.**
Roger is a self-hosted AI agent gateway for teams that need to own their infrastructure. It connects your channels to your models, runs your tools, and gets work off your desk — on your hardware, under your control, with no cloud dependency.
Single Go binary. 15MB. Runs as a systemd service. Works while you sleep.
```
┌─────────────┐ ┌──────────────────────────────────────────┐ ┌──────────────┐
│ Telegram │ │ Roger │ │ Anthropic │
│ Discord │────▶│ │────▶│ OpenAI │
│ Slack │ │ Agent Loop ─ Tools ─ Sessions ─ Cron │ │ Copilot │
│ HTTP API │◀────│ │◀────│ Ollama │
│ Webhooks │ │ MCP Server ─ Gateway ─ Orchestrator │ │ OpenRouter │
└─────────────┘ └──────────────┬───────────────────────────┘ └──────────────┘
│
┌───────▼───────┐
│ Eidetic │
│ Semantic │
│ Memory │
└───────────────┘
```
---
## Why Roger?
**You can't always use a managed agent.** Regulated industries, air-gapped networks, defense systems, data sovereignty requirements — sometimes the work has to stay on your hardware. Roger gives you the same capabilities as managed AI agent platforms, fully self-hosted.
**Model independence.** Route to Anthropic, OpenAI, GitHub Copilot, Ollama, OpenRouter, Groq, or any OpenAI-compatible endpoint. Swap providers without changing your workflow. Run local models when you need to.
**Work off the desk, not onto it.** Roger doesn't generate briefings for you to read. It takes tasks and finishes them. Cron jobs run overnight. Multi-agent orchestration breaks complex work into parallel subtasks. You check in when you're ready.
**Auditable by design.** CycloneDX SBOM on every release. govulncheck and gosec on every build. Six direct dependencies. One binary to audit.
---
## Quick Start
```bash
# Install from GitHub Releases (deb)
curl -LO https://github.com/EMSERO/roger/releases/latest/download/roger_0.6.0_linux_amd64.deb
sudo dpkg -i roger_0.6.0_linux_amd64.deb
# First-time setup
roger init
# Run
roger
# As a systemd user service
systemctl --user enable --now roger
# Update
roger update
```
Or build from source:
```bash
go build -o roger ./cmd/roger
go build -o roger-mcp ./cmd/roger-mcp
```
Requires Go 1.26+.
---
## What Roger Does
**Multi-provider model routing** with automatic fallback. Primary model goes down? Roger falls through to the next configured provider with exponential backoff and cooldown tracking.
**Three-tier multi-agent orchestration.** Main agent handles simple requests. Orchestrator plans complex work as a JSON task graph. Specialists execute in parallel with dependency ordering and failure handling.
**Persistent sessions** with JSONL history, TTL, token-aware pruning, daily/idle resets, and LLM-powered context compaction.
**Cron scheduler** with `@daily`, `@hourly`, `@every 1h`, `HH:MM` specs, per-job model/timeout overrides, deterministic stagger, and result delivery to channels.
**Tool execution** including shell commands (with destructive command confirmation), web search/fetch (with SSRF protection), file I/O, browser automation (chromedp), and semantic memory.
**Semantic memory** via [Eidetic](https://github.com/EMSERO/eidetic) — self-hosted on PostgreSQL + pgvector. Your agents remember things across conversations, forever, on your hardware.
**Hot-reload** via fsnotify — edit `config.json` and changes apply without restart.
---
## MCP Server
Roger ships `roger-mcp`, a standalone MCP server binary that exposes its tools to Claude Code, Claude Desktop, Cursor, and any MCP-compatible client.
```json
{
"mcpServers": {
"roger": {
"command": "/usr/bin/roger-mcp",
"args": ["--config", "~/.roger/config.json"]
}
}
}
```
**Available tools:** browser automation (navigate, screenshot, click, type, eval, scrape), semantic memory (search, append), web search/fetch, file I/O, notifications.
---
## Channels
Roger connects to your messaging platforms as a persistent agent:
- **Telegram** — bot with debounce queue, reactions, pairing, slash commands
- **Discord** — bot with thread support
- **Slack** — Socket Mode bot
- **HTTP API** — OpenAI-compatible `/v1/chat/completions` endpoint
- **Webhooks** — inbound event triggers per session
---
## Security
- **govulncheck** on every PR and release
- **gosec** static analysis
- **CycloneDX SBOM** attached to every release artifact
- **Destructive command confirmation** — blocklist intercepts dangerous commands before execution
- **SSRF protection** — blocks requests to private, loopback, and link-local addresses
- **Gateway auth** — bearer token required, auto-generated if not configured
- **Rate limiting** — per-IP token-bucket limiting
- **Telegram pairing** — random 6-digit code required
---
## Eidetic Integration
```json
{
"eidetic": {
"enabled": true,
"baseURL": "http://localhost:7700",
"apiKey": "your-key"
}
}
```
[Eidetic](https://github.com/EMSERO/eidetic) gives your agents persistent semantic memory — search by meaning, not just keywords. Self-hosted on PostgreSQL + pgvector + Ollama. No cloud required.
---
## Migrating from OpenClaw
Roger can import your existing OpenClaw configuration and sessions. Run `roger --migrate` or `roger init` to migrate automatically.
---
## Acknowledgements
Special thanks to [Nate B Jones](https://www.youtube.com/@NateBJones) whose videos on AI agents and autonomous workflows helped inspire both Roger and Eidetic.
---
Built by [EMSERO](https://emsero.com) — software engineering for defense, federal, and commercial systems.
PUBLIC HISTORY
First discoveredMar 30, 2026
IDENTITY
inferred
Identity inferred from code signals. No PROVENANCE.yml found.
Is this yours? Claim it →METADATA
platformgithub
first seenFeb 27, 2026
last updatedMar 29, 2026
last crawled18 days ago
version—
README BADGE
Add to your README:
