ワンクリックで
deep-review
Autonomous iterative code-review loop with externalized state, convergence detection, P0/P1/P2 findings, fresh context per pass.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Autonomous iterative code-review loop with externalized state, convergence detection, P0/P1/P2 findings, fresh context per pass.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Routes non-trivial requests to matching skills through standalone MCP metadata and stable advisor tool ids.
Unified spec-folder workflow + context preservation: Levels 1-3+, validation, Spec Kit Memory. Required for file modifications.
OpenCode CLI orchestrator: external dispatch, in-OpenCode parallel sessions, cross-AI handback with full runtime context.
Shared deep-loop runtime: executor + prompt-pack + validation + atomic state + coverage-graph + Bayesian scoring + fallback routing.
Iterative codebase-context-gathering deep loop. Runs a configurable pool over a shared scope in parallel (native-only by default; optional heterogeneous CLI seats) and synthesizes a reuse-first Context Report for planning/implementation. Use before /speckit:plan or /speckit:implement to map existing code, integration points, and conventions.
Unified deep-loop workflow skill: routes a request to one of five modes (context, research, review, ai-council, improvement) over the shared deep-loop-runtime backend. Holds no per-mode logic — it dispatches by workflowMode through mode-registry.json. Use for codebase-context gathering, autonomous research, iterative code review, multi-seat AI Council planning, and evaluator-first agent/model/skill/non-dev-system improvement.
| name | deep-review |
| description | Autonomous iterative code-review loop with externalized state, convergence detection, P0/P1/P2 findings, fresh context per pass. |
| allowed-tools | ["Read","Write","Edit","Bash","Grep","Glob","Task","memory_context","memory_search","code_graph_query"] |
| argument-hint | [target] [:auto|:confirm] [--max-iterations=N] [--convergence=N] |
| version | 1.10.2.0 |
Iterative code review and quality auditing protocol with fresh context per iteration, externalized state, convergence detection, and severity-weighted findings (P0/P1/P2).
Runtime path resolution:
.opencode/agents/*.md.claude/agents/*.md.codex/agents/*.tomlConvergence threshold semantics and sibling-parity notes (deep-review 0.10 vs deep-research 0.05 vs deep-ai-council 0.20) live in references/convergence/convergence.md §1 under "Threshold Semantics and Sibling Parity".
Use this skill when:
sk-code-review instead)sk-code or /speckit:implement)This skill is invoked EXCLUSIVELY through the /deep:review command. The command's YAML workflow owns state, dispatch, and convergence.
NEVER:
/tmp and dispatch them via copilot -p@deep-review LEAF agent via the Task tool for iteration loops (the agent is LEAF, a single iteration, and MUST be driven by the command's workflow)deep-review-state.jsonl, deep-review-config.json, deltas/, prompts/, logs/{spec_folder}/review/COMMAND-DRIVEN FAN-OUT IS SUPPORTED: use --executor/--executors/--concurrency flags on /deep:review. The command's YAML step_fanout_spawn owns multi-lineage dispatch; fanout-merge.cjs applies strongest-restriction (any lineage active P0 → merged FAIL). This is not ad-hoc shell dispatch — it is the canonical fan-out path. Intra-lineage wave orchestration remains deferred.
ALWAYS:
/deep:review :auto or /deep:review :confirm.opencode/commands/deep/assets/deep_review_auto.yaml)scripts/reduce-state.cjs be the SINGLE state writerresolveArtifactRoot(specFolder, 'review') from .opencode/skills/system-spec-kit/shared/review-research-paths.cjs to locate the canonical review rootdeep review, code audit, iterative review, review loop, release readiness, spec folder review, convergence detection, quality audit, find misalignments, verify cross-references, pre-release review, audit spec folder
| Level | When to Load | Resources |
|---|---|---|
| ALWAYS | Every skill invocation | references/protocol/quick_reference.md |
| CONDITIONAL | If intent signals match | Loop protocol, convergence, state format, review contract |
| ON_DEMAND | Only on explicit request | Full protocol docs, detailed specifications |
discover_markdown_resources() recursively inventories references/ and assets/.load_if_available() guards markdown paths, checks inventory, and uses seen.get_routing_key() derives the review phase from dispatch context.UNKNOWN_FALLBACK returns review disambiguation and missing phases return a "no review resources" notice.from pathlib import Path
SKILL_ROOT = Path(__file__).resolve().parent
RESOURCE_BASES = (SKILL_ROOT / "references", SKILL_ROOT / "assets")
DEFAULT_RESOURCE = "references/protocol/quick_reference.md"
INTENT_SIGNALS = {
"REVIEW_SETUP": {"weight": 4, "keywords": ["deep review", "review mode", "code audit", "iterative review", ":review", "audit spec"]},
"REVIEW_ITERATION": {"weight": 4, "keywords": ["review iteration", "dimension review", "review findings", "P0", "P1", "P2"]},
"REVIEW_CONVERGENCE": {"weight": 3, "keywords": ["review convergence", "coverage gate", "verdict", "binary gate", "all dimensions"]},
"REVIEW_REPORT": {"weight": 3, "keywords": ["review report", "remediation", "verdict", "release readiness", "planning packet"]},
}
NOISY_SYNONYMS = {
"REVIEW_SETUP": {"audit code": 2.0, "review spec folder": 1.8, "release readiness": 1.5, "pre-release": 1.5},
"REVIEW_ITERATION": {"review dimension": 1.5, "check correctness": 1.4, "check security": 1.4, "check alignment": 1.4},
"REVIEW_CONVERGENCE": {"all dimensions covered": 1.6, "coverage complete": 1.5, "stop review": 1.4},
"REVIEW_REPORT": {"review results": 1.5, "what to fix": 1.4, "ship decision": 1.6, "final report": 1.5},
}
# RESOURCE_MAP: local markdown assets + local review-specific protocol docs
RESOURCE_MAP = {
"REVIEW_SETUP": [
"references/protocol/loop_protocol.md",
"references/state/state_format.md",
"references/state/state_outputs.md",
"references/state/state_reducer_registry.md",
"assets/deep_review_strategy.md",
],
"REVIEW_ITERATION": [
"references/protocol/loop_protocol.md",
"references/convergence/convergence.md",
"references/convergence/convergence_signals.md",
],
"REVIEW_CONVERGENCE": [
"references/convergence/convergence.md",
"references/convergence/convergence_signals.md",
"references/state/state_outputs.md",
],
"REVIEW_REPORT": [
"references/state/state_format.md",
"references/state/state_outputs.md",
"references/state/state_reducer_registry.md",
"assets/deep_review_dashboard.md",
],
}
LOADING_LEVELS = {
"ALWAYS": [DEFAULT_RESOURCE],
"ON_DEMAND_KEYWORDS": ["full protocol", "all templates", "complete reference", "resume deep review", "deep-review wave", "review artifact", "release-readiness audit", "convergence-tracked", "same session lineage", "P0"],
"ON_DEMAND": [
"references/protocol/loop_protocol.md",
"references/state/state_format.md",
"references/convergence/convergence.md",
"references/convergence/convergence_signals.md",
"references/state/state_outputs.md",
"references/state/state_reducer_registry.md",
],
}
PHASE_RESOURCE_MAP = {
"init": ["references/protocol/loop_protocol.md", "references/state/state_format.md", "references/state/state_outputs.md"],
"iteration": ["references/protocol/loop_protocol.md", "references/convergence/convergence.md", "references/convergence/convergence_signals.md"],
"stuck": ["references/convergence/convergence.md", "references/convergence/convergence_signals.md", "references/protocol/loop_protocol.md", "references/state/state_reducer_registry.md"],
"synthesis": ["references/state/state_format.md", "references/state/state_outputs.md", "references/state/state_reducer_registry.md", "assets/deep_review_dashboard.md"],
}
NON_MARKDOWN_REFERENCES = {
"review_contract": "assets/review_mode_contract.yaml",
}
UNKNOWN_FALLBACK_CHECKLIST = [
"Confirm the review target or spec folder",
"Confirm the review phase",
"Provide one concrete file, diff range, or expected finding class",
"Confirm the verification command set before final review",
]
def _guard_in_skill(relative_path: str) -> str:
resolved = (SKILL_ROOT / relative_path).resolve()
resolved.relative_to(SKILL_ROOT)
if resolved.suffix.lower() != ".md":
raise ValueError(f"Only markdown resources are routable: {relative_path}")
return resolved.relative_to(SKILL_ROOT).as_posix()
def discover_markdown_resources() -> set[str]:
docs = []
for base in RESOURCE_BASES:
if base.exists():
docs.extend(path for path in base.rglob("*.md") if path.is_file())
return {doc.relative_to(SKILL_ROOT).as_posix() for doc in docs}
def get_routing_key(dispatch_context) -> str:
phase = str(getattr(dispatch_context, "phase", "")).strip().lower()
if phase:
return phase
text = str(getattr(dispatch_context, "text", "")).lower()
if "recovery" in text:
return "stuck"
if "convergence" in text or "synthesis" in text:
return "synthesis"
if "iteration" in text or "dimension" in text:
return "iteration"
return "init"
def route_review_resources(task, dispatch_context):
inventory = discover_markdown_resources()
routing_key = get_routing_key(dispatch_context)
scores = score_intents(task, INTENT_SIGNALS, NOISY_SYNONYMS)
intents = select_intents(scores, ambiguity_delta=1.0)
loaded = []
seen = set()
def load_if_available(relative_path: str) -> None:
guarded = _guard_in_skill(relative_path)
if guarded in inventory and guarded not in seen:
load(guarded)
loaded.append(guarded)
seen.add(guarded)
for relative_path in LOADING_LEVELS["ALWAYS"]:
load_if_available(relative_path)
if max(scores.values() or [0]) < 0.5:
return {
"routing_key": routing_key,
"load_level": "UNKNOWN_FALLBACK",
"needs_disambiguation": True,
"disambiguation_checklist": UNKNOWN_FALLBACK_CHECKLIST,
"resources": loaded,
}
phase_resources = PHASE_RESOURCE_MAP.get(routing_key, [])
if routing_key == "unknown" or not phase_resources:
return {
"routing_key": routing_key,
"notice": f"No review resources found for routing key '{routing_key}'",
"resources": loaded,
}
for intent in intents:
for relative_path in RESOURCE_MAP.get(intent, []):
load_if_available(relative_path)
for relative_path in phase_resources:
load_if_available(relative_path)
task_text = str(getattr(task, "text", "")).lower()
if any(keyword in task_text for keyword in LOADING_LEVELS["ON_DEMAND_KEYWORDS"]):
for relative_path in LOADING_LEVELS["ON_DEMAND"]:
load_if_available(relative_path)
return {
"routing_key": routing_key,
"intents": intents,
"resources": loaded,
"non_markdown_references": NON_MARKDOWN_REFERENCES,
}
Detect the current review phase from dispatch context to load appropriate resources:
| Phase | Signal | Resources to Load |
|---|---|---|
| Init | No JSONL exists in review/ | Loop protocol, state format, state outputs, review contract |
| Iteration | Dispatch context includes dimension + iteration number | Loop protocol, convergence, convergence signals, review contract |
| Stuck | Dispatch context includes "RECOVERY" | Convergence, convergence signals, loop protocol, reducer registry |
| Synthesis | Convergence triggered STOP | Review contract, state format, state outputs, reducer registry |
When {spec_folder}/resource-map.md exists at init, deep review treats it as a first-class audit input instead of optional prompt wiring.
resource_map_present: true in deep-review-config.json.Known Context so later iterations inherit the packet inventory baseline.Resource Map Coverage to a first-class audit angle alongside correctness, regression risk, test coverage, cross-runtime parity, observability, and docs-vs-code drift.target_files from {spec_folder}/applied/T-*.md against resource-map.md.expected-by-scope vs gap), and implementation paths absent from the map.resource-map-coverage category.## Resource Map Coverage Gate into review-report.md when the map was present at init.{artifact_dir}/resource-map.md from review delta evidence unless the operator passes --no-resource-map.When {spec_folder}/resource-map.md is absent at init:
resource_map_present: false.resource-map.md not present. Skipping coverage gate in Known Context./deep:review owns the loop. The YAML workflow initializes state, dispatches one LEAF review iteration at a time, evaluates convergence, synthesizes review-report.md, and saves continuity. The LEAF agent reads state, reviews one dimension, writes iteration-NNN.md, updates strategy, and appends JSONL.
The review state packet always lives under the target spec's local review/ folder. Root-spec targets use {spec_folder}/review/ directly. Child-phase and sub-phase targets use flat-first: a first run with an empty review/ directory writes flat at {spec_folder}/review/. A pt-NN subfolder ({basename(spec_folder)}-pt-{NN}) is allocated only when prior content already exists in review/ for a non-matching target (continuation runs reuse the existing flat artifact or matching pt-NN packet). This avoids the unnecessary pt-01 wrapper on first runs.
Example (first run on a child phase): .../026-graph.../006-continuity-refactor-gates/003-gate-c-writer-ready/ → 003-gate-c-writer-ready/review/ (flat, no subfolder).
Example (subsequent run with prior content for a different target): 003-gate-c-writer-ready/review/003-gate-c-writer-ready-pt-02/ (pt-NN allocated as a sibling to the prior content).
Core artifacts: deep-review-config.json, deep-review-state.jsonl, deep-review-strategy.md, deep-review-dashboard.md, .deep-review-pause, resource-map.md, review-report.md, and iterations/iteration-NNN.md.
Each agent dispatch gets a fresh context window. State continuity comes from files, not memory. This solves context degradation in long review sessions where accumulated findings would otherwise bias subsequent dimensions.
Init creates config, strategy, and JSONL state. Each loop reads state, checks convergence, dispatches one dimension, records findings, and reduces state. Synthesis compiles the final report and saves continuity.
The four primary review dimensions (configured in assets/review_mode_contract.yaml):
| Dimension | Focus | Key Questions |
|---|---|---|
| Correctness | Logic, behavior, error handling | Does the code do what it claims? Are edge cases handled? |
| Security | Vulnerabilities, exposure, trust boundaries | Are inputs validated? Are credentials exposed? |
| Spec-Alignment / Traceability | Spec vs. implementation fidelity | Does code match spec.md? Are all planned items present? |
| Completeness / Maintainability | Coverage, dead code, documentation | Are TODOs resolved? Is the code self-documenting? |
Review mode is lineage-aware. Supported lifecycle modes are new, resume, and restart. Required lineage fields include sessionId, parentSessionId, lineageMode, generation, continuedFromRun, and releaseReadinessState. The reducer consumes the latest JSONL delta, the new iteration file, and prior reduced state, then emits finding registry, dashboard metrics, and strategy updates.
| Severity | Criteria | Blocking |
|---|---|---|
| P0 | Correctness failure, security vulnerability, spec contradiction | Yes, blocks PASS verdict |
| P1 | Degraded behavior, incomplete implementation, missing validation | Conditional, triggers CONDITIONAL verdict |
| P2 | Style, naming, minor improvements, documentation gaps | No, PASS with advisories |
| Verdict | Condition |
|---|---|
| PASS | No P0/P1 findings, P2 findings recorded as advisories (hasAdvisories: true) |
| CONDITIONAL | P1 findings present, remediation plan included in report |
| FAIL | Any P0 finding confirmed after adversarial self-check |
Always emit exactly one parseable verdict. A confirmed active P0 locks the verdict to FAIL; do not soften it to CONDITIONAL, partial, or any other phrasing. Truncated or partial iteration output is not a valid substitute for the final verdict line. Review narratives and JSONL details may include an optional advisory riskScore for relative risk calibration, but it never changes the PASS|CONDITIONAL|FAIL mapping.
When the review target is a spec folder, deep review reflects the AC_COVERAGE validation signal in synthesis for Level 2+ folders only after both lifecycle conditions are true: checklist.md exists and implementation-summary.md is in-progress or later. Level 1 folders and fresh scaffolds are exempt. The signal is advisory while the validation rule remains INFO/default-off; it can add traceability context and planning-seed work, but it must not alter the exact iteration final-line contract below unless a later enforcement rollout explicitly changes severity.
Every iteration-NNN.md MUST end with exactly one of the following plain-text lines as the absolute final line (no trailing whitespace, no variation):
Review verdict: PASS
Review verdict: CONDITIONAL
Review verdict: FAIL
Mapping rule: PASS if no P0 or P1 findings in this iteration. CONDITIONAL if any P1 (but no P0) findings. FAIL if any P0 findings. P2-only findings → PASS.
VERDICT_LOCK: Any confirmed active P0 forces the exact final line Review verdict: FAIL. Do not relabel that state as conditional, partial, mixed, or advisory.
Downstream automation (including the synthesis phase and CI gate parser) parses this final line via exact string match, do not vary the format.
Executor settings are owned by the YAML workflow and rendered prompt pack. Do not bypass the workflow by hand-dispatching review iterations; each iteration stays LEAF-only and produces the required markdown plus JSONL delta. The full contract -- per-iteration invariants, failure modes, JSONL audit field, config surface and precedence, executor-invariant guarantees, and the four-value code-graph readiness TrustState surface -- lives in references/protocol/loop_protocol.md.
iteration-NNN.md.newInfoRatio.[SOURCE: file:line]. Reject inference-only findings.generate-context.js for continuity saves. Owner: the YAML workflow (deep_review_{auto,confirm}.yaml) calls generate-context.js at the save phase. The reducer (scripts/reduce-state.cjs) does NOT call it directly. Operators should not invoke the reducer expecting continuity-save side effects.BINDING: lines before workflow output.REFUSE: nested Task tool dispatch is forbidden for LEAF agents. Returning partial findings instead.@deep-review is LEAF-only. It cannot dispatch additional agents. When dispatch is requested, use the canonical REFUSE wording (ALWAYS rule 14).deep-review-config.json is read-only after initialization.complete | timeout | error | stuck | insight
insight: Low newInfoRatio but important finding that changes the verdict trajectory.The router discovers reference, asset, and script docs dynamically. Start with references/protocol/quick_reference.md, references/protocol/loop_protocol.md, references/convergence/convergence.md, references/convergence/convergence_signals.md, references/state/state_format.md, references/state/state_outputs.md, references/state/state_reducer_registry.md, assets/deep_review_dashboard.md, assets/deep_review_strategy.md, then load task-specific resources from references/, templates from assets/, and automation from scripts/ when present.
Scripts: scripts/reduce-state.cjs, scripts/runtime-capabilities.cjs.
Detailed contracts: references/protocol/loop_protocol.md (executor invariants, failure modes, config surface) and references/state/state_reducer_registry.md (two-tier content-hash dedup).
Related skills: deep-research for investigation loops, sk-code-review for single-pass review doctrine, and system-spec-kit for command-owned state and continuity saves.
A review loop is considered complete when every item below holds:
compositeStopScore, with required gates green) OR hit maxIterations without false-positive STOP.deep-review-state.jsonl and reflected in deep-review-strategy.md.spec_code, checklist_evidence) executed at least once. Overlay protocols that apply to the target type ran or were explicitly marked N/A.deep-review-config.json, deep-review-state.jsonl, deep-review-findings-registry.json, deep-review-strategy.md, deep-review-dashboard.md, and one iterations/iteration-NNN.md per dispatched iteration.review/resource-map.md was emitted from converged delta evidence unless config.resource_map.emit == false (operator flag --no-resource-map).review/review-report.md carries all 9 core sections (Executive Summary, Planning Trigger, Active Finding Registry, Remediation Workstreams, Spec Seed, Plan Seed, Traceability Status, Deferred Items, Audit Appendix) plus the conditional ## Resource Map Coverage Gate section when resource_map_present == true.generate-context.js (description.json, graph-metadata.json, indexed memory entries).Each gate is binary: pass or block. STOP cannot be legal until every gate passes.
deep-review-config.json parses, names every required field, and lineage block matches the current run (sessionId, parentSessionId, lineageMode, generation, continuedFromRun, releaseReadinessState).deep-review-strategy.md carries the Files Under Review table, Cross-Reference Status grouped by core vs overlay, Known Context, and Review Boundaries.deep-review-state.jsonl opens with the config record and appends one iteration record per dispatched iteration. Reducer-owned fields in deep-review-findings-registry.json reconcile against JSONL totals.iterations/iteration-NNN.md (non-empty, ending with the canonical Review verdict: PASS|CONDITIONAL|FAIL line) AND a JSONL delta record with findingDetails[], findingsSummary, newFindingsRatio.severity in {P0, P1, P2}, category, file:line evidence, finding_class, and a content_hash for synthesis dedup.riskScore may appear in finding details as non-gating context only; verdict logic must ignore it.dimensions_covered_count == configured_dimensions_count AND required traceability protocols covered, stable for at least minStabilizationPasses iterations.AC_COVERAGE status, covered/total, floor, and next action; default-off INFO output is advisory and does not by itself block STOP.references/convergence/convergence.md "Security-Sensitive Fix Overrides" apply (minStabilizationPasses=2, closed-finding replay required, fix-completeness gate enforced).The release-readiness handoff is valid when:
in-progress, converged, release-blocking).hasAdvisories: true). CONDITIONAL = P1 findings present with remediation plan. FAIL = any P0 confirmed after adversarial self-check.resource-map.md Phase-5 Augmentation section (if present) lists novel logic gaps with iteration source links, or explicitly records the empty-result case.skill_advisor.py "run a deep review loop" --threshold 0.8 still surfaces the skill after any graph-metadata edits.bash .opencode/skills/system-spec-kit/scripts/spec/validate.sh <spec-folder> --strict exits 0 on the target spec folder.This skill operates within the behavioral framework defined in the active runtime's root doc (CLAUDE.md, AGENTS.md, or CODEX.md).
Key integrations:
skill_advisor.py (keywords: deep review, code audit, iterative review){spec_folder}/review/ state packet location/speckit:resume is the operator-facing recovery surface. Canonical packet continuity is written via generate-context.js/deep:review is the primary invocation pointRecover context via /speckit:resume in the order handover.md -> _memory.continuity -> spec docs. During review, the agent writes iteration, strategy, and JSONL state. After synthesis, run generate-context.js.
code_graph_query + Grep is available to @deep-review for semantic code search when Grep/Glob exact matching is insufficient. Use for: