yardsort

v0.19.1 · Linux · macOS · Windows · GPL-3.0

Run AI coding agents in parallel — each on its own track.

Yardsort is an open-source desktop app for Linux, macOS and Windows. Every task gets its own git worktree and its own terminal, running the coding agent of your choice.

Download
$ brew install --cask joaoh82/yardsort/yardsort

All downloads · needs git and one agent CLI that already works in your terminal

Yardsort: projects and workspaces on the left, an agent's terminal in the middle, its changes and a diff on the right

Install

Download the latest build from the Releases page. You also need git and at least one agent CLI that already works in your terminal. Yardsort does not bundle agents and never sees their credentials.

Linux

AppImage: chmod +x Yardsort_*.AppImage and run it. The AppImage updates itself; .deb and .rpm are told when a new version exists. Add it to your app menu.

yardsort-bin on the AUR — on its way. Until then the AppImage works on Arch.

macOS

.dmguniversal · signed and notarized
$ brew install --cask joaoh82/yardsort/yardsort

Open the .dmg and drag Yardsort to Applications. The app updates itself.

Windows

Not code-signed yet, so SmartScreen warns: choose More info → Run anyway. Needs Git for Windows.

winget install joaoh82.Yardsort — awaiting Microsoft's review.

Prefer to build it yourself? git clone https://github.com/joaoh82/yardsort && cd yardsort && just setup && just build — see CONTRIBUTING.md.

Run parallel tasks, review changes and merge the work.

Like a sorting yard bringing rail cars onto separate tracks, Yardsort gives each task a branch and a worktree. Review each result before bringing the changes together.

01 · Workspaces

Every task gets its own worktree

You describe a task, pick an agent, and press Enter. Yardsort creates a branch and a git worktree for it — a separate folder — and starts the agent there. Start another, and another. They cannot disturb each other, or your own checkout.

Workspaces are ordinary worktrees and branches. Inspect or undo anything with git. Worktrees made elsewhere can be imported, and never appear uninvited.

The composer: describe a task, pick an agent, model, effort and branch

02 · Terminal

The terminal is the truth

Agents run in a real PTY with their own interface. Whatever they can do in your terminal, they can do here — and Yardsort never parses their output.

Status dots show which agents are working and which are waiting; a desktop notification tells you when one finishes while you are elsewhere. A shell tab next to the agent is one Ctrl+Shift+T away.

An agent's own terminal interface running inside Yardsort

03 · Changes

See what happened before anything merges

A live list of changed files, character-level diffs, a file tree and image previews. Edit text files here with retained drafts and a check before overwriting changes on disk, or open them in your editor.

When it looks right, the foot of the same panel commits it, pushes it and opens the pull request — whose number and check results then sit on the workspace row, with any other pull requests the workspace opened beside it. If it later conflicts with its base, the agent that opened it can be asked to resolve that. It stays an ordinary git branch throughout, and Yardsort holds no forge credentials: the gh you already use opens the pull request, or your browser does.

The changes panel: modified files with line counts, and a diff of render.js

04 · Sessions

Pick up where you left off

Close Yardsort and your agents carry on: the terminals belong to a small background process, not to the window. Open it again and every screen is repainted where it got to. Closing with work in flight asks first.

For a conversation that really did end, press Resume — it is intact. Fork one to try a different approach without losing the first.

Previous sessions with Resume and Fork

05 · Handoff

Hand the work to another agent

One agent has worked in a workspace and you want another there — Codex after Claude, or the same agent from a clean start. The files and the diff carry over by themselves. What was asked, tried and found does not.

Hand off… writes the next agent's first message from what Yardsort recorded: your task, word for word; the branch and its commits; each changed file and who wrote it; what every agent run did — its tools, what failed, what it wrote; and what is not known. It opens in the composer, where you read it, edit it, pick the agent and press Enter.

None of it is the last agent's words — Yardsort never keeps a conversation — and no model writes it. It says where it is blind, and tells the next agent to ask you. From a terminal, ys workspace handoff prints the same message.

Hand off: the composer holding the next agent's first message, written from what Yardsort recorded

06 · Workflows

Named agent work, in steps

A workflow is a short YAML file: the inputs to ask for, and steps that start an agent, wait for it to settle, type to it once it is quiet, wait for a review on the pull request, and notify you. A step names the steps it needs, so the ones that need nothing of each other run side by side. Every name and every {{ variable }} is checked before anything runs, with the line and column of each mistake.

Workflows, above Projects, lists the built-in ones and yours: the steps as a chart, the file in an editor with every problem marked where it is, and the runs. Rather not write the file? Say what it should do and press Write it — the agent you already have, or your Anthropic key, writes it, checked like any other and never saved until you say so.

The built-in Request code review is in every workspace's menu: a second agent reviews the pull request in the same worktree and posts on GitHub, then you are told, and the agent that wrote it is told to address the review. ys workflow run does the same from a terminal, and the open app carries it out in the background.

Workflows: the built-in code review as a chart, with its file and its runs beside it

Usage

See the tokens spent and the machine doing the work

Open Usage beside Settings in the sidebar, or from the command palette. Two tabs help you compare your agents and find which workspace is using CPU or memory. All figures stay on your machine, with no extra API key or activity capture needed.

Token usage

Token usage with demo logs: daily costs, cache savings and workspace totals

Compare Claude Code, Codex and Grok over 7, 30 or 90 days, by day, agent, model and workspace. Yardsort reads their local session logs, including conversations started outside the app. Inspect cache reads, writes and savings, and Codex's plan limits as it last reported them.

Switch between tokens and estimated API cost in US dollars. Cost is a comparison, rather than your subscription bill; unknown models, including Grok models, count toward tokens but have no cost estimate.

Machine resources

Machine resources: live CPU, memory and terminal process trees in demo projects

Follow live CPU and memory for Yardsort, its terminal host and every terminal it runs. Each terminal includes its agent and the programs it starts — builds, tests and language servers alike. This tab covers all agents, shells and run commands.

Sort by CPU or memory, expand projects and workspaces, and click a workspace to return to its terminal. Five-minute charts show recent samples; sampling runs every two seconds while this tab is open and the window is visible.

Token history covers logs still present on this computer. Neither tab includes other machines. Read the Usage guide →

07 · Command line

Start an agent without opening the window

ys is a small command-line client that comes with the app, built from the same commit, and reads the same database — so each sees the other's work. Package installs put it on your PATH; elsewhere, one button in Settings does, and keeps it current.

The agent it starts belongs to the background process, not to the command — so it carries on after ys returns, and you can attach to it later, from a terminal or from the window.

The ys command line has every command.

  • $ ys workspace new yardsort "fix the flaky login test"branch, worktree and an agent, in one line
  • $ ys attach fix-the-flaky-login-testput it back on your terminal; Ctrl-] detaches
  • $ ys logs fix-the-flaky-login-testhow it ended up, as plain text — finished ones too
  • $ ys workspace list --jsonevery command takes --json, for scripts
  • $ ys workspace handoff fix-the-flaky-login-testthe next agent's first message, from what was recorded
  • $ ys workflow run code-review --input reviewer=codexin a workspace's folder: a second agent reviews its pull request
  • $ ys task list --needs-answerthe GitHub issues waiting on you — and ys task create files one
  • $ ys workspace delete fix-the-flaky-login-testthe folder goes; the branch stays

Without the app, it is also its own download in each release. Unpack it and put it on your PATH.

  • Linuxys-0.19.1-linux-x86_64.tar.gz
  • macOSys-0.19.1-macos-universal.tar.gz
  • Windowsys-0.19.1-windows-x86_64.zip

On macOS the standalone copy is unsigned up to 0.17.0, so one downloaded with a browser is refused: xattr -d com.apple.quarantine ys, or fetch it with curl. Later releases carry the signed, notarized copy from inside the app.

08 · Assist

A second pair of eyes, powered by Jev

Yardsort never parses what an agent prints. A diff, though, is text a model can be asked about — so Assist asks Jev, TypeSafe's judgment model, about each changed file, and badges the ones worth a look.

Jev never generates text. It answers a typed question about a piece of state — a yes/no probability, a choice among named options, a position on ordered levels — and Yardsort decides what the number means. The questions stay narrow, one property each; the thresholds live in your settings; the model is pinned (jev-1.13.0) so a new version cannot move under them.

Switch on one more box and it is told who wrote each file, in the Changes list's own words — reported by an agent, written while one ran a command, or by nobody the record knows of. A substantive change no agent accounted for then earns its own badge, and every badge says what Assist was told.

In the composer it can also suggest a harness and an effort, built on your own “Good at” descriptions of your agents rather than on any opinion of ours. Nothing is ever picked for you.

Optional and off by default: it does nothing until you enter your own TypeSafe API key — kept in your system credential store, never in a file — and tick a feature. What leaves the machine is a changed file's diff and the task — plus, only with that box, the one sentence on who wrote it — or the message you are typing. Never a terminal. With no key, switched off or offline, Yardsort works exactly as it does otherwise, minus a few badges.

Assist covers the thresholds, the costs and what to do when TypeSafe says no.

Settings → Assist: the API key, its switches and the three thresholds
off-task
Looks unrelated to what this workspace was asked to do.
secret
Looks like it adds a literal key, token or password.
tests
Looks like it deletes, skips or weakens a test.
checks
Looks like it switches a lint, type check or CI step off.
credentials
The file's name says it holds credentials — decided on your machine, contents never sent.
unaccounted
A substantive change no agent accounted for, while agents were reporting. Only if you tell Assist who wrote each file.

09 · Harnesses

Switch agents. Keep the workflow.

Claude Code, Codex, Grok, OpenCode, OMP, Cursor and Pi work out of the box. Pick a different one for each task — the worktree, the branch, the review of its changes and the pull request stay the same whichever you choose.

Add any other terminal agent with a few lines of configuration — no plugin, no release to wait for. To Yardsort a harness is a command and some argument templates, kept in a plain TOML file you can read, back up and edit. Its program is started with its own arguments, never through a shell, and uses its own login.

Settings & harnesses has every field, and how to set up --model, --resume and the rest.

fix the flaky login test

Agent

  • Claude Codeclaude
  • Codexcodex
  • Grokgrok
  • OpenCodeopencode
  • OMPomp
  • Cursorcursor-agent
  • Pipi
  • Aideryoursaider

settings.toml

[[harness]]
id = "aider"
label = "Aider"
command = "aider"
prompt_transport = "stdin"

10 · Also

Quiet about the rest

Keyboard navigation you can configure
Search commands and workspaces, focus panels and switch terminal tabs from the keyboard. An in-app cheat sheet lets you change bindings and restore the defaults.
A guided first look
An optional welcome tour explains the main panels the first time you open Yardsort. Skip it or replay it any time from Help / Tour.
Private by construction
No account, no telemetry, no keys of ours. Agents use their own logins; Yardsort just starts them. It checks for new versions, which you can switch off — and nothing else leaves your machine unless you switch Assist on and bring your own TypeSafe key.
A record of what ran
A local note of when each agent started in a workspace and how it ended — even while the window was closed — without reading a word it printed. Opt in, and every built-in agent reports its own tool calls and turns to it as metadata, its own settings untouched, and each changed file says who wrote it — which is what Hand off is written from. An experimental timeline shows it; ys activity export writes it out.
Project memory, approved by you
Short lessons about a project for its agents — the tests need TZ=UTC. You write them; agents propose them with ys memory propose, and those wait for you. Only what you approve reaches an agent, after its first message and in handoffs — unless you turn that off for the project.
Outcomes, in your words
After you archive or delete a workspace, one optional click says how it went; a merged pull request counts as kept until you say otherwise. Each agent's history on your own work sits beside the composer's picker, and says too few to say until there is enough of it.
Every pull request in one place
One list of the pull requests of every project on GitHub — yours, a teammate's, an agent's — with their checks, reviewers and size, filtered by project, author and review status. Open one to read its description, its checks, the conversation and its diff, with every comment beside the lines it is about; reply, or select lines and send a note about them to the agent working on it. Start a workspace on one, merge it, close it or reopen it, each confirmed first. It reads GitHub through gh; Yardsort still holds no credential.
Your issues, where the agents are
Tasks lists every project's open GitHub issues and counts the ones that need an answer — where the last person to speak was not a maintainer. Open one, then Delegate: the composer opens with the issue as the agent's first message, marked as text other people wrote, and nothing starts until you say so. The workspace remembers the task it came from. Open a new task, answer one, close, label and assign it from the same view; ys task does all of it from a terminal, so an agent can tell you what is open and file an issue when you ask. Everything goes through gh.
Choose how agents start
Always start in auto mode is a per-agent choice in Harness settings, off until you enable it. For Claude Code and Codex, with activity capture on, a hint at 80% of the context window offers Compact to send the agent's own /compact command.
Closing the window doesn't stop them
Terminals live in a small background process, so agents keep working while Yardsort is closed — or after it crashes. Open it again and every screen is repainted where it got to.
Careful with your work
Deleting or archiving a workspace always keeps the branch, and never discards uncommitted changes without a second, explicit confirmation.
Keeps itself current
Signed in-app updates on macOS, Windows and the Linux AppImage — one click, and your agents' conversations resume afterwards.
Light
Built with Tauri and Rust: a few megabytes, not a bundled browser.
Harness settings: label, command and argument templates for Claude Code

Questions about Yardsort

What is Yardsort, and who is it for?

Yardsort is an open-source desktop app for developers running AI coding agents in parallel. Each task gets a git worktree and a terminal, so you can work on several branches, review the changes and open pull requests from one place. Start with the quick start.

Which agents and operating systems does it support?

Yardsort runs on Linux, macOS and Windows. It has built-in configurations for Claude Code, Codex, Grok, OpenCode, OMP, Cursor and Pi. You can add other terminal agents with a custom harness.

Is Yardsort free?

Yardsort is free to download and use, with source code under the GPL-3.0 license. Agent subscriptions or API usage are separate: each agent uses your own account. Optional Assist requests are billed to your TypeSafe account.

Can I see token usage and how much CPU or memory agents use?

Yes. Open Usage from the sidebar or command palette. Token usage reads Claude Code, Codex and Grok's local logs for the last 7, 30 or 90 days, including sessions started outside Yardsort. Compare agents, models and workspaces, inspect cache savings, and see Codex's last reported plan limits. API cost estimates are for comparison and do not represent your subscription bill; models with unknown prices still count toward tokens.

Machine resources shows CPU and memory for Yardsort and every terminal it runs, including each agent's child processes. It samples every two seconds while the tab is open and the window is visible. Both tabs stay local and need no extra key or activity capture. See Usage.

Do I need to install the coding agents separately?

Yes. Install git and at least one coding agent CLI, and make sure the agent works in a fresh terminal before starting Yardsort. Yardsort does not bundle agents; they use their own login. The installation guide lists the prerequisites.

How do git worktrees help agents work in parallel?

A git worktree checks out a branch in a separate folder. Yardsort gives each new task its own worktree, keeping that task's file changes apart from work in other workspaces. Agents started in the same workspace share its files. You still review changes and resolve any conflicts when merging branches. See workspaces and reviewing changes.

Will my agents keep running if I close the window?

Yes, if you choose Leave them running when closing with agents still working. A local background process owns the terminals, and reopening Yardsort reconnects to them. Stop them ends the agents instead. This does not keep work running through a computer shutdown. See terminals and sessions.

What stays local, and what can be sent to a provider?

Yardsort stores its project, workspace and session records on your computer. The coding agents you run can send prompts and code to their own providers under their own settings.

The Usage view reads the token counts the agents keep in their own logs on this machine, and the operating system's process figures; it sends nothing.

Optional Assist uses TypeSafe Jev. Depending on the features you enable, it sends changed-file diffs and task context, composer text and harness descriptions, or memory proposals and approved entries. Assist does not send terminal output. The Assist guide explains what each feature sends. Update checks and downloads also contact GitHub; see updates.

Read these answers in the docs →

Put parallel agents to work

Inside Yardsort

Why we built Yardsort

The decisions behind Yardsort: parallel coding on Linux, macOS and Windows, real agent terminals, and workspaces you can inspect with git.

All tutorials →Blog and comparisons →

Free software

GPL-3.0. You may use, study, share and change it, and versions you distribute must stay free under the same terms.

Early, and moving fast. The core loop works on all three platforms and is covered by CI on each. Expect rough edges, and please report them.

joaoh82/yardsort★ 8

Docs

Changelog

0.19.1
A merged pull request now counts as kept without you opening Outcomes. A project gives its agents its memory unless you turn that off.
0.19.0
A pull request's checks going green, or its merge, now shows without you doing anything. Tasks.
0.18.0
Install ys no longer, now and then, says the copy it just made is "not Yardsort's". The standalone ys for macOS is signed and notarized.
0.17.0
Usage.
Full changelog