跳到正文
cccskills
免费在 GitHub 公开

unslop

Strip AI writing tells from Rove's user-facing prose — README, the docs/ pages that sync to docs.rove.run, landing copy, and release notes. Use when the user says "unslop", "洗一下文案", "这读起来像 AI 写的", or after drafting any user-facing page. Adapted for this repo from cursor/plugins pstack/skills/unslop.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md5.2 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Unslop

Rewrite text so it stops reading as machine-generated. Two halves, both required: cut the tells, then make sure something human is left.

Upstream pattern list: https://github.com/cursor/plugins/blob/main/pstack/skills/unslop/SKILL.md. This file keeps the repo-specific parts — what counts as prose here, what is data and must survive, and which surfaces are in scope.

Scope in this repo

In scope (the product's public face):

  • README.md
  • The docs/ pages listed in SECTIONS in packages/rove-docs/scripts/sync-docs.mjs (they publish to docs.rove.run)
  • packages/rove-landing/** — English copy only
  • Release notes and changeset bodies

Out of scope unless asked: docs/PLAN.md, HARNESS.md, ARCHITECTURE.md, DESIGN.md, RELEASING.md, AGENTS.md, and docs/design/**. Those are operator manuals for agents, not product surface.

Never rewrite these

The same character can be punctuation in one line and data in the next. Check before replacing:

  • Table cells meaning "not applicable" — | copilot | — | ... | in ENGINES.md and SESSIONS.md. An em dash there is the value.
  • Verbatim CLI output — e.g. the rove doctor sample in TROUBLESHOOTING.md. Quoting output means quoting it exactly.
  • Code, including placeholders — ${ev.taskId ?? "—"} in PLUGIN-SDK.md.
  • CSS/JS/HTML comments in landing files.
  • Chinese copy. —— is correct CJK punctuation, not a tell. The landing page's zh i18n dictionary keeps its em dashes.
  • A file's own established separator. PLUGIN-EVENTS.md uses · between a heading and its engine-support marks; match the file rather than inventing a new convention.

The patterns

Full list upstream. The ones that actually show up here, in order of volume:

  1. Em dashes in prose. By far the biggest. Resolve each one per sentence into a period, comma, semicolon, colon, or parens. Do not global-replace with a single substitute — swapping every — for , just trades one tic for another, and swapping for parens trades it for a different one.
  2. Inline-header lists. - **Label** — restatement of the label becomes - **Label.** <genuinely new detail>. If the text after the label only rephrases it, the line has no content; write the content.
  3. Curly quotes → straight.
  4. Filler. "simply", "in order to", "it is important to note that".
  5. Fancy ways to say "is" — "serves as", "stands as", "boasts".
  6. Title-case headings → sentence case. Proper nouns and defined product terms (Terminal Tab, Claude Code) stay capitalized.
  7. Sentences that say nothing specific to this project. If the line could appear verbatim in another tool's docs, cut it.

Then add voice back: vary sentence length, state the tradeoff instead of listing both sides neutrally, and let a sentence be blunt.

Two failure modes this repo has actually hit

Both produced broken output that looked fine at a glance. Check for them.

Fragments from over-eager splitting. Turning X — y into X. y mid-clause leaves a sentence starting lowercase, or a verbless remainder. After editing, scan for it:

python3 - <<'PY'
import sys
for p in sys.argv[1:]:
    lines = open(p, encoding='utf-8').read().split('\n')
    for i in range(len(lines) - 1):
        a, b = lines[i], lines[i + 1]
        if a.rstrip().endswith('.') and b[:1].islower() and b.strip() \
           and not b.startswith(('|', '-', '*', '`', '#', ' ')):
            print(f"{p}:{i+1}: {a[-50:]} || {b[:50]}")
PY

Also read each rewritten sentence whole. The scan only catches line-broken prose, not a fragment that fits on one line.

Escaping breaks in i18n strings. The landing dictionaries are single-quoted JS. Replacing agent’s with a literal ' breaks the file. Always:

node --check packages/rove-landing/index.js
node --check packages/rove-landing/themes.js

Verify before claiming done

bun run lint
bun run --filter @sma1lboy/rove-docs build   # the docs-site CI gate
node --check packages/rove-landing/*.js

Then confirm the em dashes that remain are all data, not prose:

grep -rn "—" README.md docs/*.md packages/rove-landing/*.html

Every hit should be a table cell, CLI output, a code placeholder, a comment, or Chinese. If one is a sentence, it was missed.

Editing the landing page's English also means checking its Chinese counterpart still has the same keys:

node -e '
const s = require("fs").readFileSync("packages/rove-landing/index.js", "utf8")
const keys = (b) => new Set([...b.matchAll(/'"'"'([a-zA-Z0-9._]+)'"'"':/g)].map(m => m[1]))
const zh = keys(s.split("var en =")[0].split("var zh =")[1])
const en = keys(s.split("var en =")[1].split("var dicts")[0])
console.log("zh only:", [...zh].filter(k => !en.has(k)))
console.log("en only:", [...en].filter(k => !zh.has(k)))
'

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

architect

免费

Sketch types, signatures, and module structure before code, then stay in the loop while implementation fills in. Use for /architect, 'architect this', 'design this', or non-trivial work where jumping to code would lock in the wrong shape.

中文简介正在准备中。当前显示原文说明。

Sma1lboy/rove1782026年10月22日 更新

arena

免费

Spawn N parallel candidates at the same task, pick a base, graft the strongest parts of the losers into it. Use for /arena, 'arena this', 'throw it in the arena', or when one attempt at a non-trivial artifact would lock in the wrong shape.

中文简介正在准备中。当前显示原文说明。

Sma1lboy/rove1782026年10月22日 更新

在 rove 仓库内跑 auto-motion——把 transcription.srt 拆成多段 MG 动画镜头并拼接成竖屏视频(storyboard 分镜 + theme.md 全片主题 + 逐镜头 claude -p 子进程 + ffmpeg 拼接)。本 skill 是薄 wrapper:解析 auto-motion 模板根,继承 rove 品牌 theme,执行逻辑以 auto-motion 仓库的 canonical SKILL.md 为准。当用户说"跑 auto-motion"、"把这个字幕稿/口播稿做成视频"、"给 rove 做一条 MG 宣传片"时使用。

中文简介正在准备中。当前显示原文说明。

Sma1lboy/rove1782026年10月22日 更新

Find what a change could break somewhere else before it ships, beyond the diff, and prove the one fact it's safe because of by running real code instead of writing it up. Use for 'blast radius of X', 'what could this break', or reviewing a small diff you don't trust.

中文简介正在准备中。当前显示原文说明。

Sma1lboy/rove1782026年10月22日 更新

Draft Rove release notes as Changesets. Writes user-facing entries as `.changeset/*.md` files for `@sma1lboy/rove` (consumed into `packages/rove/CHANGELOG.md` at release time). Use when the user asks for "changelog", "release notes", "what changed", "add a changeset", or before cutting a version. Enforces Rove's no-soft-wrap rule so GitHub release pages render flowing text.

中文简介正在准备中。当前显示原文说明。

Sma1lboy/rove1782026年10月22日 更新

Design an auditable playbook when no narrower one fits: a large migration, an ambitious multi-part change, or work a human reviews after stepping away. Scales rigor to the task, runs a hypothesis loop, and logs decisions via show-me-your-work. Use for /figure-it-out, 'figure it out', a large migration, or when no narrower playbook applies.

中文简介正在准备中。当前显示原文说明。

Sma1lboy/rove1782026年10月22日 更新

查看 Sma1lboy 的全部技能

报告此技能的问题