cjh:基于华为仓颉语言的原生 Coding Agent Harness 实践与设计思考
作者:yangyongzhen (CSDN猫哥)
项目开源地址:https://github.com/yangyongzhen/cjh
atomgit:https://atomgit.com/qq8864/cjh
💡 为什么用仓颉写一个 Coding Agent Harness?
在 AI 编程 Agent(Coding Agent)领域,业内已有诸如 Claude Code、Codex、DSH、Pi、OMP 等非常成熟的方案,功能可行性已被充分验证。如果在现有框架上简单堆砌功能,意义并不大。
作为一个开发者,我在思考:主流 Agent 方案已经证明了功能可行,但环境依赖繁重、上下文 Token 消耗过快、插件缺乏安全性等痛点依然存在。仓颉(Cangjie)语言的特性能否为 Agent 提供差异化的工程价值?
基于这个思考,我从零实现了 cjh(Cangjie Coding Agent Harness)。它不仅仅是一个能用的终端/Web 编程助手,更是一份源码注释完备、可读可移植的仓颉 AI 应用参考实现。

🏗️ 核心架构与设计
cjh 采用分层解耦的模块化设计,从终端 UI(cjterm)、LLM 协议层(cjllm)、配置与安全(cjcfg/cjutil)到 Agent 核心状态机均实现了自研与封装。

核心亮点
1. 静态单二进制,零运行时依赖(<10MB)
利用仓颉 cjnative 静态编译,cjh 产物是一个独立的静态二进制文件(小于 10MB)。
- 无包袱:无需安装 Node.js、Python 或庞大的
node_modules依赖树。 - 分发即用:
git clone编译或下载单个文件即可在终端直接运行。 - 跨平台原生:通过
TerminalBackend抽象与@When[os == ...]条件编译,适配 POSIX(Linux/macOS)与 Win32 Console API(Windows),一份源码多平台构建。
2. 系统化的“省 Token”工程设计
Coding Agent 在多轮循环中 Token 消耗呈指数级上升。cjh 参考 Pi Agent 等工程经验,做到了省 Token 且不丢信息:
- 头尾保留 + 完整落盘回溯:当工具(如
bash或长文本读取)输出超长时,cjh在 Prompt 中保留开头与结尾(维持上下文连贯),中间部分完整落盘至~/.cjh/spill/<sessionId>/<toolCallId>.txt。模型如需中间细节,随时通过read_file按需读回。 - 后台异步 Compaction:根据真实 Prompt Token 或消息轮数动态触发,由后台线程异步调用 LLM 生成摘要,换装过程不阻塞主交互循环。
- 深度利用 Prompt Cache:原生支持 DeepSeek 与 Anthropic 的 Prompt 缓存命中统计与展示,减少重复前缀计费。
3. 高效率的 V2d 并发执行与精准编辑
- V2d DAG 并发引擎:解析多个 ToolCall 的资源访问 tuple
(path, isWrite),自动构建拓扑依赖图。无冲突的读写请求自动分组并发执行,大幅缩短等待时间。 - Hashline 行级精细编辑(借鉴 OMP):采用行号锚点
@@N与内容 Hash 校验,避免对大文件进行“整读整写”造成的巨大 Token 与 IO 开销。
4. 语言级安全与国密 SM2 信任链
- 三域 Capability 限制:对命令、工具和文件系统实行严格白名单管理,危险操作触发交互式审批弹窗。
- SM2 签名与 SHA256 校验:基于仓颉原生
stdx.crypto,插件系统支持文件 Hash 校验和国密 SM2 签名验证,从结构上防范恶意插件与供应链投毒。
📊 性能实测与对比
在真实的 HTML 游戏优化任务(基于 DeepSeek-v4-flash)中,对 cjh 优化前后的数据进行了连续跟踪:

- Prompt 峰值:从无上限爬升的 42.9K Token 降至 9.4K Token(压缩后重置至 5-7K),降幅达 78%。
- 单轮耗时:得益于连接复用池与异步压缩,单轮等待时间从 5-22 秒 缩短至 2-5 秒。
- 框架开销:
cjh本身工具调度框架耗时低于 100ms,性能瓶颈完全取决于 LLM API 响应速度。
💻 快速上手与界面预览
两种驱动模式
- 终端 TUI 模式(默认):ANSI 差分渲染、内置 10 套炫酷主题(/theme 实时切换)、思考过程(Reasoning)逐轮交织展示、支持 Ctrl+E 多行编辑。
- Web 远程驱动模式:内置原生 HTTP Server + WebSocket,提供轻量 Web SPA 界面,支持远程驱动 Agent。
# 1. 构建(静态链接单文件)
source cj-env.sh
cjpm build
# 2. 配置 API Key
export DEEPSEEK_API_KEY=sk-xxx
export CJH_BASE_URL=https://api.deepseek.com
export CJH_MODEL=deepseek-chat
# 3. 启动 TUI 交互
./target/release/bin/cjh
# 或启动 Web 远程模式
./target/release/bin/cjh web --port 8765 --token my-secret
🤝 沉淀给仓颉生态的开源资产
在开发 cjh 的过程中,为了做到零第三方包依赖,我解耦并沉淀了 5 个自包含的仓颉基础库(位于 libs/ 目录下),可独立用于仓颉生态的开发:
cjterm: ANSI 差分渲染与跨平台终端 UI 组件库(内置 10 套主题)。cjllm: 兼容 OpenAI / Anthropic / Ollama 的 SSE 流式与工具调用协议库。cjcfg: 分层配置管理与 Capabilities 安全限制库。cjutil: 包含 SM2/SHA256、UTF-8 安全截断、BM25 检索与 SSRF 防护的工具库。cjlog: 零依赖的高性能异步日志库。
目前项目拥有 379 个单元测试 以及 61 个 PTY 真实终端场景测试,CI 门禁强制测试全绿,保障了极高的代码质量。
🗺️ 未来演进方向(V4 路线图)
在后续计划中,cjh 将重点探索 多 Agent 并行编排(借鉴 Swarm/Linux fork 范式):
- 上下文隔离:编排器(总 Agent)并行 Fork 多个子 Agent(如研究/编码/测试/审查),按任务隔离局部记忆,避免全局 Token 膨胀。
- 原生轻量线程:利用仓颉 M:N 协程调度,在进程内低开销运行并行子 Agent。
欢迎感兴趣的朋友尝试、体验并提出建议!
📌 GitHub 仓库:https://github.com/yangyongzhen/cjh
更多推荐




所有评论(0)