Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Expert multi-AI code review with inline PR comments — use for thorough quality and security analysis
.claude/skills/hashgraph-online-skill-code-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 140% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 199% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 207% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 67% | 0% |
> Host: Codex CLI — This skill was designed for Claude Code and adapted for Codex. > Cross-reference commands use installed skill names in Codex rather than /octo:* slash commands. > Use the active Codex shell and subagent tools. Do not claim a provider, model, or host subagent is available until the current session exposes it. > For host tool equivalents, see skills/blocks/codex-host-adapter.md.
When this skill is invoked, you MUST execute the multi-LLM review pipeline. You are PROHIBITED from:
Your first output line MUST be: 🐙 **CLAUDE OCTOPUS ACTIVATED** - Multi-LLM Code Review
Invokes the code-reviewer persona for thorough code analysis during the ink (deliver) phase.
For fast sanity checks (staged changes, small PRs), skip the full review pipeline and run just two phases:
bash# Quick: grasp (consensus on scope) → tangle (parallel review) ${HOME}/.claude-octopus/plugin/scripts/orchestrate.sh grasp "[review request]" ${HOME}/.claude-octopus/plugin/scripts/orchestrate.sh tangle "[synthesized scope]"
Use quick mode when user says "check this PR", "quick review", "sanity check my changes", or for pre-commit checks. Use the full review for PRs with security/architecture impact.
bash# Via orchestrate.sh ${HOME}/.claude-octopus/plugin/scripts/orchestrate.sh spawn code-reviewer "Review this pull request for security issues" # Via auto-routing (detects review intent) ${HOME}/.claude-octopus/plugin/scripts/orchestrate.sh auto "review the authentication implementation"
This skill wraps the code-reviewer persona defined in:
agents/personas/code-reviewer.mdcodex-reviewgpt-5.2-codexink"Review this PR for OWASP Top 10 vulnerabilities"
"Analyze the error handling in src/api/"
"Check for memory leaks in the connection pool"
"Review the test coverage for the auth module"When the review context indicates AI-assisted, Autonomous / Dark Factory, or unclear provenance, raise the rigor bar. Do not treat generated code as trustworthy just because it is polished.
Check for concrete signs that the change followed red-green-refactor rather than test-after implementation:
Elevate or add findings when you see patterns common in high-autonomy output:
Add a short section to the review synthesis when autonomy or TDD is in scope:
markdown## TDD / Autonomy Assessment - Provenance: Human-authored | AI-assisted | Autonomous / Dark Factory | Unknown - TDD evidence: Confirmed | Partial | Unknown - Autonomous risk signals: None | Minor | Significant - Recommendation: Ship | Fix before merge | Re-run with /octo:tdd or tighter supervision
After the code-reviewer persona completes, run stub detection to verify implementation completeness.
Step 1: Get changed files
bash# Get files changed in the commit/PR if [ -n "$COMMIT_RANGE" ]; then changed_files=$(git diff --name-only "$COMMIT_RANGE") else changed_files=$(git diff --name-only HEAD~1..HEAD) fi # Filter for source code files source_files=$(echo "$changed_files" | grep -E "\.(ts|tsx|js|jsx|py|go)$")
Step 2: Check for stub patterns
For each changed file, check for common stub indicators:
bashfor file in $source_files; do echo "Checking $file for stubs..." # Check 1: Comment-based stubs stub_count=$(grep -E "(TODO|FIXME|PLACEHOLDER|XXX)" "$file" 2>/dev/null | wc -l | tr -d ' ') if [ "$stub_count" -gt 0 ]; then echo "⚠️ WARNING: Found $stub_count stub indicators in $file" grep -n -E "(TODO|FIXME|PLACEHOLDER)" "$file" | head -3 fi # Check 2: Empty function bodies empty_functions=$(grep -E "function.*\{\s*\}|const.*=>.*\{\s*\}" "$file" 2>/dev/null | wc -l | tr -d ' ') if [ "$empty_functions" -gt 0 ]; then echo "❌ ERROR: Found $empty_functions empty functions in $file" echo " Empty functions must be implemented before merge" fi # Check 3: Return null/undefined null_returns=$(grep -E "return (null|undefined);" "$file" 2>/dev/null | wc -l | tr -d ' ') if [ "$null_returns" -gt 0 ]; then echo "⚠️ WARNING: Found $null_returns null/undefined returns in $file" echo " Verify these are intentional, not stubs" fi # Check 4: Substantive content check substantive_lines=$(grep -vE "^\s*(//|/\*|\*|import|export|$)" "$file" 2>/dev/null | wc -l | tr -d ' ') if [[ "$file" == *.tsx ]] && [ "$substantive_lines" -lt 10 ]; then echo "⚠️ WARNING: Component $file only has $substantive_lines substantive lines" echo " Components should typically be >10 lines" fi # Check 5: Mock/test data in production mock_data=$(grep -E "const.*(mock|test|dummy|fake).*=" "$file" 2>/dev/null | wc -l | tr -d ' ') if [ "$mock_data" -gt 0 ]; then echo "⚠️ WARNING: Found $mock_data references to mock/test data in $file" echo " Ensure these are not placeholders for production code" fi done
Step 3: Add findings to review synthesis
Include stub detection results in the review output:
markdown## Implementation Completeness **Stub Detection Results:** ✅ **Fully Implemented Files:** - src/components/UserProfile.tsx (42 substantive lines) - src/api/users.ts (67 substantive lines) ⚠️ **Files with Warnings:** - src/components/Dashboard.tsx - 3 TODO comments (non-blocking) - Consider addressing before release ❌ **Files Requiring Implementation:** - src/utils/analytics.ts - 2 empty functions detected (BLOCKING) - Must implement before merge **Verification Levels:** - Level 1 (Exists): 5/5 files ✅ - Level 2 (Substantive): 3/5 files ⚠️ - Level 3 (Wired): 4/5 files ✅ - Level 4 (Functional): Tests pending **Recommendation:** - Fix empty functions in analytics.ts before merge - Address TODO comments in Dashboard.tsx in follow-up PR - All other files meet implementation standards
See .claude/references/stub-detection.md for comprehensive patterns and detection strategies.
BLOCKING Issues (must fix):
NON-BLOCKING Issues (note in review):
After generating the review synthesis, check if the current branch has an open PR and offer to post findings as a PR comment.
bash# Check if we're on a branch with an open PR CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "") PR_NUM="" if [[ -n "$CURRENT_BRANCH" && "$CURRENT_BRANCH" != "main" && "$CURRENT_BRANCH" != "master" ]]; then if command -v gh &>/dev/null; then PR_NUM=$(gh pr list --head "$CURRENT_BRANCH" --json number --jq '.[0].number' 2>/dev/null || echo "") fi fi
If an open PR exists, post the review findings as a PR comment:
bashif [[ -n "$PR_NUM" ]]; then echo "Found open PR #${PR_NUM} on branch ${CURRENT_BRANCH}" # Build the review comment body from synthesis REVIEW_BODY="## Code Review — Claude Octopus ${REVIEW_SYNTHESIS} *Review generated by Claude Octopus (/octo:review)* *Providers: available external providers + 🔵 Claude*" # Post through the outbound credential gate. Never interpolate generated # Markdown directly into a gh shell argument. REPO_SLUG=$(gh repo view --json nameWithOwner --jq .nameWithOwner) if ! "${CLAUDE_PLUGIN_ROOT:-${HOME}/.claude-octopus/plugin}/scripts/safe-gh-comment.sh" \ --repo "$REPO_SLUG" pr-comment "$PR_NUM" - <<< "$REVIEW_BODY"; then echo "GitHub write state is unknown; check for the review comment before retrying:" >&2 gh pr view "$PR_NUM" --repo "$REPO_SLUG" --comments || true return 1 2>/dev/null || exit 1 fi echo "Review posted to PR #${PR_NUM}" # Update agent registry if this agent is tracked REGISTRY="${HOME}/.claude-octopus/plugin/scripts/agent-registry.sh" if [[ -x "$REGISTRY" ]]; then AGENT_ID=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "") "$REGISTRY" update "$AGENT_ID" --pr "$PR_NUM" 2>/dev/null || true fi fi
If no PR exists: Skip posting, present review in terminal only. If gh CLI not available: Skip posting, suggest user install GitHub CLI.
/octo:deliver, /octo:factory, or /octo:embrace (automated workflows)/octo:review — use AskUserQuestion: "PR #N found. Post review findings as a PR comment?" Options: "Yes, post to PR", "No, terminal only"
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 14,386 | 22,871 | +59% | 1 | 1 | 0% | 857 | 4,487 | +424% | 0 | 0 | — |
case-02 | fail→fail | 4,161 | 10,916 | +162% | 1 | 1 | 0% | 675 | 3,445 | +410% | 0 | 0 | — |
case-03 | fail→fail | 22,159 | 3,645 | -84% | 1 | 1 | 0% | 3,030 | 3,383 | +12% | 0 | 0 | — |
case-04 | fail→fail | 11,351 | 13,713 | +21% | 1 | 1 | 0% | 2,335 | 3,783 | +62% | 0 | 0 | — |
case-05 | pass→fail | 8,169 | 21,564 | +164% | 1 | 1 | 0% | 1,406 | 3,718 | +164% | 0 | 0 | — |
case-06 | fail→fail | 36,930 | 22,354 | -39% | 1 | 1 | 0% | 7,599 | 3,342 | -56% | 0 | 0 | — |
case-07 | fail→pass | 13,396 | 8,400 | -37% | 1 | 1 | 0% | 2,499 | 4,599 | +84% | 0 | 0 | — |
case-08 | pass→pass | 4,980 | 13,587 | +173% | 1 | 1 | 0% | 671 | 5,331 | +694% | 0 | 0 | — |
case-09 | pass→pass | 8,511 | 1,840 | -78% | 1 | 1 | 0% | 682 | 3,223 | +373% | 0 | 0 | — |
case-10 | pass→pass | 15,602 | 9,442 | -39% | 1 | 1 | 0% | 1,748 | 3,702 | +112% | 0 | 0 | — |
case-11 | pass→pass | 18,374 | 6,860 | -63% | 1 | 1 | 0% | 2,304 | 4,157 | +80% | 0 | 0 | — |
case-12 | fail→pass | 17,256 | 16,509 | -4% | 1 | 1 | 0% | 2,112 | 5,073 | +140% | 0 | 0 | — |
case-13 | fail→pass | 10,153 | 11,378 | +12% | 1 | 1 | 0% | 1,693 | 5,057 | +199% | 0 | 0 | — |
case-14 | pass→pass | 15,535 | 15,950 | +3% | 1 | 1 | 0% | 2,416 | 5,326 | +120% | 0 | 0 | — |
case-15 | pass→fail | 14,720 | 8,257 | -44% | 1 | 1 | 0% | 1,572 | 3,450 | +119% | 0 | 0 | — |
case-21 | pass→pass | 14,559 | 10,341 | -29% | 1 | 1 | 0% | 2,319 | 3,938 | +70% | 0 | 0 | — |
case-16 | fail→pass | 12,515 | 6,769 | -46% | 1 | 1 | 0% | 1,380 | 4,242 | +207% | 0 | 0 | — |
case-17 | pass→pass | 12,203 | 15,276 | +25% | 1 | 1 | 0% | 2,180 | 4,754 | +118% | 0 | 0 | — |
case-18 | pass→pass | 10,577 | 2,300 | -78% | 1 | 1 | 0% | 1,588 | 3,287 | +107% | 0 | 0 | — |
case-19 | pass→pass | 9,848 | 8,163 | -17% | 1 | 1 | 0% | 951 | 3,538 | +272% | 0 | 0 | — |
case-20 | fail→pass | 12,407 | 9,348 | -25% | 1 | 1 | 0% | 2,187 | 3,650 | +67% | 0 | 0 | — |
case-22 | fail→pass | 13,302 | 2,858 | -79% | 1 | 1 | 0% | 1,439 | 3,359 | +133% | 0 | 0 | — |
case-23 | fail→pass | 13,811 | 5,016 | -64% | 1 | 1 | 0% | 2,239 | 3,895 | +74% | 0 | 0 | — |
case-24 | pass→pass | 16,275 | 13,133 | -19% | 1 | 1 | 0% | 1,926 | 4,321 | +124% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted, and 19 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +21 percentage points is the difference between those two pass rates over the 19 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.