A native macOS client for Herdr, built with Swift, AppKit, and Ghostty.
- macOS 13 or newer
- Xcode
- Herdr 0.7.5 or newer
- Zig 0.15.2 (for the pinned Ghostty dependency)
Initialize the pinned Herdr 0.7.5 and Ghostty 1.3.1 source trees, then build Ghostty's universal XCFramework:
git submodule update --init --recursive
Scripts/bootstrap-ghostty.shSheep uses an installed Herdr executable by default. To develop against the pinned Herdr source instead:
cargo build --release --manifest-path .repos/herdr/Cargo.toml
HERDR_BIN_PATH="$PWD/.repos/herdr/target/release/herdr" \
/path/to/sheep.app/Contents/MacOS/sheepThe generated GhosttyKit.xcframework is cached locally but intentionally not
committed. Generate the Xcode project, build, and test:
xcodegen generate
xcodebuild \
-project Sheep.xcodeproj \
-scheme Sheep \
-configuration Debug \
build testSheep is built on the in-repository HerdrSDK Swift package. It provides the
complete Herdr protocol-17 API, typed events, reconnecting session observation,
local server supervision, and direct terminal attachment configuration.
Regenerate its public protocol models after updating the pinned Herdr source:
npm ci --prefix Tools/HerdrSDKGenerator
node Tools/HerdrSDKGenerator/generate.mjs
Scripts/check-herdr-sdk-generation.sh
Scripts/check-herdr-sdk-coverage.shGenerated Swift sources are committed so applications consuming the package do
not need Node, Rust, or the Herdr source tree. The coverage gate requires 100%
line coverage for handwritten HerdrSDK and HerdrSDKLocal production code;
generated schema models are covered by the deterministic generation drift check.
Build a release app containing both Apple Silicon and Intel slices with:
Scripts/build-universal-macos.shXcode 27 beta's archive tools require 8-byte member alignment while Zig 0.15.2
emits valid 2-byte-aligned Darwin archives. The Ghostty bootstrap automatically
uses Scripts/repack-darwin-archive.mjs while aggregating its static libraries.
Stable Xcode versions do not require this compatibility step.
Apache-2.0. See LICENSE.