-
Notifications
You must be signed in to change notification settings - Fork 3
Rules and Context.zh CN
phinn edited this page Jul 12, 2026
·
1 revision
🌐 Language: English | 中文
KinetAios 把 4 种「指导材料」自动注入到 agent 的 prompt。约定大于配置——文件在 cwd 根,自动被读;不需要在 setting 里勾选。
| 文件 | 来源 | 谁读 | 注入位置 |
|---|---|---|---|
AGENTS.md |
cwd 根 | Direct 引擎自动读 | systemPrompt 拼接 |
CLAUDE.md |
cwd 根 | Direct 引擎自动读(作为 AGENTS.md 的 fallback) | systemPrompt 拼接 |
KINET.md |
cwd 根,app UI「规则」tab 维护 | 三套引擎都注入 | Direct:systemPrompt;Claude:--append-system-prompt;Codex:prompt 头 |
KINET-CONTEXT.md |
cwd 根,Workbench 卡片「背景」按钮维护 | 三套引擎都注入 | 同 KINET.md |
src/main/engines.ts:54:
function loadProjectRules(cwd: string): string {
for (const name of ['AGENTS.md', 'CLAUDE.md']) {
try {
const body = fs.readFileSync(path.join(cwd, name), 'utf8');
if (body.trim()) return `\n\n# 项目规则(${name})\n${body.slice(0, 8000)}`;
} catch { /* 不存在 → 试下一个 */ }
}
return '';
}-
Direct 独享(只有 DirectEngine 调
loadProjectRules) - 优先级
AGENTS.md>CLAUDE.md(都有则只读前者) - 截断 8000 字符
- 适合:团队/工具约定的硬规则(代码风格、commit 格式、安全限制)
Claude Code / Codex 不需要这里读,因为它们各自的 CLI 已经会读(走 Claude Code 的 CLAUDE.md 自动加载 / Codex 的 AGENTS.md 自动加载)。
src/main/engines.ts:68:
export function loadRulesBlock(cwd: string): string {
const body = fs.readFileSync(path.join(cwd, 'KINET.md'), 'utf8');
return body.trim() ? `\n\n# 项目规则(KINET.md)\n${body.slice(0, 8000)}` : '';
}- 三套引擎都注入
- 在
TaskManager.runTurn里加载,通过EngineRunOpts.rulesBlock传给引擎 - Direct 跟在
loadProjectRules后面;Claude 走--append-system-prompt;Codex 拼到 prompt 头 - 截断 8000
和 AGENTS.md/CLAUDE.md 区分:后者是外部工具约定(直接读文件就能用,不依赖 KinetAios);前者是本 app 的「规则 tab」写的,要主动注入到 CC/Codex。
主窗口 → 「规则」tab:
- 左上:标题「项目规则(KINET.md)」
- 中间:
<textarea>编辑内容 - 右上:⟳ 重新加载(从磁盘读,覆盖 textarea) / 保存(写回磁盘)
- 底部状态栏:当前 cwd / 已保存 / 未保存 / 错误
切 cwd → 自动读新 cwd 的 KINET.md(空就显示空 textarea)。
src/main/engines.ts:80:
export function loadContextBlock(cwd: string): string {
const body = fs.readFileSync(path.join(cwd, 'KINET-CONTEXT.md'), 'utf8');
return body.trim() ? `\n\n# 项目背景(KINET-CONTEXT.md)\n${body.slice(0, 12000)}` : '';
}- 三套引擎都注入
- 截断 12000(比 KINET.md 多 —— 背景知识一般更长)
- 通过
EngineRunOpts.contextBlock传
和 KINET.md 区分:
-
KINET.md= 「必须遵守的规则」(代码风格、不能做的事、安全限制) -
KINET-CONTEXT.md= 「关于这个项目的事实」(架构、技术栈、关键文件、约定来源)
侧边栏 📂 → Workbench → 找到 cwd 对应的卡片 → 「背景」按钮 → 弹 modal:
- 标题:项目背景(KINET-CONTEXT.md)
- 显示当前 cwd
-
<textarea>编辑 - 保存 / 取消
engines.ts:139(DirectEngine.run)拼 systemPrompt:
baseSystemPrompt ← KinetAios 内置 system(写文件规则、cwd 提示等)
+ skillSection ← 用户用 /<name> 调用的 skill body
+ loadProjectRules ← AGENTS.md / CLAUDE.md(截断 8000)
+ rulesBlock ← KINET.md(截断 8000)
+ contextBlock ← KINET-CONTEXT.md(截断 12000)
memoryBlock 不在这里(从 v1.0 起走 history[0],见 Long-Term-Memory)。
不读 AGENTS.md/CLAUDE.md(它们各自 CLI 自己读)。
engines.ts 的 CC/Codex.run:
append = (rulesBlock ?? '') ← KINET.md
+ (contextBlock ?? '') ← KINET-CONTEXT.md
+ memoryBlock; ← 长期记忆
- CC:
--append-system-prompt <append> - Codex:append + 当前 prompt 拼接(
codex没--append-system-promptflag)
| 你想表达 | 写哪里 |
|---|---|
| 团队所有人都该遵守的代码风格、commit 规则 |
AGENTS.md(团队 repo 入库) |
| 个人对该项目的硬性约束(不许 push main、必须 typecheck 过) |
KINET.md(本地,不入库或入库都行) |
| 这个项目的架构、技术栈、关键文件 | KINET-CONTEXT.md |
| 用户长期偏好(我爱简洁回复、Go 后端) | 长期记忆(🧠 自动抽,或手动改) |
- 提交前必须 `npm run typecheck`
- 不许 push main,开分支
- 回复用中文
- 写文件用 write_file 工具,不要 shell heredoc# 项目结构
- src/main/* —— 主进程(Node 全访问)
- src/renderer/* —— 渲染进程(无 Node)
- src/shared/types.ts —— 单一真理源
# 技术栈
- Electron + TypeScript
- better-sqlite3 + FTS5
- vanilla TS + HTML/CSS,无前端框架
# 关键约定
- KinetAPI 是三层契约,加方法要同步改 3 处
- 三引擎统一发 AgentEvent-
src/main/engines.ts:54——loadProjectRules(AGENTS/CLAUDE) -
src/main/engines.ts:68——loadRulesBlock(KINET.md) -
src/main/engines.ts:80——loadContextBlock(KINET-CONTEXT.md) -
src/renderer/app.ts—— 「规则」tab 逻辑 -
src/main/main.ts——read-rules/write-rules/read-context/write-contextIPC