evidence-first agent runtime

Distill

Evidence, or it didn't happen.

The agent that actually ships evidence — a production-grade ReAct agent gated on real proof: files written, services running, databases mutated. It distills its own skills, remembers across sessions, and runs wherever you already chat: Telegram, Discord, Slack, or email.

Install Distill View source
npx @aspct3434/distill-agent init
gateway online @aspct3434/distill-agent v0.1.6 · MIT
0 starter skills distilled at boot
0 tools across 3 MCP servers
0 memory layers — SQLite · Chroma · Neo4j
0 chat surfaces, one gateway

Most agents promise. Distill proves files written, services live, databases mutated. Evidence, or it didn't happen.

scroll the engine

A request enters.

Every task begins as a contract — the concrete evidence it must produce before Distill may call it done.

contract.yaml declared
task: ship the api
evidence:
- file: api/server.py
- http: GET /health → 200
- db: users.count > 0
ledger.log recording
12:04:01 write_file api/server.py
12:04:03 shell uvicorn :8000
12:04:05 http GET /health 200
12:04:06 sql INSERT users +3
evidence.report verified
file exists · api/server.py · 4.2 kB
service live · :8000/health · 200 OK
db mutated · users · +3 rows
contract satisfied — answer released
request enters tools move evidence lands
01 — proof

Watch the contract verify itself.

When the agent claims it's done, Distill doesn't take its word. Evaluators check the real world — the filesystem, the network, the database — one piece of evidence at a time.

Holographic verification ledger — translucent slabs stamped with a glowing green seal of light
evidence.report running checks…
file exists · api/server.py · 4.2 kB
service live · uvicorn :8000 · pid 4117
http check · GET /health · 200 OK
db mutated · users · +3 rows
contract satisfied — answer released
02 — workflow

From request to verified artifact.

STEP 01

Declare the contract

The task starts with the concrete evidence that must exist before Distill can call the work done.

contract.py
STEP 02

Act in tools

The agent reasons, calls tools, writes files, launches services, and records every action in a ledger.

tools.py
STEP 03

Observe evidence

Evaluators check the filesystem, HTTP responses, databases, and other real-world side effects.

evaluator.py
STEP 04

Distill the skill

Successful trajectories become reusable, versioned skills that improve without losing rollback safety.

skills/*.md
03 — quick-start

One line. No global install.

β BETA

# Already have Node? One command. No global install.

Works on macOS, Linux, and Windows. The installer pulls Node.js and everything else for you. Then manage it with distill start, distill logs, distill doctor.

04 — capabilities

Built for reliability, not vibes.

Every layer of the runtime is designed around one question: can you prove it happened?

Task-contract execution

Every task declares the evidence it must produce before it starts. The final answer is gated on that physical evidence — no more "I'll do it now" hallucinations.

evidence-gated
evidence.report verified
file exists · api/server.py · 4.2 kB
service live · :8000/health · 200 OK
db mutated · users · +3 rows
contract satisfied — answer released

Skill distillation

Successful runs become parameterized, versioned skills that self-improve — and auto-roll-back the moment their success rate regresses.

self-improving
A crystalline core charged with violet energy — a successful trajectory distilled into a solid, versioned skill

Universal sandboxing

Run shell operations on the host, in Docker, or via serverless platforms. MCP tools plug in over Docker, SSH, or HTTP.

docker ssh http daytona e2b modal

Hybrid memory

SQLite full-text, ChromaDB embeddings, and a Neo4j graph recall cross-session facts, relationships, and history. Select a layer to inspect it.

facts.db · 1,284 facts indexed · exact recall of names, dates, decisions and config across every session.

Three luminous memory layers — an amber database grid, violet embedding particles, and a cyan knowledge graph — stacked in dark space

Four chat surfaces

One gateway, session-aware streaming everywhere you already talk.

Telegram
Discord
Slack
Email
05 — architecture

Inside the loop.

Three interfaces, one gateway, one evidence-gated engine — backed by hybrid memory, any LLM, and sandboxed execution.

INTERFACES Control Panel React · Tailwind · token stream Messaging Adapters Telegram · Discord · Slack · Email Terminal UI distill tui · WebSocket GATEWAY FastAPI Gateway WebSocket stream · session-per-FIFO-lane queue CORE ENGINE ReAct Agent Engine reason → act → observe · action ledger Task-Contract evidence gating Skill Distiller trajectory → versioned skill STATE · MODEL · EXECUTION Memory & State SQLite · ChromaDB · Neo4j LLM Provider LiteLLM — any model Sandbox & Tools Docker · MCP · evolved skills

src/agent.py · contract.py · evaluator.py · memory.py · gateway.py · tools.py

06 — control panel

A streaming panel that shows its work.

Every session, every tool call, every evidence check — live over WebSocket. This is a working simulation of the panel.

localhost:5173 — distill control panel memory online tools online lane #4
Skills
14
+3 distilled this week
Scheduled
6
next in 42m
Sessions
28
4 channels
Tools
19
3 MCP servers
telegram · lane #4 · session 81c2
Back up the prod database and prove the dump is valid.
⚒ shell pg_dump prod > backups/prod-2026-06-12.sql
⚒ shell pg_restore --list backups/prod-2026-06-12.sql ✓ 312 objects
Backup complete and verified — backups/prod-2026-06-12.sql, 48 MB, 312 restorable objects. Evidence: file exists on disk and the dump passes pg_restore --list. Contract satisfied.
✓ file exists · 48 MB ✓ dump valid · 312 objects
distilled skills · +3 this week
deploy_fastapi v398% · 41 runs
telegram_digest v499% · 88 runs
scrape_to_csv v296% · 27 runs
db_migrate v294% · 17 runs
pdf_report v191% · 12 runs

Success rate regresses → automatic rollback to the previous skill version.

6 scheduled tasks
morning-digest0 8 * * *next in 42m
health-monitor*/15 * * * *next in 7m
db-backup0 2 * * *next in 9h
skill-review0 18 * * 5next fri
inbox-triage0 */3 * * *next in 1h
weekly-report0 9 * * 1next mon
core-mcp · 9 tools
write_file read_file shell http_request sql_query browse search schedule send_message
sandbox-mcp · 5 tools
docker_exec ssh_exec expose_local_http_service port_check fs_diff
memory-mcp · 5 tools
remember recall graph_link embed forget

19 tools · 3 MCP servers · pluggable over Docker, SSH, or HTTP

3 layers · all online
sqlite · facts.db1,284 facts● online
chromadb · embeddings8,932 vectors● online
neo4j · graph412 nodes · 1,031 edges● online

Cross-session recall: exact facts in SQLite, semantic similarity in Chroma, relationships in Neo4j.

Ship evidence tonight.

Stop trusting. Start verifying. Install in one line, connect a chat surface, and watch the first contract verify itself.

npx @aspct3434/distill-agent init
Read the quick-start Star on GitHub