diff --git a/LICENSE b/LICENSE index 7689fe3..dd2f823 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 boo contributors +Copyright (c) 2026 Coder Technologies Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 075e54b..282c5b7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@
-

boo

+
+ _                     .-.
+ | |__   ___   ___     (o o)
+ | '_ \ / _ \ / _ \    | O \
+  | |_) | (_) | (_) |    \   \
+   |_.__/ \___/ \___/      `~~~'
+
Sessions that haunt your terminal. @@ -25,73 +31,23 @@ exactly as a human would see it. ## Features -- Sessions that survive disconnects: detach with `C-a d`, reattach with - `boo attach`. -- A full-screen session manager: `boo ui` lists sessions in a sidebar - with their titles, and renders the focused one next to it. Click to - switch or kill sessions; drag to select and copy text (OSC 52); - scroll the wheel to page through a session's history; create, - rename, and everything else works from the keyboard. -- One command per session, named after your current directory by - default. Sessions are cheap; run one per task. -- Faithful redraws from libghostty terminal state, including SGR styles, - cursor position, scrolling regions, window title, and terminal modes - (alt screen, bracketed paste, mouse reporting, kitty keyboard, ...). -- Screen-style terminal etiquette: the attached client renders inside - your terminal's alternate screen, so attaching never disturbs your - shell scrollback and detaching restores your pre-attach view. - Alternate-screen switches by apps inside a session are tracked in - terminal state and repainted, never passed through raw. -- Agent-friendly automation primitives: `send`, `peek`, `wait`, and - `--json` output, all usable without a terminal. -- Resize propagation end to end (SIGWINCH -> client -> daemon -> - PTY -> application). +- Sessions that survive disconnects: detach with `Ctrl-A d`, reattach with `boo attach`. +- A full-screen session manager: `boo ui` lists sessions in a sidebar. +- Faithful redraws from libghostty terminal state, including SGR styles, cursor position, scrolling regions, window title, and terminal modes. +- Agent-friendly automation primitives: `send`, `peek`, `wait`, and `--json` output, all usable without a TTY. ## Install -### Install script +For Linux and macOS: ```sh curl -fsSL https://raw.githubusercontent.com/coder/boo/main/install.sh | sh ``` -Pre-built binaries for Linux (x86_64, aarch64; fully static) and macOS -(x86_64, aarch64) are published on the -[releases page](https://github.com/coder/boo/releases). Set -`BOO_VERSION` to pin a release and `BOO_INSTALL_DIR` to change the +Pre-built binaries are published on the [releases page](https://github.com/coder/boo/releases). Set `BOO_VERSION` to pin a release and `BOO_INSTALL_DIR` to change the install location (default: `/usr/local/bin` when writable, otherwise `~/.local/bin`). -### Nix - -With [flakes](https://wiki.nixos.org/wiki/Flakes) enabled: - -```sh -nix run github:coder/boo # try it without installing -nix profile add github:coder/boo # install into your profile -``` - -Or add `github:coder/boo` as an input to your own flake and reference -`packages..default` from your NixOS, nix-darwin, or Home -Manager configuration. - -## Building - -Requires [Zig](https://ziglang.org) 0.15.2. - -```sh -zig build # binary in zig-out/bin/boo -zig build test # unit tests -zig build test-integration # end-to-end tests on a real PTY -zig build test-all # everything -``` - -The libghostty dependency is fetched and built from source -automatically (pinned in `build.zig.zon`). - -With Nix, `nix develop` opens a shell with the right Zig version, and -`nix build` builds the package to `./result/bin/boo`. - ## Usage ```sh @@ -100,8 +56,7 @@ boo new work # named session boo new work -d -- make # create detached, running a command boo ui # manage sessions in a full-screen UI (alias: i) boo ls # list sessions -boo attach work # reattach (steals if attached elsewhere) -boo a w # same: alias + unique-prefix matching +boo attach work # reattach (alias: at, a) boo rename work api # rename a session boo kill work # end a session boo kill --all # end every session @@ -113,7 +68,7 @@ falling back to the process id when that name is taken or unusable. Run `boo help` for the full overview, `boo help ` for flags and examples, and `boo help --all` to print every help page at once. -### Key bindings (prefix `C-a`) +### Key bindings (prefix `Ctrl-a`) Bindings follow GNU screen's defaults, including the `C-x` variants (`C-a C-d` detaches just like `C-a d`). @@ -124,15 +79,9 @@ Bindings follow GNU screen's defaults, including the `C-x` variants | `C-a l`, `C-a C-l` | redraw | | `C-a a` | send a literal `C-a` | -`boo ui` adds bindings for switching (`C-a n`/`C-a p`/`C-a C-a`), -browsing the list without attaching (`C-a Up`/`C-a Down`, then -`Enter` to attach or `Esc` to cancel), resizing the sidebar -(`C-a Left`/`C-a Right`, then `Enter` to keep or `Esc` to cancel), -creating (`C-a c`), killing (`C-a k`), and renaming (`C-a r`) -sessions, and going to a session by name (`C-a g`); pressing `C-a` -alone lists them in the bottom bar. See `boo help ui`. +`boo ui` adds additional keybinds for switching, resizing, creating sessions, and killing them. -## Automation +### Automation Everything except `attach` works without a terminal, which makes boo a natural sandbox for scripts and AI agents driving interactive programs. @@ -164,11 +113,22 @@ boo kill build # 5. clean up See `boo help automation` for the full page. -### Environment +## Contributing -- `BOO_DIR`: socket directory (default `$XDG_RUNTIME_DIR/boo`, else - `/tmp/boo-`). -- `BOO_LOG`: daemon log file (daemon logging is otherwise discarded). +Requires [Zig](https://ziglang.org) 0.15.2. + +```sh +zig build # binary in zig-out/bin/boo +zig build test # unit tests +zig build test-integration # end-to-end tests on a real PTY +zig build test-all # everything +``` + +The libghostty dependency is fetched and built from source +automatically (pinned in `build.zig.zon`). + +With Nix, `nix develop` opens a shell with the right Zig version, and +`nix build` builds the package to `./result/bin/boo`. ## Architecture @@ -199,7 +159,6 @@ This is a young project, not a drop-in GNU screen replacement: - The `C-a` prefix is not yet configurable, and pasted bytes containing `0x01` are interpreted as the prefix (GNU screen has the same quirk; `boo ui` is immune thanks to bracketed paste). -- No status line, monitoring, or copy mode yet. - Sessions run with `TERM=xterm-256color`. ## Support @@ -210,19 +169,6 @@ if you have questions, run into bugs, or have a feature request. [Join the Coder Discord](https://discord.gg/coder) to chat with the community. -## Contributing - -Contributions are welcome: - -1. Fork and clone the repository. -2. Make your change and cover it with tests. -3. Run `zig build test-all` and - `zig fmt build.zig build.zig.zon src test`. -4. Open a pull request against `main`. - -CI runs formatting checks, unit tests, and PTY integration tests on -Linux and macOS, plus a Nix build. - ## License [MIT](LICENSE). Ghostty itself is MIT licensed.