Rust/codex-rs
【免费下载链接】openinterpreterA coding agent for open models like Kimi K3 and GLM 5.3项目地址: https://gitcode.com/GitHub_Trending/op/openinterpreter
In the codex-rs folder where the rust code lives:
- Crate names are prefixed with
codex-. For example, thecorefolder's crate is namedcodex-core - When using format! and you can inline variables into {}, always do that.
- Install any commands the repo relies on (for example
just,rg, orcargo-insta) if they aren't already available... - When running Rust commands (e.g.
just fixorjust test) be patient with the command and never try to kill them using the PID...
注意它的行文特征:全部是“在本仓库内应当如何做”的可执行约定,而不是泛泛的背景介绍——这正是 `AGENTS.md` 应有的形态。模型在后续所有会话中都能直接依循这些命令与风格约束,无需使用者重复交代。 ## 加载范围与优先级:全局文件 + 项目目录层级 Open Interpreter 自动加载两类 `AGENTS.md`,官方文档用如下表格定义其作用域: | 作用域 | 路径 | | ------ | ---- | | 全局(Global) | `~/.openinterpreter/AGENTS.md` | | 项目(Project) | 从仓库根目录向下直到当前工作目录的所有 `AGENTS.md` 文件 | - **全局文件**:存放在 Open Interpreter 的主目录下,对所有项目生效。默认主目录即 `~/.openinterpreter/`(可参考 [codex-rs/utils/home-dir/src/lib.rs](https://link.gitcode.com/i/7fb8a8b329d8fea4f2d4a200e57e98e1),其中同时支持 `INTERPRETER_HOME` 环境变量等覆盖方式)。全局指导由 [codex-rs/codex-home/src/instructions/mod.rs](https://link.gitcode.com/i/338ed647cd98247d7b362149b5782168) 中的 `CodexHomeUserInstructionsProvider` 负责读取。 - **项目文件**:会遍历“仓库根目录 → 当前工作目录”路径上的每一层目录,逐层收集存在的 `AGENTS.md` 并按根目录到当前目录的顺序拼接。 **优先级规则**:更具体的文件会覆盖或补充更宽泛的文件。一个文件离当前工作目录越近,通常就越相关——这与常见的 monorepo 协作模式一致:越深层的目录可声明越贴近具体任务的约束。 ### 拼接语义的源码印证 模型最终看到的不是多个独立文件,而是一段**按顺序拼接好的文本**。在 [codex-rs/core/src/agents_md.rs](https://link.gitcode.com/i/4377c6afe764e214b6f579722d9164d4) 中: - 项目根目录的判定:从当前工作目录逐级向上寻找 `project_root_markers` 中声明的标记文件(默认只有 `.git`,见 [codex-rs/config/src/project_root_markers.rs](https://link.gitcode.com/i/83c73719578ebd57f7cc932994cd8520));找不到标记时只考虑当前目录;标记列表为空则完全禁用父目录遍历,`AGENTS.md` 只作用于当前目录。 - 收集顺序:先确定从根到 cwd 的目录链,再对每一层探测候选文件名,把命中的文件按**根目录在前、当前目录在后**的顺序拼接。换言之,越靠近当前目录的说明在最终文本中越靠后,也就离本次用户请求越近。 - 用户/全局说明与项目说明之间会插入分隔符 `--- project-doc ---`(常量 `AGENTS_MD_SEPARATOR`),告诉模型“以下属于工作区范围的项目指导”。 该顺序在测试 [codex-rs/core/tests/suite/agents_md.rs](https://link.gitcode.com/i/96dfeb55e5711dab54965fa4af22448e) 中被直接断言:当全局文件与项目文件同时存在时,最终指令形如 `global doc\n\n--- project-doc ---\n\nproject doc`——全局在前、项目在后。 ### 多环境与会话级缓存 如果一次会话同时涉及多个工作环境(例如并行操作多个项目目录),代码会对每个环境都执行一次上述发现逻辑;当检测到来自多个不同项目环境的说明时,拼接文本还会为每个环境标注 `for {environment_id} with root {path}`,避免模型混淆各环境的指导归属(见 [codex-rs/core/src/agents_md.rs](https://link.gitcode.com/i/4377c6afe764e214b6f579722d9164d4) 中 `environment_labeled_text` 的实现)。 为避免重复昂贵的磁盘发现,[codex-rs/core/src/agents_md_manager.rs](https://link.gitcode.com/i/46654bc0a48aba1b97365b0ed893e577) 在会话内缓存了“环境选择 → 已加载说明”的结果:只有当环境的快照(selections)发生变化时才会重新加载;切换工作目录后缓存失效并自动刷新,保证指令始终与当前目录匹配。 ## 临时覆盖:AGENTS.override.md 在本地做实验、临时替换全局说明时,不必删除或改写 `~/.openinterpreter/AGENTS.md`。只需创建这个文件: ```text ~/.openinterpreter/AGENTS.override.mdOpen Interpreter 在读取全局指导时会优先使用AGENTS.override.md,其内容将完全取代默认的全局AGENTS.md。删除该覆盖文件后即可恢复正常的全局文件。
源码同样印证了这一优先级:codex-rs/codex-home/src/instructions/mod.rs 中,全局说明的候选文件名列表固定为["AGENTS.override.md", "AGENTS.md"]——先探测 override 文件,命中即返回,不再读取默认文件。
值得一提的实现细节是,override 机制不仅作用于全局目录。在项目级发现逻辑candidate_filenames(codex-rs/core/src/agents_md.rs)中,每个目录层也按AGENTS.override.md→AGENTS.md→ 自定义 fallback 文件名 的顺序探测,因此若某项目目录同时存在这两个文件,该目录层只会加载AGENTS.override.md。对应的集成测试agents_override_is_preferred_over_agents_md明确断言“override 存在时 AGENTS.md 应被忽略”。也就是说,你可以用同名 override 文件对任意单个目录临时改写指导,而无需改动团队共享的AGENTS.md。
大小限制:project_doc_max_bytes
项目说明最终会占用模型上下文,因此不能无上限加载。合并后的项目说明受project_doc_max_bytes限制;官方文档特别指出,目录特定的文件会被优先处理,以便在达到限制时靠近当前目录的指导仍然能够保留下来。
在 codex-rs/core/src/agents_md.rs 的read_agents_md中可以看到完整的预算逻辑:
- 读取配置项
project_doc_max_bytes作为总字节预算remaining; - 按根目录到当前目录的顺序逐文件读取,每次读取后从剩余预算中扣除该文件实际占用的字节数;
- 若单个文件超过剩余预算,会对该文件执行截断(
data.truncate(...))并给出告警日志;预算耗尽(remaining == 0)后停止加载后续文件; - 文件内容为空(
trim后无字符)时不计入结果。
如何配置该限制
project_doc_max_bytes是配置文件中的一个常规项,定义于 codex-rs/config/src/config_toml.rs(默认值见常量DEFAULT_PROJECT_DOC_MAX_BYTES = 32 * 1024,即 32 KiB),并在 codex-rs/core/config.schema.json 中登记为:
{ "project_doc_max_bytes": { "default": 32768, "description": "Maximum number of bytes to include from an AGENTS.md project doc file.", "minimum": 0, "type": "integer" } }因此你可以在配置文件中将其调大(获得更充足的项目上下文)或调小(省出上下文给对话本身)。特别地,将该值设为0时,codex-rs/core/src/agents_md.rs 会直接返回空结果——即完全禁用项目级 AGENTS.md 的加载。
扩展候选文件名:project_doc_fallback_filenames
部分团队已经在使用CLAUDE.md等其他约定文件维护项目规范。为避免重复维护,Open Interpreter 提供了project_doc_fallback_filenames:当某个目录下找不到AGENTS.md时,会按顺序探测该列表中声明的文件名,把它们也当作项目说明的候选来源。
- 候选顺序为:
AGENTS.override.md→AGENTS.md→project_doc_fallback_filenames中的各文件名(自动去重并跳过空串),见candidate_filenames的实现; - 配置默认值为空列表(
[]),需要在配置文件(如config.toml)中显式给出,例如把CLAUDE.md加入其中即可让旧规范文件无缝接入。
一个完整的 AGENTS.md 模板
官方文档给出了一份可直接复制的模板骨架,覆盖了构建命令、代码约定与注意事项三个最常用的板块:
# Project Instructions ## Commands - `pnpm test` runs unit tests. - `pnpm lint` must pass before final changes. - Use `pnpm typecheck` after editing TypeScript types. ## Conventions - Keep server code under `src/server`. - Keep UI components small and colocated with their tests. - Prefer existing helpers in `src/lib`. ## Cautions - Do not edit generated files under `src/generated`. - Ask before changing database migrations.【免费下载链接】openinterpreterA coding agent for open models like Kimi K3 and GLM 5.3项目地址: https://gitcode.com/GitHub_Trending/op/openinterpreter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考