如何为 Jan Agent 编写 SKILL.md 可复用技能【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/jan如果你在 Jan Agent 里反复粘贴同一段流程说明——比如怎么打 release怎么加一条 migration新 endpoint 应该怎么接线——可以把这类固定流程写成一个skillagent 在任务需要时才加载的一段书面 procedure。这篇文章说明如何在一个项目里写好一个SKILL.md、决定由谁来触发它、在agent.toml里控制它是否生效并在控制台里验证它能被调用。前提Jan Agent 已安装并配置了至少一个模型 provider它没有本地推理引擎调用远程 provider安装步骤见 QuickStart可用jan --version确认。以下所有操作都在你要工作的项目目录里进行。先确认这件事该写成 skill 而不是别的文档给出的判断标准是——对每个任务都成立的规则写在AGENT.md里只对某一类任务成立的流程才写成 skill。技能文件放在哪里每个项目的 agent 配置都在.jan/agent/目录里skill 位于project是你的项目根目录下面是文档中的目录示例project/.jan/agent/skills/ ├── release/ │ └── SKILL.md # folder form, can bundle scripts alongside └── add-migration.md # flat form两种形态folder formrelease/SKILL.md和flat formadd-migration.md。新写和导入的 skill 都用 folder form因为它可以把辅助脚本或模板放在SKILL.md旁边这个格式与更广泛的 SKILL.md 生态一致别处写好的 skill 一般可以直接用。.jan/agent/目录会在首次使用时自动创建。如果想在不开会话前就先把目录架起来可以在项目根目录运行jan cli agent status --project .编写 SKILL.md一个 skill 就是带name和descriptionfrontmatter 的 markdown 文件。下面是一个文档示例release 流程--- name: release description: Cut and publish a release --- # Cutting a release 1. Confirm main is green in CI. 2. Bump the version in Cargo.toml and package.json - they must match. 3. Update CHANGELOG.md; group by feat/fix/chore. 4. Tag vversion and push the tag. CI does the rest. Never publish from a dirty working tree.示例正文里的vversion是打 tag 时的占位写法执行时替换为实际版本号。文档对正文的要求只有一条但很关键保持简洁——skill 与 prompt 里的其他内容竞争同一份注意力。也可以让 agent 自己写在控制台里直接说Write a skill for how we cut releases, based on what you see in CHANGELOG.md and the CI configagent 用skill_write写文件这个工具需要审批对照之下skill_list和skill_read不需要审批。用skill_write写出的 skill 默认两侧都可调用之后再补 frontmatter 键来关闭某一侧。决定谁来触发两个 frontmatter 键一个 skill 有两个调用侧默认两侧都开着User-invoked你在控制台输入/release或/skill:release或从/弹层里选中它Model-invokedagent 在自己的目录里看到该 skill 的name和description任务匹配时自己用skill_read加载全文并执行。两个 frontmatter 键分别关闭一侧Frontmatter你可以调用agent 可以调用都不写是是user-invocable: false否是disable-model-invocation: true是否两个都写否否私有适合未完成的草稿两侧付出的成本不同model-invoked 的 skill 要在整个会话期间把description放在 agent 的目录里这是它被发现的代价user-invoked 不占上下文但你自己就是索引——不记得它存在就永远不会用。description的写法取决于主要触发方主要靠 agent 触发时把description写成给模型看的指针写明该 skill 适用哪些情况、会启动哪些动作而不是概括文件内容。description与触发场景不匹配skill 就会无法被发现——agent 触发不了它看不见的东西。文档示例user-invocable: false只由 agent 触发--- name: security-review description: Run a security pass before merging: scan dependencies, check for leaked secrets, review auth paths. Use after significant changes. user-invocable: false --- # Security review 1. Scan Cargo.lock for known vulnerabilities. 2. Grep for hardcoded secrets in src/. 3. Review auth and permission changes for bypasses. Report findings as a list, or no issues found.加上disable-model-invocation: true后agent 的目录、skill_list和skill_read都看不到这个 skilldescription的上下文成本为零此时它变成给人看的一句话说明。适合个人手动执行的流程或任何你不想让 agent 自行启动的操作。在 agent.toml 里控制哪些技能生效.jan/agent/agent.toml的[skills]段控制技能的可用性[skills] enabled [] # empty means all skills are enabled inject always # always | relevanceenabled是白名单空列表表示全部启用inject决定 skill 如何到达模型always把每个 skill 的名称和用途都放进 system promptrelevance按任务挑选。注意白名单与 frontmatter 是正交的一个 skill 必须同时被enabled允许、且在某一侧开放才会出现在那一侧。被白名单禁用的 skill 文件仍留在磁盘上可以通过文件工具访问只是不再向任何一侧提供。在控制台验证技能在项目根目录运行jan打开控制台agent 工作在启动它的目录里。验证分两侧。用户侧。在输入框敲/内置命令、插件命令和 skill 出现在同一个弹层里skill 是 magenta 行Tab补全Enter执行。调用有两种形式/release staging—— 短形式名称后的参数传给 skill若名称与内置命令冲突命令优先/skill:release staging—— 显式形式永不与内置命令冲突还能嵌在句子中间例如fix the auth flow /skill:deploy harden周围的文字作为参数传入。两种形式都会把 skill 全文一次性注入对话agent 不需要再去取一次transcript 里显示一行紧凑的[skill:release]而不是正文。如果 skill 目录里在SKILL.md旁边放了文件消息里会宣告该文件夹相对路径因此可以解析。若某个 skill 没有出现在弹层里文档给出的原因只有两种它被[skills].enabled白名单禁用或它标了user-invocable: false后者只能由 agent 触发。模型侧。model-invoked skill 的name加一行用途进入 agent 的 system prompt全文不进入任务匹配时 agent 用skill_read加载全文并照做。验证方式是给 agent 一个与该 skilldescription匹配的任务比如上面security-review的例子一次大改动后请求合并前安全审查agent 运行时每个工具调用都会实时显示观察它是否自行发起了skill_read并按 skill 正文执行。可选分支router skill当 user-invoked skill 多到记不过来时可以写一个 user-invoked 的router skill作为个人索引列出其他 skill 和各自用途让你只记一个名字--- name: go description: What do you want to do? (personal index) disable-model-invocation: true --- # Routers - /go release - cut and publish a release - /go migrate - add a new migration - /go deploy - ship to staging or productionrouter 只能提示、不能代为触发user-invoked skill 的 description 不在 agent 视野内只有你能启动它们。把技能交给团队文档建议把agent.toml、AGENT.md、skills/和subagents/提交进版本库让整个团队得到同一个 agentthreads/是个人会话记录应加入.gitignore。另外两点边界技能与 Jan Desktop 共享——同一份项目文件、同一个目录在一边写好的 skill 另一边也会出现。需要整组技能时可以从 git 仓库或 marketplace 安装为 plugin以plugin:skill形式调用走的是同一套调用机制和[skills].enabled白名单。延伸阅读Skills技能位置、写法与[skills]控制的完整说明Skill Invocation两种触发方式的取舍Project Configagent.toml的完整配置Slash Commands控制台完整命令面【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/jan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考