A static web interface that configures an AI code reviewer and adds it to a GitHub repository in one click. Pick an AI provider, tune the review, and get a ready-to-commit GitHub Actions workflow that reviews every pull request.
No build step, no backend, no tracking — everything runs in the browser. Host it on GitHub Pages (or any static host).
Two files for the target repo:
.github/workflows/ai-code-review.yml— runs on pull requests, calls the script.scripts/ai_code_review.py— pulls the PR diff, filters files, asks the model for a JSON review, and posts (or updates) a single PR comment.
The reviewer authenticates to GitHub with the built-in GITHUB_TOKEN, so the
only thing the user adds is their provider API key.
Google Gemini, OpenAI, Anthropic Claude. Each provider is one entry in
js/providers.js — add a vendor there and it appears in the
UI automatically.
For a given owner/repo the UI builds GitHub deep links:
- API key secret →
…/settings/secrets/actions/new(add<PROVIDER>_API_KEY). This is always manual — a secret can't be set from a link. - Model variable (optional) →
…/settings/variables/actions/new. - Workflow file → GitHub's "create new file" editor, prefilled — click Commit.
A Packaging selector offers three ways to ship the reviewer:
- Composite action (default, genuinely one-click): the user's repo gets a
~20-line workflow that does
uses: owner/repo@ref. That file is tiny, so its prefill deep-link fits under the URL limit — a real one-click add. The action itself (action.yml+ a universal, all-providersai_code_review.py) is published once to the action repo (the app generates both files, shown in their own editor tabs). Set the Action reference field to where you publish it. - Single file: the whole Python is embedded in the workflow YAML via a heredoc — one self-contained file, but too big for the prefill link (download).
- Two files: a thin workflow plus a separate
scripts/ai_code_review.py(the script is too big for the prefill link — download it).
GitHub's "create new file" prefill carries the file content in the URL, and GitHub returns HTTP 414 / 500 past ~8 KB. Our script is ~10 KB, so:
| File | URL size | One-click prefill? |
|---|---|---|
| Thin action workflow | ~0.5 KB | ✅ works |
Secret / variable / action.yml |
small | ✅ works |
| Python script (two-file mode) | ~13 KB | ❌ → Download instead |
| Inline single file | ~17 KB | ❌ → Download instead |
The app detects this and swaps the one-click link for a Download button when the URL would be too long. Composite-action mode is the one that stays truly one-click for the end user.
ES modules need HTTP (not file://):
python3 -m http.server 8000Then open http://localhost:8000.
Push these files to a repo, then in Settings → Pages set the source to the
main branch, root folder. Done — no Actions build needed.
index.html App shell: header, editor workspace, footer
assets/ Logo + favicons (generated from logo.jpg)
logo.jpg logo.png logo-32.png logo-24.png favicon.png
src/
css/ Modular stylesheets, loaded in order
tokens.css Design tokens (GitHub dark palette)
base.css Reset + document defaults
chrome.css Header + footer
editor.css Editor workspace: sidebar, file tabs, gutter, syntax
forms.css Inputs and controls
components.css Buttons + toast
js/ ES modules
providers.js Provider catalog + default review prompt
generate.js Config → workflow / script / action files + deep links
highlight.js Tiny YAML + Python syntax highlighter
app.js State, editor, packaging modes, install links
Two routes to genuine one-click, both beyond the prefill approach:
- Published composite action (stays static). This is the default packaging
mode above: publish the reviewer once as a GitHub Action, and users add a tiny
uses:workflow whose prefill link fits. Only the API-key secret stays manual. - GitHub App (needs a backend). OAuth login, then commit the files and set the secret via the GitHub REST API in one shot — the only route that also handles the secret and can list/pick repos.