指南

建立上下文层,并检查它是否符合规范。

AI 智能体辅助翻译。如有出入,以英文页面为准。如果你发现文本有任何问题,欢迎提交议题或发起拉取请求

只需五条命令,即可完成安装和一致性评分。leji 的所有功能都随包发布,并在本地离线运行;只有你主动调用的操作才会访问网络。leji initleji adopt 中的依赖步骤,只在你同意时才运行你自己的包管理器;而联邦相关的抓取只与你所指明的那个仓库通信: leji mounts hydrate --fetchleji mounts update-pin --fetchleji conformance --federation=verify

支持的运行时Node.js Node.js 22+Python Python 3.10+Go Go 1.26.6+

01安装工具

三个版本都通过同一套 fixture 套件测试,因此无论 CI 安装哪一个,标志、JSON 输出和退出码都完全相同。

把它声明为 dev dependency,才能让 CI、pre-commit 钩子和每位贡献者都使用同一个固定版本。你无需自行研究安装命令:leji initleji adopt会识别本仓库实际使用的包管理器,并且只在你明确同意时,替你运行它自己的添加命令:npmpnpmyarnbunuvpoetrypdmpipenv;以及go get -tool,它需要 Go 1.24 或更新版本,而自行构建 Go 版 CLI 则需要 Go 1.26.6 或更新版本。用 pip 时,leji 只打印需要添加的那一行,不会运行任何东西。全局安装不会碍事:在一个固定了自有副本的仓库内部,Node 与 Python 版 CLI 每次调用都运行那个副本(仓库所固定的那个 CLI)。

npm install -g @leji-org/leji

02创建一个新的上下文层,或接入既有仓库

仓库根目录中会生成一份 leji.json 清单、一份引导配置、若干类别的起始文档、第一份决策记录和一份入门简报。此外,上下文根目录之外还会多出两个文件:在仓库中没有AGENTS.md时,会生成一份只含指针的 AGENTS.md--no-agents 会跳过它);根目录的 .gitignore 也会加入一行 .leji/,忽略这份简报所在的工作区。这些都不要求你有智能体。

脚手架最初生成的只是占位内容。接受提议后,智能体会读取仓库、提出映射方案供你批准,然后删除这份简报。若拒绝提议,你会得到一条可稍后运行的命令;加上--yes 会跳过这一步,因此 CI 无需有人值守。

独自工作?--mode solo 会生成 identity 和 writing-style 的起始内容,并让这份简报引导一次负责人访谈;你可以直接输入答案、提供附件,或把材料放进一个目录。只有经过你批准的汇总结果才会成为上下文,原始材料则留在仓库根目录.leji/ 这个被 git 忽略的工作区里:initadopt 会写入那条忽略规则,而只要它下面还有任何东西被 git 跟踪,两者就完全拒绝运行。一旦上下文层有了内容,智能体就会删掉那些产物。

leji adopt --dry-run    # 精确的写入计划;不会写入任何内容
leji adopt              # 接入既有仓库(新仓库使用 leji init)
                        # 然后提议打开 Claude Code 或 Codex

leji adopt --wire-adapters  # 在既有 CLAUDE.md / AGENTS.md 上完成接入

npm create leji         # 也可一步完成上述操作,且无需安装:
                        # 它读取目录,并选择 adopt 或 init

03校验

  • schema 检查:清单、索引、变更日志,以及智能体配置与决策记录的 frontmatter。
  • 结构与 lint:引导配置、索引文件与普通文档没有 schema。已声明的文件必须存在,而变更日志相对 HEAD 必须是仅可追加的。在 indexed 及以上级别,过期的索引会直接导致失败。

在既有的 CLAUDE.mdAGENTS.md 之上做过一次普通的 adopt 之后,预期会看到vendor-adapter-redirect失败项:每一个尚未指向引导配置的入口文件各一条,直到 --wire-adapters 运行为止。

leji validate           # schema + lint 规则
leji validate --content # 再加上占位内容 / 内容单薄告警
leji index              # 生成索引

04声明一个级别,再检查它

部分接入是设计使然:从 core 开始,每一级都包含前一级。清单声明该级别; leji conformance 对照它为上下文层打分。

coreindexedgovernedfederated

每个级别对你的要求

leji conformance        # 为声明打分

05看见你的上下文层

这里呈现的正是智能体读取的上下文层,只是换成了便于人阅读的形式。

leji view               # 在浏览器中打开人类可读的查看器
leji viewer build       # 导出静态文件夹,部署在内部身份认证之后

通过 CI 持续校验

提供方是从你的 origin remote 推断出来的;当 remote 指不出提供方时,回落到 GitHub。

leji ci                 # 生成工作流
leji ci --hooks         # 与本地 pre-commit 相同的关卡

# 生成的作业会运行:
leji validate           # schema + lint 规则
leji index --check      # 索引过期即失败

# indexed 及以上级别再添加:
leji changelog check    # 仅可追加

退出码贴合 CI:0 干净,允许有警告;1 有检查未通过,无论它是否报出发现项;2用法错误,或内部失败,例如拒绝覆盖已有文件。

进入上下文层

这个层会成为智能体最先读取的上下文,无需经过任何厂商文件。

leji start              # 也可用 --agent claude-code | codex 指定一个宿主

如果检测到多个宿主,它会询问你的选择。如果没有检测到宿主,或当前在脚本、CI 中运行,它会输出应执行的命令,而不会自行猜测。 接入指南讲了宿主参数透传标志与厂商文件的回落表。

给你的智能体的不只是上下文,还有工具

进入上下文层,为智能体提供的是工作所需的上下文;MCP 服务器提供的则是工具能力。这个本地只读服务器可以校验磁盘上的上下文层并评估一致性,因此智能体无需使用 shell。它只读取并报告;它绝不写入。

# Claude Code(本项目)
claude mcp add leji --scope project -- npx -y @leji-org/mcp

# Codex
codex mcp add leji -- npx -y @leji-org/mcp

initadopt 会主动提议替你注册它:对 Claude Code 用项目作用域,对 Codex 用用户级。上面这些命令是给跳过了那个提示的人准备的;把--scope project 换成 --scope user,就是只为你个人注册一次,而不是为这个仓库注册。任何 MCP 客户端都能用;MCP 服务器一页有完整的工具清单。

然后按你的情形接入

单体仓库一个仓库,一个上下文层,在仓库根目录初始化一次。
多个仓库,一个层一个专用的上下文仓库,在每个消费仓库中以只含文档的方式挂载,并按仓库固定版本。
多个已有归属的层各自已经拥有一个上下文层的团队。把每一个作为同级层挂载;归属与工作方式保持不变。

从脚本调用

大多数命令同时也是一次库调用,可用于钩子、机器人与构建步骤。源码在 leji-org/leji,Apache-2.0。

import { validateLayer, writeIndex, conformanceReport } from '@leji-org/leji';

const { findings } = validateLayer('.');

接下来:面向既有仓库的接入指南,或者在多个团队各自拥有一个上下文层时看联邦