> ## Documentation Index
> Fetch the complete documentation index at: https://docs.selftune.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# sets

> Pin reusable skill selections and materialize them into projects safely.

Use `selftune sets` to keep reusable project configurations separate from the
global skill registries. Skill packages are copied into a content-addressed
local Library when the set is created. Applying the set links those immutable
revisions into the selected project's Codex or Claude Code registry.

## Create a Skill Set

```bash theme={null}
selftune sets create \
  --name "Research project" \
  --description "Evidence-heavy research workflow" \
  --harness codex \
  --harness claude_code \
  --skill-path ~/.agents/skills/research \
  --skill-path ~/.agents/skills/citations \
  --json
```

| Flag                 | Description                                     |
| -------------------- | ----------------------------------------------- |
| `--name NAME`        | Human-readable set name                         |
| `--description TEXT` | Optional project-archetype description          |
| `--harness ID`       | Repeat for `codex` or `claude_code`             |
| `--skill-path PATH`  | Repeat for each package directory or `SKILL.md` |
| `--json`             | Emit the stored manifest                        |

Each selected package is verified after it enters the Library. The manifest
pins its content hash rather than a mutable source directory.
Packages must be self-contained; package-internal symbolic links are rejected
so a pinned revision cannot change with an external file.

## Preview and apply

```bash theme={null}
selftune sets plan --set research-project --project /path/to/project --json
selftune sets apply --set research-project --project /path/to/project --json
```

`plan` reports every create, unchanged destination, and conflict without
mutating the project. `apply` blocks before any mutation if one destination
contains another revision. Repeating a successful apply is a no-op.

Codex targets `.agents/skills/`. Claude Code targets `.claude/skills/`.
SelfTune prefers directory symlinks and verifies a copied fallback when the
platform cannot create links.
Existing project registry directories must resolve inside the selected
project. SelfTune blocks links that redirect materialization elsewhere.

## Inspect and roll back

```bash theme={null}
selftune sets list --json
selftune sets receipts --json
selftune sets rollback --receipt <receipt-id> --json
```

Rollback removes only paths owned by the receipt. It blocks when a link target
or copied package changed after apply. The immutable Library revision and Skill
Set definition remain available after rollback.

Resolve the project root and harness first. Create the set from canonical skill
sources, run `sets plan`, and show conflicts before applying. Preserve the
receipt and never replace a conflicting destination without explicit approval.
