agent-clip
运行在 Pinix 平台上的模块化 AI Agent 框架,通过 agentic loop 实现 L
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
运行在 Pinix 平台上的模块化 AI Agent 框架,通过 agentic loop 实现 L
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你正在调试一个需要 AI 自主规划、记忆历史、自主执行多步骤任务的复杂工作流。传统的方案是把各种工具(文件操作、浏览器控制、代码执行)分别集成到 LLM 的 function calling 中,但每次都从零搭建、维护成本极高。Agent Clip 正是为解决这一痛点而生——它是一个运行在 Pinix 平台上的模块化 AI Agent 框架,将 agentic loop、记忆系统和工具调用封装为可插拔的 Clip 模块,让开发者只需配置 LLM 即可拥有一个具备完整能力的智能体。
Agent Clip 由 GitHub 用户 yan5xu(在 clip.json 中登记的作者)开发,当前版本为 0.9.2。项目最初定位是为 Pinix 平台提供 AI 能力扩展——Pinix 本身是一个类似 Nix 的包管理器,但专门用于管理 AI 工具和 CLI 程序。Agent Clip 作为 Pinix Clip 的一种,可以像安装软件包一样被安装、升级和卸载,同时保持用户数据(对话历史、记忆)持久化。
从架构上看,Agent Clip 的设计哲学与 LangChain、CrewAI 等主流框架有明显区别:它并不追求"大而全"的工具库,而是专注于提供一个可靠的 agentic loop 机制,围绕 LLM 的 function calling 构建了一套精简但完整的能力体系。项目采用纯 TypeScript 开发(Bun runtime),代码结构清晰,总计约 706 个文件,其中核心逻辑分布在 src/ 目录下的 31 个 TypeScript 文件中。
Agent Clip 的核心是 RunLoop(src/loop.ts),一次 send 命令对应一轮完整的 agentic loop:从用户消息出发,LLM 决定是否调用工具,执行结果反馈给 LLM,再次决定……直到达到停止条件(finish_reason="stop")或迭代上限(maxIterations=20)。
这个循环的精妙之处在于它的进程模型设计:每次 send 启动一个全新进程,加载 SQLite 状态,执行 loop,保存结果,然后退出。这种"无守护进程"设计避免了复杂的进程管理和状态同步问题,代价是每次调用都有冷启动开销。为此,Agent Clip 引入了 Run Window 机制(见 docs/context.md):系统只将最近的 3-7 条 Run 完整加载为消息历史,更早的内容则以摘要形式提供,大幅降低冷启动时的上下文重建成本。
异步模式(send --async)通过后台工作进程实现,前端立即返回 run_id,worker 在后台处理长任务,支持在两次 LLM 调用之间注入消息(通过 inbox 机制)。
Agent Clip 的记忆系统是其技术亮点之一,采用三层架构:
第一层:Messages(消息) — 原始对话记录,存储在 SQLite messages 表中,按 topic_id 和 run_id 索引。这是最基础的持久化层。
第二层:Summaries(摘要) — 每个 Run 结束后,系统自动生成对话摘要,存储在 summaries 表中。当后续 Run 需要加载历史时,较老的对话以摘要形式呈现,而非完整的消息列表。
第三层:Facts(事实) — 从对话中提取的关键事实条目,支持增删查改。这层由 LLM 驱动提取,提供比摘要更精确的信息检索能力。
值得注意的是,Agent Clip 早期版本支持向量嵌入语义搜索(使用 sqlite-vec 扩展),但当前版本已移除 embedding provider(src/memory.ts 中 getEmbedding 返回空数组),RAG 能力可能在未来通过独立的 Memory Clip 重新引入。目前系统退化为基于 FTS5 的关键词搜索。
Agent Clip 的工具系统采用单一 function call 模式——LLM 只看到一个名为 run(command, stdin?) 的工具函数,内部通过子命令分发到具体能力。这种设计灵感来自 Unix 的命令行哲学:一个入口,多种子命令,职责清晰。
工具子命令覆盖以下领域:
特别值得关注的是 Clip-to-Clip 机制:Agent Clip 可以调用其他 Pinix Clip(如沙箱代码执行器),这意味着 Agent 的能力边界可以通过安装新 Clip 动态扩展,形成了类似 npm 包生态的能力扩展模式。
除了 CLI 交互,Agent Clip 还提供了完整的 Web UI(web/ 目录,567 个文件)。界面支持流式聊天、文件上传和中英文双语。
双输出架构是项目的另一技术特色:
这种设计让同一套核心逻辑可以服务于不同场景:终端用户用 CLI,高级用户用 Web。
从 package.json 可以看到,项目依赖非常精简:
@pinixai/core:Pinix 平台核心 SDKsqlite-vec:SQLite 向量扩展(已废弃但保留)yaml:配置文件解析运行时使用 Bun,这是一个用 Zig 编写的 JavaScript 运行时,兼容 Node.js API 但性能显著优于 Node。项目大量使用 TypeScript 的装饰器语法(@clipCommand)定义命令,代码结构清晰,类型安全。
测试覆盖方面,项目提供了初始化数据(seed/ 目录),包含完整的 schema.sql 和预设配置,但不包含独立的测试套件(无 tests/ 目录)。代码文档质量较高,配有详细的架构文档(docs/architecture.md、docs/memory.md、docs/context.md、docs/runs.md 等)。
Agent Clip 的部署有其特殊性:它不是一个独立的应用程序,而是一个 Pinix Clip 模块。完整的运行需要:
make package 打包为 .clip 文件pinix clip install 部署本地开发模式(make dev)则可以直接运行,跳过 Pinix 基础设施。Web UI 需要单独构建(make ui 将 ui/ 编译为 web/)。
硬件需求极低(无 GPU 要求,RAM 512MB),但依赖 Bun runtime 和 SQLite,无容器化支持意味着在非标准环境(如 Docker)部署需要一定手动配置工作。
Agent Clip 代表了一种**"轻量级 AI Agent 基础设施"**的思路:不是做一个大而全的框架,而是做好一件事——可靠的 agentic loop,并将能力边界交给 Clip 生态扩展。TypeScript/Bun 的现代技术栈、SQLite 的轻量持久化、Unix 风格的设计哲学,使其在 CLI 爱好者群体中具有独特的吸引力。对于希望构建可扩展 AI Agent 能力的开发者,Agent Clip 提供了一个值得研究的参考实现。