gizclaw/flowcraft/guides
Claude Code and agent skill by gizclaw/flowcraft
- community
Checking that the SKILL.md file is still in the repository.
Install
npx vskill@latest install gizclaw/flowcraft/guidesSKILL.md
Agent Skills Guide
core/skill implements the read-only half of the Agent Skills convention (agentskills.io): discovery and parsing of SKILL.md directories, a BM25 index over skill names and descriptions, $name mention resolution, and the per-turn ## Skills metadata section. Bodies load on demand.
The package owns no policy. Installation, authoring, usage accounting, retirement, and built-in shadowing are application concerns layered over List, ByName, and ReadFull: the caller composes the roots and decides what wins when two roots offer the same name.
The SKILL.md contract
A skill is a directory whose SKILL.md carries YAML frontmatter:
| Field | Rule | |
|---|---|---|
name | lowercase letters, digits and hyphens, ≤ 64 characters. Missing or invalid names fall back to the slugified directory name, with a warning; a directory name with no ASCII left to slugify (a fully non-ASCII directory) has no fallback and is an error diagnostic. | |
description | required; truncated to 1024 characters (runes, not bytes). | |
metadata.short-description | optional non-standard extension, surfaced for compact listings. | |
| file size | ≤ 256 KiB; larger files are refused by discovery and by the body readers. | |
| other fields | tolerated: the frontmatter decode is lenient, so vendor extensions (license, version, …) do not fail the parse. | |
| frontmatter keys | two distinct keys spelling one JSON key (1 beside "1") are a tolerated shape issue: the file loads, with a warning naming the collision. A key the conversion cannot spell (null, an integer past int64) refuses the parse, named rather than left to map order. | |
| encoding | a UTF-8 BOM before the frontmatter and CRLF line endings are accepted. |
The standard expects name to equal the directory name; a mismatch is accepted with a warning. Only malformed files fail the parse (missing frontmatter, empty body, missing description, a key the conversion cannot spell).
Roots and discovery
Discover(ctx, roots) — and NewService underneath it — BFS-walks every root:
- roots are parameters: the caller composes the conventional personal
root (~/.agents/skills), a product directory, and plugin-contributed roots; nothing is scanned implicitly;
- a root may be one skill directory or a tree of them, and a root
that does not exist is silently empty;
- hidden entries are skipped;
- symlinks are followed only while their target stays inside one of
the roots, and a skill reachable through several roots (or through a symlinked directory) is collected once, under its canonical path; directories are tracked by canonical path too, so an alias pointing back into a walked tree is not re-descended — discovery terminates on any tree, however it is linked, and a root configured twice is walked and listed once;
- parse failures never fail the pass: they land in
Diagnostics,
where Warning marks a tolerated shape issue and distinguishes it from a file that could not load.
Results are sorted by name, then path. Duplicate names across roots are all kept and all rankable; ByName and Mentioned resolve the first path in that canonical order, and shadowing rules (a built-in losing to a same-named user skill, say) are the caller's to apply.
The Service
A Service holds an immutable snapshot of the last discovery plus the BM25 index over it. Reload re-runs discovery and swaps the snapshot, so skills added on disk become visible without rebuilding the service; the read paths are lock-free and safe for concurrent use.
| Method | Purpose | |
|---|---|---|
List() | every discovered skill, sorted by name then path | |
ByName(name) | resolve one name to the canonical first path | |
Diagnostics() | the non-fatal issues of the last discovery | |
Roots() | the configured roots that contributed at least one skill — de-duplicated, in configuration order | |
TopN() / MinScore() | the configured ranking defaults |
Options.Disabled excludes skill names or absolute SKILL.md paths before the index is built, so a disabled skill cannot rank back in.
Ranking
Ranking runs over the shared core/utils/bm25 kernel — the same one behind tool discovery — with the standard Okapi parameters (k1 = 1.2, b = 0.75): the name field is weighted 3× the description, a query term that only prefixes an index term is discounted ×0.5, and CJK text is tokenized into single characters and bigrams, so a Chinese fragment matches a Chinese description without a segmentation library.
RankScored(query, topN, minScore)returns skills with their
scores, best first; Rank is the same list without scores. A topN <= 0 falls back to Options.TopN (default 5); a minScore <= 0 accepts any match.
- An empty query — or one that matches nothing — returns nil:
without a signal, nothing is injected.
Mentioned(text)extracts standalone$namementions ($50and
mid-word dollars are not mentions) and resolves them in mention order.
Reads
ReadFull(name) and ReadByPath(path) return the metadata plus the body with the frontmatter stripped. ReadByPath only serves paths from the current snapshot, so a stale path from a UI cannot read an arbitrary file; both re-resolve the file and refuse it when the symlink target has left the configured roots since discovery.
Rendering and tool pairing
RenderSection(skills) renders the per-turn block:
Bodies are never inlined. The header names skill_search and skill_read by convention: the application ships those tools on top of RankScored and ReadFull (registered on core/tool with the exposure it needs), so the model always has a discovery path and a body loader without paying for every skill body each turn.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingdocs/guides/skill.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/gizclaw/flowcraft/guides)