Skip to content

Releases: stupart/conch

conch 0.4.0

Choose a tag to compare

@stupart stupart released this 05 Oct 16:12
90bd855

conch now works with Codex as well as Claude Code. It runs sessions in the background with no Terminal window, and the review pane is where you check an agent's work: two versions side by side, and an Approve button when the agent asks for your go-ahead. A message shows as Sent only after the agent confirms it arrived, and the iPhone app gets the Mac app's controls.

Upgrading

brew upgrade conch

Then quit conch.app and open it again. The app now carries its own daemon, speech engine (whisper.cpp and SoX), tmux and uv, so only the whisper model downloads on first run. When the new daemon starts, it repairs any conch hooks the upgrade broke. If a Claude Code session that was already open stops announcing itself, type /hooks in it once or restart it.

Codex

  • Codex accounts. Settings › Providers lists your ChatGPT accounts next to your Claude accounts, with each one's plan and usage. Codex sessions keep the account they were started with.
  • Messages reach Codex wherever it runs: a Codex terminal session, a session on Codex's shared app-server, or an existing task in the Codex desktop app, from the Mac or the iPhone.
  • Codex conversations read cleanly. You see what was said, not the context Codex injects. Tool rows show what a tool returned and whether it failed, and a failed or interrupted turn is shown and announced.
  • Sends to Codex are confirmed, and conch never types into an open dialog.

Accounts

  • Connect more than one Claude account, through Claude's own sign-in. Each account shows its plan, email and usage bars. You pick the account when you start a session, and it stays with that session through resume and restart.
  • Continue a conversation under another account: New session › Resume › Continue with. The original conversation is left as it was.
  • Sessions that have reached their usage limit are marked in the sidebar. Account capacity shows when you start a session.
  • Turn an account's plugins and MCP servers on or off for its next session.

Background sessions

  • Start or resume a session in the background, from the Mac or the iPhone. It runs with no Terminal window, and messages, approvals and Stop work as usual. Open Terminal attaches to it whenever you want to look.
  • Background sessions run on conch's own tmux server, so a tmux kill-server typed somewhere else can't end them. If that server does go down, conch brings the sessions back.
  • A session started with no folder no longer hangs on Claude's "trust this folder" prompt.

The review pane

  • Deliverables have types and versions. A session can publish a page, an image, a file, a folder (shown as a file tree) or a Figma design. Publishing again under the same name files it as the next version.
  • Compare two versions with a before/after slider, side by side, or as a diff.
  • Marks. An agent can mark the part of its work it wants you to look at, and the iPhone shows the marks.
  • Page capture. An agent can ask conch to load a page, screenshot it, and mark one section in a single step.
  • Login walls. When an agent publishes a link that needs a sign-in, conch notices and tells the agent. The iPhone gets the Mac's signed-in snapshot instead of a sign-in page.
  • Approve when an agent asks. When an agent asks for your go-ahead ("Open the PR", "Deploy"), the result gets an Approve button on the Mac. Pressing it tells the agent, and you have 10 seconds to undo.
  • Temporary files an agent publishes are kept, so a reboot or a temp-folder cleanup no longer leaves a broken result. Agents learn whether a publish was accepted and whether anyone can see it.

Messages you can trust

  • Sent means the agent has it. A message to Claude Code shows as Sent only after the agent confirms it, through its own hook or its transcript. Typing the keys isn't enough. If conch can't confirm a message, it says so and keeps your words.
  • Long messages are sent whole, as one paste. Before, a message of a few thousand characters could arrive as only its last few hundred.
  • Dictations survive daemon restarts. A dictation could be skipped after a restart. Now every recent dictation is also kept, and conch dictations prints them so you can recover one that never reached a draft.
  • No false "not delivered". A message counts as sent when the session took it under a new conversation, or when a window on a finished background session started a new session for it. Before, conch put your words on the clipboard as if they had been lost.
  • Dismiss works on a failed send. On the Mac, clicking Dismiss used to select the message's text instead. The iPhone now has Dismiss next to Retry. A dismissed message stays gone, and a failed send also clears itself once a later message lands.
  • A send to a terminal the session has left is refused before any key is typed, and tells you to resume the session.

Seeing what agents are doing

  • Live activity in the sidebar. Each working session shows one line under its row ("Running the test suite", "Editing src/voice-loop.ts"), on the Mac and the iPhone.
  • An agent's running commentary appears in the conversation. A session's sub-agents show as a small group under it, and "waiting on its agents" replaces "working" when only they are running.
  • Permission prompts and questions in conch. A pending permission prompt shows with Allow and Deny. Agents' questions can be answered from conch, every question at once, multi-select included. A spoken "always" no longer grants something conch can't name. conch asks for a yes or no instead, and "always" stays at the keyboard.

iPhone

The iPhone app is still built from source (mobile/conch-ios), and these features need conch 0.4.0 on the Mac.

  • The Mac app's controls on the phone. Long-press a session to rename it, quiet it, open its terminal on the Mac or dismiss it. The phone also gets the Ready for you button, the command palette, the session inspector, Rename and Restart, Help with conch, and Settings for providers and voices.
  • The phone sets itself up after pairing, and the Mac's setup follows it.
  • Pages show with their images, every held deliverable is listed, and pages from a dev server on the Mac open through conch.
  • Send a video from the phone. The session receives it as a contact sheet plus a timed transcript.

On the Mac

  • The message box keeps what you type. Autocorrect no longer rewrites words as you type, text no longer turns invisible, and dictation adds to what's already in the box as you speak.
  • New setup: each permission is granted once, to conch. Setup includes a practice turn, and conch opens at login from its first launch.
  • Natural voices set themselves up with the uv the app carries, and repair themselves when something breaks.
  • The conversation scrolls through a whole session with no "show more" buttons. It reads at a comfortable line length, and you can drag to select across messages and copy them.
  • Model and effort can be changed per session. Restart a session in one step, and conch tells you when a newer Claude Code or Codex is installed.
  • The Terminal button brings the session's real terminal forward.
  • The app idles near 0% CPU while agents work, and the daemon's history indexing idles again.
  • The floating control bar, conversation panel, on-screen drawing (Draw on Screen and Show) and the tour are off for now while their design settles. Debug › Overlays turns them back on.

Fixes

  • Fixed a freeze in the sidebar. Dismissing or restoring a session, or a session filing a result while others worked, could hang the app. The sidebar now lays its rows out once and scrolls once per change.
  • Closing a busy session works. conch waits up to 15 seconds for a session to finish shutting down instead of 4, messages to other sessions go through while it waits, and when a close really fails it says what happened.
  • Hooks survive Homebrew upgrades. conch now writes Homebrew's stable path into hooks instead of a versioned folder that the next upgrade deletes, and repairs hooks that already broke.
  • conch version reports the right version. The 0.3.0 binary reported 0.2.1, so it kept saying an upgrade you already had was available.
  • A frozen daemon is detected, stopped and replaced, and conch says where it froze.
  • Handoffs of large Claude conversations work.

conch 0.3.0

Choose a tag to compare

@stupart stupart released this 21 Sep 05:57

What's Changed

  • Ledger cleanup: statuses right, voices to Settings, one accent colour by @stupart in #47
  • Render markdown in the static reply too by @stupart in #48
  • Parse the reply once, then dim the tail — splitting corrupted block markdown by @stupart in #49
  • Give markdown blocks their air back, and make the indent actually apply by @stupart in #50
  • Recognize "send" when it rides the tail of the same breath by @stupart in #51
  • Recognize a trailing "no response needed" too by @stupart in #52
  • Make keystroke-fallback a real setting instead of an env-only flag by @stupart in #53
  • Review pane: fit images, kill the white flash; plugin offers to install conch by @stupart in #54
  • Drop the border around image deliverables by @stupart in #55
  • Reviews belong to their own session; ship the app real markdown by @stupart in #56
  • Structured telemetry, and tell the app's user the plugin exists by @stupart in #57
  • The conversation pane was blank for any session that had used a tool by @stupart in #58
  • UX audit round one: colour semantics, contrast, glyphs, tables by @stupart in #59
  • UX audit round two: measure, flex priority, blockquote collision by @stupart in #60
  • UX audit round three: fix my own regression, and three real blockers by @stupart in #61
  • UX audit round four: Settings, empty state, Dynamic Type by @stupart in #62
  • Give the status colours real separation, not just different shapes by @stupart in #63
  • Fix a wrong number on screen, a mis-teaching legend, and a lopsided column by @stupart in #64
  • Clear the remaining polish: say it once, mark the trust boundary, disarm dead controls by @stupart in #65
  • Undo my own greedy frame, and stop mute from hiding a waiting turn by @stupart in #66
  • Make the window remember where it was by @stupart in #67
  • The greedy frame moved sides; remove it from both by @stupart in #68
  • Clear the four defects found alongside the world-class verdict by @stupart in #69
  • Every deliverable type renders fully, and proves it with a harness by @stupart in #70
  • The phone transport: LAN bridge, pairing, and an inject path by @stupart in #71
  • conch for iPhone: ledger, talk, deliverables — the Mac's sibling by @stupart in #72
  • iPhone audit round one: four blockers, seven polish items by @stupart in #73
  • The tall-image fix had inverted the bug; the cure was a deletion by @stupart in #74
  • Six digits, not thirty-two: the strong token is never typed by @stupart in #75
  • The phone said 'No reply yet' for almost every session by @stupart in #76
  • Voice lost everything before the last pause; /goal loops ate your dictation by @stupart in #77
  • Untrack 103MB of Xcode device-build output by @stupart in #78
  • Give each toolbar button one job: the Mac on the left, the mode on the right by @stupart in #79
  • Dot in the glass for the mode, laptop for the Mac, shell in the title by @stupart in #80
  • The phone gets a voice, and the mode dot stops waiting for the Mac by @stupart in #81
  • Audio follows the phone, and restarts stop wiping the dashboard by @stupart in #82
  • The app now says when it is stale; the phone's voice is one switch by @stupart in #83
  • Two open mics, lost dictation, and a button that meant two things by @stupart in #84
  • Gate speech at the chokepoint, and make the audio claim a real lease by @stupart in #85
  • Codex's review fixes, plus the coverage hole my verification found by @stupart in #86
  • conch: phases 1-2, resume by search, capability inspector, and a lot of honesty fixes by @stupart in #88
  • Stop the two audio owners from destroying each other's work by @stupart in #87
  • Address the window, not the session — plus per-kind capability metadata by @stupart in #89
  • Extract the session ledger, and make typecheck a test by @stupart in #90
  • Roadmap: raise a session from its title, and a cloud/local speech toggle by @stupart in #91
  • Close an open mic on request, and stop making it wait for the transcript by @stupart in #92
  • Warm a session's prompt count before anything waits on it by @stupart in #93
  • Let the app hold the microphone it spawns a recorder for by @stupart in #94
  • Make the mic say how long it took to open by @stupart in #95
  • Roadmap: a mic button that reacts to your voice by @stupart in #96
  • Stop the microphone waiting for its own courtesy sound by @stupart in #97
  • Fix the lease test's literal, and the -1 trap inside it by @stupart in #98
  • Stop one slow control from swallowing every press behind it by @stupart in #99
  • Measure the mic at the arm, not at the decision by @stupart in #100
  • Make no sound before a composer dictation's mic opens by @stupart in #101
  • Make a failed whisper request say what failed by @stupart in #102
  • Roadmap: one conch across two Macs, and why it belongs in the refactor by @stupart in #103
  • Make releasing one command, and give the repo a CI gate by @stupart in #104
  • Tell people when the conch they are running has been superseded by @stupart in #105
  • Publish from CI, and make the release gap visible by @stupart in #106
  • Roadmap: markdown fidelity for tool prose, and pasted image paths by @stupart in #107
  • Docs: record what today actually taught us by @stupart in #108
  • README: a source checkout needs an app, and an app needs an identity by @stupart in #109
  • Make CI green: inject which, and pay first-launch cost outside the timer by @stupart in #110
  • Keep bun's compile intermediates out of the repo by @stupart in #111
  • Publish a deliverable's path absolute, so the app can find it by @stupart in #112
  • Preview a deliverable in the conversation, not a card about it by @stupart in #113
  • Stop a derived registry name from masking a session's real title by @stupart in #114
  • Roadmap: Cmd+V image paste, a doc-link error, and where the memory layer lands by @stupart in #115
  • Render a nested agent's reply as prose, not as a log by @stupart in #116
  • Act on the split recon: two silent tests, a frame cap that missed, a wrong comment by @stupart in #117
  • Extract the event scheduler (cut two of the daemon split) by @stupart in #118
  • Let a dropped or pasted image reach the composer, not the editor by @stupart in #119
  • Pairing tab: show the daemon's refusal, and name the fix by @stupart in #120
  • Cut three of the daemon split: extract the control server by @stupart in #121
  • Control server: a destroyed connection dispatches nothing (A16) by @stupart in #122
  • Mic button reacts to your voice, not just to being on (C12) by @stupart in #123
  • Click a session's title to bring its terminal to the front (C10) by @stupart in #124
  • Ledger: prune resumedSessionIds with everything else (A11) by @stupart in #125
  • Mac app: start our own daemon when an adopted one dies (A2) by @stupart in #126
  • Error records keep a digest of daemon state, not the conversations by @stupart in #127
  • Theater: date and own the copied line; A7 findings, A9 stale by @stupart in #128
  • docs: the install journey map, and the A6 recheck by @stupart in https://github.com/...
Read more

conch 0.2.1

Choose a tag to compare

@stupart stupart released this 03 Aug 05:32
0d906de

Ships the macOS app inside the formula tarball, so a single brew install stupart/tap/conch now gives you both the CLI and conch.app.

The app is universal (Apple Silicon + Intel) and signed with a Developer ID. It goes in via the formula rather than a cask deliberately: Homebrew quarantines cask artifacts, and a quarantined app that isn't notarized is refused by Gatekeeper — the formula path avoids that entirely.

conch 0.2.0

Choose a tag to compare

@stupart stupart released this 03 Aug 05:18
dd9f08d

The first release since v0.1.0 (2026-07-13). Everything below was missing from the binary Homebrew was installing.

Install / lifecycle

  • conch setup is now genuinely one command — deps, models, hooks, the background service, and the Claude Code / Codex plugins.
  • Hard dependencies fail before the 1.6 GB model download instead of after.
  • conch doctor now records audio and speaks, so it can actually detect a denied microphone (every prior check was a file-existence check).
  • New: conch version, conch uninstall [--models].

Voice quality

  • Announcements are speakable: URLs, file paths, CLI flags, arrows and emoji are no longer read aloud character by character.
  • A thinking pause no longer submits half a prompt.
  • Voice interrupt during a read works again.

Codex

  • The Codex backend actually functions (it wrote hooks to a path Codex never reads). Activate with conch install --codex.

macOS app

  • A native app (mac-app/) with a live conversation pane, session controls over the daemon socket, inline rendering of finished work, and markdown rendering. Build and install it with scripts/build-app.sh.

Security

  • The daemon log (which contains dictated speech verbatim) and the control socket are now 0600; they were world-readable/accessible.

conch v0.1.0

Choose a tag to compare

@stupart stupart released this 13 Jul 23:01

First public release. Install on macOS:

brew install stupart/tap/conch
conch setup
conch service install

A turn-based voice loop for Claude Code — your sessions announce finished turns aloud, then you talk your next prompt back. Speech-to-text runs locally via whisper.cpp; optional Kokoro neural voices via mlx-audio.

Built by Blueprint Studio.