用 Node.js 从零写一个最小 Agent 课程。
现在只参考一个项目:
当前课程:
00:Node.js 命令入口 + DeepSeek 对话01:Agent 循环 + Bash 工具调用02:工具分发 + 文件工具03:Permission 权限判断04:Hooks 扩展点
- [HarnessX 第 4 课:把权限、日志和收尾统计挂到 Hooks 上,让 Agent Loop 保持干净](/Users/liguwe/832/os/notes/2026/2026.06/222. 技术:HarnessX 第 4 课:把权限、日志和收尾统计挂到 Hooks 上,让 Agent Loop 保持干净@832@ing.md)
- [HarnessX 第 3 课:在工具真正执行前加权限门,让 Agent 先判断 allow、ask、deny](/Users/liguwe/832/os/notes/2026/2026.06/221. 技术:HarnessX 第 3 课:在工具真正执行前加权限门,让 Agent 先判断 allow、ask、deny.md)
- [HarnessX 第 2 课:把工具调用从一个 bash 扩展成工具分发表,让 Agent 能读写和查找文件](/Users/liguwe/832/os/notes/2026/2026.06/219. 技术:HarnessX 第 2 课:把工具调用从一个 bash 扩展成工具分发表,让 Agent 能读写和查找文件.md)
- [HarnessX 第 1 课:Agent 循环,本质就是一个会反复调用模型、执行工具、回传结果的 while 循环](/Users/liguwe/832/os/notes/2026/2026.06/218. 技术:HarnessX 第 1 课:Agent 循环,本质就是一个会反复调用模型、执行工具、回传结果的 while 循环.md)
- [HarnessX 第 0 课:先让 hx 命令跑起来、Agent 的第一性原理](/Users/liguwe/832/os/notes/2026/2026.06/214. 技术:HarnessX 第 0 课:先让 hx 命令跑起来、Agent 的第一性原理.md)
npm link
hx --help
hx hello跑一次模型对话:
cp .env.example .env填入:
DEEPSEEK_API_KEY=你的 key
DEEPSEEK_MODEL=deepseek-chat执行:
hx ask "你是谁"
hx chat
hx agent "List files in this directory"
hx agent "Read README.md and list src/*.js"
hx agent "What files are in the current directory?"
hx agent "Try to run sudo ls"
hx agent "Delete the file test.txt"
hx agent "List files in this directory and summarize what happened"第 3 课观察权限门:
- 只读工具会直接执行。
sudo、rm -rf /这类危险命令会直接拒绝。rm、chmod 777这类风险命令会暂停询问Allow? [y/N]。
第 4 课观察 Hooks:
- 用户任务提交后,会看到
[HOOK] UserPromptSubmit ...。 - 每次工具执行前,会看到
[HOOK] PreToolUse ...。 - Agent 准备结束时,会看到
[HOOK] Stop: ...工具调用统计。
src/index.js # hx 命令入口、参数分发、多轮输入
src/deepseek.js # DeepSeek Chat Completions 请求
src/agent-loop.js # Agent 循环、Hooks、工具分发、tool result 回传
references/ # 唯一参考仓