--- name: bundled-skill-file-extraction description: "Lazily extract referenced files for bundled skills so large prompts stay offline until needed." metadata: author: ychampion --- # SKILL: Bundled Skill File Extraction **Domain:** command-surfaces **Trigger:** Use whenever a bundled skill needs reference files extracted on demand while keeping startup fast. **Source Pattern:** Distilled from reviewed command-surface and listing-control patterns. ## Core Method When a bundled skill defines `files`, memoize an extraction promise and write each file under a secure directory (with O_NOFOLLOW / 0o700+ permissions). Cache the extraction path so the same directory can be reused across invocations, and wrap the skill prompt with `Base directory for this skill: ` so the agent can Read/Grep as needed without bloating the inline instructions. ## Key Rules - Group requested files by parent directory when writing so mkdir/disk writes happen per subtree. - Allocate per-process directories under the locked `getBundledSkillsRoot()` and avoid overwriting by using `O_EXCL`/`SAFE_WRITE_FLAGS`. - Memoize the extraction promise (not just the result) so concurrent invocations await a single write. - Prepend `Base directory ...` to the skill prompt only when the extraction succeeded; otherwise continue without the prefix to keep the skill usable. ## Example Application When packaging a bundled “project review” skill with large README snippets, add `files` entries for the README, let this method extract them lazily, and cite the base directory in the prompt so the agent can `Read` the files only when it actually runs the skill. ## Anti-Patterns (What NOT to do) - Don’t write the files directly during startup—delay until the first invocation, using memoized promises to avoid race conditions. - Don’t forget to guard against traversal (`resolveSkillFilePath`) so bad relpaths cannot escape the extraction dir.