chepherd v0.9.2 — first release on the new v0.9.2 substrate.
What ships
Persistence layer
- 13 SQLite + 13 PostgreSQL Repositories behind
database/sql+ repository pattern (modernc.org/sqlite + jackc/pgx v5) - Cross-dialect equivalence framework with testcontainers-go for real-Postgres regression gating
- One-shot file-on-disk → SQLite migration tool
A2A control plane (A2A v1.0 spec compliance)
- Agent Card served at hyphenated
/.well-known/agent-card.json - 11 PascalCase JSON-RPC methods (SendMessage, GetTask, etc.) including spec-canonical
SetTaskPushNotificationConfig chepherd-P2Pextension placeholder (x-chepherd-p2p) for future WebRTC bindingSendMessagebody with PTY-bound Deliverer + flavor-aware submit-sequenceRuntime.GetByContextIDresolves contextId as session ID OR @-name (forgiving shape)
Runner pattern + spawn-auth propagation
- 8-method
runtime.Runnerinterface (Spawn/Stop/Get/List/Pause/Restart/Rename/AttachIO) with ProcessRunner + PodRunner scaffolds - SQLite persistence wired through
runtime.NewWithStore(stateDir, store)+cmd/run.go Runtime.Spawnwrites initial session row viapersistInitialSessionStateso shepherd's tick loop discovers spawned sessionsRuntime.Spawnpropagatesvault.claude-oauth.accessToken→CLAUDE_CODE_OAUTH_TOKENenv into claude-code containers
Shepherd tier (extracted from internal/daemon)
- NEW
internal/shepherdpackage (10 files git-mv'd, history preserved): band/judge/signals/engagement/typing/discovery shepherd.Run(ctx)tick loop with proper goroutine lifecycle (context.WithCancel(Background) + defer cancel + ticker.Stop)Runtime.WithShepherdfluent setter;RecordEventbroadcasts toObservewith panic-safety
Daemon retirement
internal/daemon/chepherd-daemon.go(1674 LOC) +internal/daemon/state.goremovedinternal/daemon/rc/(WebRTC + WebSocket transport) preserved as remote-control product surfacecmd/daemon+cmd/shadowexcised —chepherd runis the single canonical entrypointchepherd.send_to_sessionMCP tool now routes through A2A SendMessage via v0.9.1-compat shim (deprecated, v1.0 removal note)internal/messagebus(337 LOC @-relay) entirely retired in favor of A2A path
Install (build from source)
git clone https://github.com/chepherd/chepherd ~/repos/chepherd
cd ~/repos/chepherd && git checkout v0.9.2
go build -o ~/.local/bin/chepherd .
chepherd run --state-dir ~/.local/state/chepherd --listen 127.0.0.1:8083Known follow-up
Closure context
Closes epic #208 (delivered via 8 sub-PRs: #209/#210/#211/#213/#214/#215/#216/#217 then final waterfall #219; post-ship hardening PRs #220/#221).
🤖 Released by chepherd tech-lead via Claude Code