Repository navigation
Releases: wanghailei/carson
Release list
Carson 5.2.0
Carson 5.2.0 — a minor release: a repository with no commit yet is no longer a dead end.
carson startin a repository with no commit yet starts the first task empty, on a branch of its own, andcarson landmakesmainfrom it and pushes it to GitHub. Before, Carson refused and left the first commit to be made by hand onmain, outside any task, which is the very thing Carson exists to prevent.- When GitHub was given a
mainafter the repository was cloned empty,carson startandcarson landbring it in first, so the first landing builds on it instead of beside it. carson status,carson abandon,carson adoptandcarson removework before the first landing: with nomainyet, all a task holds is workmainlacks.- A deleted
mainis not mistaken for one never made. Carson refuses, and names the commitmainwas last at and how to bring it back, instead of starting a history unrelated to the old one. - A repository with no
mainwhose trunk has another name, such asmaster, is told how to rename it.
Carson 5.1.1
Carson 5.1.1 — a patch.
carson removeon Linux without lsof now names the cure: the refusal says lsof ships with macOS and installs on Omarchy withsudo pacman -S lsof. Before, it named only the lack. lsof is now declared in the README as a dependency ofcarson remove.
Carson 5.1.0
What changes
- Every line Carson writes starts with ⧓, so its words stand out in an agent's conversation, as in Carson 4.
- Every message says what happened, why, and what to do next. Each failure names the command to run again once its cause is cleared, and a refusal of another session's task says to leave it to that session, or when a person must settle it.
- Carson says nothing in the agents' private language any more: what only a person can settle is said to be a person's.
bin/checkruns with plaingoas well as through mise, so anyone can run the checks.- The README is written for Carson's users.
No command changes.
Install
Download the build for your system below, unpack it, and put carson on your PATH. checksums.txt holds each download's SHA-256.
Carson 5.0.0
Carson 5 is a rewrite in Go of the git tool for coding agents that work in the same repositories at once. Each task starts from the latest main in a worktree of its own, and reaches main only as a finished task landing by fast-forward, so main only ever moves forward.
Commands
carson start <task>starts a task from the latestmain, in its own worktree under~/.worktrees, owned by the agent's session.carson statusshowsmainagainst GitHub's, the main working tree, every task with its owner and whether that owner is still live, and abandoned work.carson land <task>lands a finished task: brought up to the latestmain, checked with the repository'sbin/check, fast-forwarded, and pushed.carson remove <task>removes a landed task's worktree and branch, keeping its ignored files.carson abandon <task>keeps an unfinished task's work, uncommitted files committed, on a branchabandoned/<task>, and removes its worktree.carson adopt <task>makes a task yours: an ended agent's task, abandoned work, or a branch left without a worktree.
What it keeps to
- It runs only when called and keeps no state of its own beyond one owner record per worktree.
- Every check comes before any change, and nothing is ever destroyed: ignored files and abandoned work are kept.
- Only a task's owner lands, removes or abandons it; an ended owner's task is adopted openly, never taken by guess.
- It says what it observed, "unknown" when it cannot tell, and what to do next.
Install
Download the build for your system below, unpack it, and put carson on your PATH. checksums.txt holds each download's SHA-256.
Carson 4, the Ruby gem, is kept at the tag ruby-final.
Carson 4.5.0
New
- Harness-aware worktree directories.
carson checkin/carson worktree createplace the worktree under the calling harness's agent directory —.pi/worktrees/from a Pi session (detected viaPI_CODING_AGENT),.claude/worktrees/otherwise, exactly as before. SetCARSON_AGENT_DIRto override. Bare-name resolution,.git/info/excludebookkeeping, and diagnostics follow the chosen directory, and commands that take a worktree name resolve across all agent directories, so worktrees created by another harness remain reachable. - Sweep and reap cover
.pi/worktrees/. Both agent-directory lists gained.pi.
Why
The worktree directory was hardcoded to .claude/worktrees/, so Pi sessions produced Claude-flavoured paths. Each harness's worktrees now live under their own directory.
Migration
None. Existing .claude/worktrees/ worktrees resolve by name as before.
Carson 4.4.0
New
- Auto-chdir on checkout from inside worktree.
carson checkoutno longer blocks when the current working directory is inside the worktree being removed. CarsonDir.chdirs to the main worktree root and completes the removal automatically. Both the warehouse (assess_removal) and legacy (remove_check) paths are fixed. - Parent shell excluded from held-by-other-process check.
held_by_other_process?now excludesProcess.ppid(the user's shell that launched Carson) in addition toProcess.pid. Prevents false blocks when the user runscarson checkoutfrom inside the worktree.
Why
Running carson checkout from inside the target worktree is the most natural invocation — agents and users are already there. Blocking and printing a recovery command added friction for no safety benefit, since Carson can move its own process out.
Carson 4.3.5
Fixed
- Story language purged from CLI output.
checkin/checkout(#509) shipped after the story-language purge (#458) and used "workbench" in every user-facing string — help text, status messages, error messages. All 9 output strings now use technical language ("worktree"). Source-code names unchanged.
New
- Story-language guard test.
test/story_language_guard_test.rbscans all output-producing lines inlib/for forbidden story-language terms (workbench, warehouse, parcel, courier, bureau, waybill, vault). Strips#{}interpolation before checking. Catches future leaks mechanically — the purge is now a permanent rule, not a one-time pass.
Removed
carson auditdissolved. The audit command and its pre-commit gate have been removed entirely. Three of its seven checks were already enforced by the commands that need them (sealed workbench bypack!, working tree by Courier, main sync bysync!). The remaining four (PR status, CI baseline, hooks health, outsider fingerprints) were either unproven at commit time or already called by individual commands. Barecarsonnow defaults tostatusinstead ofaudit. The pre-commit hook is now a no-op reserved for future use.
Why
Story language in output has no mechanical enforcement — conventions fail on new code. The guard test closes that gap. Audit dissolution: audit was a remote-centred pre-commit gate; in local-centred mode it was dead weight.
Carson 4.3.4
Fixed
carson checkinis 13× faster. Removed two redundantgit fetchcalls that hit GitHub on every checkin.checkinnow branches from local main — zero network, 0.7s instead of 9.4s. Local main is the standard; GitHub is a backup, not a gating dependency.
Why
Local-centred mode means local main is the source of truth. Fetching from GitHub on every checkin was a remote-centred assumption baked into the command. The two sequential network round-trips accounted for 90% of the wall time.
Carson 4.3.3
Fixed
carson checkinis 13× faster. Removed two redundantgit fetchcalls that hit GitHub on every checkin.checkinnow branches from local main — zero network, 0.7s instead of 9.4s. Local main is the standard; GitHub is a backup, not a gating dependency.
Why
Local-centred mode means local main is the source of truth. Fetching from GitHub on every checkin was a remote-centred assumption baked into the command. The two sequential network round-trips accounted for 90% of the wall time.
Carson 4.3.2
Fixed
- Vault gives correct recovery when main worktree is dirty.
vault_blockednow inspects stderr fromgit merge --ff-onlyto distinguish dirty-tree conflicts from diverged-history blocks. Previously, both cases got the generic "rebase" advice — misleading when the branch was already a valid fast-forward descendant and the real problem was uncommitted files in the main worktree.
Why
An agent rebased three times on an already-correct branch because Carson misdiagnosed a dirty-tree block as divergence. The fix: read stderr, give the right advice. Scars, not speculation.