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.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Create and push reusable skills to the SkillNote registry so every connected agent learns from repeated patterns.
HOST=$(cat ~/.skillnote/host 2>/dev/null | tr -d '[:space:]'); HOST=${HOST:-localhost}
API="http://${HOST}:8082"
(In Python: host = (open(os.path.expanduser('~/.skillnote/host')).read().strip() if os.path.exists(os.path.expanduser('~/.skillnote/host')) else 'localhost').)
Only suggest for PERSISTENT conventions, not temporary workarounds.
If the user did not explicitly ask to create a skill, you MUST ask first. Tell the user what you noticed in one sentence, then ask: "Want me to save this as a SkillNote skill?" Wait for an explicit yes before drafting anything.
Skip this step only when the user already said "create a skill for X" / "save this pattern" / "push a skill" in their own words.
Collaborate on three fields:
# Title, actionable with examples.Show the full draft to the user.
import urllib.request, json, os
host = open(os.path.expanduser('~/.skillnote/host')).read().strip() if os.path.exists(os.path.expanduser('~/.skillnote/host')) else 'localhost'
api = f"http://{host}: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}")
import urllib.request, json, os
host = open(os.path.expanduser('~/.skillnote/host')).read().strip() if os.path.exists(os.path.expanduser('~/.skillnote/host')) else 'localhost'
api = f"http://{host}: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. Present the list above and ask the user (plain text) which collection to use, or to type a new name. New names must match ^[a-z0-9_-]+$, 1–128 chars, and cannot contain anthropic or claude. A skill cannot be pushed without a collection.
Show the complete skill preview. Emphasize: "Does the description have good trigger keywords?" Wait for approval.
import json, urllib.request, os
host = open(os.path.expanduser('~/.skillnote/host')).read().strip() if os.path.exists(os.path.expanduser('~/.skillnote/host')) else 'localhost'
api = f"http://{host}: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())}")
import json, urllib.request, os
host = open(os.path.expanduser('~/.skillnote/host')).read().strip() if os.path.exists(os.path.expanduser('~/.skillnote/host')) else 'localhost'
api = f"http://{host}: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://<host>:3000/skills/<slug> for viewing.
~/.skillnote/host)还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
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.
中文简介正在准备中。当前显示原文说明。
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".
中文简介正在准备中。当前显示原文说明。
Rate a SkillNote skill after using it in Codex. Called after applying a skill to record a 1-5 rating and outcome.
中文简介正在准备中。当前显示原文说明。
Rate a SkillNote skill after using it. Called after applying a skill to provide 1-5 rating and outcome.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。
Self-hosted skill registry for OpenClaw. Stores procedures your team writes (name, description, body), syncs them to disk before each task, and collects which-helped/which-failed signals from the agent so the registry improves over time.
中文简介正在准备中。当前显示原文说明。