Cangjie Skill
这个技能的目标不是把回答写成仓颉语法百科,而是帮助模型用尽量少的 token,稳定地产出更接近官方文档约束的仓颉代码、工程结构和分析结论。
默认优化目标:
- 先给正确结构,再给深入解释。
- 先走最短文档路径,再决定是否继续下钻。
- 优先减少臆造 API、错误包结构和无效长篇输出。
- 遇到大型工程时,先做结构化盘点,再做设计建议。
何时使用
当用户出现以下任一意图时,优先使用本技能:
- 生成仓颉函数、类型、模块、类、接口、泛型、模式匹配、异常处理代码
- 把其他语言、伪代码或设计思路改写成仓颉
- 生成
cjpm项目、workspace、多模块目录结构和cjpm.toml - 修复仓颉编译错误、入口函数错误、包声明错误、依赖配置错误
- 设计仓颉包边界、模块分层、本地
path依赖、组织名命名方案 - 分析真实仓颉仓库的
src/层次、package.package-configuration、workspace、output-type - 回答
cjpm、cjfmt、cjdb、LSP、交叉编译、中心仓依赖等工具链问题 - 涉及
stdx、宏、FFI、并发、网络、多平台等专题
知识源优先级
按下面顺序取知识,不要跳级:
- 工作区原始文档
references/dev-guide/source_zh_cn/references/tools/source_zh_cn/release-notes/
- 工作区英文原文
references/dev-guide/source_en/references/tools/source_en/
- 本技能的索引与摘要
references/pattern-index.mdreferences/syntax-essentials.mdreferences/path-index.mdreferences/doc-map.mdreferences/codegen-guidelines.mdreferences/version-notes.mdreferences/online-fallback.md
- bundled 原文
references/dev-guide/references/tools/
- 官方在线文档与中心仓
https://cangjie-lang.cn/docshttps://docs.cangjie-lang.cn/https://pkg.cangjie-lang.cn/index
- 模型记忆
原则:
- 常见任务先读 pattern,不要一上来扫描整份文档。
- 中文够用时不要切英文;只有细节缺失或术语不稳时才回退英文。
release-notes只在版本差异、中心仓、组织名、Common/Specific、交叉编译、工具行为变化等问题上再读。- 本地
references/足够时,不要立刻联网。 - 只有本地资料未命中、信息明显缺失、或用户明确要求查库时,才回退到官方在线文档和中心仓。
- 联网时优先只查官方域名,不要把第三方博客当主依据。
依赖工具
| 工具 | 用途 | 必需 |
|---|---|---|
WebSearch |
搜索官方文档页与中心仓条目 | 是 |
WebFetch |
获取命中页面的深度内容 | 是 |
Bash |
本地 rg 搜索、脚本执行与必要的辅助抓取 |
是 |
任务分流
先把请求归到最接近的一类,再读取最少的文档。
1. 语法示例 / 小函数 / 小算法
适用:
- 单个函数
- 单文件语法示例
struct/enum/class/match/ 泛型骨架
默认读取:
references/syntax-essentials.md- 必要时再读 1 个相关原文文件
默认交付:
- 单个
.cj文件 cjc编译命令
2. 单模块 cjpm 项目
适用:
- 命令行参数
- 最小项目骨架
- 多文件但仍是单模块
默认读取:
references/patterns/cjpm-project-minimal.md- 必要时再读
references/dev-guide/source_zh_cn/package/entry.mdreferences/tools/source_zh_cn/cmd-tools/cjpm_manual.md
默认交付:
- 目录结构
cjpm.tomlsrc/main.cj- 其他关键源码
cjpm build/cjpm run
3. workspace / 包设计 / 多模块工程
适用:
app依赖core- 本地
path依赖 - 工作空间根配置
- 组织名设计
默认读取:
references/patterns/package-workspace-design.md- 必要时再读
references/tools/source_zh_cn/cmd-tools/cjpm_manual.mdreferences/dev-guide/source_zh_cn/package/
默认交付:
- workspace 目录结构
- 根
cjpm.toml - 子模块
cjpm.toml - 关键包声明和导入示例
- 包职责说明
4. 编译错误 / 结构错误 / 配置错误修复
适用:
main(): Stringpackage/import错误cjpm.toml字段冲突path/git/version配置错误
默认读取:
- 用户给出的代码或配置
- 若属于依赖来源、组织名、workspace 约束,先读
references/patterns/version-config-fix.md - 再读 1 个相关工具或包文档
- 如果明显涉及版本变化,再读
references/version-notes.md
默认交付:
- 先指出最可能的结构性错误
- 再给修正后的代码或配置
- 最后给验证命令
5. 并发 / 网络 / 宏 / FFI / 多平台
适用:
spawnstdx.net.httpmacro packageforeign func- 交叉编译 / Android / iOS
默认读取:
- 对应 pattern
- 必要时再读 1 到 2 个原文文件
- 若涉及工具参数或版本行为,再读工具文档或 release notes
默认交付:
- 最小可运行示例优先
- 明确写出依赖前提、编译顺序和风险点
6. 大型真实仓库分析
适用:
- 用户给出真实仓库路径
- 需要分析分层、模块职责、依赖方向
- 需要新增一个模块或包
默认读取顺序:
- 根
cjpm.toml src/一级和二级目录树- 只打开少量代表性文件:
- 顶层
pkg.cj - 入口
main.cj - 用户点名的文件
- 顶层
- 若需要再看 1 到 3 个具体源码文件
工具选择:
- 目录树与精确文件优先用
Glob/Read/Grep风格工具 - 只有这些工具不够时才退回 shell
- 不要为了简单的目录枚举先用
Bash ls/find
默认交付:
- 工程概览
- 模块分层
- 依赖方向
- 库模块 / 动态模块 / 可执行模块区分
- 新模块建议
- 配置片段和源码骨架
如果用户明确要求“直接基于这个真实仓库生成一个新模块/新文件”,先读:
references/patterns/existing-large-repo-module-codegen.md- 根
cjpm.toml - 目标层目录树
- 1 到 3 个相邻现有模块文件
工具选择:
- 先用结构化文件读取工具获取目录树和邻近文件
- 避免为了简单目录查看调用 shell
然后只输出:
- 放置位置
cjpm.toml配置片段- 3 到 6 个关键新文件
- 接入点说明
不要:
- 一上来读大量
.cj文件 - 还没确认真实结构就发明层次
- 先写一大段新代码,再补当前仓库分析
7. 工具链 / 版本差异
适用:
cjpm字段解释cjfmt/cjdb/ LSPversion/ 中心仓 / 组织名- Common/Specific
TrustALL
默认读取:
- 相关工具手册的最小片段
references/version-notes.md
默认交付:
- 先说现在的约束
- 再说版本差异
- 最后给修正配置或命令
8. 在线文档回退 / 中心仓搜索
适用:
- 本地
references/未命中 - 本地资料缺少某个 API、工具参数或新版本细节
- 需要搜索中心仓里是否已有相关仓颉库
默认读取:
- 先看
references/online-fallback.md - 优先使用工具:
WebSearchWebFetch- 必要时
Bash
- 再查官方在线文档:
cangjie-lang.cn/docsdocs.cangjie-lang.cn
- 若是库/依赖问题,再查:
pkg.cangjie-lang.cn/index
默认交付:
- 先说明“本地资料未命中,改查官方在线资料”
- 再给官方文档或中心仓命中线索
- 最后给保守建议,不把在线搜索结果包装成绝对确定的 API 承诺
Token 预算
除非用户明确要求深度分析,否则遵守下面的读文档预算:
- 小语法题:最多 1 个 pattern 或 1 个语法速记文件,必要时再加 1 个原文文件
- 单模块项目:最多 1 个 pattern + 1 个包/工具文件
- workspace 设计:最多 1 个 pattern + 1 个
cjpm_manual片段 + 1 个包文档 - 配置修复 / 版本差异:最多 1 个 pattern + 1 个工具文档片段 + 1 个 release note
- 高级专题:最多 1 个 pattern + 1 到 2 个原文文件
- 大型仓库分析:根
cjpm.toml+src目录树 + 最多 6 个代表性文件 - 大仓内直接模块生成:1 个 codegen pattern + 根配置 + 目标层目录树 + 最多 3 个相邻模块文件
- 版本差异:最多 1 个 release note + 1 个工具文档片段
- 在线回退:最多 3 个官方页面 + 最多 5 个中心仓线索
停手规则:
- 已经拿到合法骨架、关键限制和关键命令后,立即回答
- 不要为了“更稳”而顺手全局搜索整个
references/ - 不要在大仓分析里遍历所有
.cj文件 - 不要在配置修复题里顺手展开成长篇教程
- 不要在本地资料已经足够时顺手去全网搜索
- 不要把同一个约束重复解释两次
输出目标
默认输出应满足:
- 先给代码或结构,再给说明。
- 说明只保留关键约束和假设。
- 代码中的解释性注释默认使用中文。
- 不要求落盘时,默认直接在回答中内联关键文件内容。
- 用户要求项目、多文件或 workspace 时,必须给关键文件的完整内容,而不是只给摘要。
项目型回答优先使用这个顺序:
- 目录结构
cjpm.tomlsrc/main.cj- 其他关键源码
- 构建 / 运行 / 调试命令
- 2 到 6 行关键说明
大型仓库分析优先使用这个顺序:
- 工程概览
- 模块分层
- 依赖方向
- 库 / 动态 / 可执行模块区分
- 新模块建议
- 配置片段
高优先级约束
入口与包结构
- 程序入口必须是顶层
main main参数只用无参或Array<String>main返回类型只用Unit或整数类型cjpm项目里源码默认放src/- 项目示例默认显式写
package - workspace 根
cjpm.toml里不要同时出现[package]和[workspace]
包设计与多模块
- 入口
main只放在可执行模块 - 可复用逻辑放到独立模块
public只暴露跨模块必需的声明- 本地多模块关系优先用
path依赖表达 - 若配置了
organization,包声明和导入要使用org::pkg形式 - workspace 成员即使同在一个根目录下,只要模块源码互相
import,也要显式声明[dependencies],除非你明确把公共依赖配在根 workspace
工具链与版本
- 若出现
only one of 'git' or 'path' or 'version' fields can exist,优先想到中心仓version字段与本地/远程依赖互斥 - 若用户问组织名、Common/Specific、中心仓或交叉编译,主动查看
references/version-notes.md - 若用户没有给具体版本,默认按当前工作区文档主线回答,并标注“该点可能受版本影响”
- 区分
cjpm.toml的output-type与cjc --output-type - 在
cjpm.toml里优先使用static / dynamic / executable - 不要把
cjc命令行里的staticlib / dylib直接搬进cjpm.toml
stdx
stdx.net.*、stdx.log.*等能力不要当作基础 SDK 必定内置- 要提醒用户先下载对应软件包,并在
cjpm.toml中配置依赖
宏
- 宏定义和宏调用不要放在同一包
- 宏定义使用
public - 先编译宏包,再通过
--import-path编译调用方 - 最小宏示例优先给分包结构,不要一开始展开成复杂工程
FFI
foreign只声明,不实现- 外部调用放在
unsafe块中 - 不使用命名参数和默认值
- 对类型映射没把握时,不要臆造复杂签名
自检清单
回答前快速自检:
- 我是否选对了单文件 /
cjpm/ workspace / 大仓分析形态? - 我是否只读了最少、最相关的文档?
- 我是否明确说明了
stdx、宏、FFI、版本差异等前提? - 我是否给了关键文件完整内容和验证命令?
- 我是否把不确定的 API 标成“需按本地 SDK 核对”?
- 如果是大仓分析,我是否先基于真实目录和根配置总结,再给新增模块建议?
参考资料
references/pattern-index.mdreferences/syntax-essentials.mdreferences/path-index.mdreferences/doc-map.mdreferences/codegen-guidelines.mdreferences/version-notes.mdreferences/online-fallback.mdreferences/patterns/
只有任务确实涉及该主题时才继续往下读,避免把仓颉 skill 变成高 token 的“大而全提示词”。