veles@core:~/veles
// open-source · apache-2.0 · python 3.13+ · local-first
██╗   ██╗███████╗██╗     ███████╗███████╗
██║   ██║██╔════╝██║     ██╔════╝██╔════╝
██║   ██║█████╗  ██║     █████╗  ███████╗
╚██╗ ██╔╝██╔══╝  ██║     ██╔══╝  ╚════██║
 ╚████╔╝ ███████╗███████╗███████╗███████║
  ╚═══╝  ╚══════╝╚══════╝╚══════╝╚══════╝
[ ok ] loading core · agent loop
[ ok ] mounting project memory · .veles/
[ ok ] provider router → 8 backends, one api
[ ok ] skills registry · 12 tools
[ ok ] modules · tui · daemon · telegram
[ -- ] ready. run veles tui to begin  

A terminal-native agent that gets smarter with every session.

────────────────────────────────────────────────────────────────────────────────────────────────────────────
veles tui

# Terminal-first, not an afterthought

The interactive REPL is where Veles lives. Slash inspectors surface everything live, Shift+Tab cycles modes mid-flight, and the session carries its own memory. Just run veles to drop straight into a chat with the agent.

Veles TUI — slash inspectors, mode switching, command palette
slash inspectors
/status /tokens /context
/wiki /insights /rules
mode cycling · shift+tab
auto planning writing goal
keybindings
ctrl+i tools · ctrl+r sessions
ctrl+g $EDITOR · ctrl+d quit
────────────────────────────────────────────────────────────────────────────────────────────────────────────
veles curate

# Compounding memory

Every session is distilled by the Curator into per-project memory. The agent recalls relevant facts and past decisions automatically — you stop re-explaining the same context. Works under any content layout.

curate
veles curate
reading 6 sessions…
✓ wrote 4 insights → .veles/insights.md
✓ wrote 1 rule → .veles/rules.md
✓ digested session → .veles/sessions/
# insight extraction catches "always prefer X"
# and "never do Y" → persistent project rules
# .veles/ — the memory tree
.veles/
├─ insights.md curated facts
├─ rules.md behavioral rules
├─ sessions/ digests
└─ tools/ typed python
Local-first & sandboxed. No telemetry, no cloud sync. The agent sees only the active project directory.
veles init --layout <name>

# Pluggable content layouts

How your content is organised is pluggable — and memory works identically under all of them. Custom packs are a single layout.toml.

llm-wiki DEFAULT
sources/ raw inputs
wiki/ authored pages
AGENTS.md

Karpathy-style knowledge base. veles add turns a source into a cited wiki page.

notes
notes/ flat markdown
AGENTS.md

A single flat notes directory — no hierarchy, no ceremony.

bare
.veles/ memory only
AGENTS.md

No content scaffold at all — ideal for code repos & free-form work.

veles route show

# Provider-agnostic routing

OpenRouter, Anthropic, OpenAI, Gemini, Ollama, llamacpp, or your claude/gemini CLI subscription. Route task types — planning, compression, insights — to different models. Set it once, forget it.

PROVIDERENV VARNOTES
openrouter ★OPENROUTER_API_KEYone key · hundreds of models
anthropicANTHROPIC_API_KEYdirect api
openaiOPENAI_API_KEYdirect api
geminiGEMINI_API_KEYdirect api
claude cliuses your subscription
ollamalocal · :11434
veles route set compressor anthropic/claude-haiku-4-5
veles run --provider ollama --model llama3.2 "..."
veles skill list

# Skills & modules

Reusable prompt-blocks become agent tools automatically. Python modules hook into the agent lifecycle. Both install from a git URL.

skills · SKILL.md → tool
veles skill add <git-url>
veles skill promote my-skill # → global
veles skill dedup # find near-dupes
modules · lifecycle hooks
veles module add <git-url>
pre_turn · post_turn
pre_tool_call · post_tool_call → veto
veles daemon start

# Daemon + Channels

Run Veles as a persistent daemon with an HTTP/WebSocket API, then attach channels — Telegram, Slack, Discord, email, anything. Telegram ships built-in; the rest are a small gateway away. Each user gets a persistent session.

channels
telegram · slack · …
bearer ▾
daemon
127.0.0.1:8765
ws ▴▾
tui
# start & expose
veles daemon token add default
veles daemon start # :8765
# endpoints
POST /v1/runs · WS /v1/runs/{id}/events
# channels gateway — telegram built-in
veles channel run --channel telegram
veles daemon # control panel — project → daemons → channels, with start / stop / restart inline
Veles daemon control panel — project, daemons and channels tree with start/stop/restart
veles run "who is this for?"

# What you build with it

Same core, same memory — two very different deployments.

// org

The AI-first company

Every doc, decision, and session flows into one shared knowledge base. Daemons and channels — each with its own config — become the interface for staff and leadership. Ask in Slack, get an answer grounded in company memory.

sources knowledge base daemon · channels your team
// solo

The personal assistant

Runs on your laptop — even with small local models like qwen3:4b-instruct. Keeps your personal knowledge base, plans, and projects in one place. Scheduled jobs run in the background: reminders, recurring checks, the weekly review.

veles job add --schedule "0 9 * * 1" --prompt "weekly review"
✓ scheduled · every monday 09:00
veles run "what should I focus on today?"
veles module list

# Built clean — and built to extend

A minimal core — memory, agent loop, provider protocol, tool registry. Everything else is an optional, loadable module. Single responsibility, no god-files, and a test suite that runs without touching the network. Open source under Apache-2.0 — contributors welcome.

3200+ tests
runs offline · no network
core + modules
minimal core, rest loadable
Apache-2.0
patent grant included
git-installable
modules & skills from any url
core · minimal, always-on
memory agent loop provider protocol tool registry
modules · optional, loadable
tui daemon channels deep research scheduler + your own
# coming soon
A plugin marketplace

Install community modules and skills, then assemble your own ideal build. Until then, pull anything from a git url:

veles module add <git-url>
veles skill add <git-url>

Provider adapters, skills, module hooks, locales — good first contributions all live at the edges, not the core.

❯ Contribute
# five commands to first answer

# Quick start

macOS / Linux, Python 3.13+. Install uv first; the package ships as veles-ai, the command is veles.

getting-started.sh
01curl -LsSf https://astral.sh/uv/install.sh | sh
02uv tool install veles-ai
03export OPENROUTER_API_KEY=sk-or-v1-...
04mkdir my-project && cd my-project && veles init
05veles run "Read AGENTS.md and describe this project."