procoder README

The project's README from github.com/azrtydxb/procoder. As one markdown file: README.md.

Procoder — senior dev wisdom, automated

Make your AI coder work like a senior developer. One Go binary gives the agent a commit gate it cannot talk its way past, quality controllers that refuse to call unfinished work done, and a self-learning loop that turns every escaped bug into a permanently closed class. The agent stays in control — nothing ever touches your code behind its back.

CI Version License Agents

Quick start

/plugin marketplace add azrtydxb/procoder
/plugin install procoder
/procoder:init          # installs the tools this repository needs

That's Claude Code; Procoder also ships adapters for every agent — Cursor, Windsurf, Cline, Kilo Code, Roo, Kiro, Codex CLI, Copilot CLI, Gemini, OpenCode, and anything that reads AGENTS.md. See Every agent.

Before / after

Without Procoder, "done" is whatever the agent last said. With it, done has to survive the gate — this is a real run, verbatim, on a demo repo with an unformatted file, a conflict marker, and a staged junk file:

$ procoder check
unformatted  main.go  (run `procoder format "main.go"` for the result)
BLOCKING     notes.md:1  merge conflict marker left in the file
BLOCKING     notes.md:5  merge conflict marker left in the file
BLOCKING     .DS_Store  junk file staged — caches and garbage never belong in a commit
...
procoder gate: 0 clean, 2 unformatted, 0 unchecked, 1 out of scope, 8 hygiene finding(s) (3 blocking)

The agent gets the findings and the fixed content in the same turn; the binary never edits a file itself. And a tool that failed is never reported as clean — "unchecked" counts as failing, said out loud.

How it works

agent writes code ──► hook fires ──► binary computes findings
        ▲                                    │
        └──── agent reviews and implements ◄─┘

Two modes, one principle:

What's inside

The commit gate (procoder check) — formatting across the popular languages (Go, Python, JS/TS/HTML/CSS, PHP, Rust, C/C++, Java, Kotlin, Swift, Ruby, Dart, C#, shell — one canonical formatter each, the project's config always wins), git hygiene (conflict markers, junk, oversized files, AI-attribution lines), secrets, lint, ci and infra hygiene, and documentation health, all through one code path so check, git, and CI can never disagree.

That full set is what a repository that has adopted procoder gets — one with a .procoder/ directory, or an AGENTS.md naming procoder. In somebody else's repository only the checks that are true anywhere run (secrets, oversized files, conflict markers, junk, AI-attribution lines), and the ones that read file content see only the lines your commit wrote. procoder does not apply its conventions to a project that never asked for them, and every run says which mode it was in.

The quality chain — thinking before code, with a refusing controller at every link: a spec interview closes design gaps before anything is built (spec check blocks while sections are missing or questions open), a plan turns the spec into tasks an engineer with zero context could execute (plan check blocks placeholders), a backlog holds larger projects as milestones → epics → user stories seeded from specs and worked in scope-boxed sprints (one active sprint, explicit carry-over, closes that refuse), and a todo list tracks standalone work (todo close refuses until every acceptance criterion is checked, evidence is recorded, and the gate is clean — story closes carry the same rigor).

The self-learning loop — a pre-PR self-review catches reviewer-class findings before a PR exists; anything that still escapes becomes a lessons ledger entry whose adaptation (a linter rule, a rubric line, a pinning test) must land before the work counts as done. Downstream bot reviewers are the fallback net, not the net — and what that net catches is not lost either: procoder copilot-leak collects GitHub Copilot's auto-review findings, strips every trace of your code from them, and — only after you say yes on a terminal — files them as issues and records them as unlearned until someone writes the adaptation that closes the class.

The test domain — procoder test runs the repository's real suite with each ecosystem's canonical runner (go test, cargo test, the package.json test script, pytest, gradle/maven): PASS with counts, FAIL with the failing tests named, and NOT run, which is never the same as green. Coverage is reported where the runner measures it natively and never enforced. Set [test] policy = "block" and a green suite becomes part of "done" — the closes refuse while it is red or unverifiable.

The release controller — procoder release is the last refusal before a tag: the version in sync across every file you list, the changelog entry present, the tree clean, the gate clean, the suite green. Every failure arrives in one list, and on success the git tag command is printed for you to run. Procoder tags nothing itself.

The ten domains — security (gitleaks, semgrep, osv-scanner), best practices (lint with curated baselines), maintainability (dead code, complexity, plus deps freshness per ecosystem), performance (bench against a saved baseline — Go only, said out loud), documentation (broken refs, drift, diagrams, badges, adr decision records, this very README's completeness), clean code (formatting), testing, ci (pinned actions, timeouts), infra (Docker, Terraform, Kubernetes, Helm), and GitOps discipline.

The code index — ctags + SCIP, the agent's fast map: find, refs, callers, impact, unused, entrypoints.

Senior habits, encoded — engineering principles injected at session start (build ladder: reuse → stdlib → platform → minimum code; delegation: parallel subagents under a contract, watched and judged; ADHD/ASD-friendly formatting for complex answers — problem cards, decisions surfaced, noise filtered; all repo-overridable), deliberate corner-cuts marked and harvested as debt with revisit triggers, and an audit command that onboards any existing codebase with a triaged scorecard.

Replaces the plugins you are already running

Procoder absorbed three earlier tools, and running them alongside it means two sets of instructions competing for the same agent:

Full provenance map, including where the serena replacement stops: Influences.

Configuration

Everything Procoder owns lives in .procoder/ — plain files, made to be edited, and the repo's version always wins over the built-in default: config.toml (policies, thresholds), PRINCIPLES.md, the github templates, the docs/security rules, the review rubric, the lessons ledger. Full reference: Configuration.

The docs

The full story lives on the site, organised the way the Divio documentation system splits it: the tutorial (Getting started), the how-to guides (Ship a change), the reference (every command), and the explanation (the quality chain, how it's built).

What the reports mean

A file that could not be checked is never called clean. A task without fresh verification evidence cannot close. This README is held to a completeness check — a feature family it stops mentioning blocks the gate. No benchmark numbers appear here because none have been run; any future number will carry its method alongside it.

Where the rigor costs more than it returns, and where a check is narrower than its name, is written down rather than left to be discovered: Honest limits. What layer procoder occupies, and what it does not try to be: Where procoder sits.

The external evidence behind each premise, and the premises that have none, are separated and labelled in Research.

Implementation

One Go binary, no runtime dependencies, cross-compiled per platform into dist/ and committed with the plugin — no npm, no network at hook time, air-gapped included. go test ./... to develop; the design contract lives in the docs and supersedes anything here that drifts from it.

procoder (azrtydxb/procoder)

Searching Database…

这是什么?给 AI 编程智能体加的一层纪律:一个 Go 二进制文件,为智能体提供一道它无法靠花言巧语绕过的提交闸门,配上会拒绝把未完成工作称为完成的质量控制器,还有一个针对漏网 bug 的自我学习闭环。
Procoder 是装在我编程智能体里的插件,还是我自己运行的独立工具?两者都是:既有独立的 Go 二进制文件,也有面向你的智能体的插件适配器。智能体自己运行它的自助工具(check、lint、index);强制钩子则在每次写入和会话启动时触发,无法跳过。
我怎么把它跑起来?安装预编译的 Go 二进制文件(按平台交叉编译,随插件一起提交——不需要 npm,也没有东西要构建),然后接入你的智能体;快速上手用 Claude Code,文档站上有 Getting started 教程。
它支持哪些编程智能体?开箱即用支持 Claude Code,另有适配器支持 Cursor、Windsurf、Cline、Kilo Code、Roo、Kiro、Codex CLI、Copilot CLI、Gemini、OpenCode,以及任何读取 AGENTS.md 的智能体——共 20 多个。这个二进制文件没有任何运行时依赖。
完整的规则集是任何仓库都适用,还是只适用于采用了 Procoder 的仓库?只适用于采用了它的仓库——即存在 .procoder/ 目录,或在 AGENTS.md 里点名了 Procoder。其他地方只运行通用检查(密钥泄露、超大文件、冲突标记、垃圾文件、AI 署名),而且只看你这次提交写下的那些行。
它运行时需要联网吗?不需要。它是一个自包含的二进制文件:无需 npm install,钩子触发时不发起任何网络请求,所以完全断网的环境也能用。
它会背着我的手乱动我的代码吗?不会——二进制文件只做计算和报告,动手的是智能体;它自己从不修改仓库文件。唯一的例外是 procoder prune --apply,它会从你的缓存里清除已被取代的插件副本,而且必须在你确认两次之后才会执行。
提交闸门到底检查什么?一条统一的代码路径,覆盖:格式化(每种语言一个规范格式化器:Go、Python、JS/TS、PHP、Rust、C/C++、Java、Kotlin、Swift、Ruby、Dart、C#、shell)、git 卫生(冲突标记、垃圾文件、超大文件、AI 署名行)、密钥泄露、lint、CI 与基础设施卫生,以及文档健康度。procoder test 运行的是真实的测试套件(go test、cargo test、pytest、gradle/maven)——没跑过测试绝不等于绿灯,它检查不了的文件也绝不会被称为干净。
质量链是什么样的?先想清楚再写代码,每个环节都有一个会拒绝放行的控制器:规格访谈在动手构建之前补齐设计缺口;计划必须能让一名毫无上下文的工程师直接执行;较大的工作进入待办清单,按里程碑、史诗和用户故事组织,在范围受限的冲刺中推进;todo 项在每条验收标准都勾选、闸门全绿之前拒绝关闭。
如果还是有 bug 溜出去了怎么办?PR 提交前的自审会先拦截审阅者级别的问题;凡是仍然溜出去的,都会记入经验账本,其对应的改进——一条 linter 规则、一条评分标准或一个锁定回归的测试——必须落地之后这项工作才算完成。procoder copilot-leak 还能采集 GitHub Copilot 的自动审查发现,抹掉其中你代码的一切痕迹后创建为 issue,但必须先在终端里向你确认。
我已经在用 superpowers、ponytail 或 serena 了——还能继续用吗?不能——Procoder 已吸收了这三者,同时运行意味着两套指令在争夺同一个智能体。Serena 的符号导航变成了 procoder index(ctags + SCIP:查找、引用、调用者、影响范围),而且不用再常驻一个 MCP 服务器;它的符号级写入工具则被有意没有采纳——二进制文件算出改动,把 diff 交到你手上。
Creator
azrtydxb
Size
192.1 MB
Stars
211
Age
2mo
Commits · 90 Days