본문으로 건너뛰기
cccskills
무료GitHub에 공개

skill-push

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(2)

  • SKILL.md4.9 KB
  • agents/openai.yaml250 B

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Skill Push

Create and push reusable skills to the SkillNote registry so every connected agent learns from repeated patterns.

Resolve the host

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').)

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. 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.

Step 2: Draft

Collaborate on three fields:

  • name: lowercase letters, hyphens, digits; max 64 chars. Also the slug.
  • description (max 1024 chars — THIS IS THE TRIGGER): what the skill does + explicit trigger keywords. Agents pick a skill based solely on its description.
  • content: instructions under ~200 lines, starting with # Title, actionable with examples.

Show the full draft to the user.

Step 3: Check if it exists

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}")

Step 4: Choose a collection

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.

Step 5: Final review

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

Step 6: Push

New skill

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())}")

Existing skill (update)

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.

Error reference

  • 422: name format wrong or description has XML tags
  • 409: slug exists — switch to PATCH
  • Connection refused: API unreachable (check ~/.skillnote/host)

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 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 in Codex. Called after applying a skill to record a 1-5 rating and outcome.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

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일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

luna-prompts/skillnote662026년 9월 12일 업데이트

skillnote

무료

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

luna-prompts/skillnote662026년 9월 12일 업데이트

luna-prompts의 스킬 모두 보기

이 스킬의 문제 신고