qwen-review
Plugin Claude Code que adiciona um stop-time review gate usando a API do Qwen 3.7 Max (endpoint OpenAI-compatible).
No fim de cada turn do Claude, um hook Stop envia ao Qwen o last_assistant_message + git diff HEAD + conteúdo (pré-redactado) dos arquivos modificados. Se o Qwen responder BLOCK: <razão>, o hook devolve {decision: "block"} e o Claude Code continua o turn tentando corrigir, em vez de parar.
Inspirado no stop-review-gate do plugin oficial openai-codex, com chamada HTTP direta no lugar do subprocess local.
🚀 Instalação
Via marketplace pir0c0pter0 (recomendado)
Forma rápida — slash commands (instala e ativa direto):
/plugins marketplace add pir0c0pter0/claude-plugins
/plugins install qwen-review@pir0c0pter0
/plugins install já ativa o plugin — não precisa de enable separado (esse só serve pra reativar depois de /plugins disable).
Forma manual — ~/.claude/settings.json (user-level):
{
"extraKnownMarketplaces": {
"pir0c0pter0": {
"source": { "source": "github", "repo": "pir0c0pter0/claude-plugins" }
}
},
"enabledPlugins": {
"qwen-review@pir0c0pter0": true
}
}
Pela rota manual, feche e abra o Claude Code na primeira vez (marketplace nova só carrega no startup).
Forma team — <project>/.claude/settings.json committed:
Mesmo JSON acima, mas no diretório .claude/ do projeto (não home). Commitado no repo, todo dev do time pega a config automaticamente ao clonar.
⚠️ Nunca ponha env.QWEN_API_KEY em settings project-level — segredo no repo. A chave fica sempre em ~/.claude/settings.json per-user (o wizard escreve lá).
Precedência (alto → baixo): managed → .claude/settings.local.json (gitignored) → .claude/settings.json (committed) → ~/.claude/settings.json.
Via clone direto (standalone)
git clone https://github.com/pir0c0pter0/qwen-review ~/.claude/plugins/local/qwen-review
(Requer registrar uma marketplace local apontando pra ~/.claude/plugins/local/ com manifest.)
Pré-requisitos
- Node ≥ 18 no PATH (usa
fetch nativo, node:test, AbortController)
- Sem dependências npm
⚙️ Configuração
Wizard interativo (recomendado)
Três formas, da mais fácil pra mais explícita:
A — slash command que te dá o comando pronto:
/qwen-review:wizard
Imprime a linha exata pra você copiar (já resolve o ${CLAUDE_PLUGIN_ROOT}) — você cola com ! e o wizard abre.
B — alias permanente no shell (uma vez só, depois é só ! qwen-wizard):
# Cole no terminal (substitui ~/.bashrc por ~/.zshrc se usa zsh)
echo 'alias qwen-wizard="node $(ls -d ~/.claude/plugins/cache/pir0c0pter0/qwen-review/*)/scripts/qwen-review.mjs wizard"' >> ~/.bashrc
source ~/.bashrc
Depois, no Claude Code:
! qwen-wizard
C — invocação direta (sem setup prévio, path completo):
! node ~/.claude/plugins/cache/pir0c0pter0/qwen-review/<versão>/scripts/qwen-review.mjs wizard
Descubra <versão> com ls ~/.claude/plugins/cache/pir0c0pter0/qwen-review/.
Fluxo do wizard
- Lê
~/.claude/settings.json atual (cria se não existir)
- API key: mostra a atual mascarada (
sk-•••efd), Enter sem digitar mantém
- Base URL: escolha por número entre 4 presets:
1 DashScope International (default, conta global Alibaba Cloud)
2 DashScope China (conta cn)
3 OpenRouter (alternativa, modelo precisa ser qwen/qwen3-max)
4 Custom (cole URL OpenAI-compat — ex: llama-server local, Ollama, etc.)
- Model: default
qwen3-max (custo: troca pro nome aceito no seu provider)
- Mode: default global do plugin:
fast — 1024 tokens, ~3-15s, sem thinking (recomendado pro dia-a-dia)
thinking — 8192 tokens, ~60-180s, enable_thinking=true (deep reasoning)
- Summary com todos os valores + path de destino
- Confirmação
y/yes pra escrever, qualquer outra coisa aborta
- Escrita atômica em
~/.claude/settings.json (mode 0o600 strict, preserva todos os outros campos do JSON)
Manual (sem wizard)
Edite ~/.claude/settings.json direto:
{
"env": {
"QWEN_API_KEY": "sk-...",
"QWEN_BASE_URL": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
"QWEN_MODEL": "qwen3-max",
"QWEN_REVIEW_MODE": "fast"
}
}
Habilitar o gate no workspace
/qwen-review:setup --enable
State isolado por SHA-256 do realpath — só habilita no projeto atual.
Combina com override de modo per-workspace (default é o QWEN_REVIEW_MODE global):
/qwen-review:setup --enable --thinking # liga gate em modo thinking SÓ neste workspace
/qwen-review:setup --enable --fast # liga em fast (explicit)
/qwen-review:setup --thinking # só muda modo (gate já estava on/off)
/qwen-review:setup --disable # desliga gate (mantém preferência de modo)