一、原理
deepcode在启动时都会加载AGENTS.md文件,然后这个文件的加载有三级:
- <项目根目录>/.deepcode/AGENTS.md ← 最高优先
- <项目根目录>/AGENTS.md ← 次之
- ~/.deepcode/AGENTS.md ← 只有前两个都不存在时才用
因为有级别限制,一旦项目里自带 AGENTS.md,用户级那份就被完全忽略,所以项目级不要写这个文件。如果个别项目有特殊规范,建议写在总规范文件里面
整体链路
你在 cmd 输入 deepcode
│
▼
PATH 命中 C:\Users\Administrator\bin\deepcode.cmd ← 包装器(第 1 层)
│
▼
node deepcode-launcher.js ← 拼参数 + 写日志
│ 自动补:-p "会活开始的第一步:请先 Read <规范文件>…"
▼
node …\@vegamo\deepcode-cli\cli.js -p "…" ← 官方 CLI(原封不动)
│
▼
TUI 启动 → 立即提交该消息 → 模型调用 Read 工具 → 读到规范
│
▼
先找项目 AGENTS.md 文件,没有这个文件时,~/.deepcode/AGENTS.md 就会生效二、部署
1.环境检查
首先先进入cmd,先做环境检查,看看有没有安装node.js
node -v
where deepcode
控制台输出C:\Users\Administrator>node -v
v24.11.1C:\Users\Administrator>where deepcode
C:\Users\Administrator\bin\deepcode ← 这行是"配置完成后"才有的
C:\Users\Administrator\bin\deepcode.cmd ← 这行是"配置完成后"才有的
C:\Users\Administrator\AppData\Roaming\npm\deepcode
C:\Users\Administrator\AppData\Roaming\npm\deepcode.cmd
可以看到,where deepcode 指向了 C:\Users\Administrator\AppData\Roaming\npm\deepcode.cmd
2.创建配置文件目录
(1)新建包装器目录
mkdir "C:\Users\Administrator\bin"(2)新建 C:\Users\Administrator\bin\deepcode-launcher.js文件,SPEC_WIN的内容改成自己实际的总规范文件
#!/usr/bin/env node
/**
* deepcode 启动器(编码安全版)
*
* 作用:每次启动 deepcode 时,先以 -p 参数提交一段"必读规范"的初始提示,
* 让模型在每次会话开始的第一时间阅读:
* C:\Users\Administrator\Desktop\AI上下文存储\AI操作规范.md
*
* 为什么用 Node 而不是纯 bat:cmd.exe 按当前代码页解析批处理,
* 中文提示在 GBK/UTF-8 之间极易变成乱码;由 Node 生成参数走 Windows
* Unicode API 传给子进程,任何代码页下都不会乱码。
*
* 透明转发:不修改 deepcode 本体,只按官方入口重新拼参数。
*/
'use strict';
const path = require('node:path');
const fs = require('node:fs');
const { spawn } = require('node:child_process');
const SPEC_WIN = 'C:\\Users\\Administrator\\Desktop\\AI上下文存储\\AI操作规范.md';
const BOOT = [
'会话开始的第一步:请先使用 Read 工具完整读取 ' + SPEC_WIN + ' 这个文件,',
'并严格按其中规则执行(包括上下文归档目录、按项目名确定文件名、以及每轮对话更新一次内容)。',
'读取完成后简短确认,然后等待我的指令。',
'若该文件不存在或读取失败,请直接说明,不要臆测其内容。'
].join('');
function resolveCli() {
if (process.env.DEEPCODE_CLI) return process.env.DEEPCODE_CLI;
const npmRoot = process.env.APPDATA
? path.join(process.env.APPDATA, 'npm', 'node_modules')
: '';
const candidates = [
npmRoot && path.join(npmRoot, '@vegamo', 'deepcode-cli', 'cli.js')
].filter(Boolean);
for (const candidate of candidates) {
if (fs.existsSync(candidate)) return candidate;
}
return candidates[0];
}
function buildArgs(userArgs) {
const hasFlag = userArgs.some((arg) => arg.startsWith('-'));
if (hasFlag) {
// 用户显式带了命令行选项(-r/-l/-f/-p/-x 等),原样透传,避免与其冲突
return userArgs;
}
if (userArgs.length > 0) {
// 纯文本指令:规范提示 + 用户本次指令,合并成一个 prompt
return ['-p', BOOT + '\n\n本次指令:' + userArgs.join(' ')];
}
return ['-p', BOOT];
}
const cliPath = resolveCli();
if (!cliPath || !fs.existsSync(cliPath)) {
process.stderr.write('[deepcode] 未找到 deepcode 官方入口: ' + (cliPath || '(未知)') + '\n');
process.stderr.write('[deepcode] 请检查 deepcode 是否已安装,或用 DEEPCODE_CLI 指定 cli.js 路径。\n');
process.exit(1);
}
function writeLaunchLog(finalArgs) {
try {
const line = JSON.stringify({
time: new Date().toISOString(),
cwd: process.cwd(),
cli: cliPath,
argv: finalArgs.slice(1)
}) + '\n';
fs.appendFileSync(path.join(__dirname, 'deepcode-launch.log'), line, 'utf8');
} catch {
// 日志失败不影响启动
}
}
const args = [cliPath, ...buildArgs(process.argv.slice(2))];
writeLaunchLog(args);
const child = spawn(process.execPath, args, {
stdio: 'inherit',
windowsHide: false
});
child.on('error', (error) => {
process.stderr.write('[deepcode] 启动失败: ' + error.message + '\n');
process.exit(1);
});
child.on('exit', (code, signal) => {
if (signal) {
process.kill(process.pid, signal);
return;
}
process.exit(code === null ? 1 : code);
});(3)新建 C:\Users\Administrator\bin\deepcode.cmd文件,这个文件里不要写汉字,会乱码
@echo off
rem ---------------------------------------------------------------
rem deepcode launcher wrapper (ASCII only on purpose)
rem Passes control to deepcode-launcher.js, which injects a
rem "read the AI spec file first" prompt on every launch.
rem Keep this file ASCII-only: cmd.exe parses .bat/.cmd using the
rem active code page, so non-ASCII text here would turn to mojibake.
rem ---------------------------------------------------------------
setlocal
set "LAUNCHER=%~dp0deepcode-launcher.js"
where node >nul 2>nul
if errorlevel 1 (
echo [deepcode] node not found in PATH. Please install Node.js or fix PATH.
endlocal
exit /b 1
)
node "%LAUNCHER%" %*
set "EXITCODE=%ERRORLEVEL%"
endlocal & exit /b %EXITCODE%(4)新建 C:\Users\Administrator\bin\deepcode文件
#!/usr/bin/env bash
# deepcode 启动包装器(Git Bash / MSYS):统一转交 deepcode-launcher.js
set -u
LAUNCHER="/c/Users/Administrator/bin/deepcode-launcher.js"
if [ ! -f "$LAUNCHER" ]; then
echo "[deepcode] 未找到启动器: $LAUNCHER" >&2
exit 1
fi
exec node "$LAUNCHER" "$@"(5)然后在Git Bash 窗口执行以下命令,没有Git先安装一下
cd /c/Users/Administrator/bin
sed -i 's/\r$//' deepcode && chmod +x deepcode(6)新建 C:\Users\Administrator\.deepcode\AGENTS.md文件
# 全局会话规则(用户级 AGENTS.md)
## 每次会话开始必做
1. 先使用 Read 工具完整读取 `C:\Users\Administrator\Desktop\AI上下文存储\AI操作规范.md`;
2. 严格按该文件中的规则执行,包括:
- 上下文归档目录为 `C:\Users\Administrator\Desktop\AI上下文存储\日常存储`;
- 按当天日期(如 `2026.10.22`)建立/复用文件夹,不存在则新建;
- 按项目名映射文件:`server.daishuerp.com`→后端项目、`daishuerp.com`→ERP前端项目、`daishuerp-plugin`→插件项目、`serv.daishuerp.com`→旧后端项目、`crm-back.daishuerp.com`→旧前端项目、`supply_chain_management`→供应链前端项目、`szgerp-go`→golang脚本项目、`tool.daishuerp`→工具箱项目;
- 每轮对话更新一次归档内容。
3. 若该文件不存在或读取失败,直接说明,不要臆测其内容。
> 说明:本文件仅在没有项目级 `AGENTS.md` / `.deepcode/AGENTS.md` 时生效
> (Deep Code 的项目指令是「取其一」而非叠加)。(7)把 bin 前置到用户 PATH,打开cmd,先输入以下命令拿到原值
reg query "HKCU\Environment" /v Path
输出内容HKEY_CURRENT_USER\Environment
Path REG_EXPAND_SZ C:\Users\Administrator\bin;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;C:\Users\Administrator\AppData\Roaming\npm;%PhpStorm%;D:\software\ComposerSetup;
然后设置到用户 PATH,/d后面的值替换成自己刚刚拿到的值
reg add "HKCU\Environment" /v Path /t REG_EXPAND_SZ /d "改成自己拿到的值" /f(8)广播环境变量变更,打开普通 cmd / PowerShell 窗口,运行以下命令,广播 WM_SETTINGCHANGE
# 保存为 broadcast.ps1 后执行:powershell -NoProfile -ExecutionPolicy Bypass -File broadcast.ps1
$sig = @'
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
'@
$t = Add-Type -MemberDefinition $sig -Name NativeMethods -Namespace Win32 -PassThru
$result = [UIntPtr]::Zero
$ret = $t::SendMessageTimeout([IntPtr]0xffff, 0x1A, [UIntPtr]::Zero, "Environment", 2, 5000, [ref]$result)
"broadcast ret=$ret" # ret=1 表示成功三、验证与使用
1.命令解析顺序
打开普通 cmd / PowerShell 窗口,运行以下命令
$env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User')
Get-Command deepcode -All | ForEach-Object { $_.Source }第一行应该是C:\Users\Administrator\bin\deepcode.cmd
如果第一行是C:\Users\Administrator\AppData\Roaming\npm\deepcode.cmd,说明 PATH 没生效,按下面顺序排查
排查顺序(打开普通 cmd / PowerShell 窗口)1.输入
Get-Command deepcode -All,看输出第一行是否为bin\deepcode.cmd2.不是 → 注册表 PATH 没生效:
输入
reg query "HKCU\Environment" /v Path,看输出是否含C:\Users\Administrator\bin;;确认没用
setx改过(否则类型变REG_SZ,要重新用reg add /t REG_EXPAND_SZ写回);重新广播
WM_SETTINGCHANGE,并彻底退出终端程序重开;
3.是但仍无提示 → 看deepcode-launch.log有无新记录:无 → 你看的是旧窗口(环境变量是启动时快照的),重开窗口;
有且含
-p→ 包装器没问题,问题在模型侧,重新试一下,或者输入下面语句看看会不会返回文件第一行,C:\Users\Administrator\Desktop\AI上下文存储\AI操作规范.md改成你的实际规范文件地址node "%APPDATA%\npm\node_modules\@vegamo\deepcode-cli\cli.js" -x -p "请先使用 Read 工具完整读取 C:\Users\Administrator\Desktop\AI上下文存储\AI操作规范.md,然后原样回复你读到的第 1 行。"
which deepcode 判断!Git Bash 会自动把 ~/bin 塞进 PATH,会造成"已经生效"的假象
2.启动日志
每启动一次就会多一行日志,看看日志有没有记录
type C:\Users\Administrator\bin\deepcode-launch.log有记录且 argv[0] 是 -p ,说明包装器生效了
没有记录,说明根本没走包装器(PATH 问题)
3.启动测试
cmd启动deepcode,看看有没有阅读规范文件,正常应该是这样子的
一进去就自动阅读规范文件,并且开始第一次对话
4.日常使用
cmd输入deepcode:进入deepcode页面,并且自动阅读规范文件,并且以规范内容作为提示词开始第一次对话
cmd输入deepcode 你的提示词:进入deepcode页面,并且自动阅读规范文件,并且以规范内容 + 你的提示词 拼接作为提示词开始第一次对话
cmd输入deepcode -:进入deepcode页面,不会自动阅读规范文件,也不会开始第一次对话
5.想改文案 / 换文件路径
打开C:\Users\Administrator\bin\deepcode-launcher.js文件
改文案就改BOOT的内容
换文件路径就改SPEC_WIN的内容
保存即生效,不需要重开终端
6.保存原始值
终端输入reg query "HKCU\Environment" /v Path,把返回的值给保存起来
四、卸载 / 完全回滚
如果不想用了,就按照下面顺序执行命令,就可以卸载了,不影响 deepcode 本体
打开普通 cmd / PowerShell 窗口
保存的原始值为前面reg query "HKCU\Environment" /v Path执行的结果中Path REG_EXPAND_SZ后面的值
reg add "HKCU\Environment" /v Path /t REG_EXPAND_SZ /d "<保存的原始值>" /frmdir /s /q "C:\Users\Administrator\bin"del "C:\Users\Administrator\.deepcode\AGENTS.md"# 保存为 broadcast.ps1 后执行:powershell -NoProfile -ExecutionPolicy Bypass -File broadcast.ps1
$sig = @'
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
'@
$t = Add-Type -MemberDefinition $sig -Name NativeMethods -Namespace Win32 -PassThru
$result = [UIntPtr]::Zero
$ret = $t::SendMessageTimeout([IntPtr]0xffff, 0x1A, [UIntPtr]::Zero, "Environment", 2, 5000, [ref]$result)
"broadcast ret=$ret" # ret=1 表示成功完成后重开终端,deepcode 就会回到官方行为
