Repository navigation
Releases: ronalove/recruit
Release list
recruit 2.3.2
recruit 2.3.2 shows its version in the menu, and tells you when a newer one is out.
- Version. The top of the menu (⌥r,
/recruit) now reads "recruit 2.3.2", the version the team runs. - Newer version. A green arrow follows it when a newer recruit is published. Update it with your package manager (
brew upgrade recruit); recruit itself changes nothing. recruit asks GitHub at most once a day, in the background;RECRUIT_NO_UPDATE_CHECK=1, in the environment you launch the team from, turns the check off.
A team already running keeps the version it was started with: recruit <team> --restart --resume starts it again on 2.3.2, each member on its conversation.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 2.3.1
recruit 2.3.1 shows emoji whole where your terminal can, and keeps tidying the code.
- Whole emoji. In Ghostty and WezTerm, emoji made of several characters (👍🏽, flags, families) now show whole in your members' panes, as they do outside recruit. Terminals that cannot group them (Terminal.app, iTerm2, kitty) still get them reduced to what fits (👍 without the skin tone), so that lines stay aligned. recruit leaves your terminal as it found it when you detach.
- Lists of choices no longer break a word that fits, when it holds a text-style variation selector.
- When a team's file has errors in two teams, the message names the first team in the file.
A team already running keeps the version it was started with: recruit <team> --restart --resume starts it again on 2.3.1, each member on its conversation.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 2.3.0
recruit 2.3.0 is a cleanup: the code is reorganized and leaner, the last pieces of 1.x are gone, and a few rough edges are fixed.
- No more 1.x leftovers. The
[tmux]section of a team's file, ignored since 2.0, is now refused like any unknown key: the error names the file, delete the section. A team still running under the tmux of 1.x is no longer recognized, andrecruit list --jsonno longer has atmuxfield. - Names that differ only by case. The wizard now refuses a member called “Dev” beside “dev”, as the menu already did, with the menu's message.
- One global team per name. A global team whose name another file of
~/.config/recruit/already defines is refused, with the file to edit instead: the other one would have hidden it. - A composed team with nobody in it. When Claude composes a team without a single usable member, recruit says so.
- Wide characters. Names and texts with wide characters (CJK, emoji) are cut at the right width, with “…”, instead of spilling over what is beside them.
- A
claudethat cannot run. Aclaudein yourPATHwithout the right to execute it is skipped for the next one. - Direction marks (U+202E and the like) are no longer passed on in titles and notifications.
- The dashboard redraws when its pane changes size instead of rewriting itself every 30 seconds: even less output when nothing happens.
_serverand_ctlcan no longer name a team: they are recruit's own subcommands.
A team already running keeps the version it was started with: recruit <team> --restart --resume starts it again on 2.3.0, each member on its conversation.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 2.2.0
recruit 2.2.0 makes room in busy tabs, lets you change a model or an effort in one click, and compacts idle members on their own.
- Focus. A tab with more members than you can follow can show one of them large on the left, the busiest beside it, and the others as cards, as on the dashboard. A member that starts waiting for you comes in at once, one that starts working after 30 seconds, and nothing moves under your pointer or while you type. ⌥l, or the “focus (⌥l)” button in the bar, switches the current tab until you detach; “Layout” in the menu (⌥r, then l) or
layout = "focus"sets it for the whole team. - The grid from the menu. “Grid” (g) sets how many panes a tab holds: 4 × 2, 3 × 2, 2 × 2, 3 × 1 or 2 × 1. A smaller grid gives each member more room, over more tabs.
- ⌥n keeps the zoom. A member shown over the whole tab stays so: ⌥n shows the next one in its place.
- Model and effort in one click. A click on a member's model or effort, in the top of its frame, opens the list of its values right under it. ↻ marks a value that will restart the member on its conversation, and the list asks first when the member is at work. A click on the name still opens its sheet.
- Automatic compaction, on by default. A member that stays idle for 15 minutes with its context at 70% of its window or more is compacted on its own, so that it comes back to work with room. Never a member on your screen, nor one waiting for you, whose turn failed, whose command still runs, or whose agents are at work. Each compaction leaves a ⟳ in its curve and a line in the journal (“⟳ dev auto-compacted · 74 → 9%”), and costs what a compaction asked by hand costs. To change it,
auto_compact = 80in the team's file; to turn it off,auto_compact = false, or “Auto-compaction” in the menu (c). - Teammates and subagents as cards. At the bottom of the dashboard, each in its section: the teammates, then the subagents at the very end. A card names the member that started it, and a click takes you to that member. Failures show in orange.
- Light terminals. recruit's own colors now follow your terminal's background: a light set on a light background.
- The effort as in Claude Code. The effort shows the signs Claude Code puts under its prompt: ○ low, ◐ medium, ● high, ◉ extra, ◈ max.
xhighis now called “extra”, as in Claude Code; your files keepxhigh. Short of room, a model's name gives way to its initial (O, S, H, F). In French, the levels read faible, moyen, élevé, extra, max. - When your files set no model or effort for a member, its sheet in the menu shows the one Claude Code applies, with “Claude Code” as where it comes from.
- The journal also lists compactions, those asked from the dashboard or typed with
/compactincluded, and rewrites its lines when its pane changes width.
A team already running keeps the version it was started with: recruit <team> --restart --resume starts it again on 2.2.0, each member on its conversation.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 2.1.0
recruit 2.1.0 tells you when a member's turn failed, and lets you set it going again from the menu.
- A failed turn has a look of its own. When a member's turn ends on an API error (overloaded, server error, rate limit, lost connection, usage limit), its frame turns orange and its header says why, after its name: “✗ dev · API overloaded (529)”. Its tab shows ✗, and a short notice tells you when it is out of sight, only one for several errors in a row. Red stays for the members waiting on your answer: ⌥g takes you to them first, then to the failed ones. On the dashboard, a failed member comes right after the waiting ones, with the reason and the task it was on.
- Resume where it stopped. The member's sheet in the menu (⌥r) shows the error and a “Resume” line, which sends it “continue”. Nothing is sent if its prompt already holds a draft, or if it is busy again.
A team already running keeps the version it was started with: recruit <team> --restart --resume starts it again on 2.1.0, each member on its conversation.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 2.0.1
recruit 2.0.1 is much lighter on your machine, and keeps every member's state right all day.
- A much lighter dashboard. With a recent Claude Code, a team now asks it for its running sessions once every five seconds, from one place. The dashboard, the journal and each member no longer ask on their own, the first two every second. The dashboard also redraws only the characters that change, and shows up at once.
- A member's state no longer gets lost. Once one of a member's sub-agents had finished, its frame and its tab could stay on ◌ for the rest of the day: no red frame, no ⚑ and no notice when it then waited for you. Its state now stays right. When Claude Code tells nothing, frames, tabs and notices follow what the dashboard sees.
- A failed turn no longer looks busy. A member whose turn ends on an API error now shows at rest, not at work.
- A member of a team started afresh that stopped in its first seconds came back on its conversation from the previous run; it now starts afresh again.
A team already running keeps the version it was started with: recruit <team> --restart --resume starts it again on 2.0.1, each member on its conversation.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 2.0.0
recruit 2.0.0 needs nothing but itself: tmux is gone, and the screen now tells you who needs you.
What's new
- Never miss a question. When a member you can't see starts waiting for your answer, a notice shows at the top right for a few seconds. Click it, or press ⌥g, to go there. Its tab keeps ⚑ until you answer.
- Read each member at a glance. Every member works in its own frame, its state, model, effort, context and time written in the top border. The frame you type in is thick and clear, the others grey, and a red one needs you.
- Change a member from its frame. Click its name, model or effort to open its sheet in the team's menu on that setting; click ⟳ to compact a member at rest.
- Follow one member full screen. ⌥z, or ⤢ in the corner, and back.
- Your keys belong to Claude Code. No prefix any more: recruit only takes ⌥ keys (Alt outside macOS), and Ctrl-b goes to Claude Code. ⌥n goes to the next member of the tab.
- Select and copy with the mouse, a word with a double click, a line with a triple click; scroll a member's history with the wheel or Shift+Page Up.
- Comes back on its own. If a team stops unexpectedly (a crash, a restart),
recruitstarts it again, each member resuming its conversation; a second time within ten minutes, it asks first. - Detach and come back as before, from any terminal, even over SSH. A second terminal that joins takes the team over.
Upgrading from 1.x
- A team still running under recruit 1: stop it with
recruit stopbefore upgrading, or upgrade and runrecruit, which offers to stop it and start it again on the new screen, each member resuming its conversation. Until then,recruit listshows it as running under recruit 1. - A
[tmux]section in a team's file is ignored, with a warning: you can remove it. tmux itself can go too, if nothing else uses it. - tmux keys are gone: ⌥⇧← / ⌥⇧→ for the previous or next tab, ⌥z to zoom, ⌥q to detach.
- On macOS, the terminal still has to send Option as Alt.
- Building from source needs Rust 1.99 and
scripts/ghostty.sh, which fetches Zig 0.16 for the terminal engine.
Also changed
- The team's menu opens over the team, the rest dimmed.
- The dashboard's top line is gone: the counts by state are in its border, the keys in the bar at the bottom, and the clock is no longer shown.
- Compacting a member asks "Compact dev?", says what it does and how full the context is, with
oto compact andc(or Esc) to cancel; in French,canda. - Quitting from the menu says what it does: every member stops and the team closes.
- The dashboard, the journal and the choice lists no longer lose the last character of a full row.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 1.1.3
- The dashboard no longer quits when its column gets very narrow: a card too narrow to show its context simply leaves it out.
- On Linux (Debian, Ubuntu, Alpine), Ctrl-C during the two-second pause after a member stops now leaves a shell in its pane, as on macOS, instead of closing it.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 1.1.2
- The dashboard no longer breaks when you press Enter in it: what you type there is ignored. It also redraws itself fully every 30 seconds, when your computer wakes up, and on Ctrl-L.
- A member whose turn is over but whose command still runs (a server, a watcher, a stuck search) no longer shows as at work: it rests under ❯, with how long the command has been running.
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit
recruit 1.1.1
- Shorter words, simpler keys. ⌥q now offers Detach (d), Quit (q) and Cancel (c); in French, Détacher (d), Quitter (q) and Annuler (a).
- The team's menu (⌥r) follows: Quit (q) stops the team, and Reset replaces "Restart all afresh".
Website and documentation: https://ronalove.github.io/recruit/ (en français : https://ronalove.github.io/recruit/fr/)
Installation : brew install ronalove/tap/recruit