Review logo

Review

Community
oliver-kriska
review

Review code with parallel agents — tests, security, Ecto, LiveView, Oban. Use after implementation to catch bugs and anti-patterns before committing.

Overview

Publisheroliver-kriska
Repositoryclaude-elixir-phoenix
Skill namereview
Stars
555
Forks
40
Bundled files
6
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 6 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by oliver-kriska on GitHub. Read the source before you install it.

Installation

Install the Review AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/oliver-kriska/claude-elixir-phoenix.git /tmp/claude-elixir-phoenix
mkdir -p .claude/skills
cp -r /tmp/claude-elixir-phoenix/plugins/elixir-phoenix/skills/review .claude/skills/review
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Review in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Review on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Review is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Review Elixir/Phoenix Code

Review code by spawning parallel specialist agents. Find and explain issues — do NOT create tasks or fix anything.

Usage

/phx:review                          # Auto-detects task ID from branch/commits
/phx:review test                     # Review test files only
/phx:review security                 # Run security audit only
/phx:review oban                     # Review Oban workers only
/phx:review deploy                   # Validate deployment config
/phx:review iron-laws                # Check Iron Law violations only
/phx:review ENA-8931                 # Force Linear issue
/phx:review #42                      # Force GitHub issue
/phx:review .claude/plans/auth/plan.md    # Force plan / spec file
/phx:review --no-requirements        # Skip requirements coverage check
/phx:review --codex                  # Add Codex CLI as cross-model reviewer

Arguments

$ARGUMENTS = Focus area, task ID, or path to plan/spec file.

When no requirements argument is passed, the skill auto-detects a task ID from the branch and recent commits (see ${CLAUDE_SKILL_DIR}/references/requirements-detection.md).

Workflow

Step 1: Identify Changed Files and Prepare Directories

CRITICAL: Create output dirs BEFORE spawning agents — agents cannot create directories and writes will fail.

  1. Determine SLUG via Glob on .claude/plans/*/ (default: "review")
  2. Run mkdir -p ".claude/plans/${SLUG}/reviews" ".claude/plans/${SLUG}/summaries" .claude/reviews
  3. Run git diff --name-only HEAD~5 and git diff --name-only main
  4. Save the diff base for pre-existing detection in Step 3b

Step 1b: Load Plan Context and Prior Reviews

  • Read .claude/plans/${SLUG}/scratchpad.md for planning decisions and rationale
  • Pass relevant decisions to agents as WHY-context (eliminates session archaeology)
  • Check .claude/plans/${SLUG}/reviews/ for prior output; if present, include a consolidated summary as "PRIOR FINDINGS" with: "Focus on NEW issues. Mark still-present issues as PERSISTENT."

Step 1c: Detect Requirements Source (skip on --no-requirements)

Find a task/spec whose requirements should be cross-checked against the diff. Priority order (stop at first match): explicit arg → conversation context → branch regex → commit subjects → latest plan → none. Full table, regexes, and fetch mapping in ${CLAUDE_SKILL_DIR}/references/requirements-detection.md.

Fetch the detected source into .claude/plans/${SLUG}/reviews/.requirements-input.md (Linear via mcp__linear__get_issue, GitHub via gh issue view, file via Read). Record REQ_SOURCE label (e.g. "Linear ENA-8931") for the verifier heading. On fetch failure, set SOURCE_STATUS=FETCH_FAILED and continue — verifier will emit NOT AVAILABLE rather than block the review.

Step 2: Spawn Review Agents (MANDATORY)

NEVER spawn the same agent role twice per review. One pass per role. NEVER analyze code yourself — use the Agent tool only. Zero agents = failure.

  1. Create a Claude Code task per agent via TaskCreate and TaskUpdate to in_progress
  2. For /phx:review or /phx:review all: select agents dynamically per the selection table in ${CLAUDE_SKILL_DIR}/references/agent-spawning.md
  3. For focused reviews (test|security|oban|deploy|iron-laws): spawn only the matching specialist from the focused mode table in the same reference
  4. If Step 1c succeeded (REQ_SOURCE non-empty and --no-requirements not passed): add phx:requirements-verifier to the same parallel batch. Pass these prompt inputs: REQUIREMENTS_TEXT (content of .requirements-input.md), REQUIREMENTS_SOURCE (REQ_SOURCE label), DIFF_FILES (git diff --name-only output), SOURCE_STATUS (only if FETCH_FAILED), output_file: .claude/plans/{slug}/reviews/requirements.md
  5. Spawn in ONE message with run_in_background: true. Do not pass the deprecated Agent mode parameter; Claude Code 2.1.212+ ignores it and subagents inherit the parent session's permission mode
  6. MANDATORY: pass explicit output_file per-agent (mapping in the reference)
  7. Include the CRITICAL prompt block: write by turn ~12, chat body ≤300 words
  8. Scope every agent to the diff: pass git diff --name-only output with "Focus on NEW code. Pre-existing: one-line {file}:{line} — {brief}. Do NOT deep-analyze unchanged files."
  9. With --codex: add phx:codex-reviewer to the same batch (prompt template in agent-spawning.md). Missing CLI degrades to SKIPPED.

Step 3: Collect and Compress Findings

Wait for ALL agents to complete. Do NOT report status until every agent completes. Mark each task completed via TaskUpdate as it finishes.

Missing file fallback — after each agent finishes, verify its expected output_file exists. If missing (turn exhaustion, error):

  1. Append to .claude/plans/{slug}/scratchpad.md: [HH:MM] WARN: {agent} did not write {expected_path} — extracting from message
  2. Parse findings from the agent's return message as fallback
  3. Mark the section in the final review with ⚠️ EXTRACTED FROM AGENT MESSAGE (see scratchpad) — never silent

Verification-runner fallback — if it times out, run directly: mix compile --warnings-as-errors && mix format --check-formatted $(git diff --name-only HEAD~5 | grep '\.exs\?$' | tr '\n' ' ') && mix credo --strict && mix test

Context supervision — for 4+ agents, spawn phx:context-supervisor:

Prompt: "Compress review agent output.
  input_dir: .claude/plans/{slug}/reviews
  output_dir: .claude/plans/{slug}/summaries
  output_file: review-consolidated.md
  priority_instructions: BLOCKERs and WARNINGs: KEEP ALL.
    SUGGESTIONs: COMPRESS similar ones into groups.
    Deconfliction: when iron-law-judge and elixir-reviewer
    flag same code, keep iron-law-judge finding."

Skip the supervisor for focused (1-agent) reviews — read output directly.

Step 3b: Filter Findings (Anti-Noise)

Before writing the review, apply these overriding filters to each finding:

  1. Would a senior Elixir dev dismiss this as noise?
  2. Does the finding add complexity exceeding the problem's complexity?
  3. Are any findings duplicates reworded by different agents?
  4. Does the finding affect code actually changed in this diff?
  5. Is the finding on unchanged code (not in diff)? → Mark PRE-EXISTING
  6. Flagged by both a Claude agent AND [codex]? → mark HIGH CONFIDENCE

Demote or remove findings that fail filters 1-4. Mark pre-existing per filter 5.

Step 4: Generate Review Summary

Read consolidated/agent output. Write to .claude/plans/{slug}/reviews/{feature}-review.md with verdict: PASS | PASS WITH WARNINGS | REQUIRES CHANGES | BLOCKED.

Requirements Coverage in verdict: if the verifier ran, read its summary line and fold into the verdict:

  • Any UNMET → escalate to REQUIRES CHANGES (even if code-quality PASS)
  • Any PARTIAL (no UNMET) → downgrade PASS → PASS WITH WARNINGS
  • NOT AVAILABLE / all MET / UNCLEAR only → no verdict change

Insert the verifier's ## Requirements Coverage block into the review document before the per-agent findings so it's the first thing the user sees.

Step 5: Present Findings and Ask User

STOP and present the review. Do NOT create tasks or fix anything.

On BLOCKED or REQUIRES CHANGES: Show finding count by severity, then offer via AskUserQuestion: /phx:triage (recommended), /phx:plan .claude/plans/{slug}/reviews/{feature}-review.md (converts findings into a follow-up plan — pass the review file path, not a re-description), fix directly (/phx:codex-loop when codex ran), or "I'll handle it myself".

On PASS / PASS WITH WARNINGS: Suggest /phx:compound, /phx:learn-from-fix.

Convention extraction: After presenting findings, offer: "Any findings to suppress or enforce as conventions?" See ${CLAUDE_SKILL_DIR}/references/conventions.md.

Iron Laws

  1. Review is READ-ONLY — Find and explain, never fix
  2. NEVER auto-fix after review — Always ask the user first
  3. Always offer both paths: /phx:plan and /phx:work
  4. Research before claiming — Agents MUST research before making claims about CI/CD or external services

Integration

/phx:plan/phx:work/phx:review (YOU ARE HERE) → Blocked? /phx:triage or /phx:plan | Pass? /phx:compound

See: ${CLAUDE_SKILL_DIR}/references/review-template.md, ${CLAUDE_SKILL_DIR}/references/example-review.md, ${CLAUDE_SKILL_DIR}/references/blocker-handling.md, ${CLAUDE_SKILL_DIR}/references/requirements-detection.md

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Review AI skill do?

Review code with parallel agents — tests, security, Ecto, LiveView, Oban. Use after implementation to catch bugs and anti-patterns before committing.

Why use Review on TypingMind?

Because you install it once and use it with any model. Review is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Review in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/oliver-kriska/claude-elixir-phoenix/tree/main/plugins/elixir-phoenix/skills/review. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Review?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Review?

As many as you like. As long as a model supports skills, you can use Review with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Review AI skill free?

Yes. It is published on GitHub by oliver-kriska under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇