Open Interpreter 的 /init 命令解析:一条提示词如何自动生成 AGENTS.md 项目指南
本文解析 Open Interpreter(codex-rs 代码库)TUI 中 /init 斜杠命令的内置提示词模板 prompt_for_init_command.md:它的完整内容、逐条要求,以及该提示词如何被 include_str! 编译进二进制、经 slash_dispatch.rs 提交给模型、最终生成一份可被自动加载的 AGENTS.md。读完你能掌握:如何在终端里一键生成项目贡献指南,提示词模板的每条约束如何映射到生成行为,以及生成的 AGENTS.md 会被 core 层怎样发现、拼接和截断。
/init:一条命令生成 AGENTS.md
在 Open Interpreter 的 TUI 交互会话中,输入 /init 即可让模型检查当前仓库结构并起草一份名为 AGENTS.md 的贡献者指南(contributor guide)。该命令在命令弹窗中的描述是“create an AGENTS.md file with instructions for Open Interpreter”,见 slash_command.rs 中按产品名(Codex / Open Interpreter)动态切换的 description()。
命令枚举 SlashCommand::Init 定义于 slash_command.rs,它有两个值得注意的行为属性:
- 不支持内联参数:
supports_inline_args()(slash_command.rs)中没有Init,即/init只能裸写,不能写/init <额外要求>; - 任务进行中不可用:
available_during_task()对SlashCommand::Init返回false(slash_command.rs),若 Agent 正在跑任务,dispatch 层会直接提示'/init' is disabled while a task is in progress.,见 slash_dispatch.rs 的slash_command_blocked_by_active_task与拦截分支。
提示词模板全文与逐条要求
/init 的全部“智能”都来自一个纯文本模板文件 prompt_for_init_command.md。它并不包含任何仓库特有信息,而是一份通用的、面向任意仓库的元提示词(meta-prompt),核心内容如下:
总目标:生成一个名为 AGENTS.md 的文件,作为该仓库的贡献者指南。写入前必须先检查当前工作目录是否已存在 AGENTS.md,若存在则不得覆盖或修改。目标是产出标题清晰、描述具体、可执行(actionable)的文档,并按需增删小节:与本仓库相关的章节要加,不适用的要删。
文档硬性要求(Document Requirements):
| 要求 | 说明 |
|---|---|
| 标题 | 文档标题固定为 “Repository Guidelines” |
| 结构 | 使用 Markdown 标题(#、## 等)组织 |
| 篇幅 | 保持简洁,200–400 词为最优 |
| 语气 | 简短、直接、专业、教学式,且必须针对本仓库 |
| 示例 | 在有帮助处给出示例(命令、目录路径、命名模式) |
推荐章节(Recommended Sections),模板给出了五个默认小节并允许自由扩展:
- Project Structure & Module Organization — 描述项目结构,包括源码、测试、资源文件各自放在哪里;
- Build, Test, and Development Commands — 列出构建、测试、本地运行的关键命令(如
npm test、make build),并逐一简述命令作用; - Coding Style & Naming Conventions — 缩进规则、语言风格偏好、命名模式,以及项目使用的格式化/静态检查工具;
- Testing Guidelines — 测试框架、覆盖率要求、测试命名规范与运行方式;
- Commit & Pull Request Guidelines — 从 Git 历史中归纳的提交信息约定,以及 PR 要求(描述、关联 issue、截图等)。
模板最后还留了一个可选扩展位:如相关,可追加 “Security & Configuration Tips”、“Architecture Overview” 或 “Agent-Specific Instructions” 等章节。
这份模板的设计意图很明确:约束输出结构(固定章节骨架 + 标题)而放开输出内容(一切以仓库实际情况为准),并用“200–400 词”“不得覆盖已有文件”两条护栏防止模型生成臃肿文档或破坏用户已有配置。
源码级调用链:从 include_str! 到提交消息
模板文件以编译期字符串的方式嵌入了 TUI 二进制。在 slash_dispatch.rs 中:
SlashCommand::Init => {
const INIT_PROMPT: &str = include_str!("../../prompt_for_init_command.md");
self.submit_user_message(INIT_PROMPT.to_string().into());
}
调用链可以概括为四步:
- 用户在 composer 输入
/init并回车,ChatComposer将其解析为InputResult::Command(SlashCommand::Init); ChatWidget::dispatch_command(slash_dispatch.rs)先做三道准入检查:side conversation 是否允许、review 模式下是否允许、任务是否进行中(/init在此被拦截);- 命中
SlashCommand::Init分支后,include_str!宏在编译期把 prompt_for_init_command.md 的全文读成&'static str常量(注意宏内相对路径../../是相对slash_dispatch.rs源文件位置,运行时不涉及文件 I/O); submit_user_message把这段提示词当作一条普通用户消息投递给会话,于是模型在后续 turn 中按提示词要求检查仓库(读目录、看构建脚本、浏览 Git 历史)并写出AGENTS.md。
也就是说,/init 没有特殊的工具调用或后端接口,它本质是把一段精心编写的系统级提示词伪装成用户输入——这也解释了为什么模板里要用第二人称祈使句(“Generate a file named AGENTS.md...”):这段文字是写给模型看的指令,而不是展示给用户的界面文案。
外层封装 handle_slash_command_dispatch(slash_dispatch.rs)还会在 dispatch 之后记录本地历史条目,使 /init 可以被方向键回查,行为与普通提交一致。
生成的 AGENTS.md 会被怎样加载
/init 的价值不止于生成一份文档,而在于这份文档之后会被 core 层每个会话自动加载为模型可见的项目指令。加载逻辑集中在 agents_md.rs,关键机制如下:
发现顺序:先通过 project_root_markers(默认标记为 .git)从当前工作目录向上查找项目根,然后收集**从项目根向下到当前工作目录(含两端)**路径上的每一个 AGENTS.md,按“根 → cwd”的顺序拼接,且不会越过项目根向上继续查找(见 agents_md.rs 的模块文档注释)。多环境(multi-environment)场景下,拼接文本会为每个环境单独标注 for \<environment_id>` with root ([agents_md.rs](https://gitcode.com/GitHub_Trending/op/openinterpreter/blob/8e5d19bfcd705c3786c5641971dce5c2dc1aa64d/codex-rs/core/src/agents_md.rs?utm_source=gitcode_repo_files#L343-L386) 的 environment_labeled_text`)。
优先级与回退文件名:每个目录上依次尝试的候选文件名由 candidate_filenames 决定(agents_md.rs)——AGENTS.override.md 优先于 AGENTS.md,之后再是 project_doc_fallback_filenames 配置中列出的其他文件名。文档 docs/agents_md.md 还给出了全局层面的作用域表:全局指令位于 ~/.openinterpreter/AGENTS.md,可用 ~/.openinterpreter/AGENTS.override.md 做临时覆盖(删除即恢复)。
字节预算与截断:所有项目指令合计受 project_doc_max_bytes 限制,默认值为 32 KiB,定义于 config_toml.rs 的 DEFAULT_PROJECT_DOC_MAX_BYTES,并经 config/mod.rs 落到运行时配置。read_agents_md 按“根 → cwd”顺序消耗预算,超出的文件会被 truncate 截断并打一条 project doc exceeds remaining budget; truncating 的 warning(agents_md.rs);project_doc_max_bytes = 0 时直接跳过加载。截断测试见 agents_md_tests.rs。
把这两段拼起来看:/init 提示词要求 “200–400 词” 并非随手写的数字——一份 400 词左右的英文 Markdown 约 2.5 KiB,远低于 32 KiB 预算,因此按模板生成的 AGENTS.md 几乎不可能触发截断,这正是提示词约束与底层加载机制相互咬合的体现。
本仓库就有一份现成产物
本仓库根目录的 AGENTS.md 就是这类“仓库指南”文档的实例:它按章节列出了 codex-rs 工作区的构建/测试入口(Bazel 与 Cargo 双轨)、目录职责等约定,供 Agent 在此仓库工作时自动读取。配合 docs/agents_md.md 中的官方示例(Commands / Conventions / Cautions 三段式结构),可以看到实际落地的 AGENTS.md 与 /init 模板推荐的五个章节高度同构——命令、风格、测试、注意事项各占一栏,篇幅短而具体。
文档 docs/agents_md.md 给出的使用建议与模板要求互为印证:“Good AGENTS.md files are short, specific, and durable. Put temporary task details in the prompt, not in project instructions.” 即:把稳定规则沉淀进文件,把一次性任务细节留在对话里。
实践要点与适用边界
- 何时使用:新仓库、缺乏书面贡献指南的团队仓库,或者你希望把常用命令/目录约定固化、避免每次在 prompt 里重复时。在 TUI 中直接输入
/init,等模型完成后人工审校生成的AGENTS.md,删掉不适用的章节、修正错误命令,再把它提交进版本库。 - 不会覆盖:模板第一条即要求检查已存在的
AGENTS.md并跳过,因此对已有指南的仓库重复执行/init是安全的(前提是模型遵循了指令)。 - 时机限制:Agent 正在执行任务期间
/init会被禁用,需等当前 turn 结束;它也不接受内联参数,需要额外要求时应等模型生成后再手动编辑文件。 - 内容边界:
/init只生成当前工作目录视角的指南;若仓库是 monorepo,core 层会沿“项目根 → cwd”加载多层AGENTS.md,因此更精细的做法是在子目录追加更局部的AGENTS.md,利用“越靠近 cwd 越优先/越相关”的拼接顺序细化局部约定。 - 版本前提:以上行为以当前仓库的 TUI 实现为准——
include_str!内嵌意味着提示词修改后需重新编译 TUI 才会生效,它不受任何运行时配置文件影响。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00