一、原理

deepcode在启动时都会加载AGENTS.md文件,然后这个文件的加载有三级:

  1. <项目根目录>/.deepcode/AGENTS.md ← 最高优先
  2. <项目根目录>/AGENTS.md ← 次之
  3. ~/.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.1

C:\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.cmd

2.不是 → 注册表 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 行。"

千万不要在 Git Bash 里用 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 "<保存的原始值>" /f
rmdir /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 就会回到官方行为

END
本文作者: 文章标题:如何让cmd在进入deepcode时自动阅读规范文件
本文地址:https://lyj15.cn/%E6%8A%80%E6%9C%AF/2026/949/22.html
版权说明:若无注明,本文皆羡逍遥原创,转载请保留文章出处。
最后修改:2026 年 10 月 22 日
如果觉得我的文章对你有用,请随意赞赏