Blog · built in the open
Notes from inside
the harness.
How harnext works under the hood, the patterns we build it on, and practical ways to get more out of the coding agents you run on it.
Steer the agent mid-run — no abort, no re-prompt
Watch the agent head down the wrong path and you used to Ctrl-C, lose the run, and start over. Now you just keep typing: messages queue while it generates and inject at the next turn boundary — in the REPL and over headless stream-json.
Read the post →Background jobs: run dev servers and watch builds without blocking the agent
Long-running commands no longer freeze the agent. run_in_background returns a shell id immediately; bash_output streams the logs and kill_shell stops it — all visible in a live /bashes viewer.
Read the post →Multimodal input: paste an image with Ctrl+V, or pass a URL from the SDK
harnext now takes images. Press Ctrl+V to attach whatever's on your clipboard, or hand session.prompt() a URL, data URI, file path, or base64 — resolveImages() fetches and encodes the rest.
Read the post →Sandbox your AI agent's shell, keep its files on the host
harnext's new pluggable command executor lets you run an agent's shell commands inside a per-worktree Docker container while file tools stay on the host — one small seam, with truncation, timeouts, streaming, abort, and background shells all intact.
Read the post →Resume any harnext conversation — from the CLI or the SDK
harnext sessions used to end and take their context with them. Now every run is a durable, per-directory transcript you can pick back up — interactively with harnext --resume, or programmatically through @harnext/core.
Read the post →Goal mode: the evaluator loop inside harnext
Type /goal and harnext stops being a single agent. A smart model plans the work and grades every result while a faster executor does the hands-on coding. Here's how that planner–generator–evaluator loop works — and which models to drop into each seat.
Read the post →