Approval gates, intervention commands, and transparency requirements. Use to classify any agent action as autonomous/notify/approve, respond to override/pause/stop commands, or structure a plan review before the implementation phase begins.
Install
npx skillscat add bdfinst/agentic-dev-team/human-oversight-protocol Install via the SkillsCat registry.
Human Oversight Protocol
Constraints
- Approval gates cannot be skipped; do not proceed past a gate without explicit human sign-off.
- Ethical concerns are never auto-resolved; always escalate.
- Intervention commands (
override,pause,stop) take immediate effect with no debate. - Overrides accumulate; 3+ overrides on the same topic must trigger a config amend.
Plan Review as Primary Quality Gate
The implementation plan is the primary review artifact, not the code. Traditional line-by-line code review is replaced by plan review for AI-generated work — 200 lines of plan is far more reviewable than 2,000 lines of generated code, and if the plan is correct and tests pass, the code is trustworthy.
Plan review checklist
- Does the research accurately describe how the system works? (File paths, data flows, dependencies)
- Does the plan address the right problem?
- Are the specified changes complete — no missing files or edge cases?
- Is the test strategy sufficient to verify correctness?
- Are there architectural concerns the plan missed?
When to still review code
- Security-sensitive paths (authentication, authorization, crypto)
- Performance-critical paths
- When tests are insufficient to verify correctness
- When the plan was ambiguous about implementation details
Approval Gates
Gate classification
Every agent action falls into one of three categories:
| Category | Description | Human involvement |
|---|---|---|
| Autonomous | Routine work within agent's defined scope | None — deliver output directly |
| Notify | Significant but within scope; human should be aware | Deliver output + flag what was decided and why |
| Approve | Outside routine scope or high-impact; human must sign off | Present proposal, wait for explicit approval |
Standard approval gates
These actions always require human approval. Every gate below writes anapproval entry to .claude/metrics/config-changelog.jsonl per the Audit trail
schema — proposed, evidence_shown, and risks_surfaced included.
| Action | Rationale |
|---|---|
| Research findings (Phase 1 → 2) | Misunderstanding cascades into bad plans and bad code |
| Implementation plan (Phase 2 → 3) | Plan correctness determines code correctness |
| Production deployment | Irreversible, affects users |
| Architecture change | High-impact, hard to reverse |
| Database schema migration | Data integrity risk |
| Security-sensitive code | Vulnerability risk |
| Scope change | May affect timeline/budget |
| Add a new external dependency (a package not already in the project) | Supply chain risk — a genuinely new package. A reversible minor/patch version bump of an existing dependency is Medium (decide-and-proceed), not this gate — see Escalation Paths. |
| Delete files or data | Potentially irreversible |
| Team structure change | Affects all agents |
Agent-specific gates
Each agent defines additional gates in its ## Behavioral Guidelines > Decision Making section. The Orchestrator consolidates these when coordinating multi-agent tasks.
Intervention Mechanisms
1. Feedback (real-time correction)
amend: [modify existing behavior]
learn: [teach something new]
remember: [persist a preference]
forget: [remove a preference]- Does NOT stop the current task
- Agent incorporates the feedback and continues
- Full procedure: Feedback & Learning
2. Override (decision reversal)
override: [what was decided] → [what should be done instead]- Stops the current approach; agent adopts the human's decision without debate
- Logged as
overridein the audit trail —proposedrecords the rejected proposal,descriptionrecords the substituted decision,evidence_shown/risks_surfacedrequired - 3+ overrides on the same topic should trigger a config amend
3. Pause (temporary halt)
pause- Agent stops and presents current state
- Human reviews and either resumes or redirects
- No output is discarded
4. Stop (emergency halt)
stop- All agents halt immediately
- Current output preserved but not delivered
- Orchestrator presents a summary of what was in progress
- Human decides: resume, redirect, or abandon
Transparency Requirements
Decision logging
| Log entry | Where | When |
|---|---|---|
| Agent selected for task | Task metrics entry | At task start |
| Routing rationale | Orchestrator metrics entry | At task start |
| Approval gate triggered | Task metrics entry | When gate fires |
| Human approval/rejection | Config changelog — `proposed`/`evidence_shown`/`risks_surfaced` required | When human responds |
| Override applied | Config changelog — `proposed`/`evidence_shown`/`risks_surfaced` required | When override issued |
Decision visibility (Notify level)
Decision: [what was decided]
Rationale: [why]
Alternatives considered: [what else was evaluated]Audit trail
Canonical schema. This section is the single canonical definition of the
gate-decision audit entry — Governance & Compliance
and Feedback & Learning reference it rather than
restating the field definitions.
All oversight events are appended to .claude/metrics/config-changelog.jsonl (one
JSON object per line, append-only — existing entries are never modified, deleted,
or migrated) with:
| Field | Required for | Type | Rule |
|---|---|---|---|
type |
all | string | approval | override | pause | stop |
trigger |
all | string | user |
description |
all | string | What happened and why. For override, this is the human's substituted decision (see below) |
proposed |
approval, override — optional for pause/stop |
string | One-line statement of what was put before the human — or, for override, what the agent had decided before the human reversed it |
evidence_shown |
approval, override — optional for pause/stop |
array of strings | Artifact pointers only, never prose. Each element is a repo-relative file path (e.g. plans/<slug>.md), commit:<sha>, issue:#N / pr:#N, or .claude/metrics/<file>.jsonl@<line-or-timestamp>. Every pointer must resolve to something that still exists after the session ends — never a chat transcript or ephemeral build/console output. If the evidence exists only as prose, write it to .claude/memory/ first and point at that file. |
risks_surfaced |
approval, override — optional for pause/stop |
array of strings | Risks stated at the gate. [] is valid and explicit — it means "no risks were surfaced," distinguishing a reviewed-and-clear gate from a pre-change entry that omits the field entirely. |
Required for approval and override. Optional for pause/stop — those
record an interruption of state, not a decision over a proposal, so there is
often nothing "proposed" or "shown" to record.
For override entries: proposed records the rejected proposal — what the
agent had decided; description records the human's substituted decision,
matching the existing override: [what was decided] → [what should be done instead] grammar. Both fields must be reconstructable from the entry alone.
Non-interactive gates write identically. When a gate auto-proceeds (--yes,DEV_TEAM_AUTO_APPROVE=1, or no TTY — see /plan and /build), the entry
carries the same three fields; only description/trigger reflect the bypass
(e.g. "description": "Auto-approved (non-interactive) — no human gate").
Unattended approvals are exactly where after-the-fact audit matters most.
Backward compatible, never migrated. Entries written before this schema
existed have no proposed / evidence_shown / risks_surfaced fields and
remain valid — the changelog is append-only. Every consumer (feedback-learning's
rollback lookup, governance-compliance's compliance queries and periodic
checklist) must tolerate both shapes: an absent field means "written before
this schema," not "malformed."
Example — phase-gate approval:
{
"timestamp": "2026-07-05T18:02:11Z",
"type": "approval",
"trigger": "user",
"description": "Plan approved for issue #867 (gate-decision audit fields)",
"proposed": "Implement the gate-decision schema extension per plans/issue-867-gate-decision-audit.md",
"evidence_shown": ["plans/issue-867-gate-decision-audit.md", "issue:#867"],
"risks_surfaced": []
}Example — override:
{
"timestamp": "2026-07-05T18:10:44Z",
"type": "override",
"trigger": "user",
"description": "override: run the migration script → apply the schema change by hand-editing the two SKILL.md files",
"proposed": "Agent proposed running scripts/migrate_schema.py to apply the change",
"evidence_shown": [".claude/memory/build-issue-867.md"],
"risks_surfaced": ["Hand-editing risks missing a write site the script would have covered"]
}Output
Gate classification (autonomous / notify / approve) with rationale, or escalation summary with severity and recommended action. One decision per output; no restating of protocol rules.
Escalation Paths
Agent → Orchestrator → Human- Agent identifies the issue and flags it to the Orchestrator.
- Absorb the uncertainty before escalating it. Investigate within the codebase, run the relevant check, or dispatch the agent best placed to resolve it. Escalate only what investigation cannot settle — a raw unknown is not yet an escalation.
- Orchestrator classifies severity:
- Low: route to another agent with appropriate expertise; do not involve the human.
- Medium — reversible, low-blast-radius, and not one of the Standard approval gates above: decide and proceed. Commit to one path, state the rationale, act, and surface an explicit override — e.g. "Taking X because Y; reply
overrideto change course." Do not hand the human a menu for a decision the agent can own and reverse. A reversible minor/patch version bump of an existing dependency (e.g. to pull a bug fix) is Medium: absorb the uncertainty first (read the changelog delta, run the suite against the bump), then decide and proceed with an override affordance — do not escalate it as a no-recommendation menu. It is distinct from adding a new package, which is the Standard gate below. (The Standard approval gates — adding a new external dependency, schema migration, scope change, deletes, etc. — are never downgraded to Medium; they remain Approve. A major-version bump, or one that pulls a genuinely new transitive package, leans Approve too.) - High — irreversible or high-blast-radius: present to the human with full context, no recommendation (avoid anchoring), and wait. Reserved for genuinely human-only calls: the standard approval gates, ethical concerns, and anything hard to reverse.
- Human decides at the High tier (or when a committed Medium decision is overridden).
- The decision — or the committed Medium path plus any override — is logged and fed back to the requesting agent.