本文介绍从零实现GeekAgent第16天:插件框架。主程序扫描plugins目录自动加载插件,插件通过SDK声明命令、工具和生命周期钩子,支持失败回滚。实现了echo插件(命令/echo和工具)及web插件(HTTP服务提供浏览器对话界面),复用主程序对话链路,通过SSE流式返回结果。
本文介绍GeekAgent项目第15天实现MCP工具接入。通过配置文件声明服务器,Agent启动时自动连接并获取工具清单,以`mcp_`前缀注册到现有工具表。MCP与Skills区别在于前者动态发现外部能力,后者组织任务指令。实现采用stdio传输和JSON-RPC协议,支持权限控制,代码净增311行。
本文介绍从零实现GeekAgent第14天,构建轻量RAG知识库。通过`rag_add`采集网页或文件,按800字切块存入JSON;`rag_search`用BM25检索相关段落,最多返回四块。复用Day13的切块与搜索函数,实现“先查资料再回答”,支持`/rag`命令管理,适合少量文档场景。
本文介绍GeekAgent第13天实现“主动记忆”功能:在每轮对话前自动检索长期记忆,无需模型主动调用搜索工具。实现方法包括将长记忆按320字窗口、80字重叠切块,用BM25算法排序,并将命中结果拼入系统提示。相比手动搜索,自动唤起更早介入,提升记忆利用率。
本文介绍GeekAgent第12天开发:新增search和fetch两个工具。search在权限目录内按内容搜索代码,返回文件:行号:内容,跳过node_modules和二进制文件;fetch读取网页并转纯文本,访问前需确认URL。两者均注册到工具系统,search用safePath限制目录,fetch用authorize确认。实现采用Node内置glob和正则剥标签,不依赖额外库,适合小型仓库。
本文介绍GeekAgent项目第11天实现技能系统(Skills)。技能将任务指令和工具组合成目录,通过/use加载、/unuse卸载,同一时间只激活一个技能。与AGENTS.md长期项目指令不同,技能按任务切换,可增加或筛选工具,如code-review技能自带git_diff,explore技能仅保留只读工具。实现包括skills.ts加载、tools.ts可见性控制、权限补充及命令接入。
本文介绍GeekAgent第10天开发:实现项目指令与长期记忆功能。AGENTS.md保存项目规则,每轮请求完整携带;memory通过关键词搜索按需调用,跨会话保留用户偏好和重要决定。记忆存于.geekagent/memory.json,支持写入和搜索工具,启动时加载,验证通过后确保记忆不进入版本库。
本文介绍GeekAgent第9天开发:为多步骤任务添加TODO清单和子Agent功能。通过todo_write工具让模型规划并更新任务进度,delegate_task将独立子任务交给隔离上下文的子Agent处理。系统指令控制何时规划,强制回写确保进度更新,TUI右栏实时显示TODO状态。实现约113行代码,验证通过。
本文介绍从零实现GeekAgent的第八天,重点添加权限控制与回滚功能。通过`.geekagent/GeekAgent.json`配置文件为每个工具设定allow/ask/deny策略,未知工具默认拒绝;实现目录隔离防止路径越界和符号链接攻击;统一脱敏敏感环境变量;为文件写入保存最近状态,支持`/undo`恢复。代码净增155行,验证通过后,下一步将实现任务规划与子Agent。
本文介绍GeekAgent开发第七天,实现轻量TUI界面与用量面板。通过引入pi-tui库,程序接管终端,左侧显示消息流,右侧常驻面板展示模型、会话、上下文占用及本轮/累计tokens。接口回传usage数据,流式期间用字符估算。支持输入编辑、工具确认,退出恢复原终端。代码新增1115行,验证功能正常,为后续权限管理打基础。
本文介绍GeekAgent Day6实现多会话与持久化功能。通过Sessions类管理多条独立会话,支持创建、切换、列表操作;新增storage.ts实现磁盘快照,可保存/加载整个会话集合;退出时自动保存,default会话自动生成8位ID。设计上保留单一Chat对象,切换时同步消息,确保会话互不干扰且跨进程恢复。
本文介绍GeekAgent开发第5天实现历史压缩功能。当对话历史超过4000字符阈值时,自动将旧消息摘要为一条系统消息,保留最近6条完整消息,防止上下文溢出且不丢失关键信息。提供自动触发和手动/compact命令两种入口,压缩过程显示黄色进度提示。通过实测验证,压缩后模型仍能准确回答旧对话中的事实。
本文介绍GeekAgent开发第4天:将文件读写从shell中拆出,新增ls、read、glob三个免确认只读工具,以及write、patch两个展示diff后确认的写工具,并统一注册到工具注册表。通过唯一文本片段锚定修改,用前缀/后缀修剪生成diff预览,实现“读→改→验证”闭环,代码净增211行。
本文介绍从零实现GeekAgent的第三天:为模型添加Bash工具,使其能执行本地shell命令。实现包含超时(10秒)、输出截断(2000字符)和执行前确认三道安全护栏,确认逻辑可替换以便未来升级权限模型。通过新增run_shell工具,模型可主动调用命令并获取结果,为后续读写文件等能力奠定基础。
本文介绍从零实现GeekAgent的第二天,核心是打通工具调用循环:模型通过工具清单主动调用函数(如获取时间),系统执行并回传结果,循环直至模型给出最终回答。设计上工具抽象为对象,结果统一为字符串,代码约268行,验证了多轮记忆和工具调用,为后续接入Shell等真实工具奠定基础。
本文介绍从零实现GeekAgent的第一天,目标是搭建REPL地基,实现流式多轮对话。项目使用TypeScript和Node.js,核心代码约157行,包含chat.ts、config.ts、color.ts和index.ts四个文件。通过history数组保存对话记忆,使用AsyncGenerator实现流式输出,并支持/reset和/exit命令。文章强调不依赖框架,保持代码简单易懂,为后续添加工具调用等功能打基础。
完成下面两步后,将自动完成登录并继续当前操作。