**简体中文** · [English](README.md) # MOLT 🦀 > **会给自己长工具的编码 Agent。** 大多数 Agent 干完你的活就忘了自己学到了什么。**MOLT 不会忘。** 每完成一个任务,它会复盘自己做了什么;一旦发现可复用的模式,它就**给自己写一个新工具**、**跑测试验证**,然后**把它存进技能库**。下次再遇到同样的模式,工具已经在那等着了。 看这个工具库是怎么复利的: ``` $ molt run "tidy the config files" --learn --mock ── molt run — task ───────────────────────────────────────────── task: tidy the config files model: mock ── final answer ──────────────────────────────────────────────── All done — I inspected the workspace and the job is complete. ── learn ─────────────────────────────────────────────────────── ✔ grew a new tool: `parse_csv_line` → .molt/skills/parse_csv_line $ molt skills list parse_csv_line [project] Parse a CSV line of key=value pairs into a dict. $ molt run "parse some key=value config" --mock # 下次它已经在工具列表里了 ``` 这就是全部想法:**你的 AI 不只是写代码,它会"蜕皮"**——脱掉旧壳、长出新工具,然后把新工具留下。 --- ## 为什么用 MOLT - **它会复利。** 每一次任务都可能让下一次更便宜、更可靠。你的 Agent 越来越懂*你的代码库*,而不只是"总体上更聪明"。 - **它是诚实的自我进化。** 一个新工具只有在**通过了它自己的测试**之后才会进入技能库。Agent 可以给自己长新工具,但先得证明自己真的能用。 - **它可以分享。** `molt export` 打包你的工具库,`molt install` 拉取别人的。Agent 千辛万苦攒下来的技能,可以变成能被 fork、star、分享的库。 - **它属于你。** MIT 协议、零追踪、跑在任意 OpenAI 兼容模型上(默认 DeepSeek)。 ## 快速上手 ```bash # 从 PyPI 安装(发布名为 molt-agent): pip install molt-agent # …或直接从源码安装: git clone https://github.com/houyongsheng/deepseek-harness-molt cd deepseek-harness-molt pip install -e . export DEEPSEEK_API_KEY=sk-... ``` 跑一个任务,让它学习: ```bash molt run "add retry logic to the http client" --learn ``` 没有 API key?用内置的假模型跑完全一样的流程: ```bash molt run "tidy the config files" --learn --mock molt evolve "polish the project" -n 5 --mock # 看着工具库一点点长大 ``` ## 命令 | 命令 | 作用 | |---|---| | `molt run "任务" [--learn]` | 跑一个任务。`--learn` 会把发现的可复用工具留下。 | | `molt run --stream --sandbox` | 实时流式输出答案;让技能代码在子进程里跑。 | | `molt evolve "目标" -n N` | 循环"子任务 + 学习" N 次,看工具库累积。 | | `molt learn` | 对上一次的任务记录重新做一次复盘。 | | `molt skills list / show <名> / remove <名> / dedup` | 管理并去重技能库。 | | `molt eval <名> [--cases FILE]` | 用标注用例评测技能的准确率。 | | `molt export [--out DIR]` | 打包你的技能,方便分享。 | | `molt install <路径或 git 地址>` | 把别人的技能拉进你的工具库。 | | `molt publish [--remote URL]` | 把工具库发布到 git 注册中心(社区中心)。 | ## 原理 ``` 任务 ─▶ Agent 循环 ─▶ 答案 │ └──▶ 复盘:"我有没有碰到可复用的模式?" │ 有 ▼ 写一个新工具(python + schema + test) │ 先跑测试 ── 不过 ── 丢弃 │ 通过 ▼ 存入 .molt/skills/(下次自动成为工具) ``` - **运行** —— Agent 循环,带 `shell`、`read_file`、`write_file`,再加上你长出来的每一个技能。 - **复盘** —— 第二次 LLM 调用问:这里面有可复用的吗?有就返回一个 JSON 形式的技能。 - **测试** —— 技能自带测试,在一个全新的子进程里跑;没有测试就不入库。 - **复用** —— 技能变成可调用的工具,项目级技能优先于个人技能库。 技能放在 `.molt/skills/<名字>/`(项目)和 `~/.molt/skills/`(个人)。每个都是普通文件:`skill.json`(名称/描述/参数)、`skill.py`(`def run(**kwargs)`)、`test.py`。 ## 评测与发布 技能值不值得留,要看它准不准。`molt eval` 用带标注的用例给技能打分(用例放在技能旁的 `cases.json`,或用 `--cases` 指定任意文件): ```bash molt eval parse_kv_records # accuracy: 5/5 (100%) ``` 满意之后,可以分享单个技能,也可以把整个工具库发布到一个 git 注册中心: ```bash molt export --out ./my-toolbox # 普通复制 + 清单 molt publish --remote git@github.com:you/toolbox.git # 推送,并打印安装命令 # 别人:molt install git@github.com:you/toolbox.git ``` 这就是一个生态的种子:**你的 Agent 的技能是一个库,而库是用来被 fork、star、分享的。** ## 信任与安全 - **先测试再入库。** 没测试或测试不过的技能永远进不了库。 - **默认技能在进程内运行。** 加 `--sandbox` 让技能代码在子进程里跑(进程隔离)。无论哪种方式,都像对待任何你 `pip install` 的代码一样谨慎,评估后再信任。 - **普通文件,没有锁定。** 你的工具库就是几个目录,删掉、分享、搬走都随意。 ## 路线图 - [x] 技能**去重/合并**——`molt skills dedup` 清除被遮蔽的副本、标记相同代码 - [x] 技能**评测**——`molt eval` 用 `cases.json` 量化准确率 - [x] **注册中心发布**——`molt publish` 把工具库推送到 git 注册中心 - [x] **流式 + 更丰富工具 + 沙箱**——`--stream`、`list_dir`/`search`、`--sandbox` - [ ] 每次提交前自动跑技能评测 - [ ] 可搜索的**注册中心**(`molt search`)——找到别人发布的技能 ## 与 Codex / Claude 生态的结合 MOLT 长的工具**就是纯 Python**——所以它们天然能"出门"。两个方向: **MOLT → Claude Code / Codex。** 把工具库导出成对方能直接用的格式: ```bash molt export --format claude --out .claude # → .claude/skills/<名>/SKILL.md molt export --format codex --out . # → AGENTS.md 可复用流程块 ``` 把 `.claude/` 放进项目,Claude Code 就能用这些技能;把 `AGENTS.md` 块追加进 Codex 的 `AGENTS.md`,Codex 也能照着重实现。现成模板在 [`examples/integrations/`](examples/integrations/)。 **Claude Code / Codex → MOLT。** 用一个单文件技能把"造工具"的活委托回 MOLT: `examples/integrations/claude/molt-skill.md` 告诉 Claude Code——一旦发现可复 用的模式,就跑 `molt run "<任务>" --learn`;长出来的工具大家都能用。 ## 灵感来源 MOLT 的核心主张——*让 Agent 自己写、自己测、自己留下工具*——正是 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(dsh)的灵魂: 它的自指工具集让模型能检查、挂载自己运行时里的插件。MOLT 是对这个想法的 轻量、独立实现:一个可 `pip install` 的包、跑在任意 OpenAI 兼容模型上、 不需要学任何框架。想要"一切皆插件"的完整平台?去 dsh。想要一个下午就能 读完的轻量版?留在这里。 ## License MIT —— 去吧,造一个会自己长工具的东西。