Skip to content

chepherd 0.9.2

Latest

Choose a tag to compare

@emrahbaysal emrahbaysal released this 29 May 14:16
· 353 commits to main since this release
bf62cdb

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-P2P extension placeholder (x-chepherd-p2p) for future WebRTC binding
  • SendMessage body with PTY-bound Deliverer + flavor-aware submit-sequence
  • Runtime.GetByContextID resolves contextId as session ID OR @-name (forgiving shape)

Runner pattern + spawn-auth propagation

  • 8-method runtime.Runner interface (Spawn/Stop/Get/List/Pause/Restart/Rename/AttachIO) with ProcessRunner + PodRunner scaffolds
  • SQLite persistence wired through runtime.NewWithStore(stateDir, store) + cmd/run.go
  • Runtime.Spawn writes initial session row via persistInitialSessionState so shepherd's tick loop discovers spawned sessions
  • Runtime.Spawn propagates vault.claude-oauth.accessTokenCLAUDE_CODE_OAUTH_TOKEN env into claude-code containers

Shepherd tier (extracted from internal/daemon)

  • NEW internal/shepherd package (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.WithShepherd fluent setter; RecordEvent broadcasts to Observe with panic-safety

Daemon retirement

  • internal/daemon/chepherd-daemon.go (1674 LOC) + internal/daemon/state.go removed
  • internal/daemon/rc/ (WebRTC + WebSocket transport) preserved as remote-control product surface
  • cmd/daemon + cmd/shadow excised — chepherd run is the single canonical entrypoint
  • chepherd.send_to_session MCP 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:8083

Known follow-up

  • #212 — banned-vocab sweep (pre-existing v0.9.1 leak; cosmetic; PR #222 in flight at release time)

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