Skip to content

Releases: Amitgb14/conch

v0.1.8

Choose a tag to compare

@github-actions github-actions released this 12 Oct 17:10

16 commits since v0.1.7, and one reason to cut them: v0.1.7 was re-cut in place, and a moved tag reaches nobody. An update is offered by version, so anyone who installed 0.1.7 before that re-cut is holding the build where clicking a row in the tree took the keyboard away from it, and would never be told otherwise. 0.1.8 is how that fix arrives.

conch says what it is doing, to the terminal it runs in

0.1.7 taught conch to read the Program Status Protocol (OSC 7501) from the agents in its panes. This is the other half: conch is a program on your terminal too, with the same thing to say.

  • One report of its own — blocked while any agent is waiting on you, error for one that has failed, else working, done or idle — with a line naming the agent when there is one of it (claude on feat waiting) and counting them when there are more. A terminal that understands the protocol can put that on the tab, which is the one state you cannot see for yourself, because seeing it means looking at conch.
  • It counts every agent conch knows, not only the workspace on screen: a tab is outside workspaces, and an agent waiting in one you switched away from is exactly the one that is out of sight.
  • conch takes the report away when it quits, so no tab is left saying an agent waits after the conch that said so has gone.
  • Unlike an agent, conch does not ask the terminal first. The answer would arrive on its own stdin, where the TUI reads keys and would take ESC ] 7 5 0 1 ; for an escape followed by the digits 7, 5, 0, 1 — digits that switch tabs. Writing without listening is the safe half. An unknown OSC is thrown away by terminals that do not implement it, and these are written only when something changes.
  • Off inside tmux and screen, which own the window the report would reach. CONCH_STATUS=0 turns it off anywhere, 1 turns it on.

No released terminal is known to display these yet — Ghostty has the parsing in libghostty-vt and the app still ignores it — so this is conch being ready rather than conch lighting up today.

Closing a workspace asks what to do with what is running in it

Closing a workspace moved its agents and terminals to workspace 1, always, with no way to say otherwise. It now asks, naming the count:

  • Move them to workspace 1, still running — what it always did.
  • End them, and close it.

End reaches only the panes no other workspace shows. A project shared with another workspace keeps its agents; closing a view is not somebody else's loss. Panes started in that workspace, panes in a project only it has, and whatever its own agents started are what go. With nothing running it is the plain confirm it always was.

The file explorer shows dotfiles

.github, .env, .gitignore — shown by default, and whether you hide them is remembered.

Saying true things where it said confusing ones

  • A machine's page gives the build conch actually compares, and says up to date or older build. It used to print the hash of the binary running over there, which for a remote is cross-built for another platform and so can never match yours — a machine upgraded minutes ago read as a stranger's build.
  • conch status says (reloaded N ago) beside the uptime. The uptime counts from the first server of a chain of reloads — its panes have been alive that whole time — so it says nothing about which build is in the process, and a server upgraded a minute ago read as days old.
  • conch machine upgrade names the machines conch has when the ref names none, instead of trying to resolve it as a hostname and reporting Could not resolve hostname dxb01.
  • A dialog, and a menu, fit a terminal narrower than they are. A menu was as wide as its longest label, and the view's truncation then took the frame's right edge off the screen; a long item is cut with an ellipsis now. A machine page packs its agents into the width it has, so the page can centre them instead of spilling.
  • A release can be re-cut. The publish step creates the release or replaces its archives, keeping notes somebody wrote. gh release create exits 1 the second time, which failed v0.1.7's workflow twice and published nothing — the thing this release exists to repair.

Fixes

  • A machine's page no longer says up to date about a server that told it nothing to compare. Found by this release's own CI: the comparison is by version in a release build and by build id otherwise, and only one of those paths was guarded.

conch 0.1.7

Choose a tag to compare

@Amitgb14 Amitgb14 released this 09 Oct 19:55

120 commits since v0.1.6, in five pieces: agents that say what they are doing, a diff you can read, your own commands on the menus, a phone that reaches every machine, and workspaces that keep to themselves.

Agents say what they are doing, instead of being guessed at

  • The Program Status Protocol (OSC 7501). conch answers the query a program sends — a program that gets no answer stays silent for the session — and takes its reports over conch's own screen rules, which were rewritten every time an agent's spinner changed. Claude Code 2.1.295 and Pi emit it today; the report travels down the pty, so it works over ssh and inside a container. conch agent explain ID says where a state came from.
  • Two tiers, said plainly. Supported is Claude Code, Codex, Gemini CLI, OpenCode and Devin. Runs here is an agent described by a manifest: conch starts and watches it and no more, and says so rather than showing an empty Sessions list. conch ships manifests for Aider, Amp, Cursor CLI, Grok, Kilo Code and Pi, and conch agent add writes your own.
  • A mark for every agent, taken from its own where a character comes close — Anthropic's starburst, Google's logo, a cube for Cursor, an ✕ for Grok, pixels for Kilo Code, π for Pi — with 🤖 for an agent conch was not told about.
  • No install conch cannot do. An agent whose manifest named no installer used to run an empty script and report success; the menu now says conch has none, and names what to do instead.
  • The agent list is asked for again when the menu opens, so an agent installed since conch started is offered as a start rather than an install.

Reading a diff

  • Side by side above 100 columns, word-level highlighting inside a changed line, and e to open the file at the selected hunk in $EDITOR. A long line wraps inside its column rather than being cut, coloured on every row; s switches layout for the file in front of you, and [ui] diff makes the choice yours.

Your own commands on conch's menus

  • [[actions]] in config.toml: a named command on the row menus, run on that row's machine in that row's checkout, with CONCH_MACHINE, CONCH_PROJECT, CONCH_BRANCH, CONCH_WORKTREE and CONCH_PANE in its environment. No registry, nothing to host — it runs only when you pick it.

The phone

  • Every machine, not just this one. A paired device reaches this computer and the machines you name for it; the drawer is grouped by machine; an agent on another machine opens on the first tap.
  • The socket is deflated with the window kept between frames — measured 14.9× fewer bytes end to end, and less processor time per frame than compressing each alone — and the app itself is served deflated (102 KB of shell as 34 KB).
  • Capabilities are asked of each machine, so a machine running an older conch says so before anything is tried.

Workspaces

  • Each workspace keeps to its own: its machines, folders, tabs, counts and waiting agents, workspace 1 included.

Mouse, scrolling, ssh

  • Smooth scrolling everywhere (a line per trackpad event), the wheel belongs to conch's history while a program is on the main screen as it does in tmux, the pointer becomes a hand over a link in kitty and Ghostty, and clicking an agent in the tree now hands it the keyboard.
  • ssh compression is asked for where the connection is made rather than on the bridge, where it did nothing; saved hosts live in folders with their own options, and K copies your key.

Fixes worth naming

  • A watcher that had to drop an event no longer drops the change with it.
  • Claude is read as waiting on its dialog, not on the question's words alone.
  • Waiting and done agents are counted apart in the status bar and tree.
  • A pane adopted through a reload closes its terminal on exec, so a closed pane hangs up.

The docs now also say who conch is for, and what to use instead when it is not.

Install

curl -fsSL https://raw.githubusercontent.com/Amitgb14/conch/master/install.sh | sh

Already running conch? Press u in the TUI, or conch update.

v0.1.6

Choose a tag to compare

@github-actions github-actions released this 02 Oct 09:07

Your agents reach your phone, agents hand work to each other, and git has a window of its own.

New

  • Your phone — conch web serves the agents on your laptop to a phone over your own tailnet. Pair it by scanning a QR code (conch web pair, or 🌐 in the status bar): the code works once, for five minutes, and travels in the link's fragment, which a browser sends to no server. The app is served by the gateway, so it always matches your build — add it to the Home Screen and it opens like an app. An inbox of what needs you; an agent's conversation with the question it is waiting on and its choices as buttons; its terminal to type into, with a key row for esc, tab, ctrl, alt and the arrows; + to start a task, an agent or a terminal. Scrolling back through an agent's own conversation works as it does at the laptop. Notifications when an agent waits or finishes. Permissions per device — view, reply, full — checked on every request and every message, with conch web devices|revoke|permission to change your mind. Nothing goes through a service of conch's.
  • Agents working together — conch agent prompt ID TEXT gives an agent its next message and is refused while that agent is waiting on a question of its own, so nothing is typed over a permission dialog; -wait blocks until the work it started ends. Panes have names (conch rename, conch task -name), and every pane command takes one. An agent calling conch from inside its pane reaches only its own work — the panes it started, its project, that project's branches — found from the socket's peer pid rather than anything the agent can set, and carried to other machines through -m. conch's own skill teaches the agents these commands: conch agent skill, or from Settings → Agents and the i view. In the TUI, Prompt… on an agent's pane menu, and a helper's row says ↳ for claude while its creator counts them (⑂2, amber when one is waiting).
  • A git window on a branch — click a branch (or b, $): a prompt that runs any git command in that branch's worktree, with the everyday ones behind tab, 500 lines of output kept, and a stopped rebase offering continue, abort, or handing the conflict to the agent. ctrl+t sends what you type to the agent on the branch instead.
  • Your own setup, and a library — conch agent sync -user gives the other agents the setup in your home, not just a checkout's, with an undo. conch agent library keeps MCP servers and skills in conch and writes them where each agent looks, Devin included. An agent cannot rewrite either of them.
  • The plan usage window — click Claude 5h 42% · 7d 18% in the status bar: every agent that has reported, on every machine, with every window it named — including a weekly allowance for one model that conch had been dropping — each with a bar, when it resets, and when the agent last said so. What conch itself has seen that machine spend is shown apart from it, and labelled as what it is.
  • The mouse — drag a tab along the bar to reorder it; drag a split's title onto another to swap the two; grab the scrollbar on a pane's right edge; triple-click for a whole line; click a link an agent printed to open it (alt+click inside an agent's own interface, which is owed its clicks). [ui] hover lights what the pointer is on, off by default because it asks the terminal to report every move.
  • File icons for 218 extensions and 95 names, from the Nerd Fonts list, and each Oh My Zsh theme showing the prompt it draws, in its own colours.
  • A new mark — a white conch on conch's teal, in the browser tab, on the website and on the phone, where it is the icon a Home Screen keeps.
  • A task in a folder that is no git repository starts the agent there; every sandbox command names its provider, since a default hides what is running on the other one.

Fixed

  • A command copied from a pane is one line again. A line too long for the pane is several rows on screen, and the copy put a newline between every one, so pasting into a shell ran half a command.
  • Claude's state is read from its spinner, not from "esc to interrupt" — which is on screen while it sits idle, so agent prompt -wait could call a thinking agent finished.
  • Tabs of panes that went while the TUI was closed close with them, instead of coming back empty and piling up.
  • An agent's conversation is kept as it scrolls above a fixed prompt, so ctrl+b [ reaches what it said rather than nothing.
  • A file copied out of the explorer is the file. The selection keeps to the column it started in, so the list beside the preview no longer comes with it, and it starts past the line numbers the preview draws them with — only the first row of a selection begins where the pointer did, so a command read out of a file used to paste as │ 2 go test and run nothing. w says which checkout it moved to, and the hint names y, d and e, which were there all along.
  • Sandbox creation that could not connect is tried again rather than deleted at the first dropped connection.

Known

  • The phone's notifications have been seen on one iPhone and nowhere else; a view device, Android, and anything on a slow link are unproven.
  • boat.dev is supported and documented, but the account it was built against has lapsed, so its stop/resume, usage and snapshots are covered by tests rather than a live run.
  • The gateway reaches a phone over Tailscale, behind any tunnel with -url, or with a certificate of your own. There is no relay: a relay would see everything, since pairing makes a bearer token and not a shared key.

Install

curl -fsSL https://raw.githubusercontent.com/Amitgb14/conch/master/install.sh | sh

An existing install updates itself with conch update, or from the version popup in the status bar.

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 28 Sep 04:12

Agents run in the cloud in this release, and setting them up stops being four jobs.

New

  • Sandboxes — M → New sandbox…, or conch sandbox create: conch makes a machine in the cloud, installs itself there and adds it as an ordinary remote machine, so the tree, -m and everything else work with it unchanged. Close the TUI and its agents carry on. Two providers: Daytona, reached with a fresh ssh token through its gateway, and boat.dev, whose sandboxes are whole machines with an sshd of their own — conch authorizes your public key there and connects straight to them, so nothing that opens one leaves your computer.
  • A sandbox worth keeping — m on its row opens a port in the browser (with the listen on 0.0.0.0 advice when the proxy finds nothing there), keeps a snapshot to make the next one from, and says what it has cost, asked of the provider period by period rather than guessed. The tree carries the time and the money, and a stopped sandbox says what its disk still costs.
  • Coming back — stopping a sandbox ends its processes, so conch writes down what was running and offers it back when it starts again: each agent resumed on its own conversation, each terminal in its folder. Nothing starts without you saying yes.
  • Stopping one nobody is using — conch pauses a sandbox when no agent is working, none is waiting and nothing has printed for 30 minutes (Settings → Sandboxes). That is conch's own watching: a provider's idle timer sees only what reaches it from outside, so it would stop an agent working quietly.
  • One setup, every agent — in the agent setup view (i), s gives the other agents the setup of the agent whose tab is open: its instructions, its skills and the MCP servers it declares, each written where that agent looks for it. It says what it would write before writing anything, leaves hand-written files alone, links skills rather than copying them, and never copies a secret — a server whose environment holds a value rather than a ${VAR} reference is left out, with the reason. u undoes it; conch agent sync does the same from a shell, on a remote checkout too.
  • A link an agent printed — ctrl+b u lists the links on a pane's screen with each one put back together across the box and the line breaks it was wrapped in, and opens it here while putting it on the clipboard. It is how you finish a login an agent inside a sandbox asks for.
  • Rebase when a push is refused — conch branch push and the changes view offer to take the remote's commits, put yours on top and push; a conflict says which files and what to do next.
  • Settings → Sandboxes lists the providers and opens one, so a new provider is a row rather than another section, and the API key can be kept there rather than in your shell.
  • Marking a file for a commit with the mouse, a status line that says what conch is doing while it installs itself somewhere, sharing a session with a machine that has no project yet, and a handed-over conversation keeping the name of the work it continues.

Fixed

  • ssh offers the key conch authorized. conch's generated ssh config named only its own key, and naming any key stops ssh trying the defaults — so a machine authorized with your key refused the login it had just been set up for, in a sandbox and on a plain machine alike, whenever ssh-agent held nothing.
  • Each ssh session gets its own connection. A host that stopped answering without closing left a new login on a blank terminal for a minute, behind a shared master that was up but dead.
  • An agent's launch files are written before every launch. Clearing ~/.config left Claude failing with Settings file not found; the files come back now, and so does the folder.
  • A handed-over conversation is private — 0600 in a 0700 folder, rather than readable by anyone else on a shared machine.
  • A machine's panes are forgotten when its server starts afresh, so an old screen never shows under a new pane's row.
  • A sandbox deleted in the provider's own interface reads as gone instead of sitting at destroying, and starting or stopping it says so straight away.
  • A sandbox that is not answering yet — a provider says a sandbox is started before its sshd is (Daytona says so within a second of being asked), so conch waits for it to answer, tries a dropped connection again — copying 16 MB is the longest thing it asks of one — and says the ssh connection failed (255) rather than an exit code when ssh itself said nothing.
  • conch's own test suite no longer takes the developer's clipboard (an OSC 52 escape in a test, honoured by the terminal running go test).

Known

  • boat.dev is supported and documented, but the account it was built against has since lapsed to Start the $20/month Boat plan, so its stop/resume, preview links, usage and snapshots are covered by tests and its own documentation rather than by a live run. What was seen live: create, the key, the install over ssh, -m, ls and rm.
  • The E2B provider in the tree is not registered and does nothing yet: it has no ssh, and the transport that would reach it is the work left.

Install

curl -fsSL https://raw.githubusercontent.com/Amitgb14/conch/master/install.sh | sh

An existing install updates itself with conch update, or from the version popup in the status bar.

What's Changed

Full Changelog: v0.1.4...v0.1.5

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 25 Sep 15:29

Work moves between machines in this release, and a pane's past is readable again.

New

  • Move a worktree to another machine — T on a branch sends it to another machine with its agents: the commits, the staged and unstaged split, untracked files and .env arrive as they were, the agent starts there and reads a handoff of what it was doing, and the pane here closes while the worktree stays. A machine without the project is offered the clone.
  • File explorer — f opens the checkout as a tree with git's marks on it, folders first, a preview that follows an agent's writes without a refresh, / to narrow, a to put a path in the agent's prompt, d for its diff and e for $EDITOR in a new tab. Ignored folders stay out of the way until i.
  • Reading a pane's past — a full-screen program (an agent, vim, less) leaves no scrollback; conch now recognises what scrolls off the alternate screen and keeps it, so ctrl+b [ and selection reach what an agent said a page ago. Scroll mode gained search, and Y opens the agent's own conversation to scroll and copy from, selection and all.
  • The review queue, finished — / filters it, dismissals survive a restart, and a check re-runs on its own once the branch it watched settles.
  • Watching a terminal — ctrl+b A alerts when a pane prints while you are elsewhere, ctrl+b M when it goes quiet after printing; the status bar carries the icon. Agents say for themselves when they need you; this is for builds and test runs.
  • Saved ssh sessions — H keeps an ssh host in the tree so it comes back with the session.
  • A status-bar icon for conch's own memory and CPU.

Fixed

  • The server no longer wedges when it reloads on macOS (golang/go#41702): syscall.Exec could hang in a thread-heavy process and leave the server neither serving nor gone.
  • A config.toml conch could not parse locked it out; the unreadable file is kept aside as config.toml.invalid instead.
  • The Sessions view took around 11 seconds to open where an agent's store is slow to answer; it answers in about 1.5 s now and refreshes behind you, and never serves a stale list.
  • Text selection no longer blocks scrolling, the keyboard works in confirm dialogs (←/→, tab, enter), and task branches are named after the project rather than conch/.
  • New shells no longer leave empty tabs behind, and a stray worktree can be deleted completely.

Install

curl -fsSL https://raw.githubusercontent.com/Amitgb14/conch/master/install.sh | sh

An existing install updates itself with conch update, or u in the version popup.

What's Changed

  • Save SSH hosts so they stay in the tree by @Amitgb14 in #12
  • Move a worktree to another machine, agents and all by @Amitgb14 in #13
  • Keep alternate-screen history when a read ends mid-line by @Amitgb14 in #15
  • Browse a project's checkout in a file explorer by @Amitgb14 in #14
  • Show conch's memory and CPU from an icon in the status bar by @Amitgb14 in #16

Full Changelog: v0.1.3...v0.1.4

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 24 Sep 08:58

What's Changed

  • Keep conch in step with upstream, and let it move back by @Amitgb14 in #10
  • Conch/can add live diff view by @Amitgb14 in #11

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 19 Sep 07:33

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 18 Sep 06:45

What's Changed

  • Reorder the roadmap: harvest first, task graph last by @Amitgb14 in #5
  • Stop concurrent conch processes racing on ssh/config and machines.json by @Amitgb14 in #7
  • Conch/new features by @Amitgb14 in #8
  • Conch/new features by @Amitgb14 in #9

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 17:22

What's Changed

  • Shorten the README and add a Next.js website in web/ by @Amitgb14 in #1
  • Rebuild the website as a Next.js and shadcn/ui app by @Amitgb14 in #2
  • Show real TUI screens, a conch icon and the version on the website by @Amitgb14 in #3
  • Draw the logo as an animated queen conch and trim the footer by @Amitgb14 in #4

New Contributors

Full Changelog: https://github.com/Amitgb14/conch/commits/v0.1.0