odek

~12 MB static binary · Zero frameworks.
Think, therefore act.

go install github.com/BackendStack21/odek/cmd/odek@latest Get Started →
~12 MB
static binary
80.3%
AIEB v2.0 score
25+
built-in tools
4
interfaces: CLI · REPL · Web · Telegram

What's new in v1.15

The biggest release since Extended Memory: the agent now anticipates, and cleans up after itself. Full notes in the v1.15.0 release.

💡 Proactive Engagement v1.15.0

The agent ends answers with follow-up suggestions it already predicted, tracks your open loops (unanswered questions, stated goals), and can send opt-in proactive nudges — with hard anti-annoyance caps so it never becomes noise. Scheduled jobs are memory-wired, so a cron task can analyze your memory and sessions. docs ↗

🧹 Storage Maintenance v1.15.0

A janitor goroutine keeps long-lived agents (Telegram bot, serve) clean forever: session/audit/log/plan/media retention driven by an operator-only maintenance config. odek cleanup --dry-run previews exactly what would be deleted before anything is touched. docs ↗

🧠 Memory overhaul v1.15.0

Semantic dedup of stored atoms, relevance-preserving recall ranking, atom consolidation, index staleness detection, and odek memory extended stats for operators. Guard-rejected memories go to quarantine for human review instead of vanishing.

🛡️ PIGuard + guard fixes v1.15.x

The prompt-injection sidecar got its score semantics fixed (confident-benign memories no longer rejected), a JSON-faithful HTTP gateway, NDJSON socket transport, and Apple-Silicon-safe builds. Skill auto-learn is hardened against project-repo injection.

🗣️ Multilingual voice (STT) v1.15.2

Docker images ship the multilingual ggml-small whisper model — usable German, English, and Spanish voice transcription out of the box (was effectively English-only).

📊 Honest cache metrics v1.15.3

DeepSeek's native cache fields are parsed, and providers that report nothing show cache: n/a instead of misleading zeros.

The Five Whys

See it in action

Real terminal output from real runs. Click through the examples.

What you get

🔒

Sandboxed Execution

odek run --sandbox — every session spawns an isolated Docker container. No network, no host mounts beyond the working directory, zero capabilities, destroyed on exit.

🧩

Sub-Agent Delegation

Parallel OS-process sub-agents via delegate_tasks. True isolation — each sub-agent is a fresh process with its own config, tools, and timeout. Up to 3 concurrent workers.

🧠

Self-Learning Skills

Detects multi-step procedures, error recoveries, and corrections during your sessions. Saves them as reusable SKILL.md files. On by default — --no-learn to disable.

💾

Extended Memory

Semantic, atomic memory: facts, preferences, goals extracted per turn, deduplicated by meaning, ranked by relevance and recency. Quarantine for untrusted content, associations between atoms, and a stats surface for operators. Legacy three-tier facts/buffer/episodes included too.

💡

Proactive Engagement NEW

The agent anticipates: follow-up suggestions after answers, open-loop tracking of your questions and goals, and opt-in proactive nudges with anti-annoyance caps. Scheduled jobs are memory-wired, so cron tasks can analyze memory and sessions.

🧹

Storage Maintenance NEW

Long-lived agents stay clean forever: a janitor handles session, audit-log, log, plan, and media retention on an operator-only config. odek cleanup --dry-run shows exactly what would be removed, first.

🛡️

PIGuard Sidecar

Optional ML prompt-injection guard (ONNX, local) as a semantic second opinion on top of the rule-based scan — guarding memory writes, skill bodies, system prompts, and MCP descriptions. Docker Compose sidecar included.

🔗

MCP Two-Way

Server: odek mcp exposes native tools to Claude Code, Cursor, any MCP client. Client: odek connects to external MCP servers and makes their tools available to the agent.

🌐

Web UI

odek serve — browser-based agent with @ resource completion, WebSocket streaming, token economics, inline loading, drag-and-drop file attachments, and a full IDE-style console. Built from Go's embed — zero npm.

🔍

Session Search

session_search — full-text and fuzzy search across your entire agent history. Use --deep for LLM-powered semantic search. Never lose a past finding, decision, or code review.

🎤

Audio Transcription

transcribe — local whisper-based audio transcription. Drop an OGG, MP3, or WAV file, get text back. Runs entirely offline, no cloud API. Private by design.

🛠️

Native Tools

read_file, write_file, search_files, patch, shell, browser — all compiled into a single static Go binary. Zero subprocess overhead, instant startup, thread-safe concurrent execution. Gated by a unified security layer.

Parallel Tool Execution

Tools run concurrently with bounded concurrency. read_file, search_files, and shell calls execute in parallel — cutting iteration time by 40–60%. Batch approval gate shows all risky operations at once.

💬

Interaction Modes

Four modes: engaging (emoji-rich LLM narration), enhance (narration persists after response), verbose (raw tool traces), and off (clean, machine-friendly). Per-tool trace messages with LLM reasoning content. Works across CLI, Telegram, and Web UI.

🤖

Telegram Bot

Full-featured Telegram bot with odek telegram. MarkdownV2 messages, inline keyboards, file attachments, send_message tool, and --deliver flag for cron integration. Interaction mode-aware with per-tool progress traces.

Scheduled Tasks

Native, in-process cron with odek schedule — no external cron daemon. Runs inside odek telegram or a standalone odek schedule daemon, so a scheduled task sees the same resolved config an interactive run does. Stdlib cron parser with Vixie day-of-month/day-of-week semantics, per-job timezones, missed-run catchup, and a singleton lock so jobs never double-fire.

odek vs the rest

odekPython agents
Direct dependenciesMinimal — stdlib + a handful of focused pkgs200+ packages
Binary sizeSmall static binary50–200 MB (venv)
StartupInstant2–10 seconds
Sandbox--sandbox flagManual Docker setup
Tool interfaceOne interface, one methodClass hierarchies + decorators
Parallel toolsBuilt-in bounded concurrencySequential only
Telegram botFull bot with keyboard, files, --deliverThird-party adapters
MCPBidirectional (server + client)Client-only or adapter needed
LanguageGo — native binaryPython — interpreter required

Install in 5 seconds

One-line binary install

No Go toolchain? Auto-detects your OS and architecture:

# Download to /usr/local/bin (may need sudo)
curl -sfLo /usr/local/bin/odek https://github.com/BackendStack21/odek/releases/latest/download/odek-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') && chmod +x /usr/local/bin/odek

# Or to current directory
curl -sfLO https://github.com/BackendStack21/odek/releases/latest/download/odek-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') && chmod +x odek-* && ./odek-* version

auto-detect OS/arch static binary no runtime deps works offline
# Results instantly
$ odek run "How many lines in go.mod?"
3 lines

# With session persistence
$ odek run --session "Refactor the auth module"
$ odek continue "Now add error handling"

# Different provider, same binary
$ odek run --model gpt-4o --base-url https://api.openai.com/v1 "Explain this"

# Attach files for context
$ odek run --ctx data.csv "analyze trends"
$ odek run "@README.md summarize this project"

Cheatsheet

Commands

  • odek run <task>Single-shot task
  • odek run --sandbox <task>Run in Docker sandbox
  • odek replInteractive multi-turn REPL
  • odek repl --id <uuid>Resume a saved session
  • odek serveStart Web UI (http://127.0.0.1:8080)
  • odek serve --sandboxWeb UI with Docker sandbox
  • odek subagent --goal <s>Run a focused sub-task
  • odek mcpStart MCP server (stdio)
  • odek mcp --sse-addr :8081Start MCP server (SSE)
  • odek telegramStart Telegram bot
  • odek schedule add <task>Schedule a recurring agent task (cron)
  • odek cleanup --dry-runPreview storage maintenance, delete nothing
  • odek cleanupRun one storage maintenance sweep
  • odek memory extended statsMemory store, index, quarantine, recall health
  • odek memory extended nudgesPreview proactive nudges (no cap consumed)
  • odek skill listList learned/installed skills
  • odek run --deliver <task>Run task, deliver to Telegram
  • odek init [--global]Create config file
  • odek versionShow version

Key Flags

  • --model <name>LLM model (deepseek-v4-flash, gpt-4o, etc.)
  • --base-url <url>API endpoint URL
  • --sandboxRun in Docker sandbox
  • --thinking <level>Reasoning depth (enabled/disabled/low/medium/high)
  • --learnEnable skill learning (on by default)
  • --no-learnDisable skill learning
  • --max-iter <n>Max think→act cycles (default 90)
  • --ctx <files> / -cAttach files as context blocks (comma-separated)
  • --memory-extended-enabledEnable Extended Memory (opt-in)
  • --system <prompt>Override system prompt
  • --no-colorDisable colored output
  • --deliverDeliver result to Telegram default chat
  • --interaction-mode engaging | verbose | enhance

Everything else is documented

Deep-dive docs for every subsystem. Real detail, no fluff.

Ship it

One binary. One loop. Zero frameworks.
Go install and go.

go install github.com/BackendStack21/odek/cmd/odek@latest GitHub →