Best for
- Activation Triggers
- Keyword Triggers
- Use Cases
MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory/.opencode/skills/sk-code/sk-code-review/SKILL.md
Stack-agnostic code-review for sk-code: findings-first severity, security/correctness minimums, and surface evidence.
Decision brief
Universal findings-first review baseline paired with sk-code surface standards evidence for the detected code surface.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory --skill ".opencode/skills/sk-code/sk-code-review"Inspect the Agent Skill "sk-code-review" from https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory/blob/3d386ee21366523774d89c0aff3ebbbc8fa7ff10/.opencode/skills/sk-code/sk-code-review/SKILL.md at commit 3d386ee21366523774d89c0aff3ebbbc8fa7ff10. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Review the “Phase Detection” section in the pinned source before continuing.
1. Inspect the review target (git diff, staged diff, file list, or commit range). 2. For local diffs, optionally run detectchanges with the unified diff to identify affected symbols/files and readiness before narrowing evidence. 3. If detectchanges returns blocked or unavailable…
1. Load standards from sk-code for the detected surface only. 2. Apply precedence matrix: - Baseline security/correctness minimums always apply. - Surface style/process/verification conventions win on conflicts. 3. If precedence cannot be resolved deterministically, escalate bef…
1. Analyze for security and correctness first. 2. Analyze quality/performance, test adequacy, contract safety, and architecture concerns. 3. Analyze KISS/DRY and SOLID violations (SRP/OCP/LSP/ISP/DIP) with evidence. 4. Analyze removal opportunities with safe-now vs deferred clas…
Required output contract:
Permission review
The documentation asks the agent to run terminal commands or scripts.
git diff --numstat <base-ref>...HEAD | awk '{added+=$1; removed+=$2} END {print added+removed}'Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 34 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Universal findings-first review baseline paired with sk-code surface standards evidence for the detected code surface.
Use the code-review mode (of the sk-code family) when:
@review for pre-commit or gate validation.review, code review, pr review, audit, security review, quality gate, request changes, findings, blocking issues, merge readiness
code-webflow / code-opencode).code-webflow / code-opencode).code-quality.workflow-debug.md doctrine.workflow-verify.md doctrine.Review behavior follows a baseline+surface-evidence model:
code-review mode (of the sk-code family) findings-first doctrine.sk-code detected surface resources.TASK CONTEXT
|
+- STEP 0: Load the `code-review` mode baseline + `sk-code` surface evidence. The dispatcher / agent assembling the code-review prompt MUST prepend `CODE-REVIEW\n\n` as the first two lines of the rendered prompt before the reviewer LLM sees it. Reference resources stay unchanged.
+- STEP 1: Score intents (top-2 when ambiguity delta <= 1.0)
+- Phase 1: Scope and baseline checks
+- Phase 2: Overlay alignment
+- Phase 3: Findings-first analysis
+- Phase 4: Output contract and next action
The router discovers markdown resources recursively from references/ and assets/, then applies weighted intent scoring.
Knowledge is organized by domain mapping:
references/review-core.md
references/review-ux-single-pass.md
references/pr-state-dedup.md
references/quick-reference.md
assets/*_checklist.md
assets/removal-plan.md
references/review-core.md for shared doctrine consumed by both @review and @deep-review.references/review-ux-single-pass.md for interactive single-pass review behavior.references/quick-reference.md for the lightweight routing index across review references.references/ for shared doctrine, UX behavior, and PR-state dedup.assets/ for security, quality, completeness, SOLID, test-quality, and removal checklists.| Level | When to Load | Resources |
|---|---|---|
| ALWAYS | Every invocation, including security/correctness reviews | references/review-core.md, references/review-ux-single-pass.md, assets/security-checklist.md, assets/code-quality-checklist.md, assets/fix-completeness-checklist.md |
| CONDITIONAL | Intent score indicates need | assets/solid-checklist.md, assets/code-quality-checklist.md, assets/removal-plan.md, assets/test-quality-checklist.md |
| CONDITIONAL | CORE / COMPLETENESS / PR_STATE / SETUP intents | references/review-core.md, references/review-ux-single-pass.md, assets/fix-completeness-checklist.md, references/pr-state-dedup.md, references/quick-reference.md |
| ON_DEMAND | Explicit deep-dive request | Full mapped reference set |
| Rule Type | Source of Truth | Behavior |
|---|---|---|
| Security/correctness minimums | code-review mode baseline | Always enforced; never relaxed by surface guidance |
| Surface style/process conventions | sk-code detected surface | Surface guidance overrides baseline generic style/process advice |
| Verification/build/test commands | sk-code detected surface | Surface commands are authoritative for the detected surface |
| Ambiguous conflicts | Escalation | Ask for clarification; do not guess |
If intent/stack detection is unclear, request:
import re
from pathlib import Path
SKILL_ROOT = Path(__file__).resolve().parent
# Discover resources recursively across references and assets.
RESOURCE_BASES = (SKILL_ROOT / "references", SKILL_ROOT / "assets")
DEFAULT_RESOURCES = [
"references/review-core.md",
"references/review-ux-single-pass.md",
"assets/security-checklist.md",
"assets/code-quality-checklist.md",
"assets/fix-completeness-checklist.md",
]
INTENT_SIGNALS = {
"SECURITY": {"weight": 5, "keywords": ["security", "auth", "injection", "vulnerability", "race"]},
"QUALITY": {"weight": 4, "keywords": ["correctness", "bug", "regression", "performance", "boundary", "contract", "breaking change", "backward compatible", "compatibility"]},
"KISS": {"weight": 3, "keywords": ["kiss", "simple", "simplicity", "over-engineer", "overengineering"]},
"DRY": {"weight": 3, "keywords": ["dry", "duplication", "duplicate", "copy-paste", "repeated logic"]},
"SOLID": {"weight": 3, "keywords": ["solid", "architecture", "design", "coupling", "cohesion", "module", "adapter", "interface", "abstraction", "responsibility", "dependency", "boundary"]},
"REMOVAL": {"weight": 3, "keywords": ["remove", "dead code", "cleanup", "deprecate"]},
"TESTING": {"weight": 3, "keywords": ["test", "tests", "testing", "coverage", "assertion", "mock", "stub", "fixture", "test quality", "brittle"]},
"CORE": {"weight": 2, "keywords": ["review doctrine", "review standards", "review baseline", "single pass", "single-pass", "interactive review", "one-pass review"]},
"COMPLETENESS": {"weight": 3, "keywords": ["fix completeness", "incomplete fix", "partial fix", "complete the fix", "all call sites", "leftover", "half-done"]},
"PR_STATE": {"weight": 3, "keywords": ["pr state", "pull request state", "dedup", "deduplicate", "duplicate finding", "already flagged", "prior comment", "repeated finding"]},
"SETUP": {"weight": 2, "keywords": ["quick reference", "review setup", "how to review", "review workflow", "review cheat sheet"]},
}
RESOURCE_MAP = {
"SECURITY": ["assets/security-checklist.md"],
"QUALITY": ["assets/code-quality-checklist.md"],
"KISS": ["assets/code-quality-checklist.md"],
"DRY": ["assets/code-quality-checklist.md"],
"SOLID": ["assets/solid-checklist.md"],
"REMOVAL": ["assets/removal-plan.md"],
"TESTING": ["assets/test-quality-checklist.md"],
"CORE": ["references/review-core.md", "references/review-ux-single-pass.md"],
"COMPLETENESS": ["assets/fix-completeness-checklist.md"],
"PR_STATE": ["references/pr-state-dedup.md"],
"SETUP": ["references/quick-reference.md"],
}
ON_DEMAND_KEYWORDS = ["deep review", "full review", "all checks", "comprehensive", "flag false positives", "blocking regressions", "list findings", "read-only only", "underrepresented", "scope correctly"]
UNKNOWN_FALLBACK_CHECKLIST = [
"Confirm review scope (diff/staged/files/commit range)",
"Confirm risk priority (security/correctness/performance/maintainability/test quality/contract safety)",
"Confirm architecture lens (KISS/DRY/SOLID required or optional)",
"Confirm stack context (system-code/web/full-stack)",
"Confirm findings-only vs findings+fix follow-up",
]
def _task_text(task) -> str:
return " ".join([
str(getattr(task, "text", "")),
str(getattr(task, "query", "")),
str(getattr(task, "description", "")),
" ".join(getattr(task, "keywords", []) or []),
]).lower()
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 keyword_present(keyword: str, text: str) -> bool:
"""Boundary-aware match: bare substrings misroute ('pr' in 'improve prompt')."""
return re.search(rf"(?<![a-z0-9]){re.escape(keyword)}(?![a-z0-9])", text) is not None
def score_intents(task) -> dict[str, float]:
text = _task_text(task)
scores = {intent: 0.0 for intent in INTENT_SIGNALS}
for intent, cfg in INTENT_SIGNALS.items():
for keyword in cfg["keywords"]:
if keyword_present(keyword, text):
scores[intent] += cfg["weight"]
return scores
def select_intents(scores: dict[str, float], ambiguity_delta: float = 1.0, max_intents: int = 2) -> list[str]:
ranked = sorted(scores.items(), key=lambda item: item[1], reverse=True)
if not ranked or ranked[0][1] <= 0:
return ["QUALITY"]
selected = [ranked[0][0]]
if len(ranked) > 1 and ranked[1][1] > 0 and (ranked[0][1] - ranked[1][1]) <= ambiguity_delta:
selected.append(ranked[1][0])
return selected[:max_intents]
def detect_surface_evidence(task, workspace_files=None, changed_files=None) -> str:
text = _task_text(task)
files = " ".join((workspace_files or []) + (changed_files or [])).lower()
if ".opencode/" in files or keyword_present("jsonc", text) or keyword_present("mcp", text):
return "sk-code:code-opencode"
if any(keyword_present(term, text) for term in ["frontend", "web", "css", "dom", "browser"]) or any(
marker in files for marker in ["next.config", "vite.config", "package.json", "src/"]
):
return "sk-code:code-webflow"
return "sk-code:unknown"
def route_review_resources(task, workspace_files=None, changed_files=None):
inventory = discover_markdown_resources()
text = _task_text(task)
scores = score_intents(task)
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 DEFAULT_RESOURCES:
load_if_available(relative_path)
if sum(scores.values()) < 0.5:
return {
"intents": ["QUALITY"],
"needs_disambiguation": True,
"disambiguation_checklist": UNKNOWN_FALLBACK_CHECKLIST,
"surface_evidence": detect_surface_evidence(task, workspace_files, changed_files),
"resources": loaded,
}
for intent in intents:
for relative_path in RESOURCE_MAP.get(intent, []):
load_if_available(relative_path)
if any(keyword_present(keyword, text) for keyword in ON_DEMAND_KEYWORDS):
for paths in RESOURCE_MAP.values():
for relative_path in paths:
load_if_available(relative_path)
surface_evidence = detect_surface_evidence(task, workspace_files, changed_files)
precedence = {
"baseline_minimums": ["security", "correctness"],
"surface_overrides": ["style", "build", "test_commands", "surface_process"],
"on_conflict": "escalate",
}
return {
"intents": intents,
"scores": scores,
"surface_evidence": surface_evidence,
"precedence": precedence,
"resources": loaded,
}
git diff, staged diff, file list, or commit range).detect_changes with the unified diff to identify affected symbols/files and readiness before narrowing evidence.detect_changes returns blocked or unavailable, surface "structural-impact analysis unavailable" as a caveat and continue the plain git-diff review; never block the review on structural-impact availability.code-review mode (of the sk-code family).sk-code surface standards evidence when a surface is detected.sk-code for the detected surface only.P0, P1, P2).instance-only, class-of-bug, cross-consumer, algorithmic, matrix/evidence, or test-isolation. If unknown, default to class/cross-consumer until a producer/consumer inventory proves instance-only.Use numeric calibration only as reviewer context, never as the gate. A finding may include an optional advisory riskScore to communicate relative risk, and reviewers may adjust that score by +/-2 for local context such as exploitability, blast radius, user impact, confidence, or proven containment. The blocking decision still comes only from the P0/P1/P2 severity contract. Do not introduce score>=4 or any other numeric threshold as a blocker.
A finding may use the narrow fix path only when all are true:
rg proves no same-class producer or consumer.Otherwise, run the full fix completeness checklist.
Required output contract:
## Code Review Summary
**Files reviewed**: X files, Y lines changed
**Overall assessment**: [APPROVE / REQUEST_CHANGES / COMMENT]
**Baseline used**: [sk-code (`code-review`)]
**Surface evidence used**: [sk-code:code-webflow | sk-code:code-opencode | sk-code:unknown]
## Findings
### P0 - Critical
1. [path:line] Title
- Risk
- User impact
- Finding class: [instance-only | class-of-bug | cross-consumer | algorithmic | matrix/evidence | test-isolation]
- Scope proof: [grep/test evidence proving class coverage or instance-only status]
- affectedSurfaceHints: [optional string array of short producer/consumer surface names; recommended for actionable findings, required for cross-consumer findings]
- riskScore: [optional advisory number only; never gating]
- Recommended fix
### P1 - High
...
## Removal/Iteration Plan
## Next Steps
After reporting findings, request explicit next action before any implementation follow-up.
Every review MUST end with exactly one of the following plain-text lines as the absolute final line of the output (no trailing whitespace, no variation):
Review status: APPROVED
Review status: REQUESTED_CHANGES
Review status: COMMENTED
Example output bottom:
...
## Next Steps
1. Fix the null-deref at src/foo.ts:42
2. Add input validation for the `/api/bar` endpoint
Review status: REQUESTED_CHANGES
Downstream automation parses this final line via exact string match — do not vary the format, add trailing punctuation, or wrap in Markdown formatting. The sole exception is the documented M-1 / M-2 skip output (§9): those lines begin with the exact Review status: COMMENTED and append a parenthetical reason, so a leading-verdict (grep / startsWith) parse still yields COMMENTED. A normal review must still end with one of the three exact lines above.
sk-code surface evidence used for standards alignment.SMART ROUTING) as the authoritative routing source.code-review mode baseline + sk-code surface evidence contract is explicit in report context.@review agents in .opencode/agents/review.md.spec_kit and create command YAML workflows.code-webflow / code-opencode) apply fixes and own the implement → debug → verify workflow doctrine, and code-quality owns author-side gates.Start with references/quick-reference.md, then load task-specific doctrine, assets, or scripts.
Manual testing scenarios for the code-review mode (of the sk-code family) live in manual-testing-playbook/manual-testing-playbook.md (root index) plus per-feature sub-files under manual-testing-playbook/<topic>/<scenario>.md (both the category folder and the scenario file use bare descriptive slugs, no numeric prefix). Run scenarios via bash .opencode/skills/sk-doc/scripts/validate_document.py manual-testing-playbook/manual-testing-playbook.md for structural validation; execute scenarios in opencode/Claude/OpenCode sessions for behavioral verification.
Prevents redundant re-reviews when a PR has not changed since the last review.
Signature computation:
diff_content_hash = sha256(git diff <base-ref>...HEAD)
signature = sha256(commit_subject + "\u001f" + diff_content_hash)
Where commit_subject is the first line of git log <base-ref>...HEAD --format=%s (latest commit subject).
Cache storage:
.opencode/.code-review-cache/<repo-ref>.jsonl<repo-ref> is computed as sha256(git remote get-url origin).slice(0, 12){"signature": "<sha256-hex>", "timestamp": "<ISO-8601>", "prev_sha": "<commit-sha>"}Skip behavior: When the current signature matches a prior cache entry, the review emits:
Review status: COMMENTED (no changes since last review at <prev_sha>)
No full review analysis runs. Automation may treat COMMENTED as a pass (no new findings).
Cache write: After each full review completes, write the current signature + timestamp + HEAD SHA to the cache file.
Skips full review for trivially small diffs to save compute, with a conservative taxonomy that never skips high-risk changes.
Enable gate:
export SK_CODE_REVIEW_MIN_CHANGED_LINES=50 # >0 enables; default 0 = disabled
Changed-line counting command:
git diff --numstat <base-ref>...HEAD | awk '{added+=$1; removed+=$2} END {print added+removed}'
Conservative skip taxonomy — NEVER skip when diff touches:
| Risk Class | Path/File Patterns | Rationale |
|---|---|---|
| Security / Authentication / Authorization | auth*, *-auth-*, *permission*, *credential*, *token*, *secret*, *oauth*, *sso*, *login*, *session* | Compromised auth defeats everything |
| Config files | *.config.*, *config*.json, *config*.yaml, *config*.toml, *.env*, *.ini, *.cfg | One-line config change can break production |
| Persistence | *.sql, *migration*, *schema*, *db*.ts, *repository*, paths under /db/ or /migrations/ | Schema changes risk data loss |
| Dependency manifests | package.json, package-lock.json, Cargo.toml, Cargo.lock, pyproject.toml, poetry.lock, requirements.txt, *.lock, Gemfile, Gemfile.lock | Transitive dependency changes are high-risk |
| Sandboxing / Subprocess | *sandbox*, *subprocess*, *exec*, *spawn*, *eval* | Arbitrary code execution boundaries |
| Public-facing responses | *.handler.ts, *-api*, *-route*, *-controller*, paths under /handlers/, /routes/, /api/ | User-visible behavior changes |
Skip behavior:
When SK_CODE_REVIEW_MIN_CHANGED_LINES > 0, total changed lines < threshold, AND no sensitive paths are touched:
Review status: COMMENTED (skipped: diff below evidence threshold of N lines, no sensitive paths touched)
If sensitive paths ARE touched, the full review runs regardless of line count.
Gate is ALWAYS opt-in. Without SK_CODE_REVIEW_MIN_CHANGED_LINES set, M-2 has zero effect — all diffs receive full reviews.
SK_CODE_REVIEW_DEPTH=lite|full|ultra is an optional environment variable the reviewing agent honors (resolved env > config > default) — exactly like the §9.2 SK_CODE_REVIEW_MIN_CHANGED_LINES gate. Both are skill guidance the reviewer reads and applies in-loop, not a separate compiled dispatcher; this alias only NAMES and PERSISTS an already-existing routing behavior, adds no new tier, and relaxes no floor:
full (default / unset): the normal ALWAYS + CONDITIONAL + ON_DEMAND routing.ultra: bias intent selection toward the existing ON_DEMAND reference set (the deep-dive tier) for the session, so a reviewer does not have to repeat "comprehensive / full review" each time.lite: maps to the existing M-2 conservative skip (§9.2) — it NEVER lowers the ALWAYS tier, the baseline security/correctness minimums, or the P0/P1/P2 contract. It cannot skip a review on a sensitive path (auth/config/persistence/deps/sandbox/public-response), exactly as M-2 already enforces.The depth alias is advisory routing only; it must never be read as permission to relax a floor.
Related skills: sk-doc for skill authoring and packaging standards, sk-code for surface-aware standards, and system-spec-kit for packet-governed review workflows.
Frequently asked questions
Universal findings-first review baseline paired with sk-code surface standards evidence for the detected code surface.
The source record exposes this install command: npx skills add https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory --skill ".opencode/skills/sk-code/sk-code-review". Inspect the command and pinned source before running it.
Static rules flagged exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
VincentChuWaiChow/vanguard-frontier-agentic
Retrieves and analyzes Apex debug logs from a connected Salesforce org to identify governor-limit hits, SOQL N+1 patterns, unhandled exceptions, and async job failures. T1 read-only runtime — retrieves logs only, never executes code or mutates data. TRIGGER when: user asks to analyze an Apex log, debug a trigger failure, diagnose a governor limit hit, interpret a stack trace from a Salesforce org, or review a DEBUG log for performance issues. Trigger phrases: analyze apex log, debug this trigger
th3vib3coder/vibe-science
Scientific research engine for hypothesis testing, literature gap analysis, experimental validation, and data-driven discovery. Enforces adversarial review (Reviewer 2), 32 quality gates, tree search over hypotheses, confounder harness for quantitative claims, and serendipity detection. TRIGGER when: user asks to analyze scientific data, test hypotheses, validate findings, search for research gaps, design experiments, or investigate results. DO NOT TRIGGER when: pure code review, documentation w
dotnet/skills
Grade specified test methods individually and produce a concise PR-ready table with each fully qualified test name, an A-F grade, score band, and one-line note. USE FOR per-test feedback on a curated list such as new or modified tests in a pull request, not a suite-wide audit. Polyglot: .NET, Python, TS/JS, Java, Go, Ruby, Rust, Swift, Kotlin, PowerShell, C++. Inputs may be test methods, method bodies, or file-and-line spans. DO NOT USE FOR: full suite audits (use test-quality-auditor agent or t
yonatangross/orchestkit
PR review using parallel specialized agents for code quality, security, testing, architecture, and performance analysis. Synthesizes findings into a review report with conventional comments (praise/issue/suggestion/nitpick) and approve or request-changes verdict. Use when reviewing pull requests, conducting security audits, or validating changes before merge.