很多人已经开始感觉到,AI 编程助手正在改变日常开发的方式。
不是“再过几年会改变”,是已经改变了。
Cursor、GitHub Copilot、Claude Code 这些工具在过去一年里密集地涌进来。你可能已经装了其中一个,试过让 AI 帮你写点代码、修个 Bug。效果时好时坏——有时候 AI 像真的懂你的项目,有时候它连你在用哪个框架都搞不清楚。
问题不出在 AI 模型本身。Claude 和 GPT-4 的能力摆在那里,写代码的逻辑推理没问题。
问题出在上下文。
AI 不知道你的项目是什么结构、用了什么技术栈、代码风格是什么、哪些文件是核心逻辑哪些是自动生成的。你给它一个需求,它只能靠猜。猜对了是运气,猜错了是常态。
OpenCode 用 /init 解决了这个问题。这篇文章不讲概念,讲它到底怎么做的。
目录
一、一个命令,改变了什么
二、本质是“让 AI 拿到项目的说明书”
三、/init 到底做了什么——四个步骤拆解
四、有 /init 和没有 /init 的差别
五、对你有用的三个工程启示
六、最后问你一个问题
一、一个命令,改变了什么
OpenCode 是 SST 团队开发的开源 AI 编程 Agent,用 Go 编写,跑在终端里。它的定位很明确:不是聊天窗口,是能读代码、改文件、执行命令的 Agent。
安装完 OpenCode,进入项目目录,输入 opencode,会出现一个 TUI 界面。
然后输入 /init。
就这么简单。但这一瞬间发生的事情,比你想象的多。
OpenCode 会扫描整个项目,分析代码组织方式,然后自动生成一个 AGENTS.md 文件。这个文件记录了项目的结构、技术栈、代码规范等信息。
之后你在 OpenCode 里问任何问题、提任何需求,AI 都会基于这个文件来理解你的项目。
换句话说,/init 解决的是一个根本问题:AI 怎么知道你的项目是什么。
二、本质是“让 AI 拿到项目的说明书”
要理解 /init 的价值,得先理解 AI 编程助手工作的底层逻辑。
AI 模型本身不包含你项目的任何信息。你问它“帮我给这个项目加个登录功能”,它只能根据你提供的有限上下文(比如当前打开的文件、你刚说的话)来推测。如果它不知道你的项目是 Next.js 还是 Express、不知道数据库用什么、不知道代码风格是什么,生成的东西大概率需要大量修改。
AGENTS.md 本质上是给 AI 看的项目说明书。
工具决定 AI 能做什么(读文件、改代码、执行命令),AGENTS.md 决定 AI 应该怎么做。它定义了项目结构、代码风格、开发规范、架构决策。
OpenCode 启动时会把 AGENTS.md 的内容加载进 AI 的系统提示词里。AI 在回答任何问题之前,都已经读过了这份“说明书”。
/init 就是生成这份说明书的最快方式。
三、/init 到底做了什么——四个步骤拆解
flowchart TD
A[用户在 OpenCode 中输入 /init] --> B[扫描项目目录结构]
B --> C[识别框架和语言模式]
C --> D[读取包管理器和配置文件]
D --> E[生成 AGENTS.md]
E --> F[后续对话自动加载项目上下文]
第一步:扫描目录结构
/init 触发后,OpenCode 会遍历项目根目录及子目录。它不是简单地列文件名,而是识别组织模式——哪些是源代码目录、哪些是配置文件、哪些是构建产物。
这一步的关键是区分“项目内容”和“项目噪音”。node_modules、.git、dist 这些目录不会被当作项目核心结构来处理。
第二步:识别框架和语言模式
OpenCode 通过文件扩展名和特定文件的存在来判断技术栈。
看到 package.json 就知道是 Node.js 项目。看到 requirements.txt 或 pyproject.toml 就知道是 Python。看到 go.mod 就知道是 Go。看到 pom.xml 就知道是 Java Maven 项目。
这一步不是猜,是基于确定性特征做判断。
第三步:读取关键配置文件
/init 会读取 package.json、tsconfig.json、.eslintrc 这类配置文件。它要从中提取:
项目名称和版本
主要依赖
构建工具和脚本
语言版本要求
这些信息会被写入 AGENTS.md,让 AI 知道项目用了什么库、什么版本。
第四步:生成 AGENTS.md
基于前三步收集的信息,OpenCode 生成一份结构化的 Markdown 文档。
这份文档通常包含:
项目概述
架构说明
目录结构及每个目录的用途
代码规范
常用操作
如果项目里已经存在 AGENTS.md,/init 会在其基础上进行补充,而不是覆盖。
整个过程是自动化的,不需要你手动填写任何内容。
四、有 /init 和没有 /init 的差别
场景一:没有 /init
你打开 OpenCode,直接输入:“帮我找到支付流程的入口。”
AI 不知道你的项目结构。它只能猜测——可能在 src/payment、可能在 routes、可能在 api。它会尝试读几个它认为可能的文件,如果猜错了,你得多轮对话纠正它。
场景二:运行了 /init
同样的需求。AI 已经在系统提示词里包含了 AGENTS.md 的内容。它知道项目是 TypeScript + Express 架构,知道 src/payment/ 是支付模块,知道 routes/ 下是路由定义。
它能直接定位到正确的文件,告诉你流程是怎么走的。
差别不是“快一点”,是从“猜”变成了“知道”。
再看一个更具体的对比:
维度
没有 /init
有 /init
AI 对项目结构的理解
零,需要你逐步告知
完整,启动即具备
代码生成一致性
每次可能不同风格
遵循项目既有规范
多轮对话效率
重复解释项目背景
一次初始化,全程复用
接手新项目
从零开始摸索
/init
三秒建立认知
/init 把 AI 从一个“会写代码的陌生人”变成了“懂你项目的同事”。
五、对你有用的三个工程启示
启示一:上下文是 AI 编程的瓶颈,不是模型能力
很多人抱怨 AI 生成的代码用不上,归根结底是上下文没给够。/init 做的事情本质上就是把项目上下文结构化、持久化。
OpenCode 的上下文管理思路值得借鉴:不是每次对话重新构建上下文,而是通过 AGENTS.md 这样的文件做到一次性建立、持续性复用。
你的项目里有没有类似的“上下文资产”?技术文档、架构决策记录、代码规范——这些都可以成为 AI 的输入。
模型能力决定 AI 的上限,上下文质量决定 AI 的下限。
启示二:AGENTS.md 可以团队共享,不止个人用
AGENTS.md 推荐提交到 Git 仓库。这意味着团队所有人共享同一份项目上下文。
新人入职,git clone 之后运行 /init,AI 就能基于团队统一的规范来辅助开发。不需要老人一遍遍口头交代“我们这个项目要注意什么”。
本质上,AGENTS.md 是把团队的隐性知识变成了显性文档,而且是 AI 能直接使用的文档。
启示三:/init 不只是初始化,是持续演进
/init 不是只跑一次就完事。项目结构变化、技术栈升级、新增模块——这些变化都应该反映在 AGENTS.md 里。
OpenCode 支持在 opencode.json 中通过 instructions 字段加载额外的规则文件,比如 CONTRIBUTING.md、docs/guidelines.md。这意味着你可以把项目规范分散维护,OpenCode 自动聚合。
好的项目上下文不是一次性生成的,是跟着项目一起生长的。
六、最后问你一个问题**
你的团队现在用的 AI 编程工具,每次对话都知道你的项目是什么结构、用什么技术栈、遵循什么规范吗?
如果答案是否定的,你浪费的不仅仅是 Token——你在浪费 AI 本可以具备的“项目理解力”。
而这个问题,一个 /init 就能解决。