canon(Claude Code コード規約プラグインマーケット)
GitHubcanon(canonical=規範に沿う、に由来)は 11 個の個別インストール可能なプラグインを持つ Claude Code プラグインマーケット。9 個の lockstep-* フレームワークプラグインは Astro・Vue 3.5・Nuxt UI v4・Tailwind v4・TypeScript・Go Echo v5・sqlc・Fastify v5・PostgreSQL をカバーし、ファイルタイプごとに自動起動して各フレームワーク公式の最新の書き方に固定する。flow は /flow:go と /flow:cm の 2 つのワークフローコマンドを提供し、plain-chinese は Claude に平易な中国語で書かせる出力スタイル。プロジェクトの技術スタックに必要なプラグインだけを入れる。
ヘルプ&サポート:本プロジェクトは完全にオープンソースで無料です。ダウンロードしてご自身でデプロイできます。カスタム開発やプロフェッショナルな技術サポートが必要な場合は、お問い合わせください。
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