TypeScript 终端 Agent PaiCLI 上线了,类 Claude Code 和Qoder CLI
大家好,我是二哥呀。
PaiCLI 的 TypeScript 版本也上线了。目前 PaiCLI 已经有 Java 版、TypeScript 版和 Python 版了,三个版本的核心架构完全一致,区别只在语言和生态层面。
和 Python 版一样,PaiCLI-TS 不是要造一个 Claude Code,咱没那水平。哈哈。
对于前端背景的小伙伴来说,TS 版就是学习终端 Agent 最好的入口。
代码已经同步到 gitcode 上了。
https://gitcode.com/javabetter/paicli-ts

01、TypeScript 版有什么值得学的?
PaiCLI-TS 用 Ink + React 搭了一套声明式 TUI,核心依赖有 8 个。
Ink + React,终端 UI 框架。Ink 让你可以用 React 组件的方式写终端界面,状态变了 UI 自动重渲染,和写 Web 前端的体验一致。PaiCLI 的流式输出、工具调用状态展示、进度面板,全部是 React 组件。对熟悉前端的小伙伴来说,上手成本几乎为零。

undici,Node.js 官方高性能 HTTP 客户端。和 node-fetch 相比,undici 直接走 Node.js 底层的 HTTP 解析器,性能更好。PaiCLI 所有和大模型 API 的通信、SSE 流式解析都走 undici。
commander,CLI 框架。用链式调用定义命令和选项,比手写 process.argv 解析省不少工作量。PaiCLI 的所有子命令都用 commander 定义。
zod,运行时类型校验。TypeScript 的类型只在编译期生效,运行时就没了。zod 填的就是这个坑,用来校验 LLM 返回的 JSON 结构、用户配置文件格式、工具输入参数。Agent 系统里模型输出的结构不可控,没有运行时校验很容易崩。
@modelcontextprotocol/sdk,Anthropic 官方 MCP SDK 的 TypeScript 版本。直接用官方 SDK 接入 MCP 生态,支持 stdio 和 HTTP 两种传输协议。
better-sqlite3,同步 SQLite 驱动。better-sqlite3 是同步 API,用起来比异步的 sqlite3 包简洁,记忆系统和代码索引都用它做持久化存储。
fast-glob,文件匹配库。比 Node.js 原生的 glob 模块快 2-3 倍,PaiCLI 的 Glob 工具和 Skill 发现都依赖它。
chalk,终端着色。和 Ink 配合使用,给日志、错误信息、状态提示加颜色。

整个项目用 pnpm 做包管理,tsup 做打包构建,vitest 做单元测试。TypeScript 5.5+ 的类型推断能力在写工具注册、事件系统这类泛型密集的代码时帮助很大。
02、实现了哪些功能?
每个模块的源码都是独立文件,想学哪个就看哪个。
ReAct 推理循环。接收用户输入 → 调用大模型推理 → 判断是否需要工具 → 执行工具 → 把结果喂回模型 → 继续推理。整个循环基于 AsyncGenerator 实现流式事件输出,上层可以按事件消费。
Plan-and-Execute。接到复杂任务后,先调用 LLM 生成一份分步计划,然后逐步执行每个步骤,每步执行完把结果带入下一步的上下文。适合“重构整个模块”“迁移数据库”这类多步骤任务。
Multi-Agent 编排。内置了 4 个预定义角色:架构师(负责设计决策)、开发者(负责代码实现)、审查者(负责质量把控)、研究员(负责信息搜集)。可以把一个大任务拆成子任务分配给不同角色的 Agent,支持任务之间的依赖关系。

Skill 系统。支持三级 Skill 加载:内置 Skill、用户级 Skill(~/.paicli/skills/)、项目级 Skill。每个 Skill 是一个目录,里面放 SKILL.md 定义描述和触发条件。这套机制和 Claude Code 的 Skill 系统思路一致。
Prompt 分层组装。系统提示词不是一坨硬编码的字符串,而是按层组装的:基础 Prompt → 模式 Prompt → 人格 Prompt → 用户自定义 Prompt → 项目级 Prompt。每一层独立维护,修改一层不影响其他层。
Token 预算管理。提供三种模式:short(上下文窗口的 30%)、balanced(60%)、long(85%)。超过压缩阈值时自动触发上下文压缩,保留最近 30% 的消息,旧消息合并成摘要。
SDK 无头模式。提供了一个独立的 SDK 入口(import { Agent } from 'paicli-ts/sdk'),可以作为 npm 包被其他项目引用。不需要启动终端交互,直接在代码里调用 Agent 的能力。

9 个内置工具。Bash、ReadFile、WriteFile、Grep、Glob、ListDir、WebSearch、WebFetch、SaveMemory,覆盖了 Agent 日常工作的核心场景。扩展工具通过 MCP 协议接入,不需要改内置代码。
03、如何把 PaiCLI 写到简历上
对照目前市面上 AI Agent 岗位的 JD,PaiCLI-TS 的功能模块基本全覆盖了。下面是简历上可以直接用的项目描述模板。
项目名称:PaiCLI-TS 终端 Agent CLI(2026.05 - 2026.07)
项目描述:类似 Claude Code 的终端 Agent 命令行工具(TypeScript 版),支持 ReAct 推理、Plan-and-Execute 任务规划、Multi-Agent 多角色编排、MCP 协议接入、Skill 系统、三层记忆、上下文压缩,可在终端中通过自然语言驱动代码开发和调试。
技术栈:TypeScript 5.5+、Node.js 18+、Ink + React、undici、commander、zod、@modelcontextprotocol/sdk、better-sqlite3
核心职责:
- 基于 Ink + React 构建声明式终端 UI,实现流式文本输出、工具调用状态面板、Markdown 渲染等组件,利用 React 状态驱动自动重渲染
- 基于 undici 实现多模型 LLM 适配层,支持 DeepSeek、GLM、OpenAI 三个厂商的流式推理接口,通过工厂模式统一客户端创建
- 实现 Plan-and-Execute 任务规划模式,LLM 先生成分步计划再逐步执行,每步结果自动注入下一步上下文,支持中途中止
- 构建 Multi-Agent 编排器,内置架构师、开发者、审查者、研究员四种预定义角色,支持子任务依赖关系声明和按依赖顺序调度
- 设计三级 Skill 加载机制(内置、用户级、项目级),运行时按目录自动发现和注册,支持 SKILL.md 描述驱动的触发匹配
- 实现 Prompt 分层组装器,按基础、模式、人格、用户、项目五层独立维护系统提示词,修改任一层不影响其他层
- 设计 Token 预算管理模块,支持 short/balanced/long 三种预算模式,超过压缩阈值自动触发上下文摘要压缩
- 基于 zod 实现运行时类型校验,覆盖 LLM 返回结构、工具输入参数、用户配置文件,防止模型输出结构异常导致系统崩溃
- 提供 SDK 无头模式入口,其他 Node.js 项目可通过 npm 包直接引用 Agent、Plan-and-Execute、Multi-Agent 编排等能力
- 使用 pnpm 做包管理、tsup 做构建打包、vitest 做单元测试,项目支持
npm link本地开发

同一套 Agent 架构,三种语言实现,ReAct、MCP、Memory 的核心机制一模一样。
【选一门最顺手的语言,把 ReAct、MCP、Memory 这几个模块从头到尾写一遍,就够了。】
加油吧,兄弟姐妹们。我们下期见。
