From befe629312d9ddf0fea91d1c70f1e4c69afeaf76 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Mon, 15 Jun 2026 19:02:40 +0300 Subject: [PATCH] docs: finalize 0.7.0 release docs --- CHANGELOG.md | 27 +- README.md | 6 +- docs/next/CHANGELOG.md | 36 +- .../src/content/docs/cli-reference.mdx | 8 + .../next/website/src/content/docs/plugins.mdx | 17 +- .../website/src/content/docs/socket-api.mdx | 2 +- website/agent-detection/devin.toml | 86 +++++ website/agent-detection/index.toml | 4 + website/astro.config.mjs | 7 + website/src/content/docs/agents.mdx | 7 +- website/src/content/docs/cli-reference.mdx | 94 ++++- website/src/content/docs/configuration.mdx | 21 +- website/src/content/docs/index.mdx | 10 + website/src/content/docs/install.mdx | 2 +- website/src/content/docs/integrations.mdx | 30 +- website/src/content/docs/marketplace.mdx | 37 ++ website/src/content/docs/plugins.mdx | 294 +++++++++++++++ website/src/content/docs/quick-start.mdx | 2 +- website/src/content/docs/session-state.mdx | 3 +- website/src/content/docs/socket-api.mdx | 348 ++++++++++++++++-- website/src/content/docs/windows-beta.mdx | 3 + 21 files changed, 946 insertions(+), 98 deletions(-) create mode 100644 website/agent-detection/devin.toml create mode 100644 website/src/content/docs/marketplace.mdx create mode 100644 website/src/content/docs/plugins.mdx diff --git a/CHANGELOG.md b/CHANGELOG.md index 19beded0..b6a71aea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,31 @@ ## Unreleased +### Added +- Added local plugin v1 support with `plugin.link/list/unlink/enable/disable`, manifest-declared actions, event hooks, managed plugin panes, link handlers, command logs, keybinding integration, and authoring docs under Preview docs. +- Added `herdr plugin install /[/subdir...]`, `plugin uninstall`, source metadata in `plugin.list`, offline registry fallback, and a human-readable default `plugin list` with `--json` for scripts. +- Added `herdr plugin config-dir ` and automatic plugin config/state directory creation so plugin setup docs can point users at a stable config path. +- Added Devin CLI automatic detection plus `herdr integration install devin` hooks that report session ids for restore with `devin --resume `. Devin state remains screen-detected because Devin hooks do not cover every permission cancellation and user interrupt transition. (#606, #622, thanks @minatoaquaMK2) +- Added supporting plugin host APIs for `pane.current`, `pane.process_info`, `client.window_title.set/clear`, `layout.export/apply`, plugin pane placement, plugin invocation context/env injection, and plugin pane ownership across `pane.move`. +- Added `pane.move` and `herdr pane move` to relocate a running pane into another tab, a new tab, or a new workspace without restarting its terminal process. (#299) +- Tabs containing a zoomed pane are now marked in the tab bar so the zoom state is visible from other tabs. + +### Changed +- Bumped the client/server protocol version to 14 for `pane.move` compatibility. (#299) +- Public workspace, tab, and pane ids are now short stable handles such as `w1`, `w1:t1`, and `w1:p1`; closed tab and pane ids no longer retarget later resources. (#569) + +### Fixed +- Config startup and reload now warn about unknown top-level table sections, including a `[toast]` hint that points to `[ui.toast]`, instead of silently ignoring them. +- Claude Code session restore now accepts real `/clear`, `/resume`, and compacted session identity changes while still ignoring nested `claude -p` startup sessions that inherit the pane environment. (#620) +- Auto-named tab labels now stay compact after closing, moving, or creating tabs while public tab ids remain stable. +- F1-F4 key presses sent as `ESC[11~` through `ESC[14~` now reach pane apps instead of being dropped. (#574) +- Numeric keypad keys sent through the kitty keyboard protocol now enter their digits and operators instead of being dropped. (#570) +- Pane resize keybindings now shrink panes again instead of only being able to grow them. (#562) +- Windows pane cursor rendering is now stable instead of showing a misplaced or flickering cursor. (#556) +- Tab identity is now preserved across restored sessions. +- Idle panes now poll their PTY less frequently, reducing CPU use while sessions are inactive. +- Captured pane URL clicks, including plugin link handlers, now use Ctrl-click on macOS too because captured terminal mouse reports do not expose Cmd-click separately from plain click. (#307) + ## [0.6.10] - 2026-06-11 This is a hotfix release for v0.6.9. See the v0.6.9 notes for the full feature release. @@ -652,7 +677,7 @@ This is a hotfix for v0.6.3. See the v0.6.3 notes for the full feature release. ### Added - Added a local Unix socket API for controlling running herdr sessions, including workspace and pane management, pane reads, text/key input, pane splitting, and output waits. - Added event subscriptions over the socket API for workspace and pane lifecycle events, pane output matches, and agent state changes. -- Added CLI wrappers on top of the socket API with `herdr workspace ...`, `herdr pane ...`, and `herdr wait ...`, using compact public ids like `1` and `1-2` for scripting and agent orchestration. +- Added CLI wrappers on top of the socket API with `herdr workspace ...`, `herdr pane ...`, and `herdr wait ...`, using compact public ids for scripting and agent orchestration. - Added a settings popup with mouse support for changing themes, sound alerts, and toast notifications from inside herdr. - Added 9 built-in themes: catppuccin, tokyo night, dracula, nord, gruvbox, one dark, solarized, kanagawa, and rosΓ© pine. - Added interactive pane scrollbars, manual sidebar resizing, and upstream git ahead/behind indicators in the workspace sidebar. diff --git a/README.md b/README.md index cf0d6c0c..9645a01b 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ states: - πŸ”΅ **done** β€” work finished, you have not looked at it yet - 🟒 **idle** β€” done and seen -detection works by reading foreground process and terminal output. zero config, no hooks required. official claude code, codex, github copilot cli, droid, kimi code cli, qodercli, and cursor agent cli integrations provide session restore identity; pi, omp, opencode, kilo code cli, hermes, and custom socket integrations can report their own state. +detection works by reading foreground process and terminal output. zero config, no hooks required. official claude code, codex, github copilot cli, devin, droid, kimi code cli, qodercli, and cursor agent cli integrations provide session restore identity; pi, omp, kimi code cli, opencode, kilo code cli, hermes, and custom socket integrations can report their own state. ## lives in your terminal @@ -187,6 +187,7 @@ automatic detection works out of the box. process name matching plus terminal ou | [grok cli](https://x.ai/grok) | βœ“ | βœ“ | βœ“ | | [hermes agent](https://github.com/NousResearch/hermes-agent) | βœ“ | βœ“ | βœ“ | | [kilo code cli](https://kilo.ai/) | βœ“ | βœ“ | βœ“ | +| [devin cli](https://docs.devin.ai/cli) | βœ“ | βœ“ | βœ“ | | cursor agent | βœ“ | βœ“ | βœ“ | | antigravity cli | βœ“ | βœ“ | βœ“ | | kimi code cli | βœ“ | βœ“ | βœ“ | @@ -200,7 +201,7 @@ for agents outside the built-in list, herdr still works as a terminal multiplexe ### direct integrations -official integrations have two roles. claude code, codex, github copilot cli, droid, kimi code cli, qodercli, and cursor agent cli report session identity for native restore, while their state still comes from screen detection. pi, opencode, kilo code cli, and hermes report both semantic state and session identity. omp reports semantic state without native session restore. install with: +official integrations have two roles. claude code, codex, github copilot cli, devin, droid, qodercli, and cursor agent cli report session identity for native restore, while their state still comes from screen detection. pi, kimi code cli, opencode, kilo code cli, and hermes report both semantic state and session identity. omp reports semantic state without native session restore. install with: ```bash herdr integration install pi @@ -208,6 +209,7 @@ herdr integration install omp herdr integration install claude herdr integration install codex herdr integration install copilot +herdr integration install devin herdr integration install droid herdr integration install kimi herdr integration install opencode diff --git a/docs/next/CHANGELOG.md b/docs/next/CHANGELOG.md index adec3e27..d50c2a61 100644 --- a/docs/next/CHANGELOG.md +++ b/docs/next/CHANGELOG.md @@ -3,33 +3,16 @@ ## Unreleased ### Added -- Added local plugin v1 support with `plugin.link/list/unlink/enable/disable`, - manifest-declared actions, event hooks, managed plugin panes, link handlers, - command logs, keybinding integration, and authoring docs under Preview docs. -- Added `herdr plugin install /[/subdir...]`, `plugin uninstall`, - source metadata in `plugin.list`, offline registry fallback, and a - human-readable default `plugin list` with `--json` for scripts. -- Added `herdr plugin config-dir ` and automatic plugin config/state - directory creation so plugin setup docs can point users at a stable config - path. -- Added Devin CLI automatic detection plus `herdr integration install devin` - hooks that report session ids for restore with `devin --resume `. - Devin state remains screen-detected because Devin hooks do not cover every - permission cancellation and user interrupt transition. -- Added supporting plugin host APIs for `pane.current`, `pane.process_info`, - `client.window_title.set/clear`, `layout.export/apply`, plugin pane placement, - plugin invocation context/env injection, and plugin pane ownership across - `pane.move`. +- Added local plugin v1 support with `plugin.link/list/unlink/enable/disable`, manifest-declared actions, event hooks, managed plugin panes, link handlers, command logs, keybinding integration, and authoring docs under Preview docs. +- Added `herdr plugin install /[/subdir...]`, `plugin uninstall`, source metadata in `plugin.list`, offline registry fallback, and a human-readable default `plugin list` with `--json` for scripts. +- Added `herdr plugin config-dir ` and automatic plugin config/state directory creation so plugin setup docs can point users at a stable config path. +- Added Devin CLI automatic detection plus `herdr integration install devin` hooks that report session ids for restore with `devin --resume `. Devin state remains screen-detected because Devin hooks do not cover every permission cancellation and user interrupt transition. (#606, #622, thanks @minatoaquaMK2) +- Added supporting plugin host APIs for `pane.current`, `pane.process_info`, `client.window_title.set/clear`, `layout.export/apply`, plugin pane placement, plugin invocation context/env injection, and plugin pane ownership across `pane.move`. - Added `pane.move` and `herdr pane move` to relocate a running pane into another tab, a new tab, or a new workspace without restarting its terminal process. (#299) +- Tabs containing a zoomed pane are now marked in the tab bar so the zoom state is visible from other tabs. ### Changed - Bumped the client/server protocol version to 14 for `pane.move` compatibility. (#299) -- Preview releases are now published only by manual maintainer workflow dispatch, not on a scheduled cron. -- Plugin runtime config directories now use stable, readable plugin-id paths - instead of checkout hashes; existing legacy config directories are copied into - the new location when first seen. -- Plugin manifests must now declare `min_herdr_version`; install and link fail - when a plugin requires a newer Herdr binary. - Public workspace, tab, and pane ids are now short stable handles such as `w1`, `w1:t1`, and `w1:p1`; closed tab and pane ids no longer retarget later resources. (#569) ### Fixed @@ -39,6 +22,11 @@ - Auto-named tab labels now stay compact after closing, moving, or creating tabs while public tab ids remain stable. - F1-F4 key presses sent as `ESC[11~` through `ESC[14~` now reach pane apps instead of being dropped. (#574) - Numeric keypad keys sent through the kitty keyboard protocol now enter their digits and operators instead of being dropped. (#570) +- Pane resize keybindings now shrink panes again instead of only being able to grow them. (#562) +- Windows pane cursor rendering is now stable instead of showing a misplaced or flickering cursor. (#556) +- Tab identity is now preserved across restored sessions. +- Idle panes now poll their PTY less frequently, reducing CPU use while sessions are inactive. +- Captured pane URL clicks, including plugin link handlers, now use Ctrl-click on macOS too because captured terminal mouse reports do not expose Cmd-click separately from plain click. (#307) ## [0.6.10] - 2026-06-11 @@ -58,7 +46,7 @@ This is a hotfix release for v0.6.9. See the v0.6.9 notes for the full feature r - Numeric keypad keys that send VT100 application-keypad escape sequences now enter their digits and operators instead of being dropped. (#493) - Codex panes now stay marked working when the live status header uses reasoning-summary text such as `Investigating code output` instead of the literal `Working` label. (#501) - Codex blocker detection now ignores stale prompt text outside the live prompt region, reducing false blocked states from old scrollback. -- Pane URL clicks, including plugin link handlers and native URL opening, now use Ctrl-click on macOS too because captured terminal mouse reports do not expose Cmd-click separately from plain click. (#307) +- Native pane URL clicks now use Cmd-click on macOS and Ctrl-click on other platforms. (#307) - Worktree open, create, and remove actions now work from bare repositories instead of assuming a normal checkout. (#497) - Pane mouse handling no longer sends empty PTY writes for mouse events that produce no terminal input. (#496) - Pane output now renders flag emoji and other multi-codepoint grapheme clusters as complete symbols instead of blank cells. (#243) diff --git a/docs/next/website/src/content/docs/cli-reference.mdx b/docs/next/website/src/content/docs/cli-reference.mdx index 99f1faae..f1079995 100644 --- a/docs/next/website/src/content/docs/cli-reference.mdx +++ b/docs/next/website/src/content/docs/cli-reference.mdx @@ -302,6 +302,14 @@ herdr plugin unlink `plugin link` accepts a plugin directory containing `herdr-plugin.toml` or a direct manifest path. It is still the right command while authoring or testing a plugin from a local checkout. `plugin unlink` unregisters the plugin and leaves files alone. `plugin uninstall` unregisters a plugin and also removes Herdr-managed GitHub checkout files. For GitHub installs, uninstall accepts either the plugin id or the same `owner/repo[/subdir...]` shorthand used by install. Actions, event hooks, panes, and link handlers are declared in the manifest; runtime action registration is not part of v1. +Config directory: + +```bash +herdr plugin config-dir +``` + +`plugin config-dir` prints the plugin's config directory, creating it (and seeding it from legacy plugin config locations when present) if needed. Use it in setup docs and shell scripts to point users at a stable path for `.env` files and other user-editable config, separate from the managed plugin checkout. + Actions: ```bash diff --git a/docs/next/website/src/content/docs/plugins.mdx b/docs/next/website/src/content/docs/plugins.mdx index 5dcd50ab..09d89bc0 100644 --- a/docs/next/website/src/content/docs/plugins.mdx +++ b/docs/next/website/src/content/docs/plugins.mdx @@ -21,12 +21,13 @@ manifest, injects runtime context, starts the declared commands, and records logs. The commands call back into Herdr through the CLI or socket when they need to do more work. -Most plugins should call Herdr through `HERDR_BIN_PATH`, which points at the -running Herdr binary. That keeps plugins portable across Unix sockets and -Windows named pipes. Use the [CLI reference](/docs/cli-reference/) as the -catalog of commands a plugin can call. Use the -[socket API](/docs/socket-api/) when you want to send raw JSON requests -yourself. +There is no separate plugin SDK or restricted command set. The entire Herdr CLI +is the plugin API: every command in the [CLI reference](/docs/cli-reference/) is +available to a plugin, and anything you can run as `herdr ...` yourself a plugin +can run too. Most plugins should call Herdr through `HERDR_BIN_PATH`, which +points at the running Herdr binary. That keeps plugins portable across Unix +sockets and Windows named pipes. Use the [socket API](/docs/socket-api/) when +you want to send raw JSON requests yourself. Runtime action registration and native non-terminal plugin UI are not part of plugin v1. Actions, event hooks, panes, and link handlers are all declared in @@ -42,7 +43,7 @@ Herdr can run. id = "example.layout" name = "Layout" version = "0.1.0" -min_herdr_version = "0.6.10" +min_herdr_version = "0.7.0" description = "Apply project layouts" platforms = ["linux", "macos", "windows"] @@ -112,7 +113,7 @@ my-plugin/ id = "example.workspace-tools" name = "Workspace Tools" version = "0.1.0" -min_herdr_version = "0.6.10" +min_herdr_version = "0.7.0" description = "Small workspace helpers" platforms = ["linux", "macos", "windows"] diff --git a/docs/next/website/src/content/docs/socket-api.mdx b/docs/next/website/src/content/docs/socket-api.mdx index 88280441..74697fd8 100644 --- a/docs/next/website/src/content/docs/socket-api.mdx +++ b/docs/next/website/src/content/docs/socket-api.mdx @@ -329,7 +329,7 @@ manifest path. The manifest shape is: id = "example.worktree-bootstrap" name = "Worktree Bootstrap" version = "0.1.0" -min_herdr_version = "0.6.10" +min_herdr_version = "0.7.0" description = "Prepare new worktrees" platforms = ["linux", "macos", "windows"] diff --git a/website/agent-detection/devin.toml b/website/agent-detection/devin.toml new file mode 100644 index 00000000..c9564f7c --- /dev/null +++ b/website/agent-detection/devin.toml @@ -0,0 +1,86 @@ +id = "devin" +version = "2026.06.15.1" +min_engine_version = 1 +updated_at = "2026-06-15T00:00:00Z" +aliases = ["devin-cli", "devin cli"] + +[[rules]] +id = "workspace_trust_prompt" +state = "blocked" +priority = 300 +region = "bottom_non_empty_lines(8)" +visible_blocker = true +contains = [ + "do you trust the authors of this directory?", + "with untrusted content.", + "yes, trust ", +] + +[[rules]] +id = "permission_prompt" +state = "blocked" +priority = 290 +region = "bottom_non_empty_lines(8)" +visible_blocker = true +contains = ["approve once", "select", "confirm", "esc cancel"] + +[[rules]] +id = "running_tools_footer" +state = "working" +priority = 200 +region = "bottom_non_empty_lines(8)" +visible_working = true +contains = ["running tools", "esc to interrupt"] +not = [ + { contains = ["approve once", "esc cancel"] }, +] + +[[rules]] +id = "guide_while_working" +state = "working" +priority = 190 +region = "bottom_non_empty_lines(6)" +visible_working = true +contains = ["guide devin while it works"] +not = [ + { contains = ["approve once", "esc cancel"] }, +] + +[[rules]] +id = "tool_reading_timeout" +state = "working" +priority = 180 +region = "bottom_non_empty_lines(8)" +visible_working = true +contains = ["reading shell ", "timeout:"] +not = [ + { contains = ["approve once", "esc cancel"] }, +] + +[[rules]] +id = "welcome_prompt_footer" +state = "idle" +priority = 120 +region = "bottom_non_empty_lines(8)" +visible_idle = true +contains = ["ask devin to build", "features, fix bugs", "your code"] +line_regex = ['^\s*❭ Ask Devin to build'] +not = [ + { contains = ["approve once", "esc cancel"] }, + { contains = ["running tools", "esc to interrupt"] }, + { contains = ["guide devin while it works"] }, +] + +[[rules]] +id = "live_prompt_footer" +state = "idle" +priority = 100 +region = "bottom_non_empty_lines(6)" +visible_idle = true +contains = ["context:"] +line_regex = ['^\s*❭'] +not = [ + { contains = ["approve once", "esc cancel"] }, + { contains = ["running tools", "esc to interrupt"] }, + { contains = ["guide devin while it works"] }, +] diff --git a/website/agent-detection/index.toml b/website/agent-detection/index.toml index f219cc1d..7c6fbfa8 100644 --- a/website/agent-detection/index.toml +++ b/website/agent-detection/index.toml @@ -24,6 +24,10 @@ path = "codex.toml" id = "cursor" path = "cursor.toml" +[[agents]] +id = "devin" +path = "devin.toml" + [[agents]] id = "droid" path = "droid.toml" diff --git a/website/astro.config.mjs b/website/astro.config.mjs index 75d041ad..1f30a8dc 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -119,6 +119,13 @@ export default defineConfig({ { label: 'Configuration', slug: 'docs/configuration' }, ], }, + { + label: 'Plugins', + items: [ + { label: 'Plugins', slug: 'docs/plugins' }, + { label: 'Marketplace', slug: 'docs/marketplace' }, + ], + }, { label: 'Reference', items: [ diff --git a/website/src/content/docs/agents.mdx b/website/src/content/docs/agents.mdx index ae45d26b..3215f64f 100644 --- a/website/src/content/docs/agents.mdx +++ b/website/src/content/docs/agents.mdx @@ -14,6 +14,7 @@ Automatic detection works out of the box for common coding agents. The important | Pi | lifecycle hooks when installed; otherwise screen manifest | state and session | | OMP | lifecycle hooks when installed | state | | GitHub Copilot CLI | screen manifest | session | +| Devin CLI | screen manifest | session | | Kimi Code CLI | lifecycle hooks when installed; otherwise screen manifest | state and session | | Hermes Agent | lifecycle hooks when installed; otherwise screen manifest | state and session | | Qoder CLI | screen manifest | session | @@ -99,7 +100,7 @@ Each supported agent has its own integration name and behavior. See [Integration You can rename an agent target for display: ```bash -herdr agent rename 1-1 reviewer +herdr agent rename w1:p1 reviewer herdr agent rename reviewer --clear ``` @@ -110,7 +111,7 @@ Targets accept terminal IDs, unique agent names, detected or reported agent labe Integrations can report a visual status label without changing semantic state. ```bash -herdr pane report-agent 1-1 \ +herdr pane report-agent w1:p1 \ --source custom:indexer \ --agent docs-bot \ --state working \ @@ -132,7 +133,7 @@ herdr agent start reviewer --cwd ~/project --split right -- pi You can place that agent in a specific workspace or tab: ```bash -herdr agent start docs --workspace 1 --tab 1-1 -- claude +herdr agent start docs --workspace w1 --tab w1:t1 -- claude ``` Use `herdr pane ...` commands for ordinary terminals, servers, tests, shells, and low-level terminal input. For example, use `pane split` and `pane run` for `cargo test`, not `agent start`, unless that terminal is intentionally being treated as an agent target. diff --git a/website/src/content/docs/cli-reference.mdx b/website/src/content/docs/cli-reference.mdx index 32baa746..74320f8a 100644 --- a/website/src/content/docs/cli-reference.mdx +++ b/website/src/content/docs/cli-reference.mdx @@ -69,7 +69,7 @@ Use `default` as the session name when you need to stop the default session expl ```bash herdr workspace list -herdr workspace create [--cwd PATH] [--label TEXT] [--focus] [--no-focus] +herdr workspace create [--cwd PATH] [--label TEXT] [--env KEY=VALUE] [--focus] [--no-focus] herdr workspace get herdr workspace focus herdr workspace rename