canon (Claude-Code-Plugin-Marktplatz für Code-Standards)
GitHubcanon (von „canonical", regelkonform) ist ein Claude-Code-Plugin-Marktplatz mit 11 einzeln installierbaren Plugins. Neun lockstep-*-Framework-Plugins decken Astro, Vue 3.5, Nuxt UI v4, Tailwind v4, TypeScript, Go Echo v5, sqlc, Fastify v5 und PostgreSQL ab, aktivieren sich je nach Dateityp automatisch und binden Claude an die offiziellen, aktuellen Konventionen jedes Frameworks; flow bietet die beiden Workflow-Befehle /flow:go und /flow:cm; plain-chinese ist ein Ausgabestil, der Claude in klarem Chinesisch ohne Fachjargon schreiben lässt. Installiere nur die Plugins, die der Stack deines Projekts braucht.
Hilfe & Support: Dieses Projekt ist vollständig Open Source und kostenlos. Sie können es selbst herunterladen und bereitstellen. Für individuelle Entwicklung oder professionellen technischen Support können Sie mich gerne kontaktieren.
canon
让 Claude Code 守规范。一个 marketplace 下 11 个插件:
lockstep-*系列管代码写法(锁定各框架官方最新稳定版的做法),flow管工作流命令,plain-chinese管中文表达(平实大白话、严禁互联网黑话和 AI 腔)。
Languages: 简体中文 · 繁體中文 · English · 日本語
这是什么
一个 Claude Code 插件市场,名字叫 canon(取 canonical,"按正典/规范做法来")。下面 11 个独立插件,按职责分三类,各装各的:
| 插件 | 管什么 | 怎么生效 |
|---|---|---|
lockstep-*(9 个框架插件) |
代码写法:一框架一插件,强制 Astro / Vue 3.5 / Nuxt UI v4 / Tailwind v4 / TypeScript / Echo v5 / sqlc / Fastify v5 / PostgreSQL 用各自官方最新稳定版的推荐做法,禁用已废弃写法 | 处理匹配 paths 的文件时自动激活 |
flow |
工作流命令 go/cm/e2e/pin/vet/msg/oss |
前四个手动调用 /flow:go、/flow:cm、/flow:e2e、/flow:pin;vet 由 cm 在提交前自动调;msg、oss 是规则参考,相关时自动加载 |
plain-chinese |
中文表达:强制平实中文,禁互联网黑话、职场黑话和 AI 腔,保留真正的专业术语 | 一个 output-style,启用后一直生效 |
为什么框架拆成 9 个插件、而不是打包成一个:插件是最小安装单元,装一个就把它的 skill 全带来、装的人挑不了。拆开后才能按项目技术栈单独装——写 Astro 站的项目只装 lockstep-astro,用不到的后端框架一个 token 不占(每个 skill 的描述会占 Claude 的 skill 列表预算)。
lockstep-*(代码规范)
解决什么问题
写代码反复遇到这种情形:Tailwind、Nuxt UI、Vue、TypeScript、Echo、Fastify、PostgreSQL 官方明明给了最直接的写法,AI 在长会话之后转头就忘,自己造 CSS、绕过官方 API、写上一代旧语法。每次发现都得手动纠正一遍。CLAUDE.md、全局 memory 这种软约束在长会话后压不住。
lockstep-* 用 Claude Code 官方的 skill 机制 解决:每个 skill 是一份 markdown 规则文档,用 paths 按文件类型限定何时激活——处理 .vue 文件时 Vue / Nuxt UI 规则进 context,处理 .css 时 Tailwind 规则进 context,处理 .go 时 Echo / sqlc 规则进 context,处理 migrations/*.sql 时 PostgreSQL 表设计与迁移安全规则进 context。规则只在处理匹配的文件时才加载,不长期占用 context;长会话自动压缩后,每个 skill 只保留前 5,000 token,所有 skill 共用 25,000 token 预算,调用较早的可能被整个丢掉。
安装
# 1. 注册 marketplace
/plugin marketplace add zhaojiannet/canon
# 2. 按项目技术栈装需要的框架插件(示例:Vue 前端)
/plugin install lockstep-vue@canon
/plugin install lockstep-nuxt-ui@canon
/plugin install lockstep-tailwind@canon
/plugin install lockstep-typescript@canon
# 3. 重新加载使其生效
/reload-plugins
按场景的常见组合:
| 场景 | 装哪些 |
|---|---|
| Astro 企业站 | lockstep-astro + lockstep-tailwind + lockstep-typescript |
| Vue 前端 | lockstep-vue + lockstep-nuxt-ui + lockstep-tailwind + lockstep-typescript |
| Go 后端 | lockstep-echo + lockstep-sqlc + lockstep-postgres |
| Node 后端 | lockstep-fastify + lockstep-typescript + lockstep-postgres |
| 通用(建议都装) | flow + plain-chinese |
验证:输入 /plugin 进 Installed 标签,能看到装的 lockstep-*。再用 What skills are available? 让 Claude 列出 skill。
包含的框架插件
| 插件 | 触发 paths | 功能 | 自动调用名 |
|---|---|---|---|
lockstep-astro |
**/*.astro |
Astro 7 静态优先:默认 zero JS、client:visible/client:idle 优于 client:load、server:defer 替代全页 SSR、Content Collections 替代 Astro.glob |
/lockstep-astro:astro |
lockstep-vue |
**/*.vue |
Vue 3.5+ SFC:强制 <script setup> + 类型化 defineProps/defineEmits + defineModel + useTemplateRef;禁 Options API / mixins |
/lockstep-vue:vue |
lockstep-nuxt-ui |
**/*.vue |
强制用 Nuxt UI v4 组件(U 前缀)而非手写 raw <button> / <input> / <dialog> |
/lockstep-nuxt-ui:nuxt-ui |
lockstep-tailwind |
.vue/.astro/.html/.tsx/.jsx/.css |
Tailwind v4 utility-first:禁 <style> 块 / 旧 utility;强制 oklch() / 圆括号语法 / v4 语法 |
/lockstep-tailwind:tailwind |
lockstep-typescript |
.ts/.tsx |
TypeScript 7 strict:strict 在 7 里是默认值、不许关;unknown + 收窄替代 any,const 对象替代 enum,ES module 替代 namespace;7 移除的 baseUrl / target es5 / outFile 一律改写 |
/lockstep-typescript:typescript |
lockstep-echo |
**/*.go |
Echo v5 错误处理:HTTPError + 集中 HTTPErrorHandler、errors.Is/errors.As、%w wrap、graceful shutdown |
/lockstep-echo:echo |
lockstep-sqlc |
queries/*.sql, sqlc.yaml |
sqlc codegen:SQL 为源、走生成的 Querier、禁手写 database/sql |
/lockstep-sqlc:sqlc |
lockstep-fastify |
.ts/.tsx/.js/.mjs(不区分是否 import fastify) |
Fastify v5:封装式 plugin、fastify-plugin (fp) 跨作用域、JSON schema 验证替代手写 |
/lockstep-fastify:fastify |
lockstep-postgres |
migrations/、schema/、migrate/、sqitch/ 下 *.sql |
PostgreSQL 表设计 + 迁移安全(合并):snake_case + BIGSERIAL/UUID + timestamptz + 外键 ON DELETE;事务包裹 + NOT NULL 加列分三步 + CREATE INDEX CONCURRENTLY + 破坏性操作先审批 |
/lockstep-postgres:postgres |
激活方式:
- 自动:处理匹配
paths的文件时 Claude 自动加载对应 skill 进 context(日常主要靠这个,几乎不用手敲命令) - 手动:
/lockstep-<框架>:<skill>,例如/lockstep-echo:echo
工作流命令:flow(手动触发)
flow 插件含四个手动触发的工作流命令,设了 disable-model-invocation: true:只在你输入 / 时手动调用,Claude 不会自动触发,description 也不进 context、只当 / 菜单里的标签。第五个 vet 是提交前的检查器,Claude 可以自己调,cm 在每个 commit 前都会调它。msg 和 oss 是规则参考:前者是 commit message 的写法,后者是调研开源项目的门槛,Claude 判断相关时自动调,也可以手动敲。
/plugin install flow@canon
/reload-plugins
| 命令 | 做什么 | 调用 |
|---|---|---|
go |
一套贯穿任务的工作纪律:开始干活先查官方最新文档再动手、选最佳方案不选临时做法;涉及安全时主动防护、不留已知漏洞;遇到问题不糊弄、不绕过;做错时诚实承认;改了代码先跑 /code-review 修完再报告完成;有遗留时如实交代、不谎报完成 |
/flow:go |
cm |
按规范提交当前改动:代码没跑过 /code-review 先提醒你;默认一个 commit,只有互不相干的两件事才分开;每个 commit 前用 gitleaks 查暂存区的密钥(本机没装就用 docker 镜像),调一次 vet 核对 message;提交完列出结果,未经同意不 push |
/flow:cm |
e2e |
用现有账号和环境给当前项目做全量端到端测试:先读项目出画像(入口、账号、副作用分级、备份恢复、业务口径)→ 出计划等你审 → 按官方 playwright-cli skill 生成 Playwright spec → 每页横切面冒烟 → 独立容器里跑、失败先定性再修(应用 bug 只报不改)→ 出报告。平时改完代码用 /flow:e2e run:按画像里的「改动 → 测试」对照表只跑相关 spec 加全部 @critical 关键测试,run all 才跑全量;登录态还在就跳过重新登录。计划里每条场景带状态,跨会话续做,收尾「待做」和「已生成」必须为 0。被测项目只多一个 e2e/ 目录和一行 .gitignore,宿主机不装任何 Playwright 组件 |
/flow:e2e |
pin |
把一个肉眼难确认的界面 bug(时序、偶发、多步交互)钉住再修:先写 Playwright spec 复现,按复现率决定跑几次 → 缩到最少步骤、列假设 → 按 error-context.md 和 trace 定位 → 改应用代码 → 按对照表只跑相关 spec 和 @critical,不跑全量。spec 留在 e2e/tests/repro/ 作回归。改断言、缺备份命令、连续 3 次修不好时停下问你。容器沿用 e2e 的搭法 |
/flow:pin |
vet |
提交前把关:用 context: fork 在一个看不到对话的子代理里跑,只拿 diff 和 message 草稿逐句核对,标出指不到 diff 的句子、仓库里找不到的编号、讲开发经过的句子、只复述代码的注释、非中文,每条附可直接照抄的改法。只报告不改文件。cm 每个 commit 前自动调;写代码中途也可以直接敲它只查注释 |
/flow:vet |
msg |
commit message 的格式和禁忌:subject 用 <type>(<scope>): <desc>,body 讲 what 和 why 不讲 how,一个 commit 只讲一个问题;禁止品牌名、受众化说教、文学修辞、失败迭代叙事、对话残留、PR 元语言;附对话残留的反例和合格例。写或审 message 时 Claude 自动调,cm 起草时按它写 |
/flow:msg |
oss |
调研、选型、对比开源项目的门槛:star 少于 1k 不进候选;第 2、3 名与第 1 名差距不超 2k 或不低于一半,知名、大厂、官方推荐的例外要写明;star 当场用 gh api 查并附数字;逐个核对冒名、刷 star、安装要跑非官方脚本或索要凭证、混淆代码和来路不明的二进制、一年无提交,命中即剔除并写明原因。要调研、选型、推荐库或工具时 Claude 自动调 |
/flow:oss |
这些是作者的个人工作流命令。
go是通用纪律,谁装都能用;cm的 commit message 格式由msg定义,改msg就能换成自己的提交规范;e2e用官方playwright-cliskill 做规划 / 生成 / 修复(由容器装进项目的e2e/内),运行环境搭法见plugins/flow/skills/e2e/references/runner.md;pin与e2e共用这个容器和references/下的定位、时序参考。
plain-chinese(朴素中文)
做什么
强制 Claude Code 用平实中文,禁互联网黑话与职场黑话(根因、二开、兜底、对齐、抓手、闭环、赋能、沉淀、链路、落地……),同时保留真正的专业术语(解耦、幂等、并发、复用……),不矫枉过正。还专门管 AI 自造腔和口癖(底层逻辑、本质上、"不是 X 而是 Y"拉踩句式、"综上所述"总结腔……)。
核心是一个 output-style。output-style 直接改 Claude Code 的系统提示词,比 CLAUDE.md(用户消息层)约束力更强,是目前唯一能稳定影响 Claude 措辞的官方手段。
需要说清楚:没有任何方法能 100% 杜绝。模型是概率生成文本,提示词约束是"强烈倾向"而非硬过滤。这个插件用的是约束力最强的软办法,能让这类词几乎绝迹,但偶尔仍可能漏一两个。
安装
# marketplace 已注册的话跳过这步
/plugin marketplace add zhaojiannet/canon
# 装朴素中文插件
/plugin install plain-chinese@canon
/reload-plugins
启用
这个插件的 output-style 设了 force-for-plugin: true,装完启用就自动生效,不用手动选。它会覆盖你当前的 output-style 设置。
会话中途切换 output-style,从下一条消息起就按新风格回复(v2.1.251 之前要
/clear或开新会话才生效)。改了插件里的 output-style 文件,要执行/reload-plugins或重启 Claude Code。
想临时关掉:在 /plugin 里禁用 plain-chinese。想自己手动管理 output-style(而不是自动强制):把 plugins/plain-chinese/output-styles/plain-chinese.md 里的 force-for-plugin: true 删掉,改用 /config → Output style 手动选。
注意:
/output-style命令曾在 Claude Code v2.1.73 弃用、v2.1.91 移除,v2.1.269 又加回了/output-style [name],可以列出和切换风格;也可以用/config→ Output style。
从旧版迁移
从 v0.5(canon / canon-chinese 两个合并插件)
v0.5 把框架 skill 全打包在 canon 一个插件里。v0.6 拆成 lockstep-* 系列(一框架一插件,按场景单独装)、工作流独立为 flow、中文改名 plain-chinese。
# 1. 刷新 marketplace
/plugin marketplace update canon
# 2. 卸掉旧的合并插件
/plugin uninstall canon@canon
/plugin uninstall canon-chinese@canon
# 3. 按项目技术栈装新插件(见上面"按场景的常见组合")
/plugin install flow@canon
/plugin install plain-chinese@canon
/plugin install lockstep-vue@canon # 按需,装你项目用得上的框架
/reload-plugins
命令名变化:/canon:vue → /lockstep-vue:vue;/canon:go → /flow:go;/canon:cm → /flow:cm。pg-schema 和 pg-migrate 合并成了 lockstep-postgres(一个 postgres skill)。
从更旧的 lockstep-run
这个 repo 更早叫 claude-skills、marketplace 叫 lockstep-run。先 /plugin uninstall lockstep-run@lockstep-run + /plugin marketplace remove lockstep-run,再按上面注册 canon 安装。
How it works
每个 lockstep-* 的 skill 是一份 markdown 规则文档,包含:核心原则、禁用项 + 简短原因、旧 API → 新 API 对照表、表达不出来时报告而非绕过的 STOP 信号、场景化规则、写完自查的 grep 清单。Claude 在处理匹配 paths 的文件时才把对应 SKILL.md 载入 context,按需加载而非长期占用。
plain-chinese 的 output-style 把禁用词对照表、AI 口癖清单、专业术语白名单、自检清单加进系统提示,每轮回复都生效。
Development
本地加载(开发/调试用,不需安装)。每个插件是独立目录,按需 --plugin-dir 多个:
cd <你的项目>
claude --plugin-dir ~/Cores/Projects/canon/plugins/lockstep-vue \
--plugin-dir ~/Cores/Projects/canon/plugins/flow \
--plugin-dir ~/Cores/Projects/canon/plugins/plain-chinese
改完 SKILL.md 在当前会话里立即生效;改了 output-style、hooks 等其他组件,要在已运行的 Claude Code 内执行 /reload-plugins。校验结构:claude plugin validate .(校验 marketplace.json)+ 对每个插件 claude plugin validate ./plugins/<插件>(校验 plugin.json 和 skill frontmatter)。
注意:skill 的
description里不要出现": "(冒号+空格),YAML 会把它当成嵌套映射、导致 frontmatter 整段解析失败。
官方参考:Skills / Plugins / Plugin Marketplaces / Output styles。
名字由来
canon 取自 canonical——"按正典、规范的做法来"。代码按官方规范写,中文按平实规范说。
框架系列的前缀 lockstep("齐步走")取意"跟官方版本步调一致"。这个名字还有段来历:改名时想起我的好兄弟薛贵文(跑哥)。大学军训,教官一脸严肃让他带全系喊口号,他连续 N 次把"齐步走"喊成"齐步跑",从此成为传说中的跑哥。lockstep 一度要退休,最后留下来做了框架插件的前缀。
License
MIT