From 1fe56d30d90cfc81373d8962e9a2bd10a20d7532 Mon Sep 17 00:00:00 2001 From: Menglei Li <57990306+Lumos-789@users.noreply.github.com> Date: Mon, 9 Nov 2026 02:03:19 +0800 Subject: [PATCH] feat(make-it-a-bit-better): add make-it-a-bit-better plugin v0.2.4 --- assets/make-it-a-bit-better/icon.png | Bin 0 -> 14107 bytes .../.zcode-plugin/plugin.json | 25 ++++ .../make-it-a-bit-better/CHANGELOG.md | 67 ++++++++++ external_plugins/make-it-a-bit-better/LICENSE | 21 ++++ .../make-it-a-bit-better/README.md | 79 ++++++++++++ .../make-it-a-bit-better/README_CN.md | 79 ++++++++++++ .../assets/make-it-a-bit-better/icon.png | Bin 0 -> 14107 bytes .../assets/make-it-a-bit-better/icon.svg | 9 ++ .../make-it-a-bit-better/cordis.patch.yml | 3 + .../make-it-a-bit-better/index.js | 17 +++ .../skills/make-it-a-bit-better/SKILL.md | 117 ++++++++++++++++++ marketplace.json | 81 ++++++++++-- 12 files changed, 485 insertions(+), 13 deletions(-) create mode 100644 assets/make-it-a-bit-better/icon.png create mode 100644 external_plugins/make-it-a-bit-better/.zcode-plugin/plugin.json create mode 100644 external_plugins/make-it-a-bit-better/CHANGELOG.md create mode 100644 external_plugins/make-it-a-bit-better/LICENSE create mode 100644 external_plugins/make-it-a-bit-better/README.md create mode 100644 external_plugins/make-it-a-bit-better/README_CN.md create mode 100644 external_plugins/make-it-a-bit-better/assets/make-it-a-bit-better/icon.png create mode 100644 external_plugins/make-it-a-bit-better/assets/make-it-a-bit-better/icon.svg create mode 100644 external_plugins/make-it-a-bit-better/cordis.patch.yml create mode 100644 external_plugins/make-it-a-bit-better/index.js create mode 100644 external_plugins/make-it-a-bit-better/skills/make-it-a-bit-better/SKILL.md diff --git a/assets/make-it-a-bit-better/icon.png b/assets/make-it-a-bit-better/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..89c913697f30ac6c769f37f4a74c775901f31a74 GIT binary patch literal 14107 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 literal 0 HcmV?d00001 diff --git a/external_plugins/make-it-a-bit-better/.zcode-plugin/plugin.json b/external_plugins/make-it-a-bit-better/.zcode-plugin/plugin.json new file mode 100644 index 00000000..519dd440 --- /dev/null +++ b/external_plugins/make-it-a-bit-better/.zcode-plugin/plugin.json @@ -0,0 +1,25 @@ +{ + "name": "make-it-a-bit-better", + "version": "0.2.4", + "description": "An autonomous product-polish loop: every round opens a mandatory fresh brainstorm (3 perspective subagents), picks one small angle, implements, verifies and commits it, and logs it in a per-project ledger; oversized ideas go to an icebox. A bit better, round after round.", + "description_i18n": { + "en": "An autonomous product-polish loop: every round opens a mandatory fresh brainstorm (3 perspective subagents), picks one small angle, implements, verifies and commits it, and logs it in a per-project ledger; oversized ideas go to an icebox. A bit better, round after round.", + "zh-CN": "自主产品打磨循环:每轮强制开一场新头脑风暴(3 个视角子代理),择一个小角度实现、验证并提交,落账到项目级 ledger;超格好想法进 icebox。一轮好一点点,轮次积累成产品进步。" + }, + "author": { + "name": "Lumos-789", + "url": "https://github.com/Lumos-789" + }, + "homepage": "https://github.com/Lumos-789/make-it-a-bit-better", + "repository": "https://github.com/Lumos-789/make-it-a-bit-better", + "license": "MIT", + "keywords": [ + "polish", + "iteration", + "continuous-improvement", + "product", + "brainstorm", + "ux" + ], + "skills": "skills" +} diff --git a/external_plugins/make-it-a-bit-better/CHANGELOG.md b/external_plugins/make-it-a-bit-better/CHANGELOG.md new file mode 100644 index 00000000..32610761 --- /dev/null +++ b/external_plugins/make-it-a-bit-better/CHANGELOG.md @@ -0,0 +1,67 @@ +# Changelog + +## 0.2.4 + +- Quick start: the expectation line after the 5-round example says "up to N + committed small improvements" again (both languages) — it had drifted to + "up to 3" when the example was added, but each round lands at most one + improvement, so N rounds yield at most N (0.2.1 already said "up to N"). +- `.gitignore` drops `build/`, `__pycache__/` and `*.pyc` — template leftovers + from the initial commit; this is a pure-JS skill repo with no Python files + and no build step. + +## 0.2.3 + +- README 双语的 DSH 版本要求补上上界,改为 `>=0.2.1-rc.2 <0.3.0`,与 + `package.json` 的 `engines.dsh` 同口径:原文「0.2.1-rc.2 or newer / 或更新」 + 漏了 `<0.3.0` 上限,DSH 0.3.x 用户按文档以为兼容,实际会被安装闸挡下。 + +## 0.2.2 + +- The repo gate now requires `target` to be the repository root: a directory + nested inside another repository fails the gate and reports both paths, + instead of silently committing rounds into the parent repo. +- This changelog is the single release history: the README keeps one line of + news and points here (it had drifted — the README listed 0.2.1/0.2.0/0.1.0 + while this file only had 0.2.2). +- `package.json` declares `engines.dsh` and the skill-filesystem peer, so an + incompatible DSH blocks install and activation instead of failing at runtime. + +## 0.2.1 (2026-11-03) + +- The skill text carries a soft cap (150 lines): growth past the cap pays for + itself by distilling existing lines, so every round stays loadable for + small-context agents. +- README answers "why not just ask an agent to improve it?" up front — the three + structural guarantees an ad-hoc prompt can't give. +- Quick start expectations calibrated: up to N committed improvements; a + self-stop (`stalled` ledger line) or a reverted round (`failed, reverted`) is + the loop being honest, not broken. +- A round whose red check can't be fixed ships nothing, in exactly two commits — + the round's commit plus its revert; the failed diff and its failing evidence + stay in git history for the fix workflow. + +## 0.2.0 (2026-11-03) + +Protocol hardened by 13 self-hosted rounds (mabb polishing itself): + +- Verify honesty: a red check is fixed within the round cap or reverted with a + reversing commit and logged as `failed, reverted`; "verification pending" is + distinct from a missing toolchain; a repo with no verification surface gets a + manual smoke, never an invented check. +- Safety gates: non-git targets are rejected before any work; the ledger's + `.agents/` home is verified gitignored before recording; a repo without docs + grounds on entry-point code + tree, never an improvised summary. +- `focus` now shapes generation in every lens and ranks in-focus candidates + first — end to end, not just where the round grounds. +- Fixed-shape reporting: every round ends with the same six-field report, every + run closes with a four-field summary; the ledger carries a dimensions-coverage + view and next-round hint, and a self-stopped run leaves a dated `stalled` + marker. +- Icebox lifecycle: thin brainstorms promote a sliceable icebox idea instead of + stopping early; entries carry stable short ids (`IB-N`) and are deleted when + landed. + +## 0.1.0 + +Initial release: the 7-step round protocol, lens pool, ledger and icebox. diff --git a/external_plugins/make-it-a-bit-better/LICENSE b/external_plugins/make-it-a-bit-better/LICENSE new file mode 100644 index 00000000..b6c14d9c --- /dev/null +++ b/external_plugins/make-it-a-bit-better/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Lumos-789 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/external_plugins/make-it-a-bit-better/README.md b/external_plugins/make-it-a-bit-better/README.md new file mode 100644 index 00000000..2208ea50 --- /dev/null +++ b/external_plugins/make-it-a-bit-better/README.md @@ -0,0 +1,79 @@ +

make-it-a-bit-better icon

+ +

make-it-a-bit-better

+ +

A bit better, round after round.

+ +A skill plugin that runs an autonomous product-polish loop. Every round opens a **mandatory fresh brainstorm** (3 perspective-forced subagents), picks **one small angle**, implements, verifies and commits it, and logs the round in a per-project ledger. Good ideas that are too big for one round go to an **icebox** instead of being forced in. The philosophy is the name: no rewrites — a bit better, accumulated round after round. + +## Why not just ask an agent to "improve it"? + +An ad-hoc prompt can produce a change; it can't produce this loop's three structural guarantees: + +- **A fresh brainstorm every round** — 3 forced perspectives regenerate candidates outside the last round's frame, deduped against the ledger. An ad-hoc prompt re-cooks whatever the model already said. +- **One small, verified change** — ≤3 files / ≈100 lines, a real check must pass, and a red check is reverted rather than shipped. An ad-hoc prompt optimizes for looking done. +- **Memory across rounds** — the ledger records dimensions touched and parks oversized ideas in the icebox, so round 17 doesn't repeat round 3. An ad-hoc prompt restarts from zero every time. + +## Inputs + +| input | default | what it does | +|-------|---------|--------------| +| `target` | current working directory | repo path to polish. Must be the root of a git repository: a non-git target, or one nested inside another repo, is rejected before any work starts. | +| `rounds N` | 1 | how many rounds to run ("N rounds" or "keep going"). With N given, all N run without asking; after two consecutive thin brainstorms the loop stops itself early. | +| `focus` | none | a feature/path to spotlight (e.g. a just-shipped feature). Shapes generation in every lens and ranks in-focus candidates first — not just where the round grounds. | + +## What a round looks like + +1. **Ground** — read the product, recent commits and the ledger; dimensions never touched get priority. A non-git target is rejected up front, before any work is done. A repo with no README/docs grounds on entry-point code + tree instead — and says so in the round report, never improvising a product summary. +2. **Brainstorm (mandatory)** — 3 fresh subagents, each wearing a different lens (first-time user, picky daily user, maintainer-in-six-months, auditor, automation caller, …), each returning candidate angles; deduped against the ledger so nothing gets re-cooked. Without a subagent tool it falls back to three in-session, lens-forced passes. A run with `focus` spotlights that area in every lens's grounding. Still thin after widening the lenses? A good icebox idea that slices into the round cap gets promoted instead of letting the run stop early. +3. **Select one** — felt-impact × freshness ÷ cost, capped at ≤3 files / ≈100 lines per round. Bigger ideas → icebox. With `focus`, in-focus candidates rank first. +4. **Implement** — target-repo conventions, complete changes only, no TODO/mock leftovers. +5. **Verify** — the repo's own tests / build / lint / smoke; honest "verification pending" if the toolchain is missing; a repo with no verification surface at all gets a minimal manual smoke of the changed path (real command + observed output as evidence), or an honest `verification pending (no runnable surface)` when nothing can run; a red check gets fixed within the round cap or the round ships nothing: it is committed as `mabb #N: ` and immediately reversed by a second `mabb #N: revert` commit (never discarded — the failed diff stays in history), logged as failed — never shipped unverified. +6. **Record** — one commit per round (`mabb #N: `) plus a ledger entry (dimension, angle, who feels it, evidence). Before writing the ledger, its `.agents/` home is verified gitignored (`git check-ignore`; a missing rule is appended within the round), so agent working state never leaks into the commit. +7. **Loop** — ask-to-continue by default, N rounds on request; stops itself after two consecutive thin brainstorms rather than forcing weak changes. Every round closes with the same six-field report (angle / who feels it / what changed / evidence / icebox additions / next-round hint; empty fields say `none`), so rounds and repos stay comparable. When a run ends — N done, declined, or self-stopped — a four-field run summary closes it (`rounds:` / `changes:` / `icebox added:` / `leftovers:`), so a 5-round batch ends with totals instead of trailing off. A self-stop also overwrites the ledger's next-round hint with a dated `stalled` line (why it went thin, what to widen next) — the stop survives the conversation, and a later session can tell a stalled run from a finished one. + +## The ledger + +`.agents/mabb/ledger.md` in the target repo is the loop's memory. It prevents repeating old angles and carries a coverage view that keeps steering the brainstorm toward untouched dimensions. The icebox holds good-but-too-big ideas until you promote them to real projects — a round that lands one deletes its entry, so the icebox always lists what is still pending. Icebox entries carry short ids (`IB-1`, `IB-2`, …, stable once assigned), so reports, next-round hints and promotions cite an entry exactly instead of describing it. + +## Side effects (disclosed for review) + +- **Model calls**: each round spawns 3 short-lived brainstorm subagents (falls back to three in-session passes when the client has no subagent tool) — N rounds means ≈3N such calls. +- **Files**: writes the improvement itself in the target repo, plus the local ledger under `/.agents/mabb/`. +- **Git**: one local commit per round in the target repo (exactly two when a round fails: the round's commit, then its revert — the failed diff stays in history, nothing ships unverified). Shared/team repos get a branch proposal first — never a direct main commit. **Never pushes** to any remote unless you explicitly say push. +- **Network**: none beyond the model API. +- **Context**: the skill text is loaded whole by the executor every round, so it carries a soft cap (150 lines) — growth past the cap pays for itself by distilling existing lines, keeping rounds loadable for small-context agents. + +## Install + +**DSH** — this repo is a DSH bundle: one package mounts the `make-it-a-bit-better` skill (pure skill — no MCP server, no runtime dependencies). Requires DSH `>=0.2.1-rc.2 <0.3.0`. + +```bash +# From a checkout +dsh plugin add /path/to/make-it-a-bit-better + +# Once published +dsh plugin add make-it-a-bit-better +``` + +**ZCode** — the same repo doubles as a ZCode plugin (`.zcode-plugin/plugin.json` + `skills/`): install it from any marketplace that lists it — for a local tryout, a dev marketplace pointing at a checkout works. + +## Quick start + +With the plugin installed: + +> Run 3 rounds of make it a bit better on /path/to/repo + +Or with the steering wheel: point it at a repo, ask for N rounds, spotlight one area: + +> Run 5 rounds of make it a bit better on /path/to/repo, focusing on the checkout flow + +Expect: a ledger row per round and up to N committed small improvements — *up to*, because the loop self-stops after two consecutive thin brainstorms (the ledger gets a dated `stalled` line) and a red check it can't fix is reverted (a `failed, reverted` row, nothing shipped). Fewer commits than N is the loop being honest, not broken. An icebox appears only when the brainstorm produced ideas too big for one round. + +## What's new + +**0.2.4** — quick-start expectation corrected back to "up to N committed small improvements"; `.gitignore` template leftovers dropped. Full history: [CHANGELOG.md](CHANGELOG.md). + +## License + +MIT © Lumos-789 diff --git a/external_plugins/make-it-a-bit-better/README_CN.md b/external_plugins/make-it-a-bit-better/README_CN.md new file mode 100644 index 00000000..1e02da76 --- /dev/null +++ b/external_plugins/make-it-a-bit-better/README_CN.md @@ -0,0 +1,79 @@ +

make-it-a-bit-better 图标

+ +

make-it-a-bit-better(好一点点)

+ +

一轮好一点点,轮次积累成产品进步。

+ +一个跑自主产品打磨循环的 skill 插件。每轮**强制开一场新头脑风暴**(3 个视角强制的子代理),**择一个小角度**,实现、验证并提交,落账到项目级 ledger。一轮装不下的好想法进 **icebox**,不硬塞。哲学就是名字本身:不做重写——一轮好一点点,轮次积累成产品进步。 + +## 为什么不直接让 agent「优化一下」? + +即兴 prompt 也能改出一段代码,但给不了这个循环的三个结构保证: + +- **每轮强制新风暴** — 3 个强制视角在上一轮的框架之外重新生成候选,再按账本去重;即兴 prompt 只会重炒模型上次说过的话。 +- **一个小而验证过的改动** — ≤3 文件 / ≈100 行,真实检查必须通过,检查红了就回滚而不是带伤提交;即兴 prompt 优化的是「看起来做完了」。 +- **跨轮记忆** — 账本记录碰过的维度、把超格想法停在冰柜,第 17 轮不会重复第 3 轮;即兴 prompt 每次从零开始。 + +## 输入 + +| 输入 | 默认 | 作用 | +|------|------|------| +| `target` | 当前工作目录 | 要打磨的仓路径。必须是 git 仓的根目录——非 git 目标、或嵌在别人的仓里的子目录,动工前就被拦下。 | +| `rounds N` | 1 | 跑几轮(说「N 轮」或「继续」皆可)。给了 N 就连跑满 N 轮不再询问;连续两轮风暴出不了合格候选会提前自停。 | +| `focus` | 无 | 要聚光的功能/路径(如刚上线的功能)。贯穿每个视角的风暴生成,区内候选排序优先——不只是接地时看一眼。 | + +## 一轮长什么样 + +1. **接地** — 读产品、最近提交和账本;从没碰过的维度本轮优先。非 git 目标仓在动工前就被拦下。目标仓没有 README/文档时,接地降级为入口代码 + 目录树,并在轮报里说明——绝不凭空即兴编一段产品摘要。 +2. **风暴(强制)** — 3 个新上下文子代理各戴一个视角镜头(初见用户、挑剔的日常用户、半年后的维护者、审查者、脚本调用方……),各自产出候选角度;按账本去重,不炒冷饭。客户端没有子代理工具时,退化为会话内三趟视角强制风暴。带 `focus` 的运行,每个视角的接地摘要都聚光该区。宽想之后还是瘦?冰柜里能切成单轮上限的好想法会被晋升落地,而不是让运行提前自停。 +3. **择一** — 按感知面 × 新鲜度 ÷ 成本排序,单轮硬上限 ≤3 文件 / ≈100 行;超格好想法进 icebox。带 `focus` 时区内候选优先。 +4. **落地** — 遵守目标仓自身规范,只留完整改动,不留 TODO / mock。 +5. **验证** — 用目标仓自己的测试 / 构建 / lint / 冒烟;工具链缺失时如实报「验证待补」,不谎报;目标仓压根没有验证面(区别于工具链缺失)时,最低手动冒烟改动路径(真实命令 + 实际输出作为证据),实在无可执行对象(纯文档/文案改动)就如实落 `verification pending(无可执行验证面)`;检查红了先在单轮上限内修,修不好就零带伤离场:先以 `mabb #N: <角度>` 提交本轮改动,再以第二个 `mabb #N: revert` commit 原地反转(绝不 discard——失败 diff 留在历史里),落一条 failed 账——失败轮恰好两个 commit,绝不带伤提交。 +6. **落账** — 一轮一 commit(`mabb #N: <角度>`)+ 一条账本记录(维度、角度、谁会感知、证据)。写账前用 `git check-ignore` 核实账本的 `.agents/` 位置已被忽略,缺规则就当轮补上(计入文件上限),agent 工作态绝不混进轮次 commit。 +7. **续轮** — 默认问一次是否继续,给了 N 就连跑;连续两轮风暴出不了合格候选就自停,不硬凑弱改动。每轮以同构的 6 字段轮报收尾(角度 / 谁感受到 / 改了什么 / 证据 / icebox 新增 / 下轮提示;空字段写 `none` 不缺行),跨轮跨仓可比较。整场运行收尾(N 轮跑满、用户不续或自停)再以 4 字段运行总结块落幕(`rounds:` / `changes:` / `icebox added:` / `leftovers:`)——5 轮批量跑完有底线汇总,而非不了了之。自停时账本的「下轮提示」也会被改写为一行带日期的 `stalled`(为何贫瘠、下轮先宽想什么)——自停事实留档在对话之外,后续会话能区分「贫瘠自停」与「正常跑完」。 + +## 账本 + +目标仓的 `.agents/mabb/ledger.md` 是循环的记忆:防重复旧角度,覆盖视图逼着风暴往没碰过的维度去。icebox 存好但超格的想法,等你拍板升级成正式需求——某轮落地即销账,冰柜永远只列还没做的。冰柜条目带短 id(`IB-1`、`IB-2`……一旦分配不再变),轮报、下轮提示与晋升引用精确到条,不再靠描述性指认。 + +## 副作用披露(供评审) + +- **模型调用**:每轮派 3 个短命头脑风暴子代理(无子代理工具的客户端退化为会话内三趟)——N 轮约 3N 次这样的调用。 +- **文件**:在目标仓写改动本身,外加本地账本 `/.agents/mabb/`。 +- **Git**:每轮在目标仓落一个本地 commit(失败轮恰好两个:本轮 commit + 其 revert——失败 diff 留在历史,零带伤提交);多人协作仓先提分支方案再动,绝不直提主干;**绝不 push**,除非你当次明说。 +- **网络**:除模型 API 外无任何访问。 +- **上下文**:技能文本每轮被执行 agent 整读,故带软顶(150 行)——超顶的增长须以蒸馏现有行来抵偿,小上下文 agent 永远装得下一轮。 + +## 安装 + +**DSH**——本仓即 DSH bundle:一个包挂载 `make-it-a-bit-better` 技能(纯技能——无 MCP server、无运行时依赖)。需要 DSH `>=0.2.1-rc.2 <0.3.0`。 + +```bash +# 从 checkout 安装 +dsh plugin add /path/to/make-it-a-bit-better + +# 发布后 +dsh plugin add make-it-a-bit-better +``` + +**ZCode**——同一仓库兼作 ZCode 插件(`.zcode-plugin/plugin.json` + `skills/`):从任一收录它的插件市场安装;本地试用可让 dev 市场指向一份 checkout。 + +## 快速开始 + +装好插件后: + +> 对 /path/to/repo 跑 3 轮 make it a bit better + +也可以带上方向盘:指定仓、要 N 轮、聚光一个区域: + +> 对 /path/to/repo 跑 5 轮 make it a bit better,focus 在结账流程 + +预期:每轮一条账本记录,最多 N 个已提交的小改进——说「最多」是因为连续两轮风暴贫瘠会自停(账本留一行带日期的 `stalled`),检查红了修不好就整轮回滚(落一条 `failed, reverted`,零带伤提交)。commit 数少于 N 是循环在诚实,不是坏了。只有风暴产出超格想法时才会出现 icebox。 + +## 版本历史 + +**0.2.4** — 快速开始预期改回「最多 N 个已提交的小改进」;删除 `.gitignore` 模板残留。完整历史见 [CHANGELOG.md](CHANGELOG.md)。 + +## 许可 + +MIT © Lumos-789 diff --git a/external_plugins/make-it-a-bit-better/assets/make-it-a-bit-better/icon.png b/external_plugins/make-it-a-bit-better/assets/make-it-a-bit-better/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..89c913697f30ac6c769f37f4a74c775901f31a74 GIT binary patch literal 14107 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 literal 0 HcmV?d00001 diff --git a/external_plugins/make-it-a-bit-better/assets/make-it-a-bit-better/icon.svg b/external_plugins/make-it-a-bit-better/assets/make-it-a-bit-better/icon.svg new file mode 100644 index 00000000..04820f36 --- /dev/null +++ b/external_plugins/make-it-a-bit-better/assets/make-it-a-bit-better/icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/external_plugins/make-it-a-bit-better/cordis.patch.yml b/external_plugins/make-it-a-bit-better/cordis.patch.yml new file mode 100644 index 00000000..b5a4b848 --- /dev/null +++ b/external_plugins/make-it-a-bit-better/cordis.patch.yml @@ -0,0 +1,3 @@ +- insert: + - id: make-it-a-bit-better + name: make-it-a-bit-better diff --git a/external_plugins/make-it-a-bit-better/index.js b/external_plugins/make-it-a-bit-better/index.js new file mode 100644 index 00000000..9fee05fd --- /dev/null +++ b/external_plugins/make-it-a-bit-better/index.js @@ -0,0 +1,17 @@ +import { fileURLToPath } from "node:url"; +import { apply as applySkillFilesystem } from "@deepseek-ai/dsh-skill-filesystem"; + +const skillsRoot = fileURLToPath(new URL("./skills/", import.meta.url)); + +export const name = "make-it-a-bit-better"; +export const inject = ["skills"]; + +export function apply(ctx) { + applySkillFilesystem(ctx, { + providerName: name, + includeDefaultRoots: false, + bundledSkillDir: skillsRoot, + watch: false, + }); + return ctx; +} diff --git a/external_plugins/make-it-a-bit-better/skills/make-it-a-bit-better/SKILL.md b/external_plugins/make-it-a-bit-better/skills/make-it-a-bit-better/SKILL.md new file mode 100644 index 00000000..f7ec00d2 --- /dev/null +++ b/external_plugins/make-it-a-bit-better/skills/make-it-a-bit-better/SKILL.md @@ -0,0 +1,117 @@ +--- +name: make-it-a-bit-better +description: Autonomous product-polish loop. Every round MUST open a fresh brainstorm, pick ONE small angle that makes the product a bit better, implement, verify and commit it, then log the round in a per-project ledger. Use when the user says "make it a bit better", "polish it", "iterate a few rounds", "打磨", "好一点点", "让它好一点", "持续改进", "再优化几轮", or asks to iteratively improve a product or feature one small step at a time. +metadata: + short-description: One small brainstormed improvement per round, committed and logged +--- + +# Make It a Bit Better (mabb) + +An incremental product-polish loop. Each round: **brainstorm → pick ONE small angle → implement → verify → commit → log**. No rewrites, no big-bang redesigns — a product gets better one small, felt improvement at a time, round after round. + +## Inputs + +- **target** — repo path (default: current working directory) +- **rounds N** — how many rounds to run (default 1; the user may say "N rounds" or "keep going") +- **focus** — optional feature/path to examine (e.g. a just-shipped feature) + +## Round protocol — run every step, in order, every round + +### 1. Ground + +- Read the product's README/docs entry, `git log --oneline -15`, and a quick tree overview. With `focus` given, ground mainly on that area. +- No README/docs entry at all (scripts, small tools — common)? Degrade grounding to the entry-point code (main/module entry) plus the directory tree, and say so in that round's report — grounding degrades honestly; a product summary improvised from nothing is fabrication, not grounding. +- Read the ledger at `/.agents/mabb/ledger.md` if it exists; its `Dimensions touched` line and `Next round` hint (either may be absent in older ledgers — reconcile from the table then) steer this round, and dimensions never touched get brainstorm priority. No ledger yet → this is round 1; otherwise the round number is the ledger's max `#` + 1. +- Repo gate (fail-loud): confirm `` is the root of a git repository — `git -C rev-parse --show-toplevel` must resolve to `` itself, not to a parent. A target nested inside someone else's repo fails the gate: stop before any work, report both paths (`` and the resolved top level), and ask which one the round should run in. mabb records rounds as commits, so a non-git target cannot be recorded; never `git init` on the user's behalf or drift to a nearby directory that does have `.git`. +- Repo safety: if the target is a shared/team repo (protected main, MR flow), propose a branch and get the user's confirmation before the first commit. Never commit to main directly in such repos. + +### 2. Brainstorm (mandatory — never skip, never thin) + +- Draw **3 lenses** from the lens pool below; exclude lenses used in the previous round (the ledger records them). +- Spawn **3 fresh subagents in parallel**, one per lens. Each receives: a 5–10 line product grounding summary, the ledger's past angles, the dimension seeds, and its lens. Each returns **3–5 candidates**, one line each: + `angle — who feels it (persona + moment) — one-line rationale — cost S/M/L` +- Merge in-session; drop anything already in the ledger or icebox; you may add your own candidates. +- With `focus` given: spotlight that area in each lens's grounding summary, and ask every lens for ≥1 in-focus candidate — focus must shape generation, not just Ground. +- If the client has no subagent tool: still brainstorm — write three separate passes, one per lens, each yielding ≥3 candidates. Perspective-forced fresh generation every round is the point. +- Fewer than 6 distinct surviving candidates → widen the lenses and go again. Never select from a thin list. Still thin after widening → before heading for the early stop, check the ledger's icebox for a good idea that slices into the round cap (≤3 files / ≈100 lines); promoting a slice keeps the round real, and nothing slice-able leaves the honest stop standing. + +### 3. Select ONE + +- Rank by felt-impact × freshness ÷ cost. Take the top. +- With `focus` given, rank in-focus candidates first; pick out-of-focus only when no in-focus candidate survived, and say so in the round report. +- **"A bit better" cap**: one round changes ≤3 files or ≈100 lines, whichever binds first (docs/copy-only rounds may exceed with one stated sentence of reason). If the top candidate exceeds the cap, move it to the ledger's **icebox** and take the next. +- The chosen angle must name a concrete "who feels it". If it can't, it is probably a refactor in disguise — icebox it. + +### 4. Implement + +- Follow the target repo's conventions and instruction files (AGENTS.md / CLAUDE.md / CONTRIBUTING). +- Read every file before editing. Complete changes only — no TODO, mock, placeholder or "temporary path". + +### 5. Verify + +- Use the repo's own verification surface: tests, build, lint, type-check, or a real smoke run. At least one real check must pass. +- If the toolchain is unavailable, report "verification pending" honestly in the round report — never claim verified. +- No verification surface at all (the repo simply has no tests/build/lint — distinct from a missing toolchain)? Smoke the changed path by hand: run the real command and record it plus the observed output as evidence. Nothing runnable (e.g. a pure docs/copy change) → log `verification pending (no runnable surface)` and say so — still never claim verified. +- Check failed after implementing? Fix it within the round's ≤3-file/≈100-line cap. Still failing: ship nothing — commit the round's change as `mabb #N: `, then a second commit `mabb #N: revert` reversing it (at this point nothing is committed yet, so an uncommitted change gives a "reversing commit" nothing to reverse and discarding is forbidden — commit-then-revert keeps the failed diff and its failing check in history for the fix workflow; a failed round is exactly two commits). Log a normal ledger row citing the revert commit, change = `failed, reverted`, evidence = the failing check, and say so in the round report — shipping nothing beats shipping unverified. + +### 6. Record + +- Commit the change alone: `mabb #N: `, body line = who feels it + evidence. (A failed round commits nothing here — its round + revert commits were made in Verify; this step only writes its ledger row.) +- Update `/.agents/mabb/ledger.md` (create on first record): + +```markdown +# mabb ledger — + +| # | date | dimension | angle | who feels it | change | commit | evidence | +|---|------|-----------|-------|--------------|--------|--------|----------| +| 1 | 2026-11-03 | error-messages | ... | ... | ... | abc1234 | pytest 41 green | + +## Dimensions touched +- error-messages, microcopy — steer the next brainstorm toward untouched ones (accessibility, cost, …) + +## Next round +- + +## Icebox (good, too big for one round; a round that lands an entry deletes it) +- IB-1 (dimension) idea — why it matters — rough size M/L + +## Lenses used +- #1: first-time-user, auditor, automation-caller +``` + +- While recording, append this round's dimension to `Dimensions touched` and overwrite `Next round` with the current round report's hint — both are what the next round's Ground reads. +- A round that lands a promoted icebox idea deletes that entry in the same ledger update: the icebox is a pending list, and a landed idea's permanent record is its ledger row — an entry left behind reads as still-to-do and invites a duplicate round later. +- Icebox entries carry short ids: `IB-1`, `IB-2`, … — a new entry takes the next free id (current max + 1); ids are stable once assigned (never renumbered, never reused), and the round report, `Next round` hint and a promotion's ledger row cite entries by id instead of describing them. Ledgers started before ids keep working: id-less entries stay valid until they are edited or landed. +- Before writing the ledger, make sure it cannot leak into git history: `git -C check-ignore .agents/mabb/ledger.md` must exit 0 — if not, append a `.agents/` line to the target's `.gitignore` within this round (counts toward the ≤3-file cap). Never let a repo-convention `git add -A` sweep the untracked ledger into the round commit. +- The ledger is local working state by default; a team that wants shared history can deliberately un-ignore it — say so to the user once. + +### 7. Loop + +- End every round with a one-block round report of exactly six labeled fields, always this order, one per line: `angle:` / `who feels it:` / `what changed:` / `evidence:` / `icebox additions:` / `next-round hint:` — an empty field is written `none`, never dropped; `icebox additions:` lists each new entry as `IB-N (dimension) short name`. The fixed shape keeps reports comparable across rounds and repos, and lets an outer orchestrator parse them. +- Default: ask once "continue?". With N given: run all N. Stop early when 2 consecutive brainstorms yield no qualifying candidate — report "nothing worth a round right now" instead of forcing a weak change. That self-stop is itself recorded: overwrite the ledger's `## Next round` with a dated line `- stalled : two consecutive thin brainstorms, icebox held no slice — ` (no round row — nothing shipped), so a later Ground reads a stalled run as stalled instead of re-running the same doomed brainstorm. +- When a run ends — all N rounds done, the user declines to continue, or the loop self-stops after two consecutive thin brainstorms — close the whole run with a one-block run summary of exactly four labeled fields, always this order, one per line: `rounds:` (e.g. `3 run`, or `2 of 5 run, stopped after two consecutive thin brainstorms`) / `changes:` (commits and files across the run, e.g. `3 commits, 7 files`; a reverted round shows as `1 failed, reverted`) / `icebox added:` (count plus short names, or `none`) / `leftovers:` (the strongest thread worth a future round, or `none`). Empty fields are written `none`, never dropped. Same fixed-shape rationale as the round report: run totals stay comparable across runs and parseable by an outer orchestrator. +- Never push to any remote unless the user explicitly said push in this run. + +## Lens pool (draw 3, rotate) + +first-time user (day one) · picky daily user · maintainer in six months · competitor migrant · constrained user (weak network / old device / small screen) · auditor (security, privacy, compliance) · accessibility user · automation/script caller + +## Dimension seeds (ammunition, not a checklist) + +first-run & empty states · error messages & failure paths · microcopy (labels, buttons, tooltips) · defaults · speed, felt and real · feedback (loading, progress, confirmation) · consistency (terms, visuals, interactions) · discoverability · edge cases & input boundaries · undo & safety nets · docs & examples · trust & transparency (logs, observability) · cost (time, tokens, API calls) · accessibility · keyboard & power users · install & onboarding + +Free-form candidates that fit no seed are welcome — seeds steer coverage, they do not fence it. + +## Red lines + +- A rewrite or big refactor is not mabb — icebox it. +- Fixing an already-reported bug belongs to a fix workflow, not a round (an unreported rough edge is fair game). +- Pure reformatting / renames never count as a round. +- Every round must answer: **who feels this bit of better?** +- Shared/team repos: no direct commits to main; confirm branch strategy first. +- No unbounded loops: N rounds or an explicit "keep going" only. +- The skill text stays lean — executors load SKILL.md whole every round. Past the soft cap (150 lines), added lines must pay for themselves: distill or merge existing ones in the same commit, or the addition waits in the icebox. + +## Trial + +Suggested first prompt: *对 /path/to/repo 跑 2 轮 make it a bit better*, or in English *run 2 rounds of make it a bit better on /path/to/repo* — expect two brainstormed, small, verified, committed improvements and a ledger with 2 entries. diff --git a/marketplace.json b/marketplace.json index c7f09a06..7d1bc544 100644 --- a/marketplace.json +++ b/marketplace.json @@ -10,7 +10,10 @@ "url": "https://z.ai" }, "unlistedPlugins": [ - { "name": "openpencil", "source": "./external_plugins/openpencil" } + { + "name": "openpencil", + "source": "./external_plugins/openpencil" + } ], "plugins": [ { @@ -827,7 +830,9 @@ }, { "name": "excalidraw", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "Excalidraw", "displayName_i18n": { "en": "Excalidraw", @@ -850,7 +855,9 @@ "name": "photocraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/photocraft/icon.png", "source": "./external_plugins/photocraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "PhotoCraft", "displayName_i18n": { "en": "PhotoCraft", @@ -877,7 +884,9 @@ "name": "vectorcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/vectorcraft/icon.png", "source": "./external_plugins/vectorcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "VectorCraft", "displayName_i18n": { "en": "VectorCraft", @@ -904,7 +913,9 @@ "name": "pdfcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/pdfcraft/icon.png", "source": "./external_plugins/pdfcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "PdfCraft", "displayName_i18n": { "en": "PdfCraft", @@ -931,7 +942,9 @@ "name": "designcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/designcraft/icon.png", "source": "./external_plugins/designcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "DesignCraft", "displayName_i18n": { "en": "DesignCraft", @@ -958,7 +971,9 @@ "name": "wordcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/wordcraft/icon.png", "source": "./external_plugins/wordcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "WordCraft", "displayName_i18n": { "en": "WordCraft", @@ -985,7 +1000,9 @@ "name": "gridcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/gridcraft/icon.png", "source": "./external_plugins/gridcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "GridCraft", "displayName_i18n": { "en": "GridCraft", @@ -1012,7 +1029,9 @@ "name": "deckcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/deckcraft/icon.png", "source": "./external_plugins/deckcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "DeckCraft", "displayName_i18n": { "en": "DeckCraft", @@ -1039,7 +1058,9 @@ "name": "cadcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/cadcraft/icon.png", "source": "./external_plugins/cadcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "CADCraft", "displayName_i18n": { "en": "CADCraft", @@ -1066,7 +1087,9 @@ "name": "soundcraft", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/soundcraft/icon.png", "source": "./external_plugins/soundcraft", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "SoundCraft", "displayName_i18n": { "en": "SoundCraft", @@ -1149,7 +1172,9 @@ }, "category": "developer-tools", "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/kicad/icon.png", - "componentTypes": ["ui"], + "componentTypes": [ + "ui" + ], "displayName": "KiCad", "displayName_i18n": { "en": "KiCad", @@ -1443,6 +1468,36 @@ "mcp", "verification" ] + }, + { + "name": "make-it-a-bit-better", + "source": "./external_plugins/make-it-a-bit-better", + "icon": "https://cdn-zcode.z.ai/zcode/official-plugin/assets/make-it-a-bit-better/icon.png", + "description": "An autonomous product-polish loop: every round opens a mandatory fresh brainstorm (3 perspective subagents), picks one small angle, implements, verifies and commits it, and logs it in a per-project ledger; oversized ideas go to an icebox. A bit better, round after round.", + "description_i18n": { + "en": "An autonomous product-polish loop: every round opens a mandatory fresh brainstorm (3 perspective subagents), picks one small angle, implements, verifies and commits it, and logs it in a per-project ledger; oversized ideas go to an icebox. A bit better, round after round.", + "zh-CN": "自主产品打磨循环:每轮强制开一场新头脑风暴(3 个视角子代理),择一个小角度实现、验证并提交,落账到项目级 ledger;超格好想法进 icebox。一轮好一点点,轮次积累成产品进步。" + }, + "version": "0.2.4", + "author": { + "name": "Lumos-789", + "url": "https://github.com/Lumos-789" + }, + "category": "productivity", + "keywords": [ + "polish", + "iteration", + "continuous-improvement", + "product", + "brainstorm", + "ux" + ], + "examplePrompts": [], + "examplePrompts_i18n": {}, + "displayName": "Make It a Bit Better", + "displayName_i18n": { + "zh-CN": "好一点点" + } } ] -} \ No newline at end of file +}