Attended Stage 2 delivery. Conductor 0.3.0 coordinates task-bound builders, validators, and reviewers as visible Herdr agent panes. A human or trusted orchestrating agent explicitly drives every transition. This release is operational for strict task/report contracts and exact-SHA gates on exactly Herdr 0.7.5; it is not an approval system, suite adapter, unattended pipeline, automatic recovery service, cryptographic attestation system, or same-user security boundary.
Attended Stage 3 delivery. Conductor 0.4.0 coordinates task-bound builders, validators, and reviewers as visible Herdr agent panes, then supports an explicitly approved fast-forward of one local ref. An operator drives every transition and records each approval receipt. It requires exactly Herdr 0.7.5, protocol 17, API schema 1; it is not an authenticated approval system, suite adapter, unattended pipeline, general automatic recovery service, cryptographic attestation system, or same-user security boundary.
The retained Stage 2 source manifest and installed-Herdr live contract report are historical compatibility evidence, not a live validation of Stage 3. These are sanitized, operator-observed local records—not cryptographic remote attestation or authentication against malicious same-UID processes. Older and newer Herdr binaries do not satisfy Conductor's exact 0.7.5 requirement; passing local tests is not evidence that another Herdr version is supported.
+
All seven actions
@@ -113,6 +106,14 @@
All five actions
Collect terminal reports, reject invalid committed reports durably, perform deterministic zero-or-one-CAS integration, and dispatch reviewer/validator tasks at the exact observed integration SHA.
+
structupath.conductor.preview
+
Journal the proposed local-ref fast-forward, exact integration and target observations, and gate assertions; return the exact approval command.
+
+
+
structupath.conductor.apply
+
Consume a matching operator approval receipt once, then perform or resolve the attempt's single local-ref compare-and-swap.
+
+
structupath.conductor.stand-down
Revalidate each complete live pane/agent tuple before close, archive strict authority, and retain all worktrees, branches, tasks, reports, outboxes, gate sources, recordings, logs, artifacts, and Guard files.
@@ -120,9 +121,10 @@
All five actions
Conductor owns this lifecycle. It does not invoke Swarm or provide an automatic Conductor→Swarm pipeline. Supported composition remains human-selected and sequential.
Attended quickstart
-
Create .herdr-conductor.json in a clean Git repository:
+
Use Herdr exactly 0.7.5, Node.js 20 or current LTS, Python 3.11+, and Git with 40-hex SHA-1 object IDs. Create .herdr-conductor.json in a clean Git repository. This first-run example explicitly disables apply:
assemble returns exact task paths, source roots, outbox slots, and task-bound publisher commands. Reports are closed canonical JSON supplied through bounded stdin. Producer collection and exact-SHA gate collection may require separate attended harvest invocations. Harvest and stand-down are mutating attended actions. Failed or uncertain external effects become needs_attention and are never silently replayed.
+
Optional attended apply
+
To enable apply for a new run, set apply to { "target_ref": "refs/heads/release" } before assembly. The named local branch must already exist, differ from the integration branch, be checked out in no worktree, and remain exactly at the run's integration base. The proposed change must be a nonempty, rename-free fast-forward. Configuration v2 remains supported with apply disabled; do not edit a run-bound configuration mid-run.
+
After producer and gate collection, use this sequence instead of standing down immediately:
Review the exact target, diff, gate assertions, and preview entry digest.
+
Follow the exact npm run apply:approve command returned by preview and provide the operator's canonical approve or reject receipt through stdin. Do not manufacture a receipt from a generic example or treat a worker's approve report as operator consent.
+
Invoke herdr plugin action invoke apply --plugin structupath.conductor only for the reviewed, approved attempt.
+
Inspect status, then invoke stand-down when finished.
+
+
The receipt is consumed durably before any Git effect and cannot be reused. A moved target records an unapplied outcome with zero target changes. Only the attended apply action can resolve an uncertain apply publication from an exact target-SHA observation; other ambiguous operations remain refused. Rejected or voided attempts permit a fresh preview, up to eight attempts. Apply never pushes, tags, publishes, deploys, or updates multiple refs.
Trust and completion limits
State is strict, non-executable private JSON indexed by physical Git common-directory and Herdr workspace identity. Atomic writes, repository locks, generations, canonical digests, and hash-chained journals are cooperative coordination controls—not authentication.
@@ -182,7 +195,7 @@
Trust and completion limits
Missing, malformed, duplicate, foreign, stale, replayed, ambiguous, dirty, or durability-uncertain authority fails closed. Integration performs exactly zero or one target compare-and-swap.
Herdr 0.7.5 closes by pane_id. Conductor re-reads the full workspace, pane, terminal, agent, cwd, run, and generation tuple immediately before close, but a same-user TOCTOU window remains.
The repository lock does not stop unrelated Git or same-user processes. Worktrees are review boundaries, not sandboxes. Guard observes rendered text and cannot prove prevention.
-
Stage 2 does not provide approval receipts, approval consumption, approval-aware apply, automatic recovery, suite adapters, unattended orchestration, automatic cleanup/prune, or Browser promotion. Those remain later-stage work.
+
Stage 3 receipts are unauthenticated same-user operator records, not signatures or authorization proof. Apply changes one configured local ref; it does not provide general automatic recovery, suite adapters, unattended orchestration, automatic cleanup/prune, or Browser promotion.
Stand-down closes only identity-proven panes and archives authority. It does not remove worktrees, branches, tasks, outboxes, reports, gate sources, artifacts, recordings, logs, or Guard files; retained resources continue consuming disk.
Supporting text-policy capability. Guard is an advisory, best-effort cross-agent command policy layer for Herdr. It audits and alerts on matching terminal text and may interrupt visible shell input, but it is not a sandbox or authorization boundary for agent TUIs.
+
Supporting text-policy capability. Guard has two paths: an advisory pane watcher that audits, alerts, and attempts interrupts, and an optional harness reporter that evaluates reported Bash commands before execution. Neither path is a sandbox or a same-user security boundary.
The v0.1.1 tag target passed sequential one-shot RPC, dedicated subscription, reconnect, terminal rendering, replay suppression, and default/named-session recovery checks on Herdr 0.7.5/protocol 17. Guard records an interrupt request as accepted or failed; neither result proves command prevention.
+
Historical v0.1.1 evidence covers sequential one-shot RPC, dedicated subscription, reconnect, terminal rendering, replay suppression, and default/named-session recovery on Herdr 0.7.5/protocol 17. It does not certify the new reporter in a live Herdr session. Guard records an interrupt request as accepted or failed; neither result proves command prevention.
Actions
@@ -106,7 +107,16 @@
Actions
-
Honest coverage contract
+
First run
+
Use Herdr >=0.7.5, Node.js >=20.10, Python >=3.11, and Bash. Locking uses lockf on macOS or flock on Linux. Check which executable your shell selects before installing:
+
command -v herdr
+herdr --version
+herdr plugin install StructuPath/herdr-guard
+herdr plugin list
+herdr plugin action list
+
+
Open Guard and use its Test action to evaluate sample text without executing it. Installation does not automatically configure a harness hook. The source checkout also provides npm run build, npm run validate, and the read-only npm run doctor setup check.
+
Honest pane coverage contract
@@ -144,9 +154,15 @@
Honest coverage contract
Guard performs text matching, not intent analysis. An agent running as the same user can disable the plugin, use unseen channels, or act outside observed terminal text. Use native agent hooks, sandboxing, and operating-system controls for authoritative enforcement.
+
Optional harness reporter
+
Version 0.2.0 includes a Claude PreToolUse Bash hook adapter. Wire it explicitly using the repository README instructions. The hook reports raw command text and its working directory to Guard's local Unix socket; policy uses the reported directory. Interrupt-tier matches return a deny decision, alert-tier matches request permission, and other commands are allowed.
+
The adapter fails open if the socket is missing, times out, or returns an invalid response. Audit records cannot prove the harness honored a decision. This is a command-text policy check, not prompt analysis or a substitute for native enforcement.
+
The socket defaults to $XDG_STATE_HOME/herdr-guard/reporter.sock, falling back to ~/.local/state/herdr-guard/reporter.sock, separate from plugin state, in a private directory. Run only one owner per socket; a HERDR_GUARD_REPORTER_SOCKET override must agree between Guard and the hook.
Policy and trust
Rules live at $HERDR_PLUGIN_CONFIG_DIR/rules.json and support audit, alert, and interrupt severities with regex or substring matching. Workspace .herdr-guard.json rules are capped at alert; repository-controlled regex and interrupt rules are rejected.
The plugin itself is ordinary local code with the user's privileges. Review the source and policy before use, and protect audit logs because they can contain sensitive metadata even after redaction.
+
Upgrading
+
Upgrades preserve existing rules.json. New default patterns therefore do not silently replace a reviewed policy. To adopt the defaults, review them first, then explicitly use Reset rules, which backs up the existing file before reseeding. Version 0.2.0 includes broader destructive-command, exfiltration, tampering, and evasion patterns. A force-with-lease push is audit-tier in the defaults, not silently ignored.
Herdr-native tools for human-supervised agent work, built and maintained by
StructuPath. Explore is the ready first
-workflow. Deliver is an attended Stage 2 lifecycle with strict task/report
-contracts. Browser and Guard provide supporting visibility and text-policy capabilities.
+workflow. Deliver is an attended Stage 3 lifecycle with strict task/report
+contracts and approved single-ref apply. Browser and Guard provide supporting visibility and text-policy capabilities.
This repository is the canonical suite documentation source; each plugin README remains the detailed runtime reference.
Start with Explore
Explore with Swarm when you have one bounded coding task and want to compare several implementations. Swarm records a base SHA, gives each agent a separate worktree and branch, reports concrete change counts, and lets the operator preview and harvest a selected candidate.
-
The operator defines the comparison criterion, reviews diffs and tests, and chooses what lands. Agents commit locally and never push.
+
The operator defines the comparison criterion, reviews diffs and tests, and chooses what lands. Agents commit locally; the operator can explicitly publish a candidate branch for PR review.
Deliver with Conductor is an attended Stage 3 workflow: visible
role panes, repository/workspace-bound strict state, immutable task contracts,
private report outboxes, deterministic one-CAS integration, exact-SHA reviewer
-and validator gates, and archival stand-down.
-
The pinned runtime does not provide approval receipts or approval-aware apply,
-suite adapters, unattended automation, automatic recovery, cryptographic report
-attestation, or protection against malicious same-UID processes.
Apply receipts are unauthenticated same-user operator records. The pinned runtime
+does not provide suite adapters, unattended automation, general automatic recovery,
+cryptographic report attestation, or protection against malicious same-UID processes.
+Conductor requires exactly Herdr 0.7.5; its manifest minimum is not a promise of
+compatibility with later versions.
Supporting trust capabilities
Browser launches local Chromium, attaches to an existing automation browser, or shares an agent-browser session. Recording is available for agent-browser sessions only. Sessions are a trusted same-user boundary, and recordings may contain sensitive content.
-
Guard observes rendered terminal text and offers advisory/best-effort policy. It is not a sandbox or authorization boundary for agent TUIs.
+
Guard observes rendered terminal text with best-effort interrupts and offers an optional pre-execution harness reporter. Its Claude Code hook can deny reported Bash calls but fails open when unavailable; Guard is not a sandbox or protection against same-user bypass.
Versions are plugin-specific evidence pinned in data/plugins.json, not a claim that every plugin was tested on one suite-wide Herdr version. Guard 0.1.1 passed its non-destructive Herdr 0.7.5 live smoke. Guard remains best-effort rendered-text policy: an accepted interrupt request is observable, but command prevention is unknown.
+
Versions are plugin-specific source evidence pinned in data/plugins.json, not a claim that every plugin was tested on one suite-wide Herdr version. Recorded Herdr versions include retained historical compatibility evidence; they do not certify every new feature. Guard's accepted interrupt requests and harness verdicts do not prove command prevention.
Composition and supervision boundaries
These plugins can be installed together, but the current runtime is not a single automatic pipeline.
@@ -132,8 +135,8 @@
Composition and supervision boundaries
Deliver / Conductor
-
Task-bound role panes, private report outboxes, deterministic integration, exact-SHA gates, and stand-down
-
Work direction, assertion review, approval decisions, conflicts, and ambiguous recovery
+
Task-bound roles, exact-SHA gates, preview, receipt-bound local-ref apply, and stand-down
+
Work direction, assertion review, operator receipts, conflicts, and ambiguous recovery
Browser
@@ -142,8 +145,8 @@
Composition and supervision boundaries
Guard
-
Best-effort text matching, audit, alerts, interrupt attempts
plugin list confirms that a manifest parsed and is enabled; plugin action list confirms action registration. See each plugin page for its exact actions, prerequisites, and limits.
+
Keep the suite current
+
In each source checkout, run npm run build and npm run validate for Browser, Swarm, and Guard; Conductor uses npm run check. Browser, Swarm, and Guard also provide a read-only npm run doctor to identify missing prerequisites and the selected Herdr binary. Check command -v herdr and herdr --version when multiple installations exist. Do not assume a newer Herdr satisfies Conductor's exact 0.7.5 contract.
+
After an upgrade, verify action registration and run one bounded workflow in a separate test repository before larger work. Preserve reviewed Guard rules, explicitly wire any reporter hook, and review Swarm setup hooks and agent presets. Add Chromium through Browser's documented launch mode when visual QA is needed; it is already a supported capability.
+
For each change, repeat build, relevant tests, and workflow validation until passing, then publish a reviewable PR. Update these guides and the pinned manifest evidence together whenever versions, actions, or supported behavior change.
The pinned source also records a bounded Herdr 0.8.2 live smoke: fan-out, committed work, merge, automatic archive, abort, and prune dry-run. It found and fixed archive-state reconciliation and the newer runtime's done agent state. These are unreleased fixes on version 0.3.0; broad compatibility evidence remains 0.7.4/0.7.5.
Actions
@@ -93,7 +95,7 @@
Actions
structupath.swarm.harvest
-
Review and merge selected slot branches back to the recorded base
+
Review and merge selected slot branches, or explicitly publish a branch for PR review
structupath.swarm.abort
@@ -140,6 +142,7 @@
3. Enter one bounded task and comparison criterion
.
Fresh worktrees omit ignored dependencies, .env files, and caches. If every agent fails immediately, add a reviewed plugin-config setup.sh or tell agents to install required dependencies, then start a new run.
+
Setup logs preserve command output verbatim. Keep credentials out of setup output and review logs before sharing them.
4. Inspect every credible candidate
Open Status and use 1–9 to visit each slot. Compare committed and uncommitted counts against the recorded fork SHA. A 0.7.5+ slot can remain labeled working after it finishes until Harvest previews it; state is informative, not a completion gate.
Open Harvest, preview each candidate's diff, run its tests, and compare it against the criterion declared before fan-out. Dirty slots offer WIP commit, skip, or discard; review the backup behavior before discarding.
@@ -150,16 +153,20 @@
5. Treat clean-slot selection as approval
Use q to leave Status or Harvest without selecting a candidate. Invoke Abort to stop an active run: it closes Swarm-owned panes and removes clean plugin-owned worktrees, while keeping branches and anything questionable.
Success definition
A first Explore run is successful when one chosen branch is merged without conflict, its tests pass on the base, the resulting diff meets the stated comparison criterion, and skipped work remains recoverable on branches until deliberate pruning.
+
Publish for PR review
+
In Harvest, press p, then select a slot to publish its branch. The script equivalent is scripts/harvest-step.sh publish <slot> from the installed plugin root. Publication uses an ordinary push to origin, or the explicit HERDR_SWARM_PUBLISH_REMOTE override; it never force-pushes and does not create a GitHub PR itself.
+
After a remote PR is merged, preview again. Harvest recognizes merge ancestry and squash merges whose tree changes are contained in the base. Prune uses ancestry, so squash-merged branches may remain for deliberate review.
Safety and trust boundary
Swarm isolates working trees and provides reviewable branches; it does not sandbox agents. Write agents are trusted same-user principals and can access anything their operating-system user can access. Agents are instructed to commit locally and never push, while the operator remains the merge gate.
-
Harvest uses review-first, --no-ff merges and checks base drift. Dirty discards first create backup refs. Abort keeps branches, and prune is dry-run/env-gated. Ignored files remain outside Git's safety net; inspect the archive inventory before removing a worktree.
+
Harvest uses review-first, --no-ff merges and checks base drift. Dirty discards first create backup refs. Abort keeps branches, and prune is dry-run/env-gated. Active runs resolve by physical repository identity; conflicting generations are refused rather than guessed.
+
Ignored files remain outside Git's safety net. Removal requires the exact one-use cleanup_approval JSON returned by the inventory preview, bound to the resource, path, run, generation, and inventory digest. A generic yes is insufficient, and changed inventory invalidates approval. This also applies to ignored files in detached merge worktrees.
Scripted fan-out
Interactive fan-out uses the action. A zero-TTY run must invoke the pane script directly because action-spawned panes do not inherit caller environment in the pinned runtime:
Per-slot overrides remain interactive-only. If a zero-TTY input is missing, the script exits with a named-variable error instead of waiting on an unreadable prompt.
@@ -169,7 +176,7 @@
Safe exit and cleanup
Abort stops the active run and preserves branches; it never deletes branches.
Prune is a dry run by default and is separately gated for merged branches and backup refs.
Closing the parent workspace stops Swarm agents silently. Committed work remains harvestable; uncommitted editor state may not.
-
Ignored files are not included in WIP commits or discard snapshots. Inspect the archive-time inventory before acknowledging worktree removal.
+
Ignored files are not included in WIP commits or discard snapshots. Review the archive inventory and supply its exact one-use cleanup approval before removal.
diff --git a/index.html b/index.html
index ef3644f..53fdf19 100644
--- a/index.html
+++ b/index.html
@@ -2,6 +2,7 @@
+
Herdr Suite — explore agent-built changes with human review
Truth boundary: Explore is the ready first workflow. Deliver
- is an attended Stage 2 task/report lifecycle operated by a human or
- trusted orchestrating agent—not an autonomous approval system.
+ is an attended Stage 3 lifecycle with reviewed local-ref apply,
+ requiring exactly Herdr 0.7.5 and explicit operator receipts.