Complete Phase 9 Skill System and Phase 10 Enhanced Features Skill system: frontmatter parsing, SKILL.md/JSON loading, discovery, registry (SkillRegistry), executor (build_skill_context/build_skills_summary), Agent integration (skill_manager.mbt) Memory system: MemoryStore CRUD, 5 MemoryCategory types, keyword search with category filter, JSON serialization/deserialization, system prompt injection (Layer 8) SubAgent infrastructure: SubAgentConfig/SubAgentStatus/SubAgentHandle lifecycle, AgentPool with max_running concurrency control, collect_completed cleanup TodoManager: task CRUD, 5 TodoStatus states, dependency blocking (blocked_by/is_blocked/list_actionable), JSON persistence, system prompt injection (Layer 9) 3 Agent-context tools: invoke_skill, memory, todo_manager with AnyTool dispatch routing and Agent interception in tool_executor.mbt Agent struct expanded: skill_registry, memory_store, todo_manager, agent_pool fields; system prompt now 9 layers 5 new test files (memory_wbtest, subagent_wbtest, todo_wbtest, skill_wbtest, agent_wbtest updates): ~81 new test cases, total 265 all passing Documentation: CHANGELOG (Phase 9/10 entries), development-plan (85-90% completion, 15/15 mixin parity), README (updated structure/roadmap)
Complete Phase 9 Skill System and Phase 10 Enhanced Features
使用 MoonBit 编程语言完全重写的 AI Agent CLI 工具。
MBOpenClacky 是开源项目 openclacky 的 MoonBit 重写版本。
原始 openclacky 的核心模块包括 agent(11 个 mixin)、client(LLM API)、server(Web)、tools(插件系统)、skills(可扩展能力)、ui2(TUI)、utils(工具集)等,本项目将以 MoonBit 的 struct + trait 组合模式逐步对应重写。
agent
client
server
tools
skills
ui2
utils
struct + trait
本项目遵循与上游原项目 完全一致 的开源协议:
MIT License
许可声明、Copyright 及条款与 openclacky 保持兼容。详细条款请见仓库根目录的 LICENSE 文件。
LICENSE
注:原项目作者保留所有原始版权,MBOpenClacky 仅是基于其设计与功能的语言级重写实现。
发起本项目主要出于以下三点考虑:
丰富 MoonBit 编程语言生态 MoonBit 是一门面向云原生、AI 与跨平台场景的新兴静态强类型语言。当前生态中尚缺少端到端的 AI Agent CLI 实现,本项目希望以一个有真实使用价值的中等规模工程,补齐 MoonBit 在「LLM 客户端 / Agent 编排 / 工具调用 / TUI / Web 服务」方向的实践样本,并在过程中沉淀可复用的库(HTTP、SSE、TOML 配置、TUI、WebSocket 等)。
个人学习与 AI Agent 原理探索 本项目是一个 个人学习项目,重点关注:
以重写驱动深度理解 阅读源码与亲手重写之间存在巨大的理解差。通过将一个生产可用的 Ruby 项目逐模块迁移到 MoonBit,可以在「类型系统 / 错误处理 / 异步模型 / FFI 边界」上反复对原设计提问,从而真正吃透 Agent 工程的每一个决策点。
期望达成的目标:
相较原 Ruby 实现,MoonBit 版本预期带来如下收益:
enum
struct
NoMethodError
nil
raise
?
Result
rescue
Option[T]
private
protected
moon
moon build / check / test / fmt / doc / ide
moonbitlang/async
tonyfettes/openai
grandEarshot/anthropic-sdk-moonbit
bobzhang/toml
TheWaWaR/clap
Frank-III/onebit-tui
bobzhang/crescent
colmugx/sqlite3
moonbitlang/x/crypto
bobzhang/zipc
bikallem/compress
ZSeanYves/doc_parser
http_server.rb
agent.rb
MBOpenClacky/ ├── cmd/ # 可执行入口 │ ├── main.mbt │ └── moon.pkg ├── lib/ # 库代码(按领域划分的子包) │ ├── agent/ # Agent 核心:会话、状态、对话循环、持久化、管理、Hook、技能、Memory、SubAgent、Todo │ │ ├── agent.mbt # Agent struct + Fallback 状态机(20+ 字段) │ │ ├── react.mbt # ReAct 主循环 │ │ ├── llm_caller.mbt # LLM 调用 + API 消息 │ │ ├── tool_executor.mbt # 工具执行 + 权限 + Agent 上下文拦截 │ │ ├── cost_tracker.mbt # 成本与缓存统计 │ │ ├── system_prompt.mbt # 系统提示词构建(9 层) │ │ ├── compressor.mbt # 消息压缩 │ │ ├── session_data.mbt # 会话数据序列化 │ │ ├── session_store.mbt # JSON 文件存储 CRUD │ │ ├── session_manager.mbt # 会话生命周期与上限管理 │ │ ├── time.mbt + time_stub.c # 跨平台毫秒时间戳 │ │ ├── status.mbt # Agent 状态枚举 │ │ ├── agent_result.mbt # 运行结果类型 │ │ ├── hook.mbt # Hook 事件系统 │ │ ├── skill_manager.mbt # Agent 端技能管理 │ │ ├── memory.mbt # MemoryStore 记忆存储 │ │ ├── memory_types.mbt # MemoryCategory + MemoryEntry │ │ ├── subagent.mbt # SubAgent 配置/状态/句柄 │ │ ├── agent_pool.mbt # SubAgent 并发池 │ │ ├── todo.mbt # TodoManager 任务管理器 │ │ ├── todo_types.mbt # TodoStatus + TodoItem │ │ ├── agent_wbtest.mbt # 白盒测试(52+ 个用例) │ │ ├── hook_wbtest.mbt # Hook 测试(11 个用例) │ │ ├── memory_wbtest.mbt # Memory 测试(20 个用例) │ │ ├── subagent_wbtest.mbt # SubAgent 测试(13 个用例) │ │ └── todo_wbtest.mbt # Todo 测试(22 个用例) │ ├── client/ # LLM API 客户端抽象 │ ├── config/ # 配置加载(TOML / 环境变量 / 路径) │ ├── errors/ # 统一错误类型层次 │ ├── message/ # Message / Role / ToolCall / ToolResult 等核心类型 │ ├── skill/ # 技能系统(加载/解析/发现/注册/上下文构建) │ ├── tool/ # 工具系统(文件读写、shell、Agent 工具等 11 个) │ └── moon.pkg ├── .repos/ # 上游与参考项目的本地镜像(仅供阅读对照) ├── .mooncakes/ # 依赖缓存(由 moon 自动管理) ├── _build/ # 构建产物 ├── moon.mod.json # 模块元信息与依赖声明 └── README.md
主要模块对应原 openclacky 的核心概念:message 提供基础消息与工具调用类型;config 负责配置加载;client 抽象 LLM 后端;tool / skill 提供可扩展能力;agent 在其上实现对话循环;cmd 是最终的 CLI 入口。
message
config
tool
skill
cmd
native
moon.mod.json
preferred-target
安装 MoonBit 请参考官方说明:https://www.moonbitlang.com/download/
moon update moon install
moon check
# 默认按 preferred-target (native) 构建 moon build # 显式指定后端 moon build --target native
# 直接运行 cmd 入口 moon run cmd # 或运行已构建的可执行文件(路径以实际产物为准) ./_build/native/release/build/cmd/cmd.exe
当前 cmd/main.mbt 已实现完整的 CLI 功能:10 个命令行选项(--message/-m、--mode、--model、--agent、--path、--verbose/-v、--version/-V、--continue、--list、--attach)、2 个子命令(billing、server)、非交互式 Agent 运行模式、会话管理(保存/恢复/列表/上限控制)、TUI 交互界面(onebit-tui)、服务器模式(crescent Web 服务器)、完整错误处理以及技能/记忆/任务系统集成。
cmd/main.mbt
--message/-m
--mode
--model
--agent
--path
--verbose/-v
--version/-V
--continue
--list
--attach
billing
moon test
项目按 12 阶段自底向上推进:
特别感谢原项目 clacky-ai/openclacky 的作者与贡献者,他们的设计与实现是本重写工作的全部起点。本项目仅以学习与生态贡献为目的,所有原创性归属于上游。
使用MoonBit编程语言重写的 AI Agent CLI 工具, 原项目为OpenClacky
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MBOpenClacky
一、项目介绍
MBOpenClacky 是开源项目 openclacky 的 MoonBit 重写版本。
原始 openclacky 的核心模块包括
agent(11 个 mixin)、client(LLM API)、server(Web)、tools(插件系统)、skills(可扩展能力)、ui2(TUI)、utils(工具集)等,本项目将以 MoonBit 的struct + trait组合模式逐步对应重写。二、开源协议
本项目遵循与上游原项目 完全一致 的开源协议:
MIT License
许可声明、Copyright 及条款与 openclacky 保持兼容。详细条款请见仓库根目录的
LICENSE文件。三、重写动机
发起本项目主要出于以下三点考虑:
丰富 MoonBit 编程语言生态 MoonBit 是一门面向云原生、AI 与跨平台场景的新兴静态强类型语言。当前生态中尚缺少端到端的 AI Agent CLI 实现,本项目希望以一个有真实使用价值的中等规模工程,补齐 MoonBit 在「LLM 客户端 / Agent 编排 / 工具调用 / TUI / Web 服务」方向的实践样本,并在过程中沉淀可复用的库(HTTP、SSE、TOML 配置、TUI、WebSocket 等)。
个人学习与 AI Agent 原理探索 本项目是一个 个人学习项目,重点关注:
以重写驱动深度理解 阅读源码与亲手重写之间存在巨大的理解差。通过将一个生产可用的 Ruby 项目逐模块迁移到 MoonBit,可以在「类型系统 / 错误处理 / 异步模型 / FFI 边界」上反复对原设计提问,从而真正吃透 Agent 工程的每一个决策点。
期望达成的目标:
四、MoonBit 重写带来的优势
相较原 Ruby 实现,MoonBit 版本预期带来如下收益:
1. 类型安全与正确性
enum/struct取代 Ruby 的 duck typing,消除大量运行期NoMethodError/nil访问类的隐患。raise/?错误传播机制与Result风格组合,使错误路径在编译期可追踪,避免 Ruby 中分散的rescue。Option[T]取代nil**:彻底规避 nil-pointer 类问题。2. 性能与资源占用
3. 工程化与可维护性
struct + trait组合替代 mixin:原项目agent模块依赖 11 个 Ruby mixin,调用关系隐式且易冲突。MoonBit 通过显式 trait 实现与组合,使能力边界、依赖与扩展点都在类型层面显形。private/protected更清晰,模块边界更难被破坏。moon一体化工具链:moon build / check / test / fmt / doc / ide开箱即用,依赖与构建可复现,相较 Ruby 的 Gemfile + 多种测试框架更整齐。4. 异步与并发
moonbitlang/async提供的统一异步原语(HTTP、WebSocket、Process),可以以更直观的方式编写流式 LLM 响应处理与并发工具调用,避免 Ruby 中混杂的线程 / 纤程 / EventMachine 风格。5. 生态集成
tonyfettes/openai、grandEarshot/anthropic-sdk-moonbit等 SDK;bobzhang/toml;CLI:TheWaWaR/clap;TUI:Frank-III/onebit-tui;Web:bobzhang/crescent;colmugx/sqlite3+moonbitlang/x/crypto;bobzhang/zipc、bikallem/compress、ZSeanYves/doc_parser等(待定) 目前已集成的 11 个内置工具包含:文件读/写/编辑、内容搜索、通配符查找、终端执行、网页抓取/搜索,以及 3 个 Agent 上下文工具(技能调用/记忆管理/任务管理)。 这些组件共同构成了 MoonBit 上一套自洽的 Agent 基础设施。6. 对原项目可改进点的回应
http_server.rb181KB、agent.rb70KB)阅读与维护成本高,MoonBit 版本将通过 package 切分获得更细的关注点分离;五、项目结构与使用说明
目录结构
主要模块对应原 openclacky 的核心概念:
message提供基础消息与工具调用类型;config负责配置加载;client抽象 LLM 后端;tool/skill提供可扩展能力;agent在其上实现对话循环;cmd是最终的 CLI 入口。环境要求
moon0.1.20260417 或更高版本native(已在moon.mod.json中声明为preferred-target)获取依赖
类型与语法检查
构建
运行
当前
cmd/main.mbt已实现完整的 CLI 功能:10 个命令行选项(--message/-m、--mode、--model、--agent、--path、--verbose/-v、--version/-V、--continue、--list、--attach)、2 个子命令(billing、server)、非交互式 Agent 运行模式、会话管理(保存/恢复/列表/上限控制)、TUI 交互界面(onebit-tui)、服务器模式(crescent Web 服务器)、完整错误处理以及技能/记忆/任务系统集成。测试
开发阶段路线(节选)
项目按 12 阶段自底向上推进:
六、致谢
特别感谢原项目 clacky-ai/openclacky 的作者与贡献者,他们的设计与实现是本重写工作的全部起点。本项目仅以学习与生态贡献为目的,所有原创性归属于上游。