Distill Terminal Coding Agent

A terminal coding harness that edits repositories, runs commands, and routes work across model tiers to reduce token use.

Stars
★ 774
Last updated
today
License
Apache-2.0
Primary language
Rust

At a glance

How it runs
CLI
Works with
Universal · cross-platformChatGPT · OpenAI API
Cost
Free software; you pay for model usage
Setup effort
Low · running in minutes
You'll need
A reachable supported provider or local OpenAI-compatible model serverglibc for prebuilt Linux binariesRust toolchain and native build dependencies for source buildsShell / CLINetwork accessLocal filesystem
Typical use
A developer who wants to inspect a repository, modify files, and run commands without leaving the terminal.
Not a fit if
  • Users on non-glibc Linux who won't build from source
  • Users wanting Reasoning and Worker on arbitrary different provider connections

What does this agent do, and when should you use it?

Distill is a lightweight terminal coding harness and TUI maintained by Samuel Fajreldines. It reads a codebase, edits files, executes commands, and keeps the working conversation inside the terminal. Version 2.0.0 supports Grok, ChatGPT, OpenRouter, and locally hosted OpenAI-compatible model servers. Its three model tiers separate the main Reasoning model from an optional same-conversation Worker and a Utility model that receives bounded extraction, summarization, and compression tasks. A decision layer named Jev routes eligible work and controls automatic effort selection, while failed, timed-out, or low-confidence decisions fall back to the harness's normal path. Distill is delivered as prebuilt macOS and Linux binaries or as a Rust source build, with profiles, credentials, and sessions stored locally.

After the user launches distill in a terminal, the harness can inspect the current codebase, edit its files, and run commands in response to the conversation. The Reasoning model handles the main conversation, difficult reasoning, and code changes by default; when a compatible Worker model is configured, Jev may send suitable calls to it without moving them out of the conversation. The Utility model receives bounded inputs such as tool results, log excerpts, and candidate lists for literal extraction, log digestion, text compression, candidate-ID selection, and classification. Distill validates these results before use and falls back to its normal path when a result is rejected. The e_retention route selects material to retain from large outputs, while b2_local_model can hand over a complete call when capacity and context checks permit. Jev chooses only among candidates supplied by the code and does not control permissions; plan mode, auto approval, YOLO, and permission policies remain the responsibility of the Distill harness.

  1. A developer who wants to inspect a repository, modify files, and run commands without leaving the terminal.
  2. A ChatGPT, Grok, or OpenRouter user who wants one coding interface with selectable models and reasoning efforts.
  3. A developer who wants an optional lighter Worker to handle eligible calls while retaining a stronger Reasoning model for complex changes.
  4. A team operating an OpenAI-compatible local server that wants to connect it to a terminal coding workflow.
  5. A user processing large command outputs or logs who wants checked extraction, summarization, and retention before the original text is discarded.

How do you install or deploy this agent?

On macOS or Linux, install a release binary with:

curl -fsSL https://raw.githubusercontent.com/samuelfaj/distill/main/install.sh -o /tmp/distill-install.sh
sh /tmp/distill-install.sh
export PATH="$HOME/.local/share/distill/bin:$PATH"
distill

The installer selects the binary for the detected OS and CPU, verifies its SHA-256 checksum, and runs --version before activation. Prebuilt targets cover Apple Silicon and Intel Macs plus glibc-based Linux on x86_64 and ARM64. Install version 2.0.0 with DISTILL_VERSION=2.0.0 sh /tmp/distill-install.sh, or set DISTILL_INSTALL_DIR to choose another location. A source build requires the Rust toolchain specified by rust-toolchain.toml, a C/C++ compiler, CMake, pkg-config, and Protocol Buffers:

git clone https://github.com/samuelfaj/distill.git
cd distill
cargo build --locked --release -p distill-pager-bin --bin distill
./target/release/distill

How do you use this agent?

Run distill to open the TUI. Opening it requires no provider login, but generating an answer requires a reachable model. Use the separate home-screen login actions for Grok, ChatGPT, or OpenRouter; OpenRouter can alternatively use OPENROUTER_API_KEY. Configure tiers from Model tiers or with /tiers, /model, /worker-model, and /utility-model, for example:

/model gpt-6-astra auto
/worker-model gpt-5.6-luna auto
/utility-model openrouter-qwen37 auto

For a local model, first start an OpenAI-compatible server, then add its model ID, base_url, and api_backend = "chat_completions" to the profile's config.toml. New profiles default to ~/.distill; DISTILL_HOME selects another directory. Start Distill from the repository you want it to work on and submit code-reading, file-editing, or command-execution requests through the terminal conversation. To inspect routing decisions, run GROK_LOG_JEV=1 distill; records are written to logs/jev.jsonl under the active profile.

What are this agent's strengths and limitations?

Pros
  • It documents direct support for Grok, ChatGPT, OpenRouter, and local OpenAI-compatible servers instead of requiring one model provider.
  • The Reasoning, Worker, and Utility tiers separate difficult code work, eligible same-conversation calls, and bounded mechanical tasks.
  • Utility outputs receive task-specific checks for details such as literal paths, error messages, quoted spans, and supplied IDs before use.
  • Failed, timed-out, low-confidence, or rejected decisions fall back to the normal execution path, with per-turn failure limits for routes.
  • The release installer verifies checksums and tests the binary before activation, while upgrades preserve settings, credentials, and sessions.
Limitations
  • Answer generation still requires either a reachable provider model or a separately operated local model server.
  • Reasoning and Worker models must share a compatible base URL, API backend, and credential scheme, limiting arbitrary provider combinations.
  • Prebuilt Linux releases require glibc; other Linux environments must use a source build.
  • Source installation adds Rust, C/C++ compiler, CMake, pkg-config, and Protocol Buffers requirements.
  • OpenRouter availability and charges remain provider-controlled, and a separately configured Jev decision endpoint needs its own credentials.

How does this agent compare with similar options?

Compared with a terminal coding setup that sends every request to one main model, Distill can route eligible calls to a same-conversation Worker and assign bounded extraction, summarization, or compression jobs to a Utility model. Unlike an exclusively cloud-hosted setup, it can also use a local OpenAI-compatible server, though the user must operate that server and stay within its capacity and context limits.

Key facts side by side with the most closely related agents.

Agent Source review Form / cost Stars Updated Language Full support on
Distill Terminal Coding Agent This agent 47 · Major gaps CLIFree + model costs ★ 774 today Rust ChatGPT · OpenAI API
deepx-code 63 · Some gaps CLIFree + model costs ★ 392 1mo ago Go OpenAI API
Codehamr 56 · Major gaps CLIFree + model costs ★ 222 1mo ago Go —
Codewhale Terminal Coding Agent 75 · Some gaps CLIFree + model costs ★ 41k today Rust OpenAI API · Claude API

How does FollowAgents rate this agent?

FollowAgents source review · FARS-2.1
Major gaps
47/ 100 5-point scale 2.4 / 5
This review covers the source as of Sep 20, 2026. The project has shipped 36 stable release(s) since, which have not been re-reviewed. The score and verdict describe the reviewed version only. Recent releases ↓
Trust 10/29
Reliability 8/14
Adaptability 10/18
Convention 9/18
Effectiveness 6/13
Verifiability 4/8
Why each dimension lost points
Trust10 / 29 · 1.7/5

Least privilege scores 1: the release workflow uses contents: read and raises only the publishing job to contents: write, but runtime file, network, shell, and sandbox privileges are not shown. User confirmation scores 1: a PTY scenario shows a user-entered “!” command labeled “Run (user),” but no confirmation gate is evidenced for agent-initiated high-impact actions. Data-flow transparency scores 0: auth, telemetry, Mixpanel, HTTP, and cloud-storage components are named without disclosing what data is sent, where it goes, or how collection is disabled. Sensitive-data handling scores 1: dedicated secrets, auth, and extra-CA modules exist, but storage, redaction, logging, and lifecycle controls are not shown. Dependency security scores 2: builds use --locked, Git dependencies pin revisions, and downloaded protoc archives receive SHA-256 verification; deductions apply for the very large dependency surface, a short Git revision, major-tag-only GitHub Actions pins, and an unpinned Homebrew tool install. External effects score 1: user shell execution and release uploads are visible, but the agent's possible file changes, commands, network calls, and service interactions are not systematically disclosed. Rollback scores 0 because no recovery mechanism for file edits, command side effects, or session actions is shown. Source attribution scores 2: the license names SpaceXAI and the Distill modifier, Cargo marks modifications, and releases include NOTICE and third-party notices; the upstream relationship and complete modification scope remain unclear.

Reliability8 / 14 · 2.9/5

Self-consistency scores 2: Distill naming, workspace modules, TUI scenarios, and the released binary broadly agree, and README.en consistently redirects to the main README; the absent main README and residual GROK configuration names reduce clarity. Dependency availability scores 2: four macOS/Linux targets, locked builds, pinned and verified protoc, caching, and an installer test are present; Git dependencies, system packages, Homebrew protobuf, the large dependency graph, and no Windows release target prevent full credit. Failure messages score 1: the workflow includes an explicit “protoc checksum mismatch,” version assertions, and timed PTY assertions, but no evidence covers user-facing runtime, authentication, provider, network, or tool-failure messages.

Adaptability10 / 18 · 2.8/5

Audience and scenarios score 2: the evidence clearly targets coding and terminal users and covers shell output, prompt entry, terminal resizing, and multi-platform releases; skill levels, representative workflows, and unsuitable scenarios are not documented here. Capability boundaries score 1: module names expose broad shell, MCP, memory, plugin, telemetry, and workspace capabilities, but defaults, permission boundaries, and unsupported behavior are not stated. Trigger precision scores 2: “!” command execution, tag-driven releases, and terminal-height thresholds have concrete triggers and regression scenarios; ordinary agent tool-selection and hazardous-action triggers are absent. Environment fit scores 2: tests cover multiple terminal sizes and releases cover four macOS/Linux architecture combinations, with Windows dependencies declared; no Windows artifact, prerequisites guide, or compatibility matrix is supplied.

Convention9 / 18 · 2.5/5

Information architecture scores 1: the workspace is grouped into build, codegen, common, third_party, and prod areas, but it is extremely broad and the supplied user-facing README is only a redirect to an unavailable file. Install notes score 1 because README.en asserts that installation, upgrades, and provider setup exist, but the actual instructions cannot be inspected. Naming stability scores 2: crates and artifacts consistently use the distill prefix; residual GROK_VERSION and GROK_CONTEXTUAL_HINTS names impose configuration ambiguity. Examples and FAQ score 1: PTY scenarios offer concrete interaction examples, but they are test fixtures rather than user tutorials or an FAQ. Known limitations score 1: comments document small-terminal compaction, release-profile distinctions, and CI lint compromises, but no consolidated user-facing limitations are present. License scores 3: the complete Apache-2.0 text, copyright notices, Cargo metadata, and release packaging agree without an evidenced gap. Versioning and changelog score 2: a dedicated version crate feeds tag validation, releases verify tags, and release notes are generated; no standalone changelog or compatibility and migration history is supplied. Maintenance responsibility scores 1: Samuel Fajreldines is identified as modifier, a HackerOne route is stated, and the release path is defined; publisher identity remains unknown, the HackerOne URL is only a generic “x,” and no maintenance team, support scope, or response commitment is given.

Effectiveness6 / 13 · 2.3/5

Output usability scores 2: PTY regressions cover clean ANSI rendering, reversible compact layout, and immediate bracket input, showing concrete attention to terminal usability; complete agent outputs and real task outcomes are absent. Marginal value scores 1: the broad module set and lightweight-TUI positioning suggest value beyond a plain chat interface, but no comparison substantiates the token-efficiency claim. Cost-benefit scores 1: the product claims more work with far fewer tokens and its compact UI may improve interaction, but no token, latency, resource, or task-success measurements are supplied, while the large workspace and dependency surface imply meaningful build and maintenance cost.

Verifiability4 / 8 · 2.5/5

Claim traceability scores 1: named PTY scenarios support specific interface behaviors, and the workflow supports build and release statements; the central “FAR FEWER tokens” claim has no benchmark, data, or matching test. Cross-source corroboration scores 2: Cargo, LICENSE, the release workflow, and PTY tests jointly corroborate product identity, Apache licensing, multi-platform builds, and TUI behavior; the missing main README and implementation files prevent corroboration of safety and product claims. Fact/inference separation scores 1: tests and build comments generally distinguish expected behavior and configuration rationale, but the marketing efficiency claim is not identified as unverified and several capabilities can only be inferred from module names.

Risks and how to mitigate them
  • Not found in source: data-flow disclosureWatch which external services it contacts (proxy or firewall logs) and keep sensitive data out until you know where it goes.
  • Not found in source: rollback or recovery pathBack up first, or work on a git branch or snapshot, so its changes can be undone.
  • The main README and runtime permission implementation are absent, so installation, provider configuration, sandboxing, confirmation gates, and default external effects cannot be verified.
  • The repository names telemetry, Mixpanel, auth, secrets, HTTP, and cloud-storage components, but the supplied material gives no data inventory, destinations, retention policy, or opt-out procedure.
  • The “FAR FEWER tokens” claim has no benchmark, measurement method, or results and should not be treated as a verified cost advantage.
  • The supply-chain surface is large; despite pinned Git revisions and protoc checksum verification, major-tag Actions, Homebrew tooling, and numerous dependencies need separate auditing.
  • The HackerOne address in SECURITY.md is only the generic “x”; confirm that it belongs to this project before submitting sensitive reports.
  • No evidence shows rollback for file or command side effects; evaluate it in a controlled, versioned workspace with minimal credentials.
Evidence confidence: Low Reviewed Sep 20, 2026 Reviewed revision 0e0aa328e58a New commits since this review; the score may not cover them
See the full review method →

Recent releases

Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.

  1. v2.0.65 Distill v2.0.65
    Release notes excerpt
    Adds an agent board view, a compact-and-close shortcut for sessions, and live activity for running subagents. - Optional expandable Board view for the agent dashboard (#57). - New Retire hotkey compacts and closes a session while keeping its history (#56). - Resumed sessions whose saved account is unavailable now fall back to Auto instead of failing (#58). - Running subagents now report their recent tool activity: the dashboard shows what each one is doing, get_command_or_subagent_output lists recent steps, and the compaction summary includes each subagent's latest activity (#59). …
    View on GitHub ↗
  2. v2.0.64 Distill v2.0.64
    Release notes excerpt
    Fixes model and usage status getting mixed up between sessions. - Each session now keeps its own worker model; picking a worker in one session no longer rewrites every other open session, and reconnects restore the session's own worker (#54). - The footer's weekly-limit warning now follows the selected session's main model provider: GPT sessions show the ChatGPT weekly limit for the account actually serving them, instead of Grok's (#55). Thanks to @chrislong365 for both fixes.
    View on GitHub ↗
  3. v2.0.63 Distill v2.0.63
    Release notes excerpt
    Fixes Auto sessions failing with “No available account route for this session” when another configured account is available. - Auto now tries the next configured account when credentials cannot be restored, during session creation and before requests. - Main and worker model pairs stay together, and explicit account/model selections keep their existing behavior.
    View on GitHub ↗

FAQ

Can Distill work without signing in to a model provider?
The interface can be opened without signing in, but answer generation needs a reachable model through Grok, ChatGPT, OpenRouter, or a local OpenAI-compatible server.
Can Jev approve commands or bypass permission prompts?
No. Jev does not decide permissions and cannot approve, veto, or hold tool calls. Distill itself owns plan mode, auto approval, YOLO, and permission policies.
What happens when a routing decision fails?
A failed, timed-out, or insufficiently confident Jev decision leaves the normal execution path in place. Rejected Utility results also fall back, and each route has a per-turn failure limit.
Can the Worker use an unrelated provider connection?
Not generally. It must be compatible with the Reasoning model's base URL, API backend, and credential scheme. The Utility model may use a separate connection.
Does upgrading remove configuration or sessions?
No. Upgrading through distill update or rerunning the installer preserves settings, credentials, and sessions, although open Distill sessions must be restarted.
View on GitHub ↗ Install ↓

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents