{
  "markdown": "<p align=\"center\">\n  <img src=\"docs/argot-logo.svg\" alt=\"argot\" width=\"200\" />\n</p>\n\n<p align=\"center\">\n  <strong>Lint the rules you never wrote down.</strong>\n</p>\n\n<p align=\"center\">\n  <em>AI writes the code. argot harnesses it with the one thing that can’t\n  hallucinate: <strong>your repo’s own history</strong>.<br/>\n  Statistics, not a second LLM. 100% local. It surfaces the divergence — you\n  decide what to accept.</em>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://argot.tmonier.com\"><strong>argot.tmonier.com</strong></a>\n  &nbsp;·&nbsp;\n  <a href=\"https://argot.tmonier.com/docs/\">Documentation</a>\n  &nbsp;·&nbsp;\n  <a href=\"https://argot.tmonier.com/benchmarks\">Evidence</a>\n  &nbsp;·&nbsp;\n  <a href=\"docs/research/README.md\">Research log</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/get-tmonier/argot/releases/latest\"><img src=\"https://img.shields.io/github/v/release/get-tmonier/argot?color=E67E45\" alt=\"Release\" /></a>\n  <a href=\"https://www.npmjs.com/package/@tmonier/argot\"><img src=\"https://img.shields.io/npm/v/@tmonier/argot?logo=npm\" alt=\"npm\" /></a>\n  <a href=\"https://github.com/get-tmonier/argot/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/get-tmonier/argot?color=E67E45\" alt=\"License\" /></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/rust-single%20static%20binary-DEA584?logo=rust&logoColor=white\" alt=\"One statically-linked Rust binary\" />\n  <img src=\"https://img.shields.io/badge/100%25-local%20%C2%B7%20no%20cloud%20%C2%B7%20no%20account-2EA043\" alt=\"100% local, no cloud, no account\" />\n  <a href=\"https://argot.tmonier.com/docs/languages/\"><img src=\"https://img.shields.io/badge/supported%20languages-12-E67E45\" alt=\"12 supported languages\" /></a>\n  <a href=\"https://argot.tmonier.com/benchmarks\"><img src=\"https://img.shields.io/badge/benchmarked%20on-36%20real%20repositories-8B5CF6\" alt=\"Benchmarked on 36 real repositories\" /></a>\n</p>\n\n<table align=\"center\">\n  <tr>\n    <td align=\"center\" valign=\"middle\">\n      <a href=\"https://glama.ai/mcp/servers/get-tmonier/argot\"><img src=\"https://glama.ai/mcp/servers/get-tmonier/argot/badges/card.svg\" alt=\"argot MCP server on Glama\" width=\"340\" /></a>\n    </td>\n    <td align=\"center\" valign=\"middle\">\n      <a href=\"https://argot.tmonier.com/#film\"><img src=\"landing/public/argot-film-poster.jpg\" alt=\"Watch the argot launch film\" width=\"180\" /></a>\n      <br/>\n      <em>🎬 <a href=\"https://argot.tmonier.com/#film\">Watch the 45-second launch film</a></em>\n    </td>\n  </tr>\n</table>\n\n## Start with an audit\n\n`argot audit` needs no prior Argot fit or configuration. It fits a historical\nbase in a temporary worktree, then evaluates the surviving base-to-HEAD net\ndiff. Your working tree is left untouched. It is a review prompt—not a census\nof who wrote code, or proof that a finding is a defect.\n\n```sh\n# macOS / Linux\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/get-tmonier/argot/releases/latest/download/argot-installer.sh | sh\n\ncd your-repository\nargot audit\n```\n\nWindows: `powershell -c \"irm https://github.com/get-tmonier/argot/releases/latest/download/argot-installer.ps1 | iex\"`.\nThe npm package is also available as `npm install -g @tmonier/argot`.\n\nAudit needs usable Git history and supported source. It has no fixed runtime\npromise. It runs fully offline — the code-embedding model behind the semantic\nfindings ships inside the binary. See\n[Getting started](https://argot.tmonier.com/docs/getting-started/) for install\nand fit details.\n\nIf the audit gives you a useful lead, fit the current repository and score the\nchanges you intend to review:\n\n```sh\nargot init\nargot check\n```\n\nReview and commit the generated `argot.toml` and `.argot/` fit snapshot, then\nmerge it into the branch future PRs target before adding a CI workflow. Local\ntools and CI then use the same learned baseline. CI only reads the base branch\nsnapshot; it never fits, so the initial snapshot PR must be separate from the\nCI-workflow PR. `argot status` later recommends a local\nfit-and-commit refresh only when accepted source, function, or layout surfaces\nhave materially changed. Commit count and age are not refresh triggers by\ndefault; `[fit] refresh-after` is available only as an explicit team backstop.\nThe `argot-refresh` skill re-audits exclusions, structural paths, and mutes\nbefore fitting, so a reorganized repository does not blindly relearn old scope.\n\n```mermaid\nflowchart LR\n    A[\"argot init<br/>learn locally\"] --> B[\"review + commit<br/>argot.toml · .argot/\"]\n    B --> C[\"local tools + CI<br/>read one baseline\"]\n    C --> D{\"material accepted drift?\"}\n    D -- no --> C\n    D -- yes --> E[\"argot-refresh<br/>review scope · fit locally\"]\n    E --> B\n```\n\nThe embedding model itself ships inside the binary. Git stores only the\nrepository-specific learned snapshot—typically a few MB to a few tens of MB—so\nevery clone can reproduce the check without retraining or operating a service.\n\n`check` reports patterns worth reviewing on the selected changeset; a clean result\ndoes not prove the change correct or fully idiomatic. Read the\n[Audit](https://argot.tmonier.com/docs/audit/),\n[Init and Fit](https://argot.tmonier.com/docs/init-and-fit/), and\n[Check](https://argot.tmonier.com/docs/check/) guides for the exact contracts.\n\n## What it surfaces\n\n**Type checkers ask if it compiles. argot asks if it’s yours.** A clean,\ntype-correct, well-reviewed pull request can still be foreign to the repository\nit lands in. These are the rules argot ships, every one of them learned from\nyour own history rather than configured by hand:\n\n| Rule                | Group        | What it flags                                                    |\n| ------------------- | ------------ | ---------------------------------------------------------------- |\n| `foreign-import`    | voice        | an import of a dependency the repo has never used                 |\n| `unfamiliar-callee` | voice        | a call to a receiver or callee the repo's code never calls        |\n| `rare-tokens`       | voice        | a token sequence statistically foreign to the repo's voice        |\n| `convention`        | voice        | a construction that breaks a convention learned from the repo     |\n| `superseded`        | voice        | a pattern this repo has been replacing, or declared migrated away |\n| `redundant`         | semantic     | a new function that duplicates one the repo already has           |\n| `misplaced`         | semantic     | a function that looks like it belongs in another module area      |\n| `layering`          | architecture | an internal import that reverses the repo's layer direction       |\n| `test-deleted`      | integrity    | a test removed while the code it exercised still exists           |\n| `test-disabled`     | integrity    | a skip marker added, or a test gutted, as production changes      |\n| `test-weakened`     | integrity    | assertions removed, tautologized, or loosened alongside a change  |\n| `rule-tampered`     | governance   | a change that removes or weakens a locked rule                    |\n\nRepositories add their own on top — a TOML manifest plus a sandboxed Rhai\nscript under `.argot/rules/`, with working ones to copy in\n[`examples/rules/`](examples/rules/). No recompilation.\n\nargot is a probabilistic review guardrail, not a correctness oracle. Each\nfinding carries repository evidence. Treat it as a prompt to inspect and make\nthe human decision explicit—never as proof that the code is wrong.\n\n## Choose how to run it\n\nThe CLI is the complete, explicit changeset check. Other routes have narrower\ntriggers and coverage; none provides a universal acceptance-time check.\n\n| Route              | Execution class                                          | Prerequisites and coverage                                                                                                                                                               | Evidence status                         |\n| ------------------ | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- |\n| CLI                | Invoked by a user or agent                               | Run `audit`, `init`, or the full `check`; fitting is required where the command needs it.                                                                                                | CLI/source inventory, 2026-07-22        |\n| Skills             | Invoked                                                  | Seven on-demand workflows for a compatible skill host; installation does not schedule commands, configure MCP, or add a hook.                                                            | Manifest/source inventory, 2026-07-30   |\n| MCP                | Passive                                                  | A configured client selects read-only context, hunk, or complete-changeset tools; a fitted repository is required for model-dependent tools. Fitting remains an explicit local CLI/skill workflow. | Focused test and source inspection, 2026-07-30 |\n| Claude Code plugin | Automatic when configured, plus invoked/passive surfaces | Its opt-in pre-write hook, in a fitted repository, asks only when a `Write`, `Edit`, or `MultiEdit` introduces a foreign import. It never blocks and is not a full or end-of-turn check. | Manifest/source inspection, 2026-07-22  |\n| pre-commit         | Automatic when user-configured                           | Scores staged supported files in a fitted repository. The `argot-check` hook is advisory for findings; `argot-check-gate` is opt-in for error-severity exits.                            | Manifest inspection, 2026-07-22         |\n| GitHub Action      | Automatic when user-configured                           | Scores the configured ref/range in a workflow; it needs checkout history and release-download access. `fail-on-hits` defaults to `false`.                                                | Action manifest inspection, 2026-07-22  |\n\nCanonical setup and host details: [Claude Code](https://argot.tmonier.com/docs/plugin/),\n[other agents and MCP](https://argot.tmonier.com/docs/agents/), and\n[CI and pre-commit](https://argot.tmonier.com/docs/ci/).\n\n## Evidence and limits\n\nCurrent public measurements are detector-specific, not a product-wide accuracy\nor combined-brief claim. The [approved claim manifest](landing/src/data/claims/manifest.json)\nrecords:\n\n- visible foreign-symbol fixtures: **620/637 — 97.3%** across 36 corpora and 12 languages;\n- reinvention fixtures: **545/584 — 93.3%** across 31 corpora and 11 languages;\n- placement transplants: **12,899/13,456 — 95.9%** across the 22 evaluable corpora and 11 languages\n  (the other nine abstain because their layouts have no separable architecture);\n- layering fixtures: **264/272 — 97.1%** across 25 corpora and 12 languages;\n- test-integrity fixtures: **154/164 — 93.9%** across 23 corpora and 12 languages.\n\nA catch rate means little without the noise it costs, so both are published. On\nthe same 36 corpora, the voice detectors flag **0.25%** of ordinary accepted\nedits — and **0.00%** of the hunks in newly added files, where a repository has\nthe least to say about what belongs.\n\nEach number has a distinct corpus, denominator, and qualifier. The combined\nbriefing/noise result and ordinary-repository timing are not yet measured public\nclaims. See the\n[benchmark methodology and sources](https://argot.tmonier.com/benchmarks).\n\nArgot ships adapters for 12 languages. The five tested release targets are macOS\narm64/x64, Linux x64/arm64, and Windows x64. The local analysis path uses\nstatistical, graph, scripted, and embedding evidence; no generative or\nopinion-forming model decides a finding.\n\nFit health matters. A repository with shallow, generated, vendored, or\notherwise unsuitable history may not produce a useful model. Argot is also\nleast reliable for an incorrect choice made entirely with familiar vocabulary,\nmasked prose, and code outside the selected range. Read\n[Limitations](https://argot.tmonier.com/docs/limitations/) before relying on a\nspecific detector.\n\n## Reproducible authored proof\n\n![Authored two-commit fixture: `argot audit --commits 1` reports one foreign token sequence in an introduced Django-style import. Semantic, architecture, and integrity are unavailable in this development build.](docs/demo/proof/audit.gif)\n\nThis is an **authored fixture**, not a wild-case corpus. Its pinned command,\nversion, receipts, checksums, regeneration procedure, and the visual’s\nnon-byte-stable GIF qualification are documented in\n[the proof receipt](docs/demo/proof/README.md). The image is a reproducible\ncompanion to the [auditable Markdown receipt](docs/demo/proof/audit.md).\n\n## Privacy and open source\n\nArgot analyzes source, history, and findings locally. The individual local core\nis free, MIT-licensed open source, and requires no account or cloud service.\nArgot has no default telemetry and does not upload source code. No analysis it\nperforms needs a network at all — the code-embedding model behind the semantic\nfindings is compiled into the binary. It can still use network paths for\nupdate/version checks, release downloads, or an explicitly configured\nreview/update/CI integration. Set `ARGOT_OFFLINE=1` to prevent network use;\nnothing analytical is lost.\n\nRead the complete [privacy and security boundary](https://argot.tmonier.com/privacy/),\n[security policy](SECURITY.md), and [MIT license](LICENSE).\n\n## Contribute\n\nContributions are welcome. Start with [CONTRIBUTING.md](CONTRIBUTING.md), then\nsee the [product strategy](docs/strategy/ARGOT_STRATEGY.md) for the maintained\ndecision record and [research log](docs/research/README.md) for evidence.\n\n## Acknowledgements\n\nEvery number argot publishes is measured against the real history of 36\nopen-source projects, across the twelve supported languages — fastapi, rich,\nfaker, saleor, wagtail, scrapy, hono, ink, faker-js, excalidraw, outline,\nexpress, commander, eslint, gh-cli, hugo, ripgrep, bat, guava, junit5,\npowershell, jellyfin, redis, curl, rocksdb, fmt, homebrew, rubocop, laravel,\ncomposer, castle-engine, mORMot2, uos, ideU, MSEide/MSEgui, and dagster.\n\nThe benchmark would not exist without them, and we are grateful to their\nmaintainers and contributors. Argot vendors and redistributes none of their\ncode: the harness clones each repository at a pinned SHA, reads its history\nlocally, and ships nothing from it. Each project remains under its own license,\nheld by its own authors. Full list with links, and what argot does commit:\n[`benchmarks/README.md`](benchmarks/README.md#acknowledgements).\n\nargot does redistribute one thing. The model behind `redundant` and `misplaced`\nis a 15.6M-parameter static table distilled from\n[jina-embeddings-v2-base-code](https://huggingface.co/jinaai/jina-embeddings-v2-base-code)\n(Jina AI, Apache-2.0) using the\n[model2vec](https://github.com/MinishLab/model2vec) technique (MinishLab, MIT).\nIts weights are compiled into the binary and redistributed under Apache-2.0;\nfull terms in [`NOTICE`](NOTICE). argot is not affiliated with either project.\n",
  "bytes": 15290,
  "sha": "11319e611fa990204cc89a1a389f8d4e20b1e0a0c5c571da48e5b02d198fa065",
  "repo_slug": "get-tmonier/argot",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_get_tmonier_argot_59089721/readme"
}