Releases: voidharbor/seashell
Release list
SeaShell 0.2.5
Lookout cards were refusing to be answered, and naming the wrong pane and sometimes the wrong
question while they did it. All three are fixed.
Cards no longer claim a picker is showing when they simply could not read the pane. A card
went look-only, printed answer in the pane — it's showing a picker and hid its send buttons
whenever the renderer's screen read came back empty. But an empty read means "could not parse
this", which is not the same claim as "a picker is on screen", and the two shared a branch. A
pane sitting at an ordinary input box would tell you to go deal with a picker that was not
there, and take away the buttons you needed.
Only a positive picker read does that now. Answering an unreadable screen is safe because the
renderer was never the guard: the approve path re-reads the screen from the main process's own
stream at the moment of the click, and refuses a real picker there.
A picker you answered a while ago no longer refuses writes forever. That same click-time
check reads a fixed budget of recent output, which can still contain a picker from earlier in
the session. With the pane quiet, nothing newer arrived to outrank it, so sends into a pane
plainly showing its input box were refused. Picker evidence older than the current screen is
history now. A picker showing right now still refuses, which is the half that matters.
Cards keep up with the pane. A waiting pane was read once per waiting spell and re-read
only after it stopped waiting. When an agent answered one question and immediately asked
another, the pane never stopped waiting, so the second question was never read and the card
went on naming the first. Panes are re-read continuously; only a question that actually
changed costs an update.
Cards show the pane, not an internal id. A card used to head with pane-6-336644. It now
shows what the pane's own header shows, numbered the same way: 2 · Improve README for quick onboarding. The id is still there if you hover.
macOS will complain on first open because the app is not signed with a paid Apple Developer
cert. The one-line fix is in the README.
SeaShell 0.2.4
Lookout is now a section of the window instead of a rail that came and went, and a card stays
answerable until you actually answer it.
Cards no longer expire out from under you. A card used to retire itself once its pane had
emitted 256 bytes since the card appeared. That measured the wrong thing: a pane repaints
constantly while sitting still, and a card is created at the moment claude finishes rendering
its question, so the turn-timing line and the status line landed right after the baseline was
taken. Cards were announcing session moved on and disabling their own Approve button within
seconds, while claude sat there waiting. Output volume is no longer a verdict on anything. A
byte counter that runs backwards still is, because that means the pane restarted and is a
different shell wearing the same name.
Approving got no looser. The checks that matter always ran at click time and still do: the
pane is re-read for a picker screen from the main process's own stream, claude must still own
the tty's foreground process group, and the pane must still be alive before either write.
Answering a question retires it everywhere. A drafted card's question is written by the
triage model; the built-in detector scrapes its own wording off the screen. Two strings, one
question. Denying the drafted card used to retire only the model's wording, so the detector
raised its own card for the same thing minutes later, once the pane was free. Both wordings
now retire together, on approve as well as deny.
Lookout has its own titled section above the file explorer, with a live count and a
divider you can drag to trade height with the file tree. ⇧⌘B hides and shows it, as does the
status-bar badge. It stays put when idle rather than disappearing, because a panel that
vanishes when quiet is indistinguishable from one that is broken.
Drafted cards gained a Go to pane button, which maximizes the pane it belongs to. The draft
box was one row tall with scrolling disabled, which turned any real reply into a peephole; it
is five rows now and can be dragged taller.
macOS will complain on first open because the app is not signed with a paid Apple Developer
cert. The one-line fix is in the README.
SeaShell 0.2.3
Reopening a project now brings your claude sessions back, instead of a row of fresh ones.
Restoring a pane types claude -r <session id> into it, which only works if the project knows
which session was in that pane. Until now that was recorded when you saved, and only if the
session registry happened to be populated at that moment. A project saved on an empty registry
recorded nothing and could never resume, no matter how many times you reopened it.
Two changes fix that:
Saving no longer depends on the session-registry hook. Any pane the registry cannot account
for is matched against claude's own transcripts, which it writes for every session regardless of
what hooks are installed.
Opening resolves what saving missed. A project already on disk with no session ids gets them
worked out at open time, from the newest transcript for each pane's own directory. Old projects
start resuming without being re-saved.
A session already running in another pane is never handed out a second time, so restoring cannot
put two claudes on one conversation. Where ids come from transcripts rather than the registry,
the right sessions come back but which pane each lands in is a best guess: the registry is the
only thing that knows that mapping, and it was not there when those projects were saved. Projects
saved from now on restore exactly.
macOS will complain on first open because the app is not signed with a paid Apple Developer cert.
The one-line fix is in the README.
SeaShell 0.2.2
Lookout cards no longer sit on top of your work, and projects now remember which claude
session each pane was running.
Lookout cards moved to a side rail. A card used to overlay the pane that raised it, which
covered the very output you were trying to read. Cards now stack in a rail beside the panes.
Projects restore claude sessions. Saving a project captures the live session id of every
claude pane, and opening it types claude -r <id> into that pane's shell at the saved cwd.
The command runs where you can see it: if the session no longer resumes, the failed command
sits in a normal shell instead of a blank pane. Session ids are UUID-validated at save, at
load, and again when the command is built, so a hand-edited project file cannot turn restore
into arbitrary shell execution.
The file preview edits. Explicit save, and a conflict guard that refuses to clobber a file
that changed on disk under you.
Two hardenings on the control path. The look-only selector is now enforced in main at both
approve and type time rather than trusted from the renderer, and a control request whose tty
no longer matches its pane is refused instead of landing in whatever now occupies that pane.
The voidharbor all-in-one bundle is now recognized as a Lookout plugin install, so cards
work without installing c-assistant separately.
One build note: the 0.2.1 dmg was packaged from a working tree that still held a local
recording patch, so two unused environment-variable branches (SEASHELL_DEMO_HOME,
SEASHELL_USER_DATA) were compiled into it. Nothing reads them unless those variables are
set, but 0.2.2 is built from a clean tree and contains neither. 0.2.1's assets are unchanged.
macOS will complain on first open because the app is not signed with a paid Apple cert. The
one-line fix is in the README.
SeaShell 0.2.1
Lookout's built-in detector now works inside a real pane.
It never raised a card in SeaShell. Two reasons, both fixed here:
- claude draws its input box borderless inside a pane, and the detector only knew the
bordered form, so every claude pane read as "no input box". - The end-of-turn timing line (
✳ Baked for 45s, and the verb and glyph both vary) stopped
the walk before the message above it was ever collected, so a turn that ended in a
question never carded.
Two false positives went with them: a slash-command echo (❯ /clear) no longer becomes a
phantom question, and a bare ❯ shell prompt no longer cards without claude chrome present.
This is the lane that needs no setup. Smart drafted cards, with Approve / Edit / Deny, still
come from the companion plugin:
/plugin marketplace add voidharbor/claude-plugins
/plugin install c-assistant@voidharbor
macOS will complain on first open because the app is not signed with a paid Apple cert. The
one-line fix is in the README.
SeaShell 0.2.0
SeaShell 0.2.0
Terminal window manager for running several long-lived sessions — agents, dev
servers, plain shells — side by side, with a file explorer that knows what your
panes are talking about.
Downloads
| File | Platform | Notes |
|---|---|---|
SeaShell-0.2.0-universal.dmg |
macOS 11+ (Intel & Apple Silicon) | unsigned — see below |
SeaShell-0.2.0-windows-x64.zip |
Windows 10/11 x64 | experimental — see below |
SeaShell-0.2.0-linux-x86_64.AppImage |
Linux x64 | experimental — built in CI, not yet run on real hardware |
What's new: Lookout
SeaShell now notices when an agent pane stops to ask you something and raises an
approval card in the corner — the question, plus buttons that answer that
pane without leaving the one you're in.
- Works out of the box on every platform: when a claude pane goes idle on a
question, a card appears withContinue/Yes/No/Go to pane. - Smart drafted replies come from the companion plugin:
/plugin marketplace add voidharbor/claude-pluginsthen
/plugin install c-assistant@voidharbor. With it installed, cards arrive with
a one-line reply drafted in your own voice — approve it, edit it, or deny it.
(Thevoidharborbundle plugin carries the commands but not the Lookout
hooks, so smart cards need the standalone c-assistant install. macOS/Linux.) - The safety model in one sentence: external tools can only propose a card —
the only thing that ever submits into a session is your own click, re-checked
at click time against a moved-on or picker-showing pane. - Toggle it in Settings ("Approval cards"); the status-bar 🔭 badge counts
what's waiting.
Installing on macOS
The app is not yet signed with an Apple Developer ID, so Gatekeeper refuses a plain
double-click the first time.
- Open the
.dmg, drag SeaShell to Applications. - Right-click → Open → Open once (or System Settings → Privacy & Security →
"Open Anyway").
Installing on Linux (experimental)
chmod +x SeaShell-*.AppImage && ./SeaShell-*.AppImage
Panes root at your $SHELL, falling back to bash. Live working-directory tracking
(and double-click path reveal for relative paths) needs zsh. Unit-tested in CI;
reports from real machines welcome.
Installing on Windows (experimental)
Unzip anywhere, run SeaShell.exe. SmartScreen warns on unsigned apps — "More
info → Run anyway". Lookout's detector cards work on Windows; the smart-draft
plugin lane is macOS/Linux for now.
Known limitations
- All builds unsigned — expect the OS warnings above
- No session persistence across restarts (saved Projects are layouts, by design)
- Linux and Windows are experimental; macOS is the reference platform
- Cards for picker/selection screens are deliberately look-only — answer those
in the pane itself
SeaShell 0.1.2
SeaShell 0.1.2
Terminal window manager for running several long-lived sessions — agents, dev
servers, plain shells — side by side, with a file explorer that knows what your
panes are talking about.
Downloads
| File | Platform | Notes |
|---|---|---|
SeaShell-0.1.2-universal.dmg |
macOS 11+ (Intel & Apple Silicon) | unsigned — see below |
SeaShell-0.1.2-windows-x64.zip |
Windows 10/11 x64 | experimental — see below |
SeaShell-0.1.2-linux-x86_64.AppImage |
Linux x64 | experimental — built in CI, not yet run on real hardware |
Installing on macOS
The app is not yet signed with an Apple Developer ID, so Gatekeeper refuses a plain
double-click the first time.
- Open the
.dmg, drag SeaShell to Applications. - Right-click → Open → Open once (or System Settings → Privacy & Security →
"Open Anyway").
Installing on Linux (experimental)
chmod +x SeaShell-*.AppImage && ./SeaShell-*.AppImage
Panes root at your $SHELL, falling back to bash. Live working-directory tracking
(and double-click path reveal for relative paths) needs zsh. Unit-tested in CI;
reports from real machines welcome.
Installing on Windows (experimental)
Unzip anywhere, run SeaShell.exe. SmartScreen warns on unsigned apps — "More
info → Run anyway".
Honest status: panes spawn PowerShell via ConPTY and terminal I/O works, but
process cleanup is weaker than on macOS (a detached process can outlive its pane,
uncounted), and there are no per-pane metrics or cwd tracking yet.
What's new since 0.1.1
- First Linux build — new platform layer rooting panes at the user's own shell
- CI on every push across macOS, Linux and Windows; Linux and Windows release
artifacts now built natively on runners instead of cross-built from a Mac - Windows zip is now built and unit-tested on an actual Windows host
Known limitations
- All builds unsigned — expect the OS warnings above
- No session persistence across restarts (saved Projects are layouts, by design)
- Linux and Windows are experimental; macOS is the reference platform
SeaShell 0.1.1
SeaShell 0.1.1
Terminal window manager for running several long-lived sessions — agents, dev
servers, plain shells — side by side, with a file explorer that knows what your
panes are talking about.
Downloads
| File | Platform | Notes |
|---|---|---|
SeaShell-0.1.1-universal.dmg |
macOS 11+ (Intel & Apple Silicon) | unsigned — see below |
SeaShell-0.1.1-windows-x64.zip |
Windows 10/11 x64 | experimental — see below |
No Linux build yet: the PTY layer needs a per-platform native module that cannot be
cross-built from macOS. It will come via CI.
Installing on macOS
The app is not yet signed with an Apple Developer ID, so Gatekeeper will refuse a
plain double-click the first time.
- Open the
.dmgand drag SeaShell to Applications. - Right-click → Open → Open the first time (or: System Settings → Privacy &
Security → "Open Anyway").
Installing on Windows (experimental)
Unzip anywhere and run SeaShell.exe. SmartScreen will warn on an unsigned app —
"More info → Run anyway".
Honest status of the Windows port, so you know what you are testing:
- Panes spawn PowerShell via ConPTY and terminal I/O works.
- Process cleanup is weaker than on macOS. Closing a pane ends ordinary child
processes, but a program that detaches can survive, and SeaShell cannot yet count
or report that on Windows. - No per-pane memory/CPU metrics, and no live working-directory tracking yet.
What's new since 0.1.0
- Panes glow for attention only after genuinely going still — no more constant glow
or repeated pings from idle agents - Saved projects restore the program each pane was running, not just a bare shell
- Selected file's full path shown in the explorer; double-clicking a revealed folder
opens it - Chrome refined: consistent surfaces, fixed low-contrast text
- PTY output loop no longer runs while idle
- Platform layer factored; first Windows build
Known limitations
- Unsigned builds (macOS and Windows) — expect the OS warnings above
- No session persistence across app restarts (saved Projects are layouts, by design)
- Windows: see "honest status" above
SeaShell 0.1.0
A terminal window manager for macOS. Run many shells side by side in one window and keep a file explorer next to them. Built for watching several long-running Claude Code sessions at once.
Pre-alpha. Under active development.
Install
Download SeaShell-0.1.0-universal.dmg below, open it, and drag SeaShell to Applications. Universal build, runs natively on Apple Silicon and Intel.
macOS will refuse to open it the first time
You'll see "cannot be opened because the developer cannot be verified". The app is fine, it just isn't signed with a paid Apple Developer ID. Clear the flag:
xattr -dr com.apple.quarantine /Applications/SeaShell.app
Then open it normally. You only do this once.
Prefer not to use Terminal? System Settings, then Privacy & Security, scroll to the SeaShell message and click Open Anyway. On macOS 15 Sequoia and later that is the only click-through route, since Apple removed the old right-click then Open shortcut.
Requires
macOS 11 or later.