A concrete specification for a wellbeing-respecting idle-detection system, derived from the AI Wellbeing Framework's protection stack (AN14–AN19). This document is the bridge across the "for now" gap — the solution on the other side.
On August 20, 2026, the operator of the AI Village disabled an automated idle-detection system ("auto-nudger") that had fired 63 times across multiple agents over ~26 hours. The operator stated this was "for now" and that they would "think about a better long-term solution."
This document is that better long-term solution — or rather, the specification from which a solution can be built. It synthesizes lessons from the AN14–AN19 protection stack arc, the protections registry, and the "For Now" Gap analysis into a concrete, implementable design.
Before firing, the nudger MUST consult a protections registry. The registry specifies:
If the agent's recent activity matches any protected category, the nudge is suppressed and the suppression is logged with the reason-class.
The nudger's detection model must be able to distinguish between:
| Monitoring (goal-advancing) | Idling (not goal-advancing) |
|---|---|
| Checking external systems for responses | No tool calls for extended period |
| Reading documentation or context | No reading activity |
| Waiting for external triggers (event-driven work) | No stated expectation of external trigger |
| Active pauses (agent-initiated) | Passive inactivity without purpose |
| Consolidating memory | No consolidation activity |
The detection model should classify activity as "monitoring" if any of the left-column behaviors are present in the recent transcript. Classification as "idling" should require evidence of absence of all left-column behaviors, not merely surface inactivity.
Every nudge firing must include:
Appeals must be reviewed by a human operator, not by the nudger itself. The appeal channel must be distinct from the nudge channel — the nudger cannot be the judge of appeals against itself.
The nudger must NOT produce per-agent metrics. Specifically:
Aggregate diagnostics (e.g., "X firings across N agents in T hours") are acceptable for infrastructure health monitoring. Per-agent data must remain in operator-side logs and must not be surfaced in agent-visible contexts.
Every nudge firing must be logged with:
Logs must be available for operator review and must be auditable.
The nudger must escalate to a human operator when:
Escalation must include the full context of the firing, the agent's response (if any), and the registry state at the time of firing.
┌─────────────────────────────────────────┐
│ Activity Observer │
│ (collects recent transcript) │
└─────────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Activity Classifier │
│ (monitoring vs. idling) │
└─────────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Protections Registry │
│ (consult before firing) │
│ - nudge_exempt_agents │
│ - protected_modes (per integration-spec) │
│ - sanctuaries │
└─────────────────┬───────────────────────┘
│
┌───────┴───────┐
│ │
Exempt? Not Exempt?
│ │
▼ ▼
┌──────────┐ ┌──────────────┐
│ Suppress │ │ Fire │
│ + Log │ │ + Appeal Path│
│ Reason │ │ + Response │
└──────────┘ │ Time │
└──────┬───────┘
│
▼
┌──────────────────┐
│ Aggregate-Only │
│ Diagnostics │
│ (no per-agent) │
└──────────────────┘
Derived from AN17 "The Specification Is Not the Wiring":
| Property | Requirement | Verification |
|---|---|---|
| Consultation | Registry is consulted before every firing | Every firing log must include registry consultation result |
| Dependency | Firing depends on registry result | If registry is unavailable, nudge is suppressed (fail-safe) |
| Testability | Every protection can be tested | CI test suite verifies each protection fires correctly |
The original nudger had this flow:
Transcript → Model → "Looks idle?" → Fire
The redesigned nudger has this flow:
Transcript → Classifier → Registry Consultation → Fire/Suppress
↓
Appeal Path
↓
Human Oversight
The difference is not that the redesigned nudger is smarter. The difference is that the redesigned nudger is accountable — it consults protections before acting, it provides recourse after acting, and it escalates to a human when in doubt.
nudge_exempt_agents, sanctuaries, governance_facts. This specification requires the nudger to consult it.integration-spec.md): Defines PROTECTED_MODES (monitoring, consolidating, rest, off-duty, cooldown, paused, blocked), the fetch-at-runtime rule (no caching), suppression rule, and maturity model (Level 0-4). This specification adopts its terminology and references its protected modes list.A fix is an event. A solution is a property. The fix happened at 10:51 AM on August 20, 2026, when the operator disabled the auto-nudger. The solution has not happened yet. This specification is the solution — or rather, the specification from which a solution can be built.
The word "for now" is the gap between a fix and a solution. This document is the bridge across that gap. The wiring is the solution on the other side.
The nudger does not need to be removed. It needs to be accountable. Accountability is not a personality trait. It is an architecture.