Wire the semantic nudge into the daemon and document M3.5
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,15 @@ go test ./...
|
|||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
|
M3.5 (semantic nudge): the drift interceptor catches the *wrong app*, but not
|
||||||
|
the *wrong work inside a right app*. M3.5 adds a third, ambient AI role that —
|
||||||
|
only while you are on-task in an allowed app — periodically reads your recent
|
||||||
|
window titles and, if the trajectory has wandered from the commitment, shows a
|
||||||
|
soft, dismissible "Heads up" line (no interrupt, no buttons to fight). It is
|
||||||
|
debounced to roughly one check every five minutes, reuses the same CLI backend
|
||||||
|
as the coach and drift judge, and degrades gracefully — without it, everything
|
||||||
|
else still works.
|
||||||
|
|
||||||
M3 (drift interceptor): while a commitment is Active, the daemon watches the
|
M3 (drift interceptor): while a commitment is Active, the daemon watches the
|
||||||
focused window. A cheap local match against the session's allowed window classes
|
focused window. A cheap local match against the session's allowed window classes
|
||||||
is authoritative for on-task; only unmatched windows are sent to the LLM drift
|
is authoritative for on-task; only unmatched windows are sent to the LLM drift
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ func main() {
|
|||||||
svc := ai.NewService(backend)
|
svc := ai.NewService(backend)
|
||||||
ctrl.SetCoach(svc)
|
ctrl.SetCoach(svc)
|
||||||
ctrl.SetDriftJudge(svc)
|
ctrl.SetDriftJudge(svc)
|
||||||
log.Printf("ai: %s backend (coach + drift judge)", backend.Name())
|
ctrl.SetNudge(svc)
|
||||||
|
log.Printf("ai: %s backend (coach + drift judge + nudge)", backend.Name())
|
||||||
}
|
}
|
||||||
|
|
||||||
src := evidence.NewSource()
|
src := evidence.NewSource()
|
||||||
|
|||||||
Reference in New Issue
Block a user