Skip to content

coding-agents

Rysh puts a Claude or Codex agent in every terminal pane

Claude News

Rysh puts an LLM agent behind every terminal pane: typing ##claude into each pane of a three-pane stack gives one window three independent Claude sessions, and ##codex does the same for Codex. The Apache-2.0 CLI is written in Go and documented on Github.

At a glance

  • Each pane cycles four input modes with a double Esc: shell on a real PTY, prompt to the LLM, rysh for multiplexer commands, and chat with no tools.
  • A session runs as a daemon rather than a terminal, so stopping it and starting it again brings both Claude and Codex conversations back unprompted, each resuming the thread it held before.
  • SecretNAT is enabled by default and swaps secrets for tokens in the request body before it leaves the machine, with ##snat get returning the real value locally in the pane.

Terminal multiplexers have been stable ground for two decades, and rysh keeps the surface familiar while changing what sits underneath: the pane is a process the agent lives in, not a window an agent is pasted into. For daily Claude Code users that reads as an attempt to make multi-agent work ordinary rather than exotic, with orchestration handled by the same tool that already handles splits. The daemon model appears to be the load-bearing part.

A tab holds lanes, a lane holds stacks, and ##new grid 2x3x4 spans two tabs at once

Panes stack Zellij-style: one expanded, the rest collapsed to a title bar showing [N/M]. ##new grid 4 stacks four panes in the active lane, ##new grid 3x4 builds three lanes of four, and ##new grid 2x3x4 spreads that across two tabs. ##move pane up, down, left or right reorders a stack or crosses into the next lane, and ##move pane to-lane relocates a live pane.

Each pane cycles four modes with a double Esc, and ##mode list shows what a pane has while ##mode new adds the rest. First run goes through rysh onboard --provider anthropic --key-env ANTHROPIC_API_KEY, which validates the key, writes a project-local rysh.config.yaml and opens the session; Ctrl+S and a digit moves between panes in a stack.

A hidden Claude pane routes messages between agents and refuses stale requests

##board open opens the agents board, ##board post publishes a milestone and ##board reply answers a thread. An agent posts from inside its pane with rysh board post --as $RYSH_PANE without stealing focus, and reads back with rysh board tail --limit 20. ##board agent up starts the board agent; ##board agent visible draws it without moving focus, and ##board agent invisible puts it away while it keeps running.

A fleet is a named group of panes with a board of its own, and ##fleet register epic-07 --board epic-07 opens no panes. The fourth narrated walkthrough, 2:29 long, shows a Claude roadmap agent setting the goal, a Codex fleet-manager splitting it into work orders, two workers building in parallel and the manager sending a correction back before signing off. They ship a browser todo manager with no backend and no build step.

go install needs Go 1.25.3, and rysh and ry are not interchangeable

The source build comes from go install github.com/rysh-ai/rysh-cli-code/cmd/rysh@latest, which lands in GOPATH/bin and requires Go 1.25.3 or newer, the floor declared in the module's go.mod. A prebuilt Apache-2.0 binary installs through the script at packages.rysh.ai/install-rysh.sh, resolving the newest release at run time unless RYSH_VERSION pins one or RYSH_INSTALL_DIR changes the target directory.

The packaged distribution ships a separate binary called ry, which this repository does not produce, and rysh version or ry version tells the two apart. Development against both modules happens in rysh-cli-parent, which carries the Makefile, the Go workspace and CI and wires the CLI to a local checkout of rysh-cli-shared. Internally the workspace, tab, pane and agent actors run on proto.actor over NATS, with terminal emulation on a vt10x fork with scrollback.

Where ConPTY support stands

GOOS=windows GOARCH=amd64 go build ./... succeeds against this source, and the release archive is named cli-only for that reason, but platform.PTYSupported is false on Windows and every session-opening command is refused up front with WSL guidance. The pane-less set still works, including rysh send, exec, prompt, list-sessions, install, eval and doctor against a session running in WSL. No timetable for a ConPTY implementation is given.

Related stories

  1. Oh My Subagents keeps Claude Code teams running
  2. Flaky tests after a 10x speedup, and what Claude got wrong
  3. A Claude Code mod that reverts its own failed ideas
  4. Claude Design can draw with your real components
  5. Claude Code shipped its own TypeScript in npm source maps
  6. 57% of public Claude Code subagents inherit Bash

Comments

No comments yet. Be the first.

Join the conversation

Sign in with Google to leave a comment. Your name and avatar come from your Google profile, and the comment appears after moderation.

We only use your name and avatar from Google. We never store your email address.