Skip to content
ZhishuloPublic

About

布诺是一个 Agent Harness 客户端 / 桌宠交互前端。已实现 agentic loop(思考→行动→观察→反思重试)、Planner + 实时任务树(树即计划,运行中可 /skip /reorder /edit /cancel 中途修改)、标准 MCP 客户端、工具白名单 + 审批门(human-in-the-loop)、三层记忆(短期/长期 SQLite/工作区)+ 超窗摘要、任务持久化与恢复、定时调度、完整执行轨迹 trace(JSON 导出),人格可插拔。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

布诺 · Agent Harness 客户端(桌宠交互前端)

Model + Harness = Agent。这是一个开源的 Agent Harness 客户端 / 桌面交互前端: 用一套真正的执行框架(循环 / 规划 / 工具 / 权限 / 记忆 / 状态 / 轨迹)把模型组织起来, 让模型从「聊天」变成「交付」,同时用桌宠形态把执行过程"表演"给用户看。 可作为 DeepSeek Harness 生态的客户端交互层。

布诺

「布诺」是中国石油大学(北京)克拉玛依校区红山湖里的蓝精灵——本体是三亿年前古海里活下来的蓝细菌,一部分族人变成了石油,另一部分漂进红山湖,一直活到今天。她不再只是"会聊天的玩具"——遇到复杂任务,她会拆计划、逐步执行、失败了自己反思重试、危险操作先问你再动手,并把每一步都记进执行轨迹。

Harness 的职责(本仓库如何回答「它让模型从聊天变成交付了吗」)

Harness 职责 本仓库的实现 状态
任务流程 轻量 Planner 拆多步计划,逐步执行、可中途修正 ✅ 已实现
实时任务树 计划即数据:结构化任务树持久化,用户可中途修改,下个决策点生效 ✅ 已实现
执行循环 思考→行动→观察→再思考;失败反思重试(限次防死循环) ✅ 已实现
工具 可插拔注册表 + 标准 MCP 客户端 + 内置工具 ✅ 已实现
权限 危险操作(写文件/开网页/网络)默认先询问用户 ✅ 已实现
上下文 短期 / 长期(SQLite)/ 工作区三层记忆;超窗摘要压缩 ✅ 已实现
状态 任务生命周期 created→running→waiting→done/failed/cancelled,可中断、可恢复 ✅ 已实现
日志/校验 完整执行轨迹 trace(think/tool/retry/approval),JSON 导出 ✅ 已实现
人机交接 审批弹窗挂起任务,等待用户决定 ✅ 已实现
主动行为 定时任务到点主动开口干活(proactive) ✅ 已实现
人格 可插拔人格(JSON),不只语气、还影响行为偏好 ✅ 已实现
可视化 桌宠状态机(思考💭/干活🔧/等待❓/失败😿)+ 过程表演 ✅ 已实现

功能特性

✅ 已实现

执行层

  • Agentic loop:工具调用循环,模型自主决策并基于真实结果回复
  • 轻量 Planner:复杂请求拆成多步计划,逐步执行,步骤间累计上下文
  • 失败反思重试:工具出错时把错误回填模型,调整策略重试(默认最多 2 次)
  • 任务可中断(/cancel)、可恢复(/resume <id>,重启后继续)

Web 前端(可视化)

  • webui.py 纯标准库 HTTP 服务 + 免构建页面:聊天、实时任务树(含「跳过」按钮)、 trace 时间线、工具清单、审批横幅、记忆查看/清空
  • python webui.py --mock 浏览器打开 http://127.0.0.1:8765 即可体验,无需 API Key

实时任务树(树即计划)

  • Planner 输出结构化任务树并随任务持久化(tasks/<id>.json), 不再是 LLM 上下文里的一段文字——树就是计划本身
  • agentic loop 每一步从树读取「当前节点」执行: pending → in_progress → done / failed / cancelled
  • 用户中途修改:/plan /skip <id> /reorder <id1> before <id2> /edit <id> <新描述> /cancel <id>(从该步截断剩余执行路径)
  • 修改先暂存,在下一个决策点(当前工具调用返回后)应用到树, 并把「修改后的整棵树 + 修改说明」重新注入 LLM 上下文——改树 = 改数据, agent 下一步就按新树走
  • 节点失败超过重试上限 → 标记 failed → 自动触发 replan(revise_plan, 限 3 次防止死循环)
  • 每次节点状态变更 / 用户修改都写入 trace(node_status / user_edit 事件)
  • 桌宠只显示「当前面包屑」(根 → 当前节点路径),如 🔄 正在做「扫描文件夹」

工具层

  • 标准 MCP(Model Context Protocol)stdio 客户端,支持多服务器
  • 工具白名单 + 审批门:safe / ask / deny 三级权限,危险操作先问用户
  • 统一超时(默认 30s)、错误捕获、结果截断(默认 1500 字符)
  • 可插拔注册表:一行注册新工具;内置时间/计算/工作区记忆/失败演示工具

记忆与上下文

  • 三层记忆:短期(会话消息)/ 长期(SQLite 偏好+事实)/ 工作区(任务中间产物)
  • 上下文窗口管理:超窗时对早期内容做 LLM 摘要压缩(失败降级为截断)
  • 记忆可查看/添加/清空(CLI /memory,桌宠可对话感知)

状态与可观测

  • 任务状态机 + JSON 持久化(tasks/),中途状态全部落盘
  • 定时/触发式任务(/schedule add HH:MM 描述,桌宠到点主动开口)
  • 执行轨迹 trace:think / tool_call / retry / approval / step 全记录,JSON 导出

人格与桌宠

  • 人格独立为 personas/*.json,可热切换(自带 布诺/傲娇/温柔 三个示例)
  • traits 影响行为:tool_likeness(爱不爱用工具)、caution(谨慎度)
  • 状态指示灯 + 失败汗颜表情 + 审批弹窗 + 定时任务主动汇报

🚧 路线图

  • OpenAI / Anthropic Provider(LLMProvider 接口已预留)
  • MCP HTTP / SSE 传输(当前仅 stdio)
  • 记忆向量检索与自动摘要归档(当前为 SQLite + 关键词注入)
  • 可视化拖拽式任务树编辑器(v2;当前为 CLI 命令 /skip /reorder /edit /cancel)
  • Ren'Py 叙事联动(agent_core 为纯 Python、无 UI 依赖,便于对接)
  • 语音输入 / trace 可视化看板

快速开始

需要 Python 3.10+(MCP 官方 SDK 要求;3.9 可跑纯聊天,MCP 降级禁用)。

python -m pip install -r requirements.txt
copy config.example.json config.json    # Windows;macOS/Linux 用 cp

编辑 config.json 填入 DeepSeek API Key(或用环境变量 DEEPSEEK_API_KEY / 旧版 api_key.txt)。配置自带一个本地示例 MCP 服务器(文件/备忘录/日历/天气)。

python demo_agent.py --mock     # 无 Key:演示 规划/失败重试/审批/工作区 全链路
python demo_agent.py            # 真实 DeepSeek + MCP + 记忆 + trace
python oc.py                    # 桌面桌宠(或双击 run.bat)
python webui.py --mock          # Web 前端:聊天 + 实时任务树 + trace(浏览器打开 http://127.0.0.1:8765)

运行内置测试(零依赖,覆盖任务树与 Harness 核心链路):

python -m unittest discover tests -v

CLI 命令:/tools /memory /tasks /resume <id> /cancel /trace <id> /export <id> /schedule add|list|rm /persona list|switch <id> /help

任务树命令:/plan /skip <id> /reorder <id1> before <id2> /edit <id> <新描述> /cancel <id>(裸 /cancel 仍是取消整个任务)

项目结构

.
├── oc.py                    # 桌宠 UI:状态机表演/审批弹窗/人格切换/主动开口
├── demo_agent.py            # CLI demo:任务管理/调度/人格/审批队列
├── webui.py                 # Web 前端:聊天/实时任务树/trace/审批/记忆
├── web/                     # Web 前端静态页面(HTML/CSS/JS,无构建步骤)
├── agent_core/              # Agent Harness 核心库(与 UI 解耦)
│   ├── config.py            #   配置加载
│   ├── core/                #   执行层
│   │   ├── harness.py       #     Harness 门面(chat/resume/cancel/trace/调度)
│   │   ├── loop.py          #     agentic loop(思考→行动→观察→反思重试)
│   │   ├── planner.py       #     轻量 Planner(输出任务树 / 失败重规划)
│   │   ├── tree.py          #     实时任务树(树即计划:状态机/编辑/渲染)
│   │   ├── context.py       #     分层记忆 + 上下文摘要压缩
│   │   ├── state.py         #     任务状态机 + JSON 持久化/恢复
│   │   ├── scheduler.py     #     定时任务
│   │   └── trace.py         #     执行轨迹 + JSON 导出
│   ├── tools/               #   工具层
│   │   ├── registry.py      #     可插拔注册表(超时/截断/错误捕获)
│   │   ├── permissions.py   #     白名单 + 审批门
│   │   ├── mcp.py           #     标准 MCP stdio 客户端
│   │   └── builtin.py       #     内置工具(含工作区记忆)
│   ├── memory/store.py      #   SQLite 长期记忆
│   ├── persona/             #   人格系统(manager + prompt)
│   ├── llm/                 #   Provider 接口 + DeepSeek
│   └── ...
├── personas/                # 人格配置(buno / tsundere / gentle)
├── examples/mcp_servers/    # 示例 MCP 服务器(FastMCP)
├── config.example.json
├── requirements.txt
├── ARCHITECTURE.md          # 模块协作说明
└── readme.md                # 桌宠应用内帮助

架构图(文字版)

用户 ──> UI(桌宠/CLI)──> Harness.chat
                              │
        ┌─────────────────────┼──────────────────────┐
        ▼                     ▼                      ▼
   Planner(拆计划)      AgentLoop(循环)      Context(记忆+压缩)
        │                     │                      │
        └───────── 逐步执行 ──┼── 工具层 ──> MCP 服务器 / 内置工具
                             │        └─ 审批门(human-in-the-loop)
                             │
                       任务树(树即计划)
                             │  每步读当前节点 / 用户修改下个决策点生效
                             ▼
                      trace(轨迹)──> JSON 导出
                      task 状态 ──> tasks/ 持久化 ──> resume 恢复

Demo 场景(--mock 即可复现)

小石子> please plan a task with two steps
  💭 布诺思考中… → ⚙️ get_datetime → ⚙️ save_memo → 最终回答
  (Planner 拆出 3 步并逐步执行)

小石子> flaky retry test
  😿 工具失败了 → 🔄 布诺反思后重试 → 成功
  (失败反思重试链路)

小石子> write a file please
  [审批] 工具「write_file」需要你的批准 → y/N
  (human-in-the-loop:批准才执行)

### 实时任务树 · 中途修改(--mock 即可复现)

```text
小石子> please plan a long task with five steps and execute them
  💭 布诺思考中… → ⚙️ slow_step(扫描文件夹)……   ← 1.5s 耗时步骤,留出修改窗口

小石子> /skip n2            → [已暂存] 将在下一个决策点生效
小石子> /reorder n4 before n3 → [已暂存] ...
小石子> /plan
任务树
  ✓ n1 扫描文件夹
  ⊘ n2 读取报告草稿        ← 已被跳过
  ▶ n4 生成总结报告        ← 当前执行到这里(顺序已调整)
  ○ n3 整理要点
  ○ n5 发送通知

布诺> (步骤完成)已按新树继续……     ← 修改生效:新树已注入 LLM 上下文
布诺> (演示)最终回答:任务完成!已按修改后的新任务树执行~


## 致谢与说明

- 「布诺」为原创角色,出自作者制作的校园宣传 Galgame《石克郎的夏天》
  ([GitHub](https://github.com/Zhishulo/ShiKeLangSummer)),人设与世界观版权归作者所有。
- 仓库内立绘素材为本地个人素材(当前作为占位使用,尚未随角色一并替换);
  如需公开发布或商用,请自行确认素材版权。

About

布诺是一个 Agent Harness 客户端 / 桌宠交互前端。已实现 agentic loop(思考→行动→观察→反思重试)、Planner + 实时任务树(树即计划,运行中可 /skip /reorder /edit /cancel 中途修改)、标准 MCP 客户端、工具白名单 + 审批门(human-in-the-loop)、三层记忆(短期/长期 SQLite/工作区)+ 超窗摘要、任务持久化与恢复、定时调度、完整执行轨迹 trace(JSON 导出),人格可插拔。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages