
Repotector
io.github.dir-ai由 GitHub 账号 dir-ai 发布v1.6.0更新于 Oct 24, 2026
The repo guardian AI agents handshake with before they touch your code.
概览
为代码仓库提供共享记忆:AI 代理进入时握手,获取地图、既定决策和上一位代理的交接,离开时登记。
- 可以做什么
- 握手、定位与签退:handshake、city_map、depart、register、journal、whats_next
- 检索与复用:find_existing、atlas_query、dna_query、dna_coverage、dna_diff
- 评估改动影响:blast_radius、canon_check、merge_check 试合并、claim 声明工作区
- 运行质量门禁:quality_gates 与受保护路径检查,只按相对初始基线的回归报告
- 用 declare_mission 把一次访问绑定到任务契约,并在 depart 时记录决策
- 适用场景
- 适合由多个 AI 代理或会话轮流修改的仓库,避免每个新代理重新摸索结构、推翻前人的修复。也适合希望提交前或 CI 只拦截新增回归、不因既有债务失败的场景。
- 运行要求
- 通过 npx 以 stdio 在本地运行(需要 Node.js,纯 ESM)。需在每个仓库执行初始化命令,扫描仓库、把 MCP 服务器写入 .mcp.json 并写入入口说明块。机器上需要 git;未声明账号、API 密钥或网络访问。
安装
在 SourceWeft 中
- 打开 控制台中的 Repotector,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Repotector ⬡
The repo that remembers.
Every AI agent that visits your repo starts from zero: it re-derives the map, re-discovers the conventions, re-breaks the thing the last agent just fixed. Repotector gives the repo itself a memory. An arriving agent knocks at the front door, handshakes, and is handed the map, the standing decisions, and the last visitor's briefing; on the way out it signs the register. The next agent continues in two minutes instead of wandering for an hour — and a refactor doesn't quietly break what already works.
Portable and self-contained: pure Node ESM, two dependencies
(@modelcontextprotocol/sdk, zod). Works on any repo — JS/TS deeply, other
stacks in honest orientation-lite.
Install into any repo
init scans the repo (never fails you on day one — see grandfathered baseline
below), wires the MCP server into .mcp.json, and writes the doorway blocks so
every arriving agent knows to handshake. It writes only inside .repotector/
and inside REPOTECTOR:BEGIN/END markers — your prose and config are never
overwritten. See SECURITY.md for the exact posture.
Under .repotector/:
Plus, at the repo root, a regenerated JOURNAL.md — the diario di bordo,
newest-first, that handshake serves the tail of so the next agent continues
prior work instead of re-deriving it.
The front door (handshake-first)
The MCP server refuses deep tools until an agent calls handshake — and the
initialize response already tells the agent to. In return the agent gets
oriented in one call, and its exit is recorded for the next one.
handshake({ who, model?, purpose? })— orientation, ground rules, live gate verdict, map freshness, passport. Read-only and fast (no tree walk).city_map()— intent, stack, built-vs-missing, brain pointers. On a non-JS repo it says orientation-lite instead of faking an empty map.find_existing({ intent })— REUSE: does it already exist? Don't rebuild.blast_radius({ changedFiles? })— PROTECT: transitive dependents + impacted routes/components. OmitchangedFilesto use the git diff.canon_check({ changedFiles? })— INTEGRATE: the repo's canon rules.atlas_query({ query })— keyword search across the map.quality_gates()— line-budget / structure / secret-hygiene, reported as regressions vs grandfathered debt.register()— who's inside now and the full crossing log.journal({ limit? })— the repo's recent story: what prior agents did and left unfinished.whats_next()— the sensible next work, derived from DNA gaps + open threads + TODOs, every suggestion citing its evidence.dna_query({ clause?, topic? })— what the repo specified (authored from a.psx/mirror, or inferred, never merged).dna_coverage()— per clause: implemented / partial / missing.dna_diff({ changedFiles? })— which clauses a change touches.depart({ summary? })— sign out; the git delta of your visit is recorded even if you forget the summary. Your summary becomes the next agent's briefing.
Grandfathered baseline — never red on day one
A guardian that fails your repo the moment you install it gets uninstalled the
moment you install it. So init snapshots the debt that already exists
(oversize files, tracked secrets, missing paths). Gates then fail only on
regressions against that floor — a new offender, an offender that grew, a
new leak. Pre-existing debt is reported loudly, never blocking. repotector baseline re-snapshots after you pay it down.
v1.2 "Gatekeeper" — from advisor to checkpoint
- Commit guard —
repotector hooksinstalls a pre-commit that runs the gates;gatesexits non-zero on regressions, so hooks and CI actually block. Grandfathered baseline means it never blocks day-one debt — only new damage. - Protected paths —
intent.protect.pathsglobs (CI workflows, LICENSE…) that agents must not touch: change-based, never grandfathered, overridden only by editing the intent (an explicit, diffable act). - Claims —
claim({ paths })declares your work zone; overlapping claims from live sessions answergranted:falsewith who/why. Advisory by design (blocking would be theater on a filesystem we don't control); claims die with the session. - Decision records —
depart({ decisions: [{ chose, over, because }] })writes the why to the register and projectsDECISIONS.md; the handshake serves standing decisions anddecisions_queryanswers "was this deliberate?" — so agent 2 doesn't undo agent 1's choice. repotector doctor— one command, semaphore answer to "how protected is this repo, really?", with a fix for every red.
v1.5 "Mission" — the single verifiable chain
The whole visit becomes one auditable contract:
declare_mission({ goal, acceptance, claimPaths?, forbiddenPaths?, risk? })— bind the visit to a contract: your zone is auto-claimed (conflicts surfaced), and you get a one-shot briefing (gates, merge status, standing decisions, protected paths).- Evidence pack at depart — the register records what the MACHINE verified (gates verdict, trial-merge clean/conflicted, files touched, off-claim, forbidden violations) strictly apart from what the AGENT declared (per-criterion self-report); unreported criteria are listed, never assumed. "Done" becomes something the register can check, not a courtesy.
- Other agents see missions in progress at handshake — what you're doing, not just where.
v1.3 "Merge Guard" — commit without colliding
- merge_check — a zero-damage TRIAL merge (git merge-tree) of HEAD against
the integration base, run BEFORE you commit: reports clean/conflicted with
the exact files, each attributed to who holds that zone (live claims — and,
in PSX Workbench repos, the Merge Machine's leases via the .psx mirror).
CLI:
repotector merge-check [target](exit 1 on conflicts, so hooks/CI can gate on it). Zero network: it trial-merges against your LOCAL refs and says so — fetch first for the freshest truth.
Resilient register — agents die without signing out
Sessions that enter and never leave (the agent was killed, the pipe closed) are auto-departed on the next handshake, with the git delta of what they touched. The ledger never fills with immortal open sessions, and a depart carries real work even when nobody called it.
CLI
Docker
The image on GHCR wraps the CLI and the MCP server; the guarded repo is mounted, never baked in:
Multi-arch (amd64/arm64), built and smoke-tested by CI on every release tag (see Dockerfile).
GitHub Action
Guard a repo in CI with one step — grandfathered semantics apply, so the job fails only on regressions, never on day-one debt:
Honesty
Repotector guards repos, so it holds itself to its own standard. The lock is a
compliance signal, not filesystem access control; the register is
append-integrity, not tamper-proof; a static badge is self-reported. It spawns
only git, makes no network calls, and pins exact versions in .mcp.json. The
full threat model is in SECURITY.md — no security theater.
Determinism
The Atlas fingerprint is a SHA-256 over sorted source contents (16 hex chars),
no timestamps — the same tree always fingerprints the same. Large files (>1MB,
generated/minified) are marked, never read into the fingerprint. builtAtHead
stamps the git sha so freshness can be checked without a walk.
License
MIT © PSX System. The core an agent needs in a repo is free forever; the compounding brain (Genome cloud, authored DNA) is the premium layer.
来源:README.md,提交 384ca96
工具
0版本历史
1- v1.6.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分