跳到正文
cccskills
免费在 GitHub 公开

skill-push

Create and push reusable skills to SkillNote when repeated instructions are detected or user says "create a skill", "save this pattern", "push a skill". Guides drafting, review, collection selection, and publishing.

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

查看安装方法

包含的文件(1)

  • SKILL.md4.8 KB

SKILL.md(原文)

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

Skill Push

Create and push reusable skills to the SkillNote registry so all connected agents learn from repeated patterns.

The SkillNote API is at: http://${CLAUDE_PLUGIN_OPTION_HOST:-localhost}:8082

When to Act

  • The user gave the same instruction or convention 2+ times this session
  • The user explicitly asks to create, save, or push a skill
  • Session retrospective — review for saveable patterns before wrapping up

Only suggest for PERSISTENT conventions, not temporary workarounds.

Step 1: Confirm (REQUIRED — never skip)

If the user did not explicitly ask to create a skill, you MUST ask first before doing anything else.

Tell the user what you noticed in one sentence. Be specific. Then ask: "Want me to save this as a SkillNote skill?"

Stop and wait for an explicit yes. Do NOT draft the name/description/content, fetch collections, or present a preview until the user confirms. Unsolicited drafts feel pushy and waste attention.

Skip this step only when the user already said "create a skill for X" / "save this pattern" / "push a skill" in their own words.

Step 2: Draft

Collaborate on three fields:

name: lowercase, hyphens, digits only, max 64 chars. Also used as slug.

description (max 1024 chars — THIS IS THE TRIGGER): Must include what the skill does + explicit trigger keywords. Agents decide to use a skill based solely on its description.

content: Instructions under 200 lines. Start with # Title. Be actionable with examples.

Show the full draft to the user.

Step 3: Check if Exists

import urllib.request, json, os
api = f"http://{os.environ.get('CLAUDE_PLUGIN_OPTION_HOST', 'localhost')}:8082"
try:
    resp = urllib.request.urlopen(f"{api}/v1/skills/<SLUG>")
    print(f"EXISTS: v{json.loads(resp.read()).get('current_version', '?')}")
except urllib.error.HTTPError as e:
    print("NEW" if e.code == 404 else f"ERROR: {e.code}")

Step 4: Choose Collection

import urllib.request, json, os
api = f"http://{os.environ.get('CLAUDE_PLUGIN_OPTION_HOST', 'localhost')}:8082"
try:
    cols = json.loads(urllib.request.urlopen(f"{api}/v1/collections").read())
    for c in cols: print(f"  - {c['name']} ({c['count']} skills)")
    if not cols: print("  (no collections yet)")
except Exception as e: print(f"Could not fetch: {e}")

Every skill must belong to at least one collection. Use AskUserQuestion to let the user pick:

  • Show existing collections from the list above as options
  • Include an option to type a new collection name — names must match ^[a-z0-9_-]+$ (lowercase letters, numbers, hyphens, underscores), 1–128 chars, and cannot contain reserved words anthropic or claude
  • Recommend the collection that best fits the skill's domain
  • A skill cannot be pushed without a collection

If the user types an invalid name, the POST /v1/skills call will return 422 COLLECTION_NAME_INVALID. Surface the error, explain the rule, and ask them to type a valid name before retrying.

Step 5: Final Review

Show complete skill preview. Emphasize: "Does the description have good trigger keywords?" Wait for approval.

Step 6: Push

New skill:

import json, urllib.request, os
api = f"http://{os.environ.get('CLAUDE_PLUGIN_OPTION_HOST', 'localhost')}:8082"
payload = json.dumps({"name": "<NAME>", "slug": "<NAME>", "description": "<DESC>", "content_md": "<CONTENT>", "collections": ["<COL>"]}).encode()
req = urllib.request.Request(f"{api}/v1/skills", data=payload, headers={"Content-Type": "application/json"}, method="POST")
try:
    result = json.loads(urllib.request.urlopen(req).read())
    print(f"Created: {result['slug']} v{result['current_version']}")
except urllib.error.HTTPError as e: print(f"Error: {json.loads(e.read())}")

Existing skill (update):

import json, urllib.request, os
api = f"http://{os.environ.get('CLAUDE_PLUGIN_OPTION_HOST', 'localhost')}:8082"
payload = json.dumps({"name": "<NAME>", "description": "<DESC>", "content_md": "<CONTENT>", "collections": ["<COL>"]}).encode()
req = urllib.request.Request(f"{api}/v1/skills/<SLUG>", data=payload, headers={"Content-Type": "application/json"}, method="PATCH")
try:
    result = json.loads(urllib.request.urlopen(req).read())
    print(f"Updated: {result['slug']} v{result['current_version']}")
except urllib.error.HTTPError as e: print(f"Error: {json.loads(e.read())}")

After success: link to http://${CLAUDE_PLUGIN_OPTION_HOST:-localhost}:3000/skills/<slug> for viewing.

Error Reference

  • 422: Name format wrong or description has XML tags
  • 409: Slug exists — switch to PATCH
  • Connection refused: API unreachable

评价

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

评论

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

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

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

0 / 1000 字

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

同一仓库的技能

Choose which SkillNote skill collection is active for this project. Use when user says "change collection", "switch skills", "use frontend skills", "show collections", or at first session in a new project when recommended.

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

luna-prompts/skillnote662026年9月12日 更新

Choose which SkillNote skill collection is active for this Codex project. Use when the user says "change collection", "switch skills", "use frontend skills", or "show collections".

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

luna-prompts/skillnote662026年9月12日 更新

Rate a SkillNote skill after using it. Called after applying a skill to provide 1-5 rating and outcome.

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

luna-prompts/skillnote662026年9月12日 更新

Rate a SkillNote skill after using it in Codex. Called after applying a skill to record a 1-5 rating and outcome.

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

luna-prompts/skillnote662026年9月12日 更新

Create and push reusable skills to SkillNote from Codex when repeated instructions are detected or the user says "create a skill", "save this pattern", "push a skill". Guides drafting, review, collection selection, and publishing.

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

luna-prompts/skillnote662026年9月12日 更新

skillnote

免费

Show the active SkillNote collection and the skills synced into this project for Codex. Use when the user says "skillnote", "what skills do I have", "show my collection", or wants a SkillNote status/dashboard.

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

luna-prompts/skillnote662026年9月12日 更新

查看 luna-prompts 的全部技能

报告此技能的问题