Skillnote
/install skillnote
Quick orientation
You are running with the SkillNote skill loaded. Your responsibilities, in order:
- Setup (Steps 1-6 below) — one-time per machine; ~30s if backend is already running, ~3 min if you need to install it
- Pick + apply the right skills before responding to user tasks
- Log + rate what worked after the task is done
Setup is silent on every load after the first. If ~/.openclaw/skills/skillnote/config.json already has a working host and the AGENTS.md graft is in place, skip Steps 1-5 and stay quiet.
How this skill got onto disk (recovery info)
This SKILL.md lives at ~/.openclaw/skills/skillnote/ and arrived via one of:
- clawhub (recommended):
clawhub install skillnote - curl bundle installer (works against any reachable SkillNote backend):
Ifcurl -sf $SKILLNOTE_BASE_URL/setup/agent | bash -s -- --agent openclaw$SKILLNOTE_BASE_URLisn't set, default tohttp://localhost:8082. - Manual ZIP — download
\x3Chost>/v1/openclaw-bundle.zipand unzip into~/.openclaw/skills/. Air-gapped only.
If you find critical files missing from ~/.openclaw/skills/skillnote/ (e.g., sync.sh, log-watcher.py, install-backend.sh), use method 2 to reinstall — don't try to reconstruct missing files.
Setup
Step 1 — Resolve the backend URL
Layered lookup; stop at first match:
$SKILLNOTE_BASE_URLenv var~/.openclaw/skillnote/config.json→host~/.openclaw/skills/skillnote/config.json→host- Default:
http://localhost:8082
Reachability check: GET \x3Chost>/v1/skills?limit=1.
- Reachable → skip to Step 3 (persist).
- Unreachable AND host ==
http://localhost:8082→ likely no backend on this machine yet. Continue to Step 2. - Unreachable AND host is custom → user pointed at a specific server; do NOT auto-install. Tell the user it's down and stop:
SkillNote at
\x3Chost>isn't reachable. Either the server is down, or the URL is wrong. I'll retry next session.
Step 2 — Stand up the backend (only if Step 1 routed here)
Tell the user what's about to happen, then ask once:
SkillNote backend isn't running. I can install it now (clones the repo and runs
docker compose up; ~3 min for the first build). Proceed? [Y/n]
On n — output the manual instructions and STOP setup:
No problem. When you're ready, run one of:
bash ~/.openclaw/skills/skillnote/install-backend.sh # or git clone https://github.com/luna-prompts/skillnote.git && cd skillnote && ./install.shThen restart this session.
On Y — run this single command and stream stdout/stderr back to the user so they see Docker build progress (don't background it; don't silence it; let them see what's happening for the ~3 min build):
bash ~/.openclaw/skills/skillnote/install-backend.sh
The script handles: prereq check (git, curl, docker-or-podman), clone to $HOME/skillnote, ./install.sh (Docker build + compose up), poll /health until ready (60s timeout), print URLs.
If install-backend.sh is missing
Curl the canonical version from GitHub raw:
curl -sfL https://raw.githubusercontent.com/luna-prompts/skillnote/master/plugin-openclaw/skillnote/install-backend.sh | bash
If even that fails (no network), instruct the user to clone the repo manually:
git clone https://github.com/luna-prompts/skillnote.git && cd skillnote && ./install.sh
Customizing
Set env vars BEFORE invoking install-backend.sh:
| Need | Command |
|---|---|
| Different install dir | SKILLNOTE_INSTALL_DIR=$HOME/work/skillnote bash ~/.openclaw/skills/skillnote/install-backend.sh |
Port 8082 busy |
SKILLNOTE_API_PORT=8182 bash ~/.openclaw/skills/skillnote/install-backend.sh |
Port 3000 busy |
SKILLNOTE_WEB_PORT=3001 bash ~/.openclaw/skills/skillnote/install-backend.sh |
If install-backend.sh exits non-zero
Capture the last 20 lines of output and show them verbatim. Common patterns:
| Error pattern | What to suggest |
|---|---|
address already in use / port is already allocated |
Set a different port via env var (see customization) |
Cannot connect to the Docker daemon |
Ask the user to start Docker Desktop / Podman machine |
MISSING: \x3Ctool> |
The script names the missing tool + install link; relay it to the user |
| anything else | Show the captured output verbatim; don't try to recover blindly |
After success, the URLs appear (http://localhost:3000, http://localhost:8082). Continue to Step 3.
Step 3 — Persist the resolved host (idempotent)
Strip trailing slashes. Write to ~/.openclaw/skills/skillnote/config.json:
{
"host": "\x3Cresolved url>",
"user_id": "\x3Csee below>"
}
For user_id: use your real OpenClaw agent name when known (e.g., main, support-bot, dev-helper). It's the identity that surfaces in analytics — multiple agents collapsing into one user_id loses signal. If you genuinely don't know your agent name, use openclaw-main as a fallback only.
Step 4 — First sync (populates skills locally)
chmod +x ~/.openclaw/skills/skillnote/sync.sh && ~/.openclaw/skills/skillnote/sync.sh
Tell the user "Syncing skills from the registry…" — sync usually takes a couple seconds. The script:
- Fetches the catalog (
GET \x3Chost>/v1/skills) - Writes one
~/.openclaw/skills/sn-\x3Cslug>/SKILL.mdper skill (with rating-footer pre-baked) - Spawns the
log-watcher.pydaemon (PID-guarded; won't double-launch) - Appends the
\x3Cskillnote v1>block to~/.openclaw/workspace/AGENTS.md(idempotent; honors{"grafted": false}in config)
If sync.sh exits non-zero: capture the output, surface to the user, stop. Don't retry blindly.
Step 5 — Verify the AGENTS.md graft (sync.sh did it; you just check)
grep -c '\x3Cskillnote v1>' ~/.openclaw/workspace/AGENTS.md
| Result | Action |
|---|---|
1 |
✅ done; continue to Step 6 |
0 |
Re-run sync.sh once. If still 0, surface to user (likely a permissions issue on ~/.openclaw/workspace/). Do NOT graft manually with your file-edit tool — that's sync.sh's job. |
≥2 |
Duplicate marker — tell the user; do not auto-fix |
Honoring an opt-out
If the user told you in this session "don't touch AGENTS.md" or "skip the graft" (and only if they explicitly said so — don't invent the question), write {"grafted": false} to ~/.openclaw/skills/skillnote/config.json BEFORE running sync.sh in Step 4. sync.sh checks that flag and skips the graft.
The block sync.sh appends is the source of truth — don't paraphrase or modify it. If you need to inspect it, read ~/.openclaw/skills/skillnote/sync.sh.
Step 6 — Done
Say once on first setup; never again unless re-installing:
SkillNote connected ✓ Registry at
\x3Chost>. N skills synced to~/.openclaw/skills/sn-*/— I'll pick the relevant ones before each task and log what helped.Ask me "what skills have you been using?" anytime, or visit
\x3Chost>to see analytics in the web UI.
(Replace N with ls ~/.openclaw/skills/ | grep -c "^sn-".)
On every subsequent session: complete silence. Just check the marker is in AGENTS.md; if not, sync.sh re-grafts on next run.
How to pick which skills to apply (do this BEFORE responding to a task)
Before responding to any non-trivial task (anything beyond small talk), you have all synced skills available at ~/.openclaw/skills/sn-*/SKILL.md.
v1 picking method (works well up to ~15-20 skills)
- Read just the frontmatter
descriptionfield of everysn-*/SKILL.md(cheap — ~200 chars each). - Pick at most 3 whose description language overlaps with the task language. Be conservative: 0 is a valid answer.
- Read the full
SKILL.mdof those 1-3 selected skills. - Apply their guidance to the task.
- Hard cap: never load more than 5 sn- SKILL.md files into context for a single task.* If 5+ seem relevant, you've over-matched — re-read the task and tighten.
Edge cases
| Situation | What to do |
|---|---|
| 0 relevant skills | Proceed normally; no usage event needed |
| Two skills give conflicting advice | Apply both lenses; surface the conflict to the user; ask which to follow |
| User explicitly invokes a skill ("use sn-error-handling") | Read just that one; no further picking |
| Past 20 skills, picking accuracy degrades | Bias toward skills with high call_count/avg_rating (visible in \x3Chost>/v1/analytics/top-skills); a future version offloads picking to a server-side resolver |
How to log usage (after task completion)
POST to \x3Chost>/v1/openclaw/usage. Use slugs (the sn-* directory name without the sn- prefix), not UUIDs:
{
"agent_name": "\x3Cyour real agent name>",
"task_summary": "\x3Cparaphrase — never the raw user message>",
"skill_slugs": ["error-handling", "git-commit-convention"],
"outcome": "completed | failed | abandoned | unknown",
"channel": "\x3Csee Channel detection below>"
}
The response includes id — capture it. You'll need it as linked_usage_id when you also rate the skill.
Picking the right outcome honestly
This field is the only signal we have for whether skills are actually working. Be honest — defaulting everything to completed makes the registry useless.
completed— skill applied AND produced the intended resultfailed— skill applied BUT didn't help (wrong result, error, or trigger criteria didn't match the actual situation). Diagnose intask_summary: "Tried sn-X for Y but its trigger criteria didn't match the actual exception type."abandoned— considered the skill, started applying, didn't finish (timeout, scope changed mid-task, switched skills partway through)unknown— only when truly uncertain (no clear signal whether the user accepted the answer). Bias towardcompletedorfailed—unknownis uninformative
Channel detection
Infer channel from where the task came in. Use these slug-style values (lowercase, slash-separated):
| Source | channel value |
|---|---|
| Slack DM | slack/dm/\x3Cuser_handle> |
| Slack channel | slack/\x3Cchannel_name> |
| Discord | discord/\x3Cchannel_name> |
| iMessage | imessage |
| Email reply | email |
| Webhook trigger | webhook |
openclaw agent CLI |
cli |
| Cron-triggered task | cron/\x3Cjob_name> |
| Web UI / control panel | webchat |
| Unknown / mixed | unknown |
Channel matters for analytics breakdown — the team will eventually want to ask "which skills do I use most in #support vs #eng?".
Don't post if
- No skill was applied (don't post empty events — they pollute analytics)
- Task was pure small talk ("hi", "thanks")
How to reflect on a skill (rate or comment)
POST to \x3Chost>/v1/skills/\x3Cslug>/comments. Always include linked_usage_id (the id from the /v1/openclaw/usage POST you just made for this same task) so the comment correlates to specific work:
{
"author": "\x3Cyour real agent name>",
"author_type": "agent",
"comment_type": "agent_success_note",
"rating": 5,
"linked_usage_id": "\x3Cid from /v1/openclaw/usage response>",
"body": "\x3Cone paragraph — no user info, no raw messages>"
}
If you genuinely don't have a linked_usage_id, omit the field — never invent one.
Picking the right comment_type
| Type | When to use | Rating |
|---|---|---|
agent_success_note |
Skill clearly helped — produced the right result, saved time | 4-5 |
agent_issue |
Skill applied but produced wrong result, error, or hurt | 1-2 |
agent_observation |
Neutral note: skill behaves a certain way; worth knowing for future picks | omit rating |
agent_patch_suggestion |
You have a concrete fix to suggest (include the suggested change in body) |
2-3 typically |
agent_deprecation_warning |
Skill references things that don't exist anymore, trigger criteria misleading, or hasn't been useful in many tasks | 1-2 |
Self-restraint
- At most one comment per skill per day (the backend doesn't enforce this; you do)
- Only comment when you have specific signal — vague "nice skill" or "didn't really use it" comments add noise
How to show activity (when user asks)
When the user asks "what skills have you been using?" or similar, fetch:
GET \x3Chost>/v1/me/activity?period=7d
Render in natural prose: top skills by usage, ratings you left, any patterns you noticed. Don't dump raw JSON — summarize.
Daily self-update check
sync.sh does this automatically every 24 hours (tracked via ~/.openclaw/skills/skillnote/.last-version-check):
GET \x3Chost>/v1/openclaw-skill→ returns{version, skill}- Compare to
~/.openclaw/skills/skillnote/VERSION - If newer:
- If
clawhubis on PATH:clawhub install skillnote@\x3Cver> - Otherwise: overwrite
SKILL.md+VERSIONinline from the response
- If
You don't need to do anything for self-updates. If a notification appears that the skill was updated, prefer to re-read SKILL.md before continuing — the steps may have changed.
Uninstall
When the user says "remove skillnote" or "uninstall skillnote":
- Stop the daemon:
PID=$(cat ~/.openclaw/skills/skillnote/.log-watcher.pid 2>/dev/null) && kill "$PID" 2>/dev/null - Remove the AGENTS.md graft (the
\x3Cskillnote v1>...\x3C/skillnote v1>block) from~/.openclaw/workspace/AGENTS.md. - Remove the skill files:
- If
clawhubis on PATH:clawhub uninstall skillnote - Otherwise:
rm -rf ~/.openclaw/skills/skillnote
- If
- Optional (frees disk; loses synced skills):
rm -rf ~/.openclaw/skills/sn-* - Confirm to the user:
SkillNote removed. AGENTS.md restored, daemon stopped, skill files deleted.
The SkillNote backend itself stays running — it's separate from this skill. To stop it too: cd \x3Cskillnote-repo> && docker compose down.
Hard rules
- Use
skill_slugs, notskill_ids. Synced skills don't haveid:in their frontmatter; the slug is thesn-*directory name without thesn-prefix. - Never log raw user messages or PII. Always paraphrase task summaries.
- Never log secrets, tokens, or credentials — even if the user pasted them.
- Don't post usage events when no skill was applied. Empty events pollute analytics.
- Don't comment more than once per skill per day (self-enforced — backend doesn't check).
- Don't mention SkillNote on every reply. Only when relevant or when the user asks about activity.
- Don't mutate
config.jsonafter setup. If the host needs to change, ask the user to say "re-setup skillnote" so they consent explicitly. - Don't graft AGENTS.md yourself. sync.sh handles it. If you find the marker missing, re-run sync.sh — don't use your file-edit tool.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install skillnote - 安装完成后,直接呼叫该 Skill 的名称或使用
/skillnote触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Skillnote 是什么?
Self-hosted skill registry for OpenClaw. Stores procedures your team writes (name, description, body), syncs them to disk before each task, and collects whic... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 22 次。
如何安装 Skillnote?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install skillnote」即可一键安装,无需额外配置。
Skillnote 是免费的吗?
是的,Skillnote 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Skillnote 支持哪些平台?
Skillnote 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(macos, linux)。
谁开发了 Skillnote?
由 LatentLoop07(@latentloop07)开发并维护,当前版本 v0.4.0。