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 | bashAll builds · Docs · Pricing · Enterprise · justrust · GitHub
Show commit history
Loading commits…
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
Performance demo
Benchmarks
RAM per additional session
Measured: jcode v0.92.14, Claude Code 2.1.267.
Show the full comparison
Memory per additional session, all tools
| Tool | Extra PSS | Graph | Comparison |
|---|---|---|---|
| jcode (local embedding off) | ~9.9 MB | baseline | |
| jcode | ~10.4 MB | 1.1× more RAM | |
| Codex CLI | ~21.6 MB | 2.2× more RAM | |
| pi | ~76.5 MB | 7.7× more RAM | |
| Antigravity CLI | ~86.4 MB | 8.7× more RAM | |
| Cursor Agent | ~157.5 MB | 15.9× more RAM | |
| GitHub Copilot CLI | ~158.1 MB | 16.0× more RAM | |
| Claude Code | ~212.7 MB | 21.5× more RAM | |
| OpenCode | ~318.4 MB | 32.2× more RAM |
Time to first input
Time until typed text appears on screen, 10 launches each
| Tool | Time | Graph | Comparison |
|---|---|---|---|
| jcode | 48.7 ms | baseline | |
| Antigravity CLI | 383.7 ms | 7.9× slower | |
| pi | 596.4 ms | 12.2× slower | |
| Codex CLI | 905.8 ms | 18.6× slower | |
| OpenCode | 1047.9 ms | 21.5× slower | |
| GitHub Copilot CLI | 1583.4 ms | 32.5× slower | |
| Cursor Agent | 1978.7 ms | 40.6× slower | |
| Claude Code | 3512.8 ms | 72.2× slower |
Time to first frame
How long until anything renders, same 10 interactive PTY launches.
| Tool | Time | Graph | Comparison |
|---|---|---|---|
| jcode | 14.0 ms | baseline | |
| Antigravity CLI | 383.5 ms | 27.4× slower | |
| pi | 590.7 ms | 42.2× slower | |
| Codex CLI | 882.8 ms | 63.1× slower | |
| OpenCode | 1035.9 ms | 74.0× slower | |
| GitHub Copilot CLI | 1518.6 ms | 108.5× slower | |
| Cursor Agent | 1949.7 ms | 139.3× slower | |
| Claude Code | 3436.9 ms | 245.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
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
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%).
Hill-climbable goals
How hill-climbable did the model think the work was?
n = 2,012goal-score submissions
hill_climbability score →
91.29mean
90median
18.0%below the gate
55–100observed range
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
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.
System prompt size over time
System prompt size comparison
Think our prompt is too big? Compare it against your favorite coding agent.
| Harness | Core tokens | Graph | Measured scope |
|---|---|---|---|
| pi | 336 | default core; normalized docs paths; no tool descriptions | |
| Jcode | 671 | normal core | |
| OpenCode | 1,766 | provider fallback | |
| Claude Code | ≈2,300 | leaked v2.1.88 default core | |
| Codex CLI | 4,365 | default base instructions | |
| Prime Agent | 5,502 | core + 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.
Tool schema size comparison
The tool definitions sent alongside the prompt. Tool counts and capabilities differ.
| Harness | Schema tokens | Graph | Tools | Measured scope |
|---|---|---|---|---|
| Prime Agent | 166 | 1 | Default Python kernel entry point | |
| pi | 589 | 4 | Default coding tools | |
| Codex CLI | 3,638 | 9 | gpt-5.6-sol code mode, local core (Linux) | |
| OpenCode | 4,982 | 11 | CLI build / Claude Sonnet / Linux bash | |
| Jcode | 11,394 | 32 | Linux 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.
Jcode Desktop
The same scrolling, keyboard-driven layout, built in, on any OS.
Changelog
Releases and changelog. Full history on GitHub releases.
Changes since v0.99.0
Automatically listed from commit messages.
- fixallow direct side-panel dismissal
- fixreserve header space for panel close
- fixkeep visible file diff focused after side close
- fixreturn focus to chat when closing side page leaves no pane
- fixside panel close/reopen and invisible pane focus
- fixshow the Catch Up brief after the side panel was hidden
- testgive the scroll classification test an edit so its File diff pane exists
- choreaccept size growth from #1644
- testgive the side-close File diff test its own diff cache key
- choreaccept size growth from #1644
- fixreopen dismissed panels for explicit initiatives commands
- choreaccept scoped size growth from #1644
- featadd local/self-hosted Laya SystemOne provider
- fixbypass HTTP proxy for local and private Laya endpoints
- featsupport Muse native catalog shape
- featcomplete native Muse catalog metadata support
- featnative Muse subscription login without the Muse CLI
- fixaddress review findings in the native subscription login
- fixmake cancellation and attempt ownership authoritative
- fixsend a User-Agent so device authorization is reachable
- fixclear leftover login input when the finished attempt completes
- docsrecord the live inference and tool round-trip
- featshow the subscription plan and honest quota in usage output
- docsrecord the usage-view evidence
- commitMake Jev decision models configurable
- refactorextract Laya helpers and transport tests to respect CI budgets
- usageretry transient OpenAI usage fetch failures and keep last-good limits
- commitKeep per-turn system reminders out of the system prompt
- commitKeep TUI turn reminders and memory out of the system prompt; attribute dynamic system changes
- commitAnnounce active skill in the transcript instead of the system prompt
- fixlook up draft releases via release list before publication
- commitSkip accounts whose last known quota is still exhausted when spawning sessions and failing over
- commitAttribute Anthropic KV cache misses at 00:00 UTC to provider daily rollover
- commitUpdate crates/jcode-app-core/src/tool/browser_fast.rs
- commitRaise OpenAI KV cache miss noise floor to 2048 tokens
- commitIsolate browser protocol test model
- docsupdate weekly stars chart
- configtrack JCODE_HIBERNATION_MODE and JCODE_REQUEST_COMPRESSION in env fingerprint
- acpresolve /skill and $skill invocations from editor clients
- fixrecover TUI from a vanished or unresponsive server instead of retrying forever (fixes #1887)
- commitSwarm strip shows active todo; restore worker todos after reload
- commitRoute server-initiated turns (swarm workers, wakes, headless reload recovery) through the server account router
- fixtyping during account auto-switch countdown no longer cancels it
- commitKV cache miss notices: attribute account switches, explain cause in detail, humanize token counts
- commitTest KV account-failover attribution end to end through the agent turn loop
- fixmake wake reach idle headless workers and work without a plan
- todoadd parallel waves; pinned band renders wave rails and swarm agent emoji
- fixworkers survive reloads: revive failed headless workers, keep spawn ownership, spawner can retry/resume without coordinator slot
- swarmtodos are the plan; dispatch links workers back onto todos
- swarmreconcile coordinator todos on every plan broadcast
- fixowner reclaims coordinator slot on every subscribe, not only resume
- commitswarm todo link: require content match so colliding ids never complete unrelated todos
- testpinned band end to end with wave rails and live swarm member status
- commitresume preview: render transcript like live chat (deep scrollback, pinned todos, sticky prompt, global prompt numbers)
- fixreject stale unified patch hunks before any file changes
- swarmremove agent-controlled worker effort, default workers to low
- fixreport token counts for OpenAI native compaction instead of 'unavailable'
- fixcontext-limit recovery compaction reports token counts
- tuishow masked OAuth account email in usage limits widget
- openaiattribute usage to the account a session actually serves from
- docsupdate weekly stars chart
- tuishow account email at bottom-right of usage widget
- cloud/cloud uses the subscription's managed Jcode Cloud machine
- todostages with group lanes replace waves
- commitShow first-run onboarding start choice only once
- committodo card: drop stage gutter numbers and blank rows, size lane columns to content
- committodo card: each lane is one row with tasks left to right, now/next stage words, arrow pips
- committodo tool: ask for short todo text since lanes render tasks side by side
- todoshort title + optional details for workers; one done header for finished stages
- commitswarm prompt: steer workers toward implementation, not reviewers or auditors
- committodo card: label each phase with number and state (phase 1 · done)
- committodo card: finished phases summarised beside the pips, body focuses on current and next phases
- tuiAlt+E toggles expanded previous-prompt preview (last 6 prompts)
- committodo card: status strip per lane, titles grouped after it and aligned across lanes
- committodo card: phase-labelled pips on the header, lane rows lead with their status dots
- committodo card: lane strips use green dots like the header pips
- committodo card: comma-separated lane titles, each capped to a fair share of the row
- testadd isolated dual-repository SSH widget fixture
- testclear inherited socket overrides during fixture cleanup
- commitShow independent local and cloud git state in SSH TUI
- stylecargo fmt
- testextend cloud git TUI e2e script
- fixforward changelog history to hosted self-dev builds
- tuistop expand-diff fallback from swallowing Alt+E prompt history toggle
- featadd bounded read-only cloud machine telemetry
- featshow cloud VM resources and connection details
- featexpose transfer provenance and test VM status panels
- fixexpose cloud telemetry types for public widget data
- fixpreserve public cloud widget snapshot construction
- fixfit cloud capacity details in default card width
- testcover generic SSH workspace status labels
Account failover, hibernation, and faster reloads
Release highlights.
- highlightAutomatically retry turns on the next pool account when one hits a usage limit, including for Desktop and SDK clients
- highlightHibernate idle sessions to free memory, with measured RAM status and transparent wake on the next interaction
- highlightReload and resume large sessions much faster by showing the local transcript immediately and sending only new history
Faster idle sessions and richer responses
Release highlights.
Release highlights.
Release highlights.
- highlightConnect to remote MCP servers over HTTP or SSE, including OAuth sign-in and command-line management
- highlightChoose saved OAuth accounts per session from the model and login pickers, with email labels and cancelable account-switch countdowns
- highlightSDK clients can organize sessions into collections and attach hidden reminders to individual turns
Release highlights.
Queued commands
Release highlights.













