jcode

High performance coding agents, written in Rust.

Built for demanding development workflows with many agents working in parallel.

curl -fsSL https://jcode.sh/install | bash

All builds · Docs · Pricing · Enterprise · justrust · GitHub

Jcode rendering an image inline after reading it with a tool
Inline image rendering from image reads
Jcode coordinating a deep swarm of agents investigating Windows updater and OAuth behavior
Deep swarm investigation
Jcode rendering LaTeX mathematics inline in the terminal
Inline LaTeX rendering
Jcode displaying status and information widgets beside an active terminal session
Info widgets
Jcode notifying an agent that another swarm member changed a file it had read
Swarm file conflict notification
Jcode showing a completed todo list with confidence scores in the terminal
Completed todos
Jcode rendering LaTeX mathematics as an image in the terminal
LaTeX image rendering
Jcode running several tool calls together as one batch
Running batch tools
Jcode displaying a structured edit block in a terminal session
Structured edit blocks
Jcode rendering clickable links in a terminal conversation
Links that work in the TUI
Jcode showing a coding agent actively thinking through a task
Thinking
Jcode terminal session showing its idle animation
Idle animation
A clean new Jcode terminal session ready for a prompt
A new session
Jcode displaying a generated image inside the terminal interface
Native image generation
Star History chart for 1jehuang/jcode
GitHub stargazer history
Show commit historyHide commit history

Loading commits…

Full history on GitHub

Backed by Combinator


Multi-agent bottleneck

Heavy development workflows are bottlenecked by the harness's performance and resource efficiency. Spawn too many agents and your machine can throttle or crash. A slow, resource-hungry harness keeps you from spawning more agents and leaning into parallel work. Jcode is written in Rust and built to stay out of your machine's way. An extra session costs megabytes instead of hundreds of megabytes, and a new session is ready for input in under 50 milliseconds, so you can run many agents at once on the hardware you already have.

Lots of agents

20 jcode agents writing code in parallel.

Performance demo

Jcode performance demonstration.

Benchmarks

RAM per additional session

Headless48× less RAM
jcode3.5 MB
Claude Code168.6 MB
Interactive20× less RAM
jcode10.4 MB
Claude Code212.7 MB

Measured: jcode v0.92.14, Claude Code 2.1.267.

Show the full comparisonHide the full comparison

Memory per additional session, all tools

ToolExtra PSSGraphComparison
jcode (local embedding off)~9.9 MB~9.9 MBbaseline
jcode~10.4 MB~10.4 MB1.1× more RAM
Codex CLI~21.6 MB~21.6 MB2.2× more RAM
pi~76.5 MB~76.5 MB7.7× more RAM
Antigravity CLI~86.4 MB~86.4 MB8.7× more RAM
Cursor Agent~157.5 MB~157.5 MB15.9× more RAM
GitHub Copilot CLI~158.1 MB~158.1 MB16.0× more RAM
Claude Code~212.7 MB~212.7 MB21.5× more RAM
OpenCode~318.4 MB~318.4 MB32.2× more RAM

Time to first input

Time until typed text appears on screen, 10 launches each

ToolTimeGraphComparison
jcode48.7 ms48.7 msbaseline
Antigravity CLI383.7 ms383.7 ms7.9× slower
pi596.4 ms596.4 ms12.2× slower
Codex CLI905.8 ms905.8 ms18.6× slower
OpenCode1047.9 ms1047.9 ms21.5× slower
GitHub Copilot CLI1583.4 ms1583.4 ms32.5× slower
Cursor Agent1978.7 ms1978.7 ms40.6× slower
Claude Code3512.8 ms3512.8 ms72.2× slower

Time to first frame

How long until anything renders, same 10 interactive PTY launches.

ToolTimeGraphComparison
jcode14.0 ms14.0 msbaseline
Antigravity CLI383.5 ms383.5 ms27.4× slower
pi590.7 ms590.7 ms42.2× slower
Codex CLI882.8 ms882.8 ms63.1× slower
OpenCode1035.9 ms1035.9 ms74.0× slower
GitHub Copilot CLI1518.6 ms1518.6 ms108.5× slower
Cursor Agent1949.7 ms1949.7 ms139.3× slower
Claude Code3436.9 ms3436.9 ms245.5× slower

Intelligence

The harness can make the same model perform better or worse at your coding tasks. We do extensive research to produce a state of the art harness that is maximally capable at coding tasks.

optimization task

Score over time on float-print: jcode reaches +8.64, Claude Code +7.17
float-print score over time, jcode vs Claude Code, Opus 4.8 high thinking

Running the standard evals against these harnesses showed us how poorly they represent what agents can actually do. Existing benchmarks face a forced choice. Public benchmarks leak their solutions into training corpora, so scores measure memorization and misrepresent capability. Private benchmarks resist that, but they demand trust in a hidden test set, offer less transparency, and are hard to get access to. Beyond that choice, they share two structural flaws. They impose timeouts, so an agent is penalized for allocating more time to a problem, exactly the long-horizon behavior we want agents to develop. And they score on a coarse, discrete boundary: the gap between two very different models can show up as a single task completion. A model that solves 70% of a bench may sit next to a remaining 30% that demands a far higher capability level, and that entire delta is invisible between the discrete tasks. So we designed a new class of benchmarks with a spec:

  • uncontaminatable by construction: there is no answer to memorize, so everything can be public
  • hard to saturate by construction: scored on optimization depth, so the ceiling stays open past the frontier
  • deterministic by construction: same submission, same score, always
  • quantifiable by construction: the metric falls out of the task definition, no rubric, no judge
  • continuous by construction: an analog score axis instead of pass/fail, so capability differences show up as score differences at every level, and time is recorded rather than capped
  • cheat-resistant by construction: we provide a good reference implementation as the starting point, so web searching for ready-made solutions is only cheating at lower capability levels. At the frontier, there are no implementations left to copy that aren't useful recombinations

This design is immediately trustable because everything is public. Training on a previous model's transcript may even help a little, but it doesn't score better unless the model has genuinely generalized from it: replaying a transcript only matches the old score, and beating it requires optimizing past what was memorized, which is the capability the benchmark measures in the first place.

jcode bench v1 provides three tasks that follow this spec: float-print, json-unescape, and utf16-transcode. We chose these tasks because they grade in seconds and are pure coding on real world functions that are useful and genuinely benefit from optimization: a tight loop the agent can climb, on work that actually ships in libraries. The tasks are also chosen so the implementation cannot be overfit to the test suite: correctness is verified over the entire input space, not a sample. Compare measuring grep's speed by timing it on the Linux repo, where an implementation can be overfit to the Linux repo specifically. Above, we plot the score of the agent over time, from a single user prompt. Note that time is 1:1 correlated with cost and token utilization, because tool call time is negligible in these tasks. Both runs used Opus 4.8 with high thinking, identical prompts, launched concurrently, each stopping on its own judgment. On float-print both passed the full 2³² correctness gate; jcode finished at +8.64 (398x speedup) versus Claude Code's +7.17 (144x).

The uncontaminatable benchmark design · jcode bench

harness-agnostic frontier model results · full results and agent transcripts

Confidence stepping

Confidence at assignment vs completion, Terminal-Bench 2.1, Opus 4.8

Jcode's todo tool asks the agent to rate its confidence in each task item, both when the item is assigned and when it's marked done. Tracing those scores across our Terminal-Bench runs showed a clear pattern: confidence is always high after, but sometimes low before, and failures rarely come from tasks the agent was confident about at assignment. The low scores at assignment are real signal, and the jump to 100 at the end is not. So when we see a large spike in confidence, we force the agent to go back and check its work instead of accepting the claim. Ideally, confidence rises incrementally as validation happens during implementation, with each passing test earning a step up. Above, both harnesses on Terminal-Bench 2.1: each line is one trial, from confidence at assignment to confidence at completion. The extra checking pays: trials that finish in time pass more often (92% vs 88%), and even trials cut off by the benchmark's 15 minute limit are more likely to already contain correct work (47% vs 42%).

the full confidence study · every trial transcript

Hill-climbable goals

How hill-climbable did the model think the work was?

n = 2,012goal-score submissions

91.29mean

90median

18.0%below the gate

55–100observed range

2,012 scores from 815 sessions, through July 12, 2026

Agents are at their most capable when they have a metric to hill-climb. This is likely because reinforcement learning trains models to optimize against reward signals, so measurable feedback helps agents keep improving over longer time horizons, and those additional productive iterations lead to better results. Most users never take full advantage of this. Jcode does this for the user when applicable. Every agent goal receives a hill-climbability rating from 0 to 100, based on how quantifiable and iterable its progress really is. A high score is not credible without a stated objective to climb toward. When a goal scores low, the harness pushes back: reframe the goal into a verifiable objective and build the harness that measures it. Without this, an open-ended task leaves the agent with nothing to iterate against, no signal it can use to make its next attempt better than its last.

See the hill-climbability implementation · Download the aggregate data

Auto-poke

The full Opus 4.8 Jcode Bench float-print run, with a point where the harness automatically continued after an interruption
Longest Jcode Bench v1 run: float-print, 637.5 active minutes, Opus 4.8 high

Agents sometimes stop before the work is done. Jcode checks for unfinished todos and prompts the agent to continue, including in headless `jcode run` sessions. Transient errors are retried, while unrecoverable failures stop the loop.

See the persistence implementation · Read the full run transcript

Open source and customizability

Jcode is MIT licensed, open source, and open research. Everything we build and everything we measure is published, benchmark transcripts and failures included. A tool this close to your work should be one you can read, audit, and reshape.

Self dev mode

Jcode is inventing a new form of customizability. One that doesn't limit you to what a plugin or extension can do. Tell your jcode agent to enter self dev mode, and it will start modifying its own source code. Jcode is optimized to iterate on itself. There is significant infrastructure around self development, which allows it to edit, build, and test its own source code, then reload its own binary and continue work in your (potentially many) sessions, fully automatically.

System prompt.

The base prompt in every Jcode session, live from master. AGENTS.md, CLAUDE.md, and self-dev mode add to it.

248 tokens in v0.95.0 · source
Fetching the current base prompt from GitHub…

System prompt size over time

Jcode base system prompt size by releaseBase system prompt size at each of 213 releases, from 477 tokens in v0.1.0 to a peak of 1,020 tokens and 236 tokens in v0.95.0.v0.1.0 · Feb 12 · 477 tokensv0.1.1 · Feb 12 · 477 tokensv0.1.2 · Feb 12 · 477 tokensv0.1.3 · Feb 15 · 477 tokensv0.2.0 · Feb 17 · 477 tokensv0.3.0 · Feb 18 · 477 tokensv0.3.1 · Feb 20 · 501 tokensv0.3.2 · Feb 20 · 501 tokensv0.3.3 · Feb 20 · 501 tokensv0.4.0 · Feb 23 · 501 tokensv0.4.1 · Feb 24 · 502 tokensv0.4.2 · Feb 25 · 502 tokensv0.5.0 · Feb 27 · 502 tokensv0.5.1 · Feb 27 · 519 tokensv0.5.2 · Feb 28 · 519 tokensv0.5.3 · Feb 28 · 519 tokensv0.5.4 · Feb 28 · 1,010 tokensv0.5.5 · Feb 28 · 1,010 tokensv0.5.6 · Mar 1 · 1,010 tokensv0.5.7 · Mar 1 · 1,010 tokensv0.5.8 · Mar 2 · 1,010 tokensv0.5.10 · Mar 3 · 1,010 tokensv0.5.11 · Mar 3 · 1,010 tokensv0.5.12 · Mar 3 · 1,010 tokensv0.5.13 · Mar 4 · 1,010 tokensv0.6.0 · Mar 8 · 1,010 tokensv0.6.1 · Mar 10 · 1,010 tokensv0.6.2 · Mar 14 · 1,010 tokensv0.7.0 · Mar 14 · 1,010 tokensv0.7.1 · Mar 17 · 1,010 tokensv0.7.2 · Mar 18 · 1,010 tokensv0.7.3 · Mar 22 · 1,010 tokensv0.7.4 · Mar 23 · 1,010 tokensv0.7.5 · Mar 23 · 1,010 tokensv0.7.6 · Mar 23 · 1,010 tokensv0.7.7 · Mar 28 · 1,010 tokensv0.7.8 · Mar 28 · 1,010 tokensv0.8.0 · Mar 30 · 1,010 tokensv0.8.1 · Mar 30 · 1,010 tokensv0.8.2 · Mar 30 · 1,010 tokensv0.8.3 · Apr 2 · 1,010 tokensv0.8.4 · Apr 2 · 1,010 tokensv0.9.0 · Apr 6 · 1,010 tokensv0.9.1 · Apr 6 · 1,010 tokensv0.9.2 · Apr 7 · 1,010 tokensv0.9.3 · Apr 7 · 1,010 tokensv0.9.4 · Apr 7 · 1,010 tokensv0.9.5 · Apr 7 · 1,010 tokensv0.9.6 · Apr 8 · 1,010 tokensv0.9.7 · Apr 9 · 1,010 tokensv0.9.8 · Apr 11 · 1,010 tokensv0.10.0 · Apr 14 · 1,010 tokensv0.10.1 · Apr 15 · 1,010 tokensv0.10.2 · Apr 17 · 1,010 tokensv0.10.3 · Apr 24 · 1,010 tokensv0.11.0 · Apr 27 · 1,010 tokensv0.11.1 · Apr 27 · 1,010 tokensv0.11.2 · Apr 30 · 1,020 tokensv0.11.3 · Apr 30 · 1,020 tokensv0.11.4 · Apr 30 · 1,020 tokensv0.11.5 · Apr 30 · 1,020 tokensv0.11.6 · Apr 30 · 1,020 tokensv0.11.7 · May 2 · 1,020 tokensv0.11.8 · May 2 · 1,020 tokensv0.11.9 · May 2 · 1,020 tokensv0.11.10 · May 4 · 1,020 tokensv0.11.11 · May 5 · 1,020 tokensv0.11.12 · May 5 · 1,020 tokensv0.11.13 · May 5 · 1,020 tokensv0.11.14 · May 5 · 1,020 tokensv0.11.15 · May 5 · 1,020 tokensv0.11.16 · May 5 · 1,020 tokensv0.12.0 · May 6 · 1,020 tokensv0.12.1 · May 10 · 1,020 tokensv0.12.2 · May 14 · 1,020 tokensv0.12.3 · May 18 · 1,020 tokensv0.12.4 · May 22 · 1,020 tokensv0.13.0 · May 24 · 1,020 tokensv0.14.0 · May 26 · 1,020 tokensv0.14.1 · May 26 · 1,020 tokensv0.14.2 · May 26 · 1,020 tokensv0.14.3 · May 27 · 1,020 tokensv0.14.4 · May 28 · 1,020 tokensv0.14.5 · May 28 · 1,020 tokensv0.14.6 · May 28 · 1,020 tokensv0.15.0 · May 29 · 1,020 tokensv0.16.0 · May 29 · 1,020 tokensv0.17.0 · May 30 · 1,020 tokensv0.17.1 · May 31 · 1,020 tokensv0.17.2 · May 31 · 1,020 tokensv0.18.0 · May 31 · 1,020 tokensv0.18.1 · Jun 1 · 1,020 tokensv0.18.2 · Jun 1 · 1,020 tokensv0.18.3 · Jun 1 · 1,020 tokensv0.18.4 · Jun 1 · 1,020 tokensv0.19.0 · Jun 2 · 1,020 tokensv0.20.0 · Jun 3 · 1,020 tokensv0.21.0 · Jun 4 · 1,020 tokensv0.22.0 · Jun 5 · 1,020 tokensv0.23.0 · Jun 5 · 1,020 tokensv0.24.0 · Jun 7 · 1,020 tokensv0.25.0 · Jun 10 · 1,020 tokensv0.25.1 · Jun 10 · 1,020 tokensv0.26.0 · Jun 11 · 1,020 tokensv0.27.0 · Jun 13 · 1,020 tokensv0.28.0 · Jun 14 · 1,020 tokensv0.29.0 · Jun 16 · 1,020 tokensv0.30.0 · Jun 18 · 1,020 tokensv0.30.1 · Jun 18 · 1,020 tokensv0.30.2 · Jun 18 · 1,020 tokensv0.30.3 · Jun 20 · 1,020 tokensv0.31.0 · Jun 21 · 1,020 tokensv0.31.1 · Jun 21 · 1,020 tokensv0.31.2 · Jun 21 · 1,020 tokensv0.32.0 · Jun 28 · 711 tokensv0.33.0 · Jul 1 · 711 tokensv0.34.0 · Jul 2 · 711 tokensv0.35.0 · Jul 4 · 716 tokensv0.35.1 · Jul 4 · 716 tokensv0.36.0 · Jul 5 · 716 tokensv0.37.0 · Jul 7 · 716 tokensv0.38.0 · Jul 8 · 716 tokensv0.39.0 · Jul 8 · 716 tokensv0.40.0 · Jul 9 · 716 tokensv0.41.0 · Jul 10 · 716 tokensv0.42.0 · Jul 10 · 660 tokensv0.43.0 · Jul 10 · 660 tokensv0.44.0 · Jul 11 · 659 tokensv0.45.0 · Jul 12 · 659 tokensv0.46.0 · Jul 12 · 659 tokensv0.47.0 · Jul 14 · 659 tokensv0.48.0 · Jul 15 · 409 tokensv0.49.0 · Jul 16 · 409 tokensv0.50.0 · Jul 16 · 409 tokensv0.51.0 · Jul 17 · 409 tokensv0.51.1 · Jul 18 · 409 tokensv0.52.0 · Jul 18 · 409 tokensv0.53.0 · Jul 19 · 409 tokensv0.54.0 · Jul 19 · 409 tokensv0.54.1 · Jul 20 · 409 tokensv0.54.2 · Jul 20 · 409 tokensv0.54.3 · Jul 20 · 409 tokensv0.54.4 · Jul 20 · 409 tokensv0.55.0 · Jul 22 · 409 tokensv0.56.0 · Jul 23 · 409 tokensv0.57.0 · Jul 24 · 409 tokensv0.58.0 · Jul 24 · 409 tokensv0.59.0 · Jul 25 · 409 tokensv0.60.0 · Jul 26 · 409 tokensv0.61.0 · Jul 27 · 409 tokensv0.61.1 · Jul 27 · 409 tokensv0.62.0 · Jul 29 · 409 tokensv0.62.1 · Jul 29 · 409 tokensv0.63.0 · Jul 29 · 409 tokensv0.64.0 · Jul 29 · 409 tokensv0.64.1 · Jul 29 · 409 tokensv0.64.2 · Jul 30 · 409 tokensv0.65.0 · Aug 1 · 409 tokensv0.66.0 · Aug 3 · 409 tokensv0.67.0 · Aug 3 · 330 tokensv0.67.1 · Aug 3 · 330 tokensv0.68.0 · Aug 4 · 330 tokensv0.69.0 · Aug 5 · 330 tokensv0.70.0 · Aug 5 · 330 tokensv0.70.1 · Aug 5 · 330 tokensv0.71.0 · Aug 6 · 330 tokensv0.71.1 · Aug 7 · 330 tokensv0.72.0 · Aug 8 · 330 tokensv0.73.0 · Aug 9 · 330 tokensv0.74.0 · Aug 9 · 330 tokensv0.75.0 · Aug 9 · 330 tokensv0.75.1 · Aug 11 · 330 tokensv0.75.2 · Aug 11 · 330 tokensv0.75.3 · Aug 11 · 330 tokensv0.75.4 · Aug 12 · 330 tokensv0.75.5 · Aug 12 · 330 tokensv0.76.0 · Aug 14 · 330 tokensv0.77.0 · Aug 16 · 330 tokensv0.77.1 · Aug 16 · 330 tokensv0.77.2 · Aug 17 · 330 tokensv0.78.0 · Aug 18 · 330 tokensv0.78.1 · Aug 18 · 330 tokensv0.79.0 · Aug 20 · 330 tokensv0.79.1 · Aug 20 · 330 tokensv0.80.0 · Aug 23 · 330 tokensv0.80.1 · Aug 25 · 330 tokensv0.81.0 · Aug 25 · 330 tokensv0.81.1 · Aug 25 · 330 tokensv0.81.2 · Aug 28 · 330 tokensv0.81.3 · Aug 29 · 330 tokensv0.81.4 · Aug 30 · 330 tokensv0.81.5 · Sep 3 · 330 tokensv0.81.6 · Sep 3 · 330 tokensv0.81.7 · Sep 4 · 330 tokensv0.82.0 · Sep 5 · 330 tokensv0.83.0 · Sep 6 · 330 tokensv0.84.0 · Sep 6 · 330 tokensv0.85.0 · Sep 18 · 378 tokensv0.86.0 · Sep 20 · 208 tokensv0.87.0 · Sep 22 · 208 tokensv0.87.1 · Sep 22 · 208 tokensv0.88.0 · Sep 23 · 236 tokensv0.89.0 · Sep 27 · 236 tokensv0.89.1 · Sep 29 · 236 tokensv0.89.2 · Sep 29 · 236 tokensv0.89.3 · Sep 29 · 236 tokensv0.90.0 · Oct 1 · 236 tokensv0.90.1 · Oct 4 · 236 tokensv0.91.0 · Oct 5 · 236 tokensv0.92.0 · Oct 6 · 236 tokensv0.93.0 · Oct 8 · 236 tokensv0.94.0 · Oct 10 · 236 tokensv0.95.0 · Oct 11 · 236 tokens4771,010711409330208236
Tokens per release (o200k_base)method

System prompt size comparison

Think our prompt is too big? Compare it against your favorite coding agent.

HarnessCore tokensGraphMeasured scope
pi336default core; normalized docs paths; no tool descriptions
Jcode671normal core
OpenCode1,766provider fallback
Claude Code≈2,300leaked v2.1.88 default core
Codex CLI4,365default base instructions
Prime Agent5,502core + usage + opinionated; no model extras

Core instructions only, excluding tool schemas and runtime context · o200k_base · pinned sources · method. GitHub Copilot CLI, Cursor Agent, and Antigravity CLI are omitted because no verified reproducible core prompt source is available in this benchmark.

Tool schema.

Model-facing built-in tools from a Linux session. Hidden/internal tools and external MCP tools are excluded; session settings can change the list.

Built-in tool snapshot
Loading the built-in tool snapshot…

Tool schema size comparison

The tool definitions sent alongside the prompt. Tool counts and capabilities differ.

HarnessSchema tokensGraphToolsMeasured scope
Prime Agent1661Default Python kernel entry point
pi5894Default coding tools
Codex CLI3,6389gpt-5.6-sol code mode, local core (Linux)
OpenCode4,98211CLI build / Claude Sonnet / Linux bash
Jcode11,39432Linux snapshot; codemode + integrations enabled

Claude Code: not measured. Third-party leaked source lacks a verified default build/profile and pinned schema serializer.

Normalized native tool definitions only · o200k_base · no MCP server tools or provider framing · method · data

Guide to running more agents

Do you really run enough agents? Probably not. Here is some guidance to help you get started.

My workflow

For this workflow, I use Arch Linux and niri, a scrolling window manager. Agents open in quarter-width terminals with no gaps, and the workspace keeps scrolling as I add more.

New terminals open at a quarter of the screen. Keep opening agents. The workspace scrolls, not shrinks.

My niri bindings: click a shortcut, or focus the desktop and use its key without Alt.

Changelog

Releases and changelog. Full history on GitHub releases.

Unreleased

Changes since v0.99.0

Automatically listed from commit messages.

curl -fsSL https://jcode.sh/install | bash