From b51ad45c106d055050b2a5746dbda09138626a8d Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Sun, 31 May 2026 14:21:37 -0400 Subject: [PATCH] M2: wire planning coach backend into the daemon with graceful fallback Co-Authored-By: Claude Opus 4.8 --- cmd/antidriftd/main.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmd/antidriftd/main.go b/cmd/antidriftd/main.go index 65aef82..b1b8ef4 100644 --- a/cmd/antidriftd/main.go +++ b/cmd/antidriftd/main.go @@ -5,10 +5,12 @@ package main import ( "context" "log" + "os" "os/exec" "runtime" "time" + "antidrift/internal/ai" "antidrift/internal/evidence" "antidrift/internal/session" "antidrift/internal/store" @@ -30,6 +32,16 @@ func main() { srv := web.NewServer(ctrl) srv.Init() // re-arm or expire a restored Active session + // Wire the AI planning coach. Backend selectable via ANTIDRIFT_AI_BACKEND + // (claude default, or codex). Misconfiguration degrades to no coach rather + // than failing startup — manual planning still works. + if backend, err := ai.NewBackend(os.Getenv("ANTIDRIFT_AI_BACKEND")); err != nil { + log.Printf("ai coach disabled: %v", err) + } else { + ctrl.SetCoach(ai.NewService(backend)) + log.Printf("ai coach: %s backend", backend.Name()) + } + src := evidence.NewSource() go src.Watch(context.Background(), ctrl.RecordWindow)