diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f336838..a94158be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ ## Unreleased +### Added +- Added optional Nix flake support for building, running, installing, and developing Herdr with Nix. (#208, #221, #264) +- Added `terminal.new_cwd` to choose whether new panes, tabs, and workspaces follow the source pane/workspace, start in `$HOME`, use Herdr's process directory, or use a fixed path. +- Added `herdr integration install omp` for OMP's `.omp` extension directory. The extension reports OMP pane state through Herdr's socket API without relying on native `omp` process detection. +- Added CLI and socket API support for Git worktrees with `herdr worktree list/create/open/remove`, optional worktree provenance on workspace responses, and client/server protocol version 10. + +### Fixed +- GitHub Copilot CLI sessions now use tested terminal heuristics for approval prompts, freeform input, plan review, and thinking states in the Agents panel. (#232, #256, thanks @LaneBirmingham) +- Kiro approval prompts are now detected as blocked in the Agents panel. (#255) +- Workspace labels now follow the live pane working directory after directory changes. +- Remote clients using local keybindings no longer show stale server keybinding warnings from the remote host. + ## [0.6.1] - 2026-05-22 ### Added diff --git a/README.md b/README.md index 60921cf5..cf99dc28 100644 --- a/README.md +++ b/README.md @@ -182,18 +182,20 @@ automatic detection works out of the box. process name matching plus terminal ou | cursor agent | ✓ | ✓ | ✓ | | antigravity cli | ✓ | ✓ | ✓ | | kimi code cli | ✓ | ✓ | ✓ | +| [github copilot cli](https://github.com/features/copilot) | ✓ | ✓ | ✓ | | [kiro cli](https://kiro.dev/docs/cli/) | ✓ | ✓ | — | -detected but not fully tested: gemini cli, cline, github copilot cli. +detected but not fully tested: gemini cli, cline. for agents outside the built-in list, herdr still works as a terminal multiplexer with workspaces, panes, and tiling. custom integrations can report agent labels over the socket api. see the [socket api docs](https://herdr.dev/docs/socket-api/). ### direct integrations -the built-in pi, claude code, codex, opencode, and hermes integrations forward semantic state to herdr over the socket api. install with: +the built-in pi, omp, claude code, codex, opencode, and hermes integrations forward semantic state to herdr over the socket api. install with: ```bash herdr integration install pi +herdr integration install omp herdr integration install claude herdr integration install codex herdr integration install opencode @@ -276,7 +278,7 @@ full logging and environment variable details: [configuration docs](https://herd ## docs - [configuration](https://herdr.dev/docs/configuration/) — keybindings, themes, notifications, environment variables -- [integrations](https://herdr.dev/docs/integrations/) — pi, claude code, codex, opencode, hermes integrations +- [integrations](https://herdr.dev/docs/integrations/) — pi, omp, claude code, codex, opencode, hermes integrations - [`SKILL.md`](./SKILL.md) — reusable agent skill - [socket api](https://herdr.dev/docs/socket-api/) — socket protocol and cli reference @@ -293,6 +295,22 @@ cargo build --release ./target/release/herdr ``` +## nix + +Herdr provides optional Nix flake outputs for users who already use Nix. The flake builds Herdr from source. + +```bash +nix run github:ogulcancelik/herdr/v0.x.y +nix build github:ogulcancelik/herdr/v0.x.y +nix develop github:ogulcancelik/herdr/v0.x.y +``` + +Replace `v0.x.y` with the latest release tag. You can omit the tag to track `master`, but release tags are recommended for normal installs. + +The flake exposes `packages..default`, `apps..default`, `devShells..default`, and `overlays.default`. + +Update through the same Nix workflow you used to install Herdr. For profile installs, run `nix profile list` and then `nix profile upgrade `. For flake inputs, run `nix flake update herdr` in your own flake and rebuild. + ## testing ```bash diff --git a/docs/next/CHANGELOG.md b/docs/next/CHANGELOG.md index de3ada07..a94158be 100644 --- a/docs/next/CHANGELOG.md +++ b/docs/next/CHANGELOG.md @@ -9,6 +9,9 @@ - Added CLI and socket API support for Git worktrees with `herdr worktree list/create/open/remove`, optional worktree provenance on workspace responses, and client/server protocol version 10. ### Fixed +- GitHub Copilot CLI sessions now use tested terminal heuristics for approval prompts, freeform input, plan review, and thinking states in the Agents panel. (#232, #256, thanks @LaneBirmingham) +- Kiro approval prompts are now detected as blocked in the Agents panel. (#255) +- Workspace labels now follow the live pane working directory after directory changes. - Remote clients using local keybindings no longer show stale server keybinding warnings from the remote host. ## [0.6.1] - 2026-05-22 diff --git a/website/src/content/docs/agents.mdx b/website/src/content/docs/agents.mdx index 559af389..d6b3f7f2 100644 --- a/website/src/content/docs/agents.mdx +++ b/website/src/content/docs/agents.mdx @@ -53,6 +53,7 @@ Install integrations for agents that expose hooks or plugins: ```bash herdr integration install pi +herdr integration install omp herdr integration install claude herdr integration install codex herdr integration install opencode diff --git a/website/src/content/docs/cli-reference.mdx b/website/src/content/docs/cli-reference.mdx index 6f10add3..2038ec6f 100644 --- a/website/src/content/docs/cli-reference.mdx +++ b/website/src/content/docs/cli-reference.mdx @@ -66,6 +66,19 @@ Create a workspace without stealing focus: herdr workspace create --cwd ~/project --label api --no-focus ``` +## Worktrees + +```bash +herdr worktree list [--workspace ID | --cwd PATH] [--json] +herdr worktree create [--workspace ID | --cwd PATH] [--branch NAME] [--base REF] [--path PATH] [--label TEXT] [--focus] [--no-focus] [--json] +herdr worktree open [--workspace ID | --cwd PATH] (--path PATH | --branch NAME) [--label TEXT] [--focus] [--no-focus] [--json] +herdr worktree remove --workspace ID [--force] [--json] +``` + +Worktrees are normal Herdr workspaces with Git checkout provenance. `worktree create` creates a Git worktree checkout, opens it as a workspace, and groups it with the parent repo workspace. Without `--path`, Herdr creates the checkout under `//`. + +`workspace close` closes Herdr state only. `worktree remove` is the explicit checkout deletion path; it runs `git worktree remove`, never deletes the branch, and requires `--force` when Git refuses a dirty checkout. + ## Tabs ```bash @@ -165,11 +178,13 @@ Use `wait output` for normal commands and servers. Use `wait agent-status` for c ```bash herdr integration install pi +herdr integration install omp herdr integration install claude herdr integration install codex herdr integration install opencode herdr integration install hermes herdr integration uninstall pi +herdr integration uninstall omp herdr integration uninstall claude herdr integration uninstall codex herdr integration uninstall opencode diff --git a/website/src/content/docs/configuration.mdx b/website/src/content/docs/configuration.mdx index 72dc610c..2fe30027 100644 --- a/website/src/content/docs/configuration.mdx +++ b/website/src/content/docs/configuration.mdx @@ -45,7 +45,7 @@ You can also open the global menu in Herdr and choose `reload config`. Reload applies most UI settings without restarting panes. Startup-only settings still need a restart. -## Default shell +## Terminal defaults Set the executable Herdr uses for newly created interactive panes: @@ -56,6 +56,15 @@ default_shell = "nu" When unset or empty, Herdr uses `$SHELL`, then `/bin/sh`. This is an executable name or path, not a shell command line. Existing panes keep their current shell until they are recreated. Command panes still run through `/bin/sh -c`; detached custom command keybindings use Herdr's existing `/bin/sh -lc` path. +Set the working directory policy for new panes, tabs, and workspaces: + +```toml +[terminal] +new_cwd = "follow" +``` + +`new_cwd = "follow"` keeps the default behavior and inherits the source pane or workspace. Use `"home"` to always start in `$HOME`, `"current"` to use Herdr's process directory, or a fixed path such as `"~/Projects"`. Explicit `--cwd` values from the CLI or socket API still take precedence. + ## Worktrees Set the root directory Herdr uses for Git worktree checkouts created from the sidebar: @@ -65,7 +74,7 @@ Set the root directory Herdr uses for Git worktree checkouts created from the si directory = "~/.herdr/worktrees" ``` -Herdr creates checkouts under `//`. For sibling-style checkouts, set this to a directory such as `~/Projects/herdr-worktrees`. +Herdr creates checkouts under `//`. For sibling-style checkouts, set this to a directory such as `~/Projects/herdr-worktrees`. Relative values are resolved to an absolute path when the app applies the config. Worktree actions are available from Git workspace rows. `New worktree` creates a branch and checkout, opens it as a new Herdr workspace, and groups it under the source workspace. `Open worktree...` lists existing Git worktree checkouts for that repo; choosing an already-open checkout focuses it, and choosing a closed checkout opens it in the same group. diff --git a/website/src/content/docs/install.mdx b/website/src/content/docs/install.mdx index dda2dc27..9852b0f1 100644 --- a/website/src/content/docs/install.mdx +++ b/website/src/content/docs/install.mdx @@ -33,6 +33,37 @@ Herdr checks for new releases and notifies you in the app. You can update manual herdr update ``` +## Install with Nix + +If you already use Nix, Herdr provides a flake that builds Herdr from source: + +```bash +nix run github:ogulcancelik/herdr/v0.x.y +nix build github:ogulcancelik/herdr/v0.x.y +nix profile install github:ogulcancelik/herdr/v0.x.y +``` + +Replace `v0.x.y` with the latest release tag. You can omit the tag to track `master`, but release tags are recommended for normal installs. + +The flake also exposes a development shell: + +```bash +nix develop github:ogulcancelik/herdr +``` + +Update through the same Nix workflow you used to install Herdr. For a profile install, list your profile entries and upgrade the Herdr entry: + +```bash +nix profile list +nix profile upgrade +``` + +If Herdr is an input in your own flake, update that input and rebuild your system, Home Manager, or development environment: + +```bash +nix flake update herdr +``` + ## Download manually You can also download a binary from [GitHub releases](https://github.com/ogulcancelik/herdr/releases). diff --git a/website/src/content/docs/integrations.mdx b/website/src/content/docs/integrations.mdx index 18b759bc..8c6443b8 100644 --- a/website/src/content/docs/integrations.mdx +++ b/website/src/content/docs/integrations.mdx @@ -1,6 +1,6 @@ --- title: Integrations -description: Install Herdr integrations for Pi, Claude Code, Codex, OpenCode, and Hermes Agent. +description: Install Herdr integrations for Pi, OMP, Claude Code, Codex, OpenCode, and Hermes Agent. --- Herdr detects supported agents automatically. Integrations make that detection more precise by reporting semantic state directly to Herdr. @@ -13,6 +13,7 @@ Open settings inside Herdr and use the integrations tab to install recommended i ```bash herdr integration install pi +herdr integration install omp herdr integration install claude herdr integration install codex herdr integration install opencode @@ -23,6 +24,7 @@ herdr integration install hermes ```bash herdr integration uninstall pi +herdr integration uninstall omp herdr integration uninstall claude herdr integration uninstall codex herdr integration uninstall opencode @@ -57,6 +59,24 @@ Herdr writes the bundled extension to: If `PI_CODING_AGENT_DIR` is set, Herdr writes to `$PI_CODING_AGENT_DIR/extensions/herdr-agent-state.ts` instead. The extensions directory must already exist. Uninstall removes only that extension file. +## OMP + +Install the OMP integration: + +```bash +herdr integration install omp +``` + +Herdr writes the bundled extension to: + +```text +~/.omp/agent/extensions/herdr-omp-agent-state.ts +``` + +If `PI_CODING_AGENT_DIR` is set, Herdr writes to `$PI_CODING_AGENT_DIR/extensions/herdr-omp-agent-state.ts` instead. The extensions directory must already exist. Uninstall removes only that extension file. + +The OMP integration reports `omp` as the agent label through Herdr's socket API. It does not require native process detection for the `omp` executable. + ## Claude Code Install the Claude Code hook: diff --git a/website/src/content/docs/socket-api.mdx b/website/src/content/docs/socket-api.mdx index c4de1b3d..4d32817e 100644 --- a/website/src/content/docs/socket-api.mdx +++ b/website/src/content/docs/socket-api.mdx @@ -71,6 +71,7 @@ Raw socket method names use dot notation: | --- | --- | | Server | `ping`, `server.stop`, `server.reload_config` | | Workspace | `workspace.create`, `workspace.list`, `workspace.get`, `workspace.focus`, `workspace.rename`, `workspace.close` | +| Worktree | `worktree.list`, `worktree.create`, `worktree.open`, `worktree.remove` | | Tab | `tab.create`, `tab.list`, `tab.get`, `tab.focus`, `tab.rename`, `tab.close` | | Pane | `pane.split`, `pane.list`, `pane.get`, `pane.rename`, `pane.send_text`, `pane.send_keys`, `pane.send_input`, `pane.read`, `pane.report_agent`, `pane.clear_agent_authority`, `pane.release_agent`, `pane.close`, `pane.wait_for_output` | | Agent | `agent.list`, `agent.get`, `agent.read`, `agent.send`, `agent.rename`, `agent.focus`, `agent.start` | @@ -79,6 +80,28 @@ Raw socket method names use dot notation: Some CLI commands are conveniences around these methods. For example, `herdr agent wait` resolves an agent target and then subscribes to pane agent state events. +Worktree methods manage Git checkouts as Herdr workspaces. `worktree.create` creates a checkout and returns the new `workspace`, `tab`, `root_pane`, and `worktree` records. `worktree.open` opens an existing checkout or returns the already-open workspace. `worktree.remove` runs `git worktree remove` against a linked child workspace and never deletes the branch. + +Create a worktree from a source workspace: + +```json +{"id":"req_1","method":"worktree.create","params":{"workspace_id":"1","branch":"worktree/api","focus":false}} +``` + +Open an existing checkout: + +```json +{"id":"req_2","method":"worktree.open","params":{"workspace_id":"1","branch":"worktree/api","focus":true}} +``` + +Remove a linked checkout: + +```json +{"id":"req_3","method":"worktree.remove","params":{"workspace_id":"2","force":false}} +``` + +Use at most one of `workspace_id` or `cwd` for `worktree.list`, `worktree.create`, and `worktree.open`; omit both to use the active workspace. Use exactly one of `path` or `branch` for `worktree.open`. Raw socket `cwd` and `path` values must be absolute; the CLI expands relative `--cwd` and `--path` values before sending requests. Workspace responses include optional `worktree` provenance when a workspace belongs to a Herdr worktree group. Worktree commands can emit `workspace.updated` when an existing workspace gains or changes worktree provenance. + ## Socket transport Herdr uses newline-delimited JSON over a Unix domain socket. @@ -158,6 +181,8 @@ Subscribe to events when you need a long-lived stream: The first response acknowledges the subscription. Later lines are pushed events. +Workspace event subscriptions include `workspace.created`, `workspace.updated`, `workspace.renamed`, `workspace.closed`, and `workspace.focused`. + Use `events.wait` when you want one matching event and then a response. ## Reading panes