Agentic coding
harness.
Herder drives a model through native tool calls until the job is done. One agent core — a terminal TUI and a native GUI.
Provider-agnostic: any OpenAI-compatible /v1 endpoint —
infr, llama.cpp, OpenAI, OpenRouter — plus a native
Anthropic Messages backend with prompt caching and extended thinking.
Adaptive tool set + MCP, sub-agents, persistent memory, guardrails that
hard-block foot-guns. The vim layer is hjkl.
add a --json flag to the status command read src/cli.rs grep "fn status" src/ edit src/cli.rs - pub struct StatusArgs {} + pub struct StatusArgs { + /// Emit machine-readable JSON + #[arg(long)] + pub json: bool, + } bash cargo test --quiet test result: ok. 42 passed; 0 failed ✔ Added --json to the status command — serializes via serde_json, tests pass.
why
One agent core. Every provider. Both frontends.
Provider-agnostic
Point it at any /v1/chat/completions endpoint —
infr, OpenAI, llama.cpp, OpenRouter. Built-in
presets plus custom [providers.*] with their own model,
key, and headers. Azure supported too.
Native Claude backend
A native Anthropic Messages API backend, auto-selected for
api.anthropic.com — unlocking native prompt caching and
extended thinking, streamed to the reasoning pane.
TUI, GUI, headless
A shared UI-agnostic core (hrdr-app) drives the ratatui TUI
and the floem desktop GUI with full command parity.
hrdr run goes headless — NDJSON events for scripting and
CI.
Adaptive tool set
read, write, edit,
patch, find, ls,
grep, todo, fetch,
search, a shell — plus any MCP server's tools.
Presence-aware: the model is only offered tools it can actually run.
Sub-agents
The task tool spawns sub-agents with their own context — in
parallel, or detached in the background. Cross-provider profiles let an
Opus main agent delegate to a cheaper model.
Persistent memory
A memory tool with project and global scopes — plain
Markdown under the XDG data dir, greppable and git-diffable. The bounded
index survives /clear and /compact.
Foot-guns hard-blocked
The shell mechanically rejects git add -A, force-push,
reset --hard, whole-tree deletes, and
curl | sh before they run. Edits refuse files the model
hasn't read. Add your own [[guardrails]] rules.
Context under control
Prompt-cache breakpoints across turns, tool-output pruning before each
request, and auto-compaction when the window fills — recent turns kept
verbatim. All tunable in config.toml.
The vim layer is hjkl
--vim swaps the plain input for a real
hjkl vim editor behind an FSM-agnostic
EditorEngine seam. TUI colors come from any hjkl theme.
agents
Four built-ins. Or bring your own as Markdown files.
Selected with the task tool's agent argument,
@name-mentioned in a message, or run as the main loop with
hrdr --agent <name>. Agents are also discovered from
Markdown files — .hrdr/agents/, and Claude Code
(.claude/agents/) and opencode locations work as-is.
Code investigator — read/search tools only. Traces files, types, and call paths and reports back.
Code reviewer — audits a change for bugs, edge cases, and security
issues, with path:line findings.
Planner — investigates read-only, then writes a step-by-step plan to disk as a Markdown file.
Open-ended multi-step tasks — explore and modify. The default when
task names no agent.
install
Prebuilt binaries on every tagged release.
Linux (gnu + musl, x86_64/aarch64), macOS (Apple Silicon + Intel), and
Windows binaries ship with every GitHub Release, alongside
.deb, .rpm, and Alpine .apk
packages. Also on crates.io, Homebrew tap, AUR, and Scoop.
$ brew install kryptic-sh/tap/hrdr $ hrdr
$ yay -S hrdr-bin $ hrdr
$ scoop bucket add kryptic-sh https://github.com/kryptic-sh/scoop-bucket $ scoop install hrdr
# grab the .deb / .rpm from the latest release, then: $ sudo dpkg -i hrdr_*.deb $ sudo rpm -i hrdr-*.rpm
# crates.io $ cargo install hrdr # or build from the repo $ git clone https://github.com/kryptic-sh/hrdr $ cd hrdr $ cargo build --release