From skila
Distill in-context Claude Code session memory into production-ready Anthropic-spec skill packages. Invoke /skila whenever the user types /skila or asks to distill the current session into reusable skills. Presents a multi-select of [NEW@global], [NEW@local], and [UPDATE→<existing>] proposals, runs validate + lint gates, and writes complete skill packages (SKILL.md + scripts/ + references/ + assets/ as needed) to ~/.claude/skills/ or <repo>/.claude/skills/. Also use when: user says 'capture this workflow', 'save this as a skill', or 'add this to my skill library'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skila:skilaThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**skila** is a TypeScript Claude Code plugin that continuously evolves a
skila is a TypeScript Claude Code plugin that continuously evolves a personal skill library from live session memory. It inverts every learner gap identified in v1: no Python, no fire-and-forget distillation, no silent overwrites, and no opaque quality gates.
/skila FiresThe /skila slash command is the primary trigger. Execute this procedure
only when:
/skila, ORIf loaded by any other means, do nothing and return immediately.
Read references/proposal-criteria.md. Apply the three criteria as a
disjunction (any one criterion suffices for promotion):
Extract candidates from the agent's current in-context conversation memory
only — do NOT read ~/.claude/projects/ or any JSONL transcript files.
Run the inventory scanner to discover installed skills:
node skills/skila/scripts/scan.mjs
Capture the JSON list of {name, description, scope, path} objects.
If the script exits non-zero, surface stderr and abort.
For each distilled candidate, classify as [NEW] or [UPDATE→<name>]
using the current inventory (Step 2) and the last 30 tool-trace entries
from the session. Emit [UPDATE→X] only when X exactly matches a name
in the inventory. Apply the Wave-1 soft cap of 8 rows; collapse excess into
[+N more low-confidence candidates omitted].
Row format (see assets/proposal-row.tmpl for exact template):
[NEW@global] <proposed-name> <one-line reason>
[NEW@local] <proposed-name> <one-line reason>
[UPDATE→X] X <one-line reason>
[UPDATE→X@staging] X <one-line reason> (in staging)
For each approved row, draft a SKILL.md using assets/SKILL.md.tmpl.
Run the validator:
node skills/skila/scripts/validate.mjs <draft-path>
If validate exits non-zero, surface all errors and do not write the
skill to ~/.claude/skills/. Fix errors before proceeding.
Run the linter on each approved draft:
node skills/skila/scripts/lint.mjs <draft-path>
Lint warnings are advisory — they never block a proposal, but append
(WARN: <reason>) inline next to the row in the multi-select UI.
Validated skills are written to ~/.claude/skills/.draft-skila/<name>/.
The frontmatter MUST include skila.status: staging. The web UI
(skila serve → port 7777) shows staged skills for review before promotion.
Present the multi-select AskUserQuestion with all rows. For each approved selection:
[NEW@global] → write to ~/.claude/skills/<name>/[NEW@local] → write to <cwd>/.claude/skills/<name>/[UPDATE→X] → bump skila.version, append to skila.changelog,
set skila.parentVersion to prior version, write to published path.[UPDATE→X@staging] → write to staging tier; explicit /skila promote
or web UI action required to replace the published version.Read references/quality-bar.md before accepting any proposal. The three
structural rules are:
Deterministic procedures → scripts/: If a workflow step is a
deterministic, repeatable Node script (FS walk, frontmatter parse, regex
validation), ship it in scripts/ and reference it by path in SKILL.md.
Use .mjs wrappers that delegate to node dist/cli.js.
Domain knowledge → references/: Stable, enumerable knowledge
(schema specs, decision criteria, error tables) goes in references/.
SKILL.md body must direct the agent to read the file.
Standardized output → assets/: Templates, prompt scaffolds, and
row format specifications go in assets/. SKILL.md body references them
by path.
SKILL.md body MUST be ≤ 500 lines. Garbage skills (prose-only stubs with no artifacts) are rejected at the blocking validate gate.
skila v2 intentionally inverts five learner-described weaknesses of v1:
| Dimension | v1 Gap | v2 Inversion |
|---|---|---|
| Language | Python runtime | TypeScript only; node dist/cli.js |
| Iteration | Fire-and-forget distillation | Every skill carries skila.changelog; revisions are visible |
| Overwrite safety | Silent replacement of published skills | UPDATE requires web approval or /skila promote |
| Validation | Advisory Python lint | BLOCKING TypeScript validate gate (exits non-zero) |
| Feedback | No usage signal | ~/.claude/skila-data/feedback.json tracks successRate + invocations |
New skills land in ~/.claude/skills/.draft-skila/<name>/ with
skila.status: staging. Claude Code's loader skips directories whose name
starts with ., so staged skills do not load until explicitly promoted.
Auto-promotion to published requires a feedback gate: successRate ≥ 0.7
over at least 3 invocations. Manual override is always available via
/skila promote <name> or the web UI.
skila serve)Run node dist/cli.js serve to open the Obsidian-style three-pane control
panel at http://127.0.0.1:7777:
The web UI is the recommended path for reviewing staged skills before promotion.
Two hooks declared in plugin.json run passively:
~/.claude/skila-data/feedback.json.These hooks are stateless writers only — no LLM calls, no skill writes.
All heavier work (judge calls, web ops) is initiated by the user from
/skila or the web UI.
Every skila-produced SKILL.md MUST include the full v2 schema block.
Read references/skill-creator-schema.md for the canonical specification.
Use assets/SKILL.md.tmpl as the scaffold when creating new skills.
Required fields: name, description, compatibility, and the full
skila.* block (version, status, parentVersion, revisionCount,
lastImprovedAt, changelog, source).
| Path | Purpose |
|---|---|
scripts/validate.mjs | Delegate to node dist/cli.js validate |
scripts/lint.mjs | Delegate to node dist/cli.js lint |
scripts/scan.mjs | Delegate to node dist/cli.js list |
references/quality-bar.md | Three structural rules for skill artifacts |
references/proposal-criteria.md | Three promotion criteria (disjunction) |
references/skill-creator-schema.md | Anthropic spec + skila v2 extensions |
assets/SKILL.md.tmpl | Frontmatter scaffold for new skills |
assets/prompts/prompt-templates.md | Distillation + judge prompt templates |
assets/proposal-row.tmpl | AskUserQuestion row format variants |
npx claudepluginhub luyao618/skila --plugin skilaGuides reception of code review feedback: verify before implementing, avoid performative agreement, push back with technical reasoning when needed.
Design banners for social media, ads, website heroes, and print with multiple art direction options and AI-generated visuals.