1
0
Fork
You've already forked wuming
0
WuMing is a Woodpecker plugin to us AI Agents to perform reviews on pull requests
  • Python 96.5%
  • Just 1.6%
  • Shell 1.1%
  • Dockerfile 0.8%
2026年07月08日 13:11:56 +10:00
.forgejo/workflows 🐛 fix: add WUMING_PR_NUMBER input to bypass inaccessible event-file in Docker 2026年07月08日 12:06:42 +10:00
docs 🐛 fix: add WUMING_PR_NUMBER input to bypass inaccessible event-file in Docker 2026年07月08日 12:06:42 +10:00
src/wuming 🐛 fix: add WUMING_PR_NUMBER input to bypass inaccessible event-file in Docker 2026年07月08日 12:06:42 +10:00
tests 🔥 remove gitmoji allowed-set restriction; delete check_gitmoji hook and tool 2026年07月08日 12:58:48 +10:00
tools 🔥 remove gitmoji allowed-set restriction; delete check_gitmoji hook and tool 2026年07月08日 12:58:48 +10:00
.gitignore 🔧 bump deps and broaden gitignore of superpowers folders 2026年07月08日 10:41:09 +10:00
.pre-commit-config.yaml 🔥 remove gitmoji allowed-set restriction; delete check_gitmoji hook and tool 2026年07月08日 12:58:48 +10:00
.python-version 🔧 chore: pin dev venv to Python 3.14, pin tool nox sessions to MIN_PYTHON 2026年06月09日 13:59:38 +10:00
action.yml 🐛 fix: add WUMING_PR_NUMBER input to bypass inaccessible event-file in Docker 2026年07月08日 12:06:42 +10:00
CHANGELOG.md 📝 docs: update changelog for 0.6.2 2026年07月08日 13:07:14 +10:00
CLAUDE.md 🔥 remove gitmoji allowed-set restriction; delete check_gitmoji hook and tool 2026年07月08日 12:58:48 +10:00
concept.md Initial commit of the concept 2026年06月09日 13:39:06 +10:00
Containerfile 📝 docs: expand container image description label 2026年06月11日 18:29:24 +10:00
Improvements.md 📝 mark Configuration & UX section complete 2026年07月02日 18:14:32 +10:00
justfile ♻️ refactor: replace git-cliff with Release-Notes.md changelog generation; add fediverse recipes 2026年07月08日 10:55:52 +10:00
mkdocs.yml 👷 refactor: add client-side redirect from codeberg.page to wuming.marvin8.zone 2026年07月08日 10:51:01 +10:00
noxfile.py ⬆️ bump: ruff 0.15.20, ty 0.0.54, uv 0.11.24, pysentry-rs 0.4.7, httpx2 2.5.0, zaojun 1.7.0 in pre-commit; rename nox session dependency_versions → zaojun 2026年06月26日 13:15:50 +10:00
pylock.toml ⬆️ refactor: remove git-cliff dependency; delete cliff.toml 2026年07月08日 11:00:44 +10:00
pyproject.toml 🔧 bump: version 0.6.1 → 0.6.2 2026年07月08日 13:07:17 +10:00
README.md fix: address minor review findings — success log, unrecognised severity, tests, README 2026年07月02日 18:08:35 +10:00
Release-Notes.md 📝 reset Release-Notes.md for next release 2026年07月08日 13:11:56 +10:00
Release-Notes.md.template feat: add Release-Notes.md and template for taibai fediverse posting 2026年07月08日 10:53:23 +10:00
run-wuming.fish 🔧 bump deps one more time 2026年06月11日 16:40:26 +10:00
uv.lock 🔧 bump: version 0.6.1 → 0.6.2 2026年07月08日 13:07:17 +10:00

WuMing (无名) — AI PR Review for Forgejo/Codeberg

Licence: AGPL-3.0-or-later Status: Pre-release Python 3.12+

WuMing (无名, wúmíng) — Chinese for "nameless". A reviewer with no identity of its own: it speaks only through the code it examines.

Fetches a PR diff from the Forgejo/Codeberg API, routes changed files to specialised AI agents, and posts inline review comments back to the PR. Works as a Woodpecker CI plugin (image: step) and as a native Forgejo/GitHub Actions action (uses: step). No Python to install in consumer repos.

Status

Available as a container image at codeberg.org/marvin8/wuming. Implements the Forgejo client, diff parser, multi-agent router (code, config, docs, shell, security), DeepSeek, Anthropic, and Ollama backends, comment deduplication, PR size gate, and OWASP Top 10 security review. Not yet production-hardened — use with caution and report issues on the issue tracker.

Quick start

# .woodpecker/ai-review.yaml in your repowhen:event:pull_requeststeps:- name:ai-reviewimage:codeberg.org/marvin8/wuming:latestenvironment:WUMING_FORGEJO_TOKEN:from_secret:codeberg_tokenWUMING_DEEPSEEK_KEY:from_secret:deepseek_api_keyWUMING_AGENTS:code,config

To use the Anthropic backend instead, swap the API key and set the backend:

WUMING_ANTHROPIC_KEY:from_secret:anthropic_api_keyWUMING_BACKEND:anthropic

Forgejo/GitHub Actions

Forgejo Actions (Codeberg / self-hosted Forgejo):

# .forgejo/workflows/ai-review.ymlon:pull_request:jobs:ai-review:runs-on:codeberg-tinysteps:- uses:https://codeberg.org/marvin8/wuming@mainwith:forgejo_token:${{ secrets.WUMING_FORGEJO_TOKEN }}deepseek_key:${{ secrets.WUMING_DEEPSEEK_KEY }}agents:code,config

GitHub Actions (github.com): use uses: docker://codeberg.org/marvin8/wuming:latest instead of uses: https://codeberg.org/marvin8/wuming@main — WuMing is hosted on Codeberg and has no GitHub mirror. Also replace the with: block with an env: block using WUMING_* variable names (e.g. WUMING_FORGEJO_TOKEN, WUMING_DEEPSEEK_KEY) — when GitHub Actions uses docker://, it does not process action.yml, so with: keys are not mapped to WUMING_* environment variables.

See the Forgejo/GitHub Actions guide for all inputs.

Configuration

Variable Default Description
WUMING_FORGEJO_TOKEN Forgejo API token (required)
WUMING_FORGEJO_URL https://codeberg.org Forgejo instance base URL
WUMING_DEEPSEEK_KEY DeepSeek API key
WUMING_AGENTS code Comma-separated agent list; valid names: code, config, docs, performance, security, shell, tests; use name:model to set per-agent model (model names are backend-specific, e.g. code:deepseek-chat,docs)
WUMING_MAX_TOKENS 2048 Max output tokens per backend call; auto-raised to 16384 for deepseek-reasoner
WUMING_SKIP_PATHS Additional glob patterns to skip
WUMING_BACKEND deepseek deepseek | anthropic | ollama
WUMING_OLLAMA_URL Ollama base URL (required if backend=ollama)
WUMING_ANTHROPIC_KEY Anthropic API key (required if backend=anthropic)
WUMING_PROGRESS true/1 force on; false/0 force off; when unset or empty, auto-detects: enabled when stdout is a TTY and CI env var is absent
WUMING_MAX_DIFF_LINES 0 Maximum raw diff size in lines. When the diff exceeds this value and it is greater than 0, WuMing posts a single plain PR comment explaining the PR is too large to review automatically, then exits without posting inline comments. Set to 0 to disable.
WUMING_MAX_FILE_LINES 0 Maximum file size (in lines) for full-file context fetching. When greater than 0, WuMing fetches the complete content of each changed file from Forgejo and includes it in the agent's context, giving the model visibility beyond the diff hunks. Files exceeding this line count are excluded. Set to 0 (the default) to disable.
WUMING_DRY_RUN false When true, skips all Forgejo write calls (no comments posted) and logs the would-be comment bodies to stdout instead. All read operations still run.
WUMING_VERBOSE false When true, sets the wuming logger to DEBUG level. Each backend logs the full LLM request payload (including diff text and file contents) and raw response before parsing. Treat these logs as sensitive — they may contain repository source code.
WUMING_SUMMARY_COMMENT false When true, posts a plain PR comment after the review with a per-agent severity count table. Posted even when no new inline comments are found. Skipped when the diff-too-large early exit fires.

Agents

Agent Files Focus
code *.py, *.go, *.ts, ... Correctness, logic bugs
config *.toml, *.yaml, *.json Schema, secret hygiene
docs *.md, *.rst Clarity, accuracy
performance *.py, *.go, *.ts, *.sql, ... N+1 queries, O(n2) loops, I/O in loops, missing indexes
security code + config + shell files OWASP Top 10 security vulnerabilities
shell *.sh, Dockerfile, CI files Shell safety, image hygiene
tests *.py, *.go, *.ts, ... Assertion quality, global state teardown, coverage gaps

Handling large PRs

WuMing has two mechanisms to stay within token and API limits when a PR is unusually large.

Size gate (WUMING_MAX_DIFF_LINES): if the total raw diff line count exceeds this value, WuMing posts a single plain PR comment explaining that the PR is too large to review automatically, then exits without posting any inline comments. Set to 0 (the default) to disable the gate entirely.

Hunk size cap: individual diff hunks longer than 300 lines are replaced with a single stub line showing the line count, e.g. [... 450 lines truncated — too large for review ...]. The hunk header (filename and position) is preserved so the agent still knows which file and region was affected.

Woodpecker CI variables injected automatically

Variable Description
CI_REPO_OWNER Repository owner
CI_REPO_NAME Repository name
CI_COMMIT_PULL_REQUEST PR number (absent on non-PR events)
CI_COMMIT_SHA Head commit SHA

About

This project was developed with the assistance of Claude Code. All code has been reviewed by a human before merging. WuMing also reviews its own pull requests — a small demonstration of the workflow it enables.