herdr-win
An upstream-friendly Herdr distribution for developers who need extended capabilities today: multi-agent extensions, terminal experience improvements, better OpenCode integration, and first-class Windows support.

Despite its historical name, herdr-win is not Windows-only. It is an unofficial, upstream-first extended distribution that makes practical bug fixes and extensions available today through a small, reviewable patch queue designed for upstream adoption. Its strongest focus areas are multi-agent workflows, terminal experience, OpenCode reliability, and Windows support. It complements upstream Herdr while the executable, command, configuration, state, sessions, sockets, and protocol remain herdr.
Every published release contains matching Windows, Linux, and macOS binaries built from one reviewed stable Herdr release and one ordered patch queue. Releases are normal stable GitHub releases, and the integrated update paths reject prerelease feeds.
> [!NOTE]
> herdr-win is developed and validated with Herdr Sandbox, a sister project that provides disposable native Windows environments for coding agents. It is not a runtime dependency.
What differs from upstream · Install · First use · Everyday use · Troubleshooting · Project reference
See it in action
https://github.com/user-attachments/assets/b6c02367-683b-4a1f-94e6-b662149d89d9
Detach from a Windows-hosted Herdr session, reconnect from another terminal, and continue the same OpenCode session without RDP.
Engineering approach
- Upstream-first and contribution-oriented: each behavior has one responsibility-owned mailbox designed for focused upstream review and leaves the queue when equivalent support ships upstream.
- One coherent distribution: all supported clients, servers, and provisioned remote runtimes come from the same source tree, build identity, and wire protocol.
- Real boundary evidence: Windows setup, ConPTY packaging, SSH provisioning, updates, uninstall, and cross-platform artifacts are exercised at their product-owned boundaries before publication.
- No parallel product: fork identity stays in repository, release, update-feed, setup, and Installed Apps presentation while normal Herdr commands and state remain unchanged.
How it works
flowchart TB
S["SourceUpstream Herdr v0.8.2 → BASE 9eb521456ac0"]
Q["patches/delta/series0001 Terminal experience → 0003 Windows SSH target → 0004 Windows distribution↓ 0005 OpenCode lifecycle → 0006 Hardened downloads → 0007 Portable docs check↓ 0008 Scoped Git trust → 0009 Managed Agent start → 0010 Agent hook recovery↓ 0011 Metadata capacity → 0012 Completion alerts → 0013 Terminal history↓ 0014 Plugin-root commands → 0015 Muted-label contrast → 0016 Integration hints↓ 0017 Devin config → 0018 Windows environment"]
V["Validated distributionFresh replay → native + cross-platform gates→ Windows setup + ZIP, Linux/macOS binaries + digests"]
S --> Q --> V
patches/delta/BASE records the exact reviewed upstream stable commit. series is the only patch order. A manual build replays that source and retains one complete candidate; promotion publishes those exact bytes without rebuilding or repackaging them.
> [!IMPORTANT]
> GitHub's ahead/behind banner compares commit ancestry, not release-source freshness. This repository's master is a control branch for the patch queue and release automation, not a mirror of upstream master. Each build starts from the stable commit recorded in BASE and applies series; GitHub's Sync fork action is not this project's refresh mechanism.
What differs from upstream
The table is intentionally capability-level. The linked mailboxes contain the exact implementation and focused evidence.
| Area | Status | What this repository contributes |
|---|
| Native ConPTY foundation | Upstreamed in Herdr v0.6.9 | Reuses Herdr's modern app-local ConPTY packaging instead of carrying a duplicate foundation. |
| Terminal experience | Maintained here · 0001 | Follows host light/dark appearance, preserves cursor and Windows VTI input behavior, and avoids unframed OSC 4 palette replies. |
| Windows SSH target support | Maintained here · #2329 · 0003 | Adds x86_64/ARM64 host detection, exact provisioning and activation, visible interactive progress, and fail-closed detached launch into the SSH user's active desktop session. |
| Managed Windows releases | Maintained here · 0004 | Provides per-user setup, portable archives, immutable runtime activation, update ownership, process-safe uninstall, and stable-only release selection. |
| OpenCode and multi-Agent workflows | Maintained here · #3052 · #2450 · 0005 | Keeps retries and prompts truthful, preserves each pane's selected root session, and maps concurrent direct subagents from managed OpenCode roots into adaptive readable splits. |
| Runtime downloads | Maintained here · 0006 | Ignores user curl configuration and bounds runtime downloads to TLS 1.2+ HTTPS with limited redirects. |
| Cross-platform docs checks | Maintained here · #3041 · 0007 | Keeps the upstream documentation-parity unittest valid with native paths on Windows and POSIX systems. |
| Worktree lifecycle | Maintained here · #3044 · 0008 | Scopes Git trust to the selected checkout, waits for Windows terminals before unregistering worktrees, and preserves foreground focus during background removal. |
| Managed Agent start | Maintained here · #321 · #2685 · 0009 | Optionally starts one Agent in each new tab, catches up eligible shell roots after live reload, and shares each selected shell's native command syntax with session restore. |
| Agent hook recovery | Maintained here · #1033 · 0010 | Lets a still-running full-lifecycle Agent regain hook authority after a temporary foreground takeover without reviving a session after a real exit. |
| Metadata capacity | Maintained here · 0011 | Atomically updates and retains up to 64 pane or workspace metadata tokens while preserving existing validation bounds. |
| Completion alerts | Maintained here · 0012 | Exposes one persistent opt-out for completion popups and sounds while keeping questions, permission prompts, and errors actionable. |
| Terminal history | Maintained here · #2893 · 0013 | Retains repeated rows that scroll into alternate-screen history. |
| Plugin command resolution | Maintained here · #3024 · 0014 | Resolves explicit relative pane commands from the linked plugin root. |
| Muted-label contrast | Maintained here · #2692 · 0015 | Keeps muted sidebar and inactive tab labels readable. |
| Integration settings | Maintained here · #2880 · 0016 | Shows only controls that the selected integration supports. |
| Devin configuration | Maintained here · #2724 · 0017 | Finds Devin's native configuration in roaming AppData. |
| Windows process environment | Maintained here · #3430 · 0018 | Omits malformed Windows environment entries before process creation. |
Install
Choose an installation method
Every release provides Windows, Linux, and macOS builds as one coherent distribution. Choose one installation method for each machine:
- Windows: install with WinGet, download the direct setup, or use the portable ZIP.
- Linux and macOS: download the executable for your platform and architecture.
Windows managed installations are per-user, require no administrator access, and need no separately installed Microsoft Visual C++ Redistributable. The Windows portable ZIP is a standalone alternative.
Windows with WinGet
Install from the WinGet community source:
winget install --id hdosys.herdr-win --exact --source winget
Windows direct setup
Download herdr-win_v_windows_amd64_setup.exe from the latest Herdr Win release, verify its GitHub SHA-256 digest, and run it.
The managed install lives under %LOCALAPPDATA%\Programs\Herdr, registers Herdr Win in Installed Apps, installs Herdr's canonical agent skill, and preserves customized skill copies.
Windows portable
The Windows release also includes herdr-win_v_windows_amd64.zip. Extract the complete archive into one directory and run herdr.exe; keep its ConPTY payload beside it.
Linux and macOS
Linux and macOS releases are raw linux_amd64, linux_arm64, macos_amd64, and macos_arm64 executables. Use assets from the same herdr-win release on every endpoint because independently released builds are not guaranteed to share this fork's wire protocol.
After downloading a Linux or macOS asset, mark it executable, rename it to herdr, and place it in a directory on PATH.
> [!WARNING]
> The executable and setup are currently unsigned, so Windows may show a SmartScreen warning. Download only from this repository and verify the SHA-256 digest before running the artifact.
First use
Open a new terminal after installation and run:
herdr --version
herdr
A published build reports herdr-win (Herdr ). The second command opens Herdr's normal keyboard-first terminal interface. General commands, configuration, keybindings, and integrations remain documented by the official Herdr guide.
Everyday use
Mixed-platform sessions
Run the client and server on Windows, or use a matching Linux or macOS binary to control a Windows workstation or VM. Windows can also connect to matching Linux and macOS endpoints.
Every supported client can attach to or provision an x86_64 or ARM64 Windows SSH host. Use --yes to approve a required install or restart for one normal attach; unattended provisioning remains explicit:
herdr --remote workbox --yes
herdr --remote workbox --provision --yes --json
The Windows SSH user's OpenSSH default shell must be cmd.exe or PowerShell 7 (pwsh.exe), and persistent server launch requires exactly one active desktop session owned by that user. The first probe is reused for the complete decision, the portable payload transfers once, and visible progress reports every real preparation, validation, stop, activation, verification, and opening phase. Provisioning validates the complete payload before stopping or replacing a server and verifies the exact binary, version, and protocol afterward.
Fork-specific options
Start OpenCode automatically in the root pane of each genuinely new persistent-session tab:
[session]
auto_start_agent = "opencode"
This managed launch also supplies the ephemeral loopback endpoint used by direct
OpenCode subagent panes. Typing a bare opencode command starts OpenCode's internal
worker transport without that attach endpoint, so use the managed path for this
integration.
Use Settings > completion, or disable completion popups and done sounds without suppressing questions, permission prompts, or errors:
[ui]
notify_on_agent_completion = false
Updates
- WinGet-owned installation:
winget upgrade --id hdosys.herdr-win --exact --source winget
- Direct setup or portable installation:
herdr update
Direct updates accept only a newer stable CalVer from an immutable normal GitHub release. Active sessions continue on their current immutable runtime and the replacement activates safely afterward; update never terminates running work. herdr update refuses to replace a WinGet-managed installation.
Uninstall
Uninstall from Windows Settings > Apps > Installed apps. Herdr first asks running managed sessions to stop through their graceful server API. If a session remains active, uninstall preserves the installation and reports the required action instead of force-terminating work.
Settings under %USERPROFILE%\.herdr are preserved unless you explicitly choose to remove them. Installer-owned skill files can also be removed explicitly; customized copies and unrelated directory content remain preserved.
Troubleshooting
| Symptom | Action |
|---|
herdr --version does not start with herdr-win | Open a new terminal, run where.exe herdr, and inspect an earlier upstream or user-owned executable on PATH. Setup does not overwrite foreign PATH ownership. |
| Setup rejects an existing Herdr layout | Uninstall the existing Herdr or Herdr Win entry from Installed Apps, then run setup again. The installer preserves and rejects incompatible legacy layouts instead of migrating them. |
| SmartScreen warns about the download | Confirm that the file came from this repository's release page and verify its GitHub SHA-256 digest before choosing to run it. |
| Windows SSH provisioning fails before session start | Confirm that the default OpenSSH shell is cmd.exe or pwsh.exe and that exactly one active desktop session belongs to the SSH user. Windows PowerShell 5.1 is unsupported for this byte-stream path. |
| Update remains pending, or uninstall reports running sessions | Let active work finish or stop the reported Herdr sessions, then launch or retry. The managed lifecycle never force-terminates active work. |
For exact changes in downloadable fork releases, see the herdr-win changelog. For general Herdr behavior, use the upstream documentation and upstream changelog.
Project reference
This README describes the maintained queue on master. The fork-only changelog is the exact user-facing history for tagged herdr-win releases. Upstream Herdr owns the general CLI, TUI, configuration, integrations, and product documentation.
Patch queue and upstream review
Upstream PR #2329 ships in Herdr v0.8.2. Mailbox 0003 therefore contains only the remaining Windows target-host boundary. Shared client attach, image transport, and SSH bridge behavior come directly from upstream.
The original Windows-host work builds on nsxdavid's feat/windows-remote-attach branch.
The files in patches/delta/series are the complete maintained product delta:
- Start at the exact commit in
BASE.
- Apply
series in order with git am --3way.
- Review each mailbox as one responsibility with its implementation, tests, and documentation.
- Follow
CONTRIBUTING.md for replay and verification.
The mailboxes are focused evidence, not an all-or-nothing merge request. Fork branding, release workflows, and publication state stay outside the product queue.
Maintaining the project
Refresh and release are separate manual operations:
- Refresh: select and review a stable upstream release, then replay and minimize the queue.
- Build: replay recorded
BASE, run the complete gates, and retain one candidate with provenance and checksums.
- Promote: publish those exact retained bytes without rebuilding or repackaging them.
Ordinary pushes do not publish binaries.
Issues and contributions
- Use upstream Herdr for general behavior that reproduces with an official upstream build.
- Use herdr-win issues for this distribution's artifacts, update feed, workflows, or maintained patches.
- Read
CONTRIBUTING.md before changing the queue or release automation.
Credits and license
Herdr is created and maintained upstream by Can Çelik. herdr-win is distributed under the Apache License 2.0.