{
  "markdown": "<p align=\"center\">\n  <img src=\"docs/assets/banner.png\" alt=\"Procoder — senior dev wisdom, automated\" width=\"100%\">\n</p>\n\n**Make your AI coder work like a senior developer.** One Go binary gives\nthe agent a commit gate it cannot talk its way past, quality controllers\nthat refuse to call unfinished work done, and a self-learning loop that\nturns every escaped bug into a permanently closed class. The agent stays\nin control — nothing ever touches your code behind its back.\n\n![CI](https://github.com/azrtydxb/procoder/actions/workflows/ci.yml/badge.svg)\n![Version](https://img.shields.io/badge/version-3.5.0-7C3AED)\n![License](https://img.shields.io/badge/license-Apache--2.0-7C3AED)\n![Agents](https://img.shields.io/badge/works%20with-20%2B%20agents-7C3AED)\n\n## Quick start\n\n```\n/plugin marketplace add azrtydxb/procoder\n/plugin install procoder\n/procoder:init          # installs the tools this repository needs\n```\n\nThat's Claude Code; Procoder also ships adapters for **every agent** —\nCursor, Windsurf, Cline, Kilo Code, Roo, Kiro, Codex CLI, Copilot CLI,\nGemini, OpenCode, and anything that reads `AGENTS.md`. See\n[Every agent](https://procoder.azrty.com/portability/).\n\n## Before / after\n\nWithout Procoder, \"done\" is whatever the agent last said. With it, done\nhas to survive the gate — this is a real run, verbatim, on a demo repo\nwith an unformatted file, a conflict marker, and a staged junk file:\n\n```\n$ procoder check\nunformatted  main.go  (run `procoder format \"main.go\"` for the result)\nBLOCKING     notes.md:1  merge conflict marker left in the file\nBLOCKING     notes.md:5  merge conflict marker left in the file\nBLOCKING     .DS_Store  junk file staged — caches and garbage never belong in a commit\n...\nprocoder gate: 0 clean, 2 unformatted, 0 unchecked, 1 out of scope, 8 hygiene finding(s) (3 blocking)\n```\n\nThe agent gets the findings and the fixed content in the same turn; the\nbinary never edits a file itself. And a tool that failed is **never**\nreported as clean — \"unchecked\" counts as failing, said out loud.\n\n## How it works\n\n```\nagent writes code ──► hook fires ──► binary computes findings\n        ▲                                    │\n        └──── agent reviews and implements ◄─┘\n```\n\nTwo modes, one principle:\n\n- **Self-serve** — tools the agent runs itself: check, format, lint,\n  scan, query the index, audit the tree.\n- **Forced** — hooks at fixed lifecycle points (every write, every\n  session start) the agent cannot skip.\n- **P-CONTROL** — the binary computes and reports; the agent acts.\n  Nothing modifies code, files, or state behind the agent's back. The one\n  exception is `procoder prune --apply`, which removes superseded copies of\n  the plugin from your cache — not repository content, and never without\n  being asked twice.\n\n## What's inside\n\n**The commit gate** (`procoder check`) — formatting across the popular\nlanguages (Go, Python, JS/TS/HTML/CSS, PHP, Rust, C/C++, Java, Kotlin,\nSwift, Ruby, Dart, C#, shell — one canonical formatter each, the\nproject's config always wins), git hygiene (conflict markers, junk, oversized\nfiles, AI-attribution lines), secrets, lint, ci and infra hygiene, and\ndocumentation health, all through one code path so `check`, `git`, and\nCI can never disagree.\n\nThat full set is what a repository that has **adopted** procoder gets — one\nwith a `.procoder/` directory, or an `AGENTS.md` naming procoder. In\nsomebody else's repository only the checks that are true anywhere run\n(secrets, oversized files, conflict markers, junk, AI-attribution lines),\nand the ones that read file content see only the lines your commit wrote.\nprocoder does not apply its conventions to a project that never asked for\nthem, and every run says which mode it was in.\n\n**The quality chain** — thinking before code, with a refusing controller\nat every link: a **spec** interview closes design gaps before anything is\nbuilt (`spec check` blocks while sections are missing or questions\nopen), a **plan** turns the spec into tasks an engineer with zero\ncontext could execute (`plan check` blocks placeholders), a **backlog**\nholds larger projects as milestones → epics → user stories seeded from\nspecs and worked in scope-boxed **sprints** (one active sprint, explicit\ncarry-over, closes that refuse), and a **todo** list tracks standalone\nwork (`todo close` refuses until every acceptance criterion is checked,\nevidence is recorded, and the gate is clean — story closes carry the\nsame rigor).\n\n**The self-learning loop** — a pre-PR self-review catches\nreviewer-class findings before a PR exists; anything that still escapes\nbecomes a **lessons** ledger entry whose adaptation (a linter rule, a\nrubric line, a pinning test) must land before the work counts as done.\nDownstream bot reviewers are the fallback net, not the net — and what\nthat net catches is not lost either: `procoder copilot-leak` collects\nGitHub Copilot's auto-review findings, strips every trace of your code\nfrom them, and — only after you say yes on a terminal — files them as\nissues and records them as unlearned until someone writes the\nadaptation that closes the class.\n\n**The test domain** — `procoder test` runs the repository's real suite\nwith each ecosystem's canonical runner (go test, cargo test, the\npackage.json test script, pytest, gradle/maven): PASS with counts, FAIL\nwith the failing tests named, and **NOT run**, which is never the same\nas green. Coverage is reported where the runner\nmeasures it natively and never enforced. Set `[test] policy = \"block\"`\nand a green suite becomes part of \"done\" — the closes refuse while it is\nred or unverifiable.\n\n**The release controller** — `procoder release` is the last refusal\nbefore a tag: the version in sync across every file you list, the\nchangelog entry present, the tree clean, the gate clean, the suite\ngreen. Every failure arrives in one list, and on success the `git tag`\ncommand is printed for you to run. Procoder tags nothing itself.\n\n**The ten domains** — security (gitleaks, semgrep, osv-scanner), best\npractices (**lint** with curated baselines), **maintain**ability\n(dead code, complexity, plus **deps** freshness per ecosystem),\n**performance** (**bench** against a saved baseline — Go only, said out\nloud), **documentation** (broken refs, drift, diagrams, badges, **adr**\ndecision records, this very README's completeness), clean code\n(formatting), **test**ing, **ci** (pinned actions, timeouts), **infra**\n(Docker, Terraform, Kubernetes, Helm), and GitOps discipline.\n\n**The code index** — ctags + SCIP, the agent's fast map: find, refs,\ncallers, impact, unused, entrypoints.\n\n**Senior habits, encoded** — engineering **principles** injected at\nsession start (build ladder: reuse → stdlib → platform → minimum code;\ndelegation: parallel subagents under a contract, watched and judged;\nADHD/ASD-friendly formatting for complex answers — problem cards,\ndecisions surfaced, noise filtered; all repo-overridable), deliberate\ncorner-cuts marked and harvested as\n**debt** with revisit triggers, and an **audit** command that onboards\nany existing codebase with a triaged scorecard.\n\n## Replaces the plugins you are already running\n\nProcoder absorbed three earlier tools, and running them alongside it\nmeans two sets of instructions competing for the same agent:\n\n- **[superpowers](https://github.com/anthropics/claude-plugins-official)** —\n  plans for an engineer with zero context, spike/bounded/architectural\n  classification, evidence before \"done\", systematic debugging, TDD with\n  the mutation check. All of it here, with controllers that refuse where\n  the originals advised.\n- **[ponytail](https://github.com/DietrichGebert/ponytail)** — the build\n  ladder, the `debt:` marker convention, the five-tag over-engineering\n  review, one instruction file serving every agent.\n- **[serena](https://github.com/oraios/serena)** — symbol-level\n  navigation, cross-file rename, interface implementations, project\n  memory. Now `procoder index` and `.procoder/`, with no MCP server to\n  keep running. Serena's symbol-level **write** tools are deliberately\n  not adopted: the binary computes the rename and hands you the diff.\n\nFull provenance map, including where the serena replacement stops:\n[Influences](https://procoder.azrty.com/influences/).\n\n## Configuration\n\nEverything Procoder owns lives in `.procoder/` — plain files, made to be\nedited, and the repo's version always wins over the built-in default:\n`config.toml` (policies, thresholds), `PRINCIPLES.md`, the github\ntemplates, the docs/security rules, the review rubric, the lessons\nledger. Full reference:\n[Configuration](https://procoder.azrty.com/configuration/).\n\n## The docs\n\nThe full story lives on the site, organised the way the\n[Divio documentation system](https://docs.divio.com/documentation-system/)\nsplits it: the tutorial\n([Getting started](https://procoder.azrty.com/getting-started/)),\nthe how-to guides\n([Ship a change](https://procoder.azrty.com/workflow/)),\nthe reference\n([every command](https://procoder.azrty.com/commands/)), and\nthe explanation\n([the quality chain](https://procoder.azrty.com/quality-chain/),\n[how it's built](https://procoder.azrty.com/architecture/)).\n\n## What the reports mean\n\nA file that could not be checked is never called clean. A task without\nfresh verification evidence cannot close. This README is held to a\ncompleteness check — a feature family it stops mentioning blocks the\ngate. No benchmark numbers appear here because none have been run; any\nfuture number will carry its method alongside it.\n\nWhere the rigor costs more than it returns, and where a check is narrower\nthan its name, is written down rather than left to be discovered:\n[Honest limits](docs/honest-limits.md). What layer procoder occupies, and\nwhat it does not try to be: [Where procoder sits](docs/positioning.md).\n\nThe external evidence behind each premise, and the premises that have none,\nare separated and labelled in [Research](docs/research.md).\n\n## Implementation\n\nOne Go binary, no runtime dependencies, cross-compiled per platform into\n`dist/` and committed with the plugin — no npm, no network at hook time,\nair-gapped included. `go test ./...` to develop; the design contract\nlives in the docs and supersedes anything here that drifts from it.\n",
  "bytes": 10227,
  "sha": "022e025ca9af5ead6a30a3bc9a044a5290cae5d2df4dd208c049fcddb2edeb97",
  "repo_slug": "azrtydxb/procoder",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_azrtydxb_procoder_13c7fd17/readme"
}