# @shadowclone/skills

Handles skill files without any model call. It loads the bundled skills, checks their quality, discovers installed skills, and stores proposals.

<!-- package-facts:start -->

(generated by `bun run guides`; do not edit by hand)

- Package name: `@shadowclone/skills`
- Workspace dependencies: `@shadowclone/changes`, `@shadowclone/core`, `@shadowclone/sessions`
- External dependencies: `zod`
- Export subpaths: `.`, `./testing`

<!-- package-facts:end -->

## Owns

- `src/skills/`: `loadSeedLibrary`, `installSeedSkills`, `skillQualityFindings`, `readSkillDocument`, and `voiceBlock`.
- `src/skills/bundledVersions.json`: the recorded fingerprint of each bundled skill file. `isBundledVersion` reads it.
- `src/skillMaintenance/`: roots, `discoverSkills`, `renderMaintainedSkill`, `syncPortableSkills`, and the proposal store.

## Rules

- This package never calls a model. It does not depend on `agents`.
- Skill text that the package discovers passes through `resolveRedacted`.
- Callers replace an installed bundled skill only when `isBundledVersion` accepts its text.
- After you change a file in `skills/`, run `bun run tooling/src/skillVersions.ts --record`. Lint fails until you do.
- `syncPortableSkills` refuses a symbolic link. It fails when another skill already holds a portable destination.
- A root inside a plugin cache is third-party. Learning writes a local companion for it with `renderCompanionSkill`.

## Tests

Run `bun test` in this folder, or `bun test packages/skills` from the root. The `./testing` export gives `fixtureSkill` and `sampleSkillText`. Run `bun test packages/skills` before you change a bundled skill.

Update this file in the same commit when you change the package purpose, public exports, dependencies, or a rule above.
