Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ The format is based on [Keep a Changelog 2.0.0](https://keepachangelog.com/en/2.

## [Unreleased]

### Changed

- The documented install is `npx skills add svyatov/oss-kit`. The `--skill '*'` flag existed to preselect nine loose rows in the picker, and 0.14.0 replaced those rows with one select-all row, so the flag now only repeats what a single keystroke does.
- `oss-skill` says a repository documenting a whole-collection install groups its skills through a plugin manifest rather than through `--skill '*'`. The reference recommended the flag, which was the only answer before the CLI read a manifest for groupings.

## [0.14.0] - 2026-08-11

### Changed
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Curated agent skills for open source maintainers.
Install the kit:

```bash
npx skills add svyatov/oss-kit --skill '*'
npx skills add svyatov/oss-kit
```

Then ask your agent:
Expand Down
19 changes: 8 additions & 11 deletions site/src/components/InstallCommand.astro
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,14 @@
import FaIcon from "./FaIcon.astro"

const { compact = false } = Astro.props
const command = "npx skills add svyatov/oss-kit --skill '*'"
// One span per argument, with the flag and its value kept as one. The spans are
// `pre`, so the spaces between them are the only places the line can ever break
// and `--skill '*'` always arrives whole. Non-breaking spaces were not enough:
// `pre-wrap` also breaks after a hyphen, and it chose the one inside `--skill`,
// which is the argument the whole arrangement exists to protect. Joining the
// parts back with single spaces reproduces `command`, so the copy handler still
// reads textContent and no shell ever sees the shaping.
const words = command.split(" ")
const flag = words.indexOf("--skill")
const parts = [...words.slice(0, flag), words.slice(flag).join(" ")]
const command = "npx skills add svyatov/oss-kit"
// One span per argument. The spans are `pre`, so the spaces between them are the
// only places the line can ever break. Non-breaking spaces were not enough:
// `pre-wrap` also breaks after a hyphen, and every hyphen here sits inside a
// name a reader has to retype. Joining the parts back with single spaces
// reproduces `command`, so the copy handler still reads textContent and no shell
// ever sees the shaping.
const parts = command.split(" ")
---

<kit-copy-command class:list={["install-command", { "install-command--compact": compact }]}>
Expand Down
10 changes: 5 additions & 5 deletions site/src/content/docs/guides/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ Every host below reads the current skills from the repository's canonical

## Any agent

The open `skills` CLI takes all nine skills with `--skill '*'`, then asks which
of the agents it finds to install them into:
The open `skills` CLI offers all nine skills under one row you can select in a
single keystroke, then asks which of the agents it finds to install them into:

```bash
npx skills add svyatov/oss-kit --skill '*'
npx skills add svyatov/oss-kit
```

Without `--skill '*'` the command opens a picker and you select each skill by
hand.
The row is there because `.claude-plugin/plugin.json` names every skill
directory.

One skill at a time:

Expand Down
23 changes: 12 additions & 11 deletions site/src/styles/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -440,11 +440,11 @@ site-search .pagefind-ui__result-nested {
font-weight: 600;
}

/* The command never breaks where the browser chooses. Ellipsis hid `--skill
'*'` and free wrapping split it, and either one costs the reader the
difference between installing the kit and installing one skill. Wider
viewports scroll it; below 34.5rem it wraps only at the spaces the component
leaves open, because each argument sits in its own `pre` span. */
/* The command never breaks where the browser chooses. Ellipsis hid the end of
it and free wrapping split an argument mid-hyphen, and either one leaves a
reader retyping something they cannot see. Wider viewports scroll it; below
34.5rem it wraps only at the spaces the component leaves open, because each
argument sits in its own `pre` span. */
.install-command code {
flex: 1 1 auto;
min-width: 0;
Expand Down Expand Up @@ -546,9 +546,10 @@ site-search .pagefind-ui__result-nested {
.kit-hero {
display: grid;
/* The copy column has to hold the install command on one line, or the
primary action ships with its last flag faded out on every desktop. 0.85fr
was three pixels short of that at 1440, which is enough to fade the closing
quote of `--skill '*'`. The map's floor is 43.5rem because that is what its
primary action ships with its last argument faded out on every desktop.
0.85fr was three pixels short of that at 1440, measured against the longer
`--skill '*'` form the command used to carry, so there is slack now rather
than a new measurement. The map's floor is 43.5rem because that is what its
three-column body plus gaps, padding and border actually measure; 42rem was
20px under, so the floor could be satisfied while the body clipped. */
grid-template-columns: minmax(19rem, 0.92fr) minmax(43.5rem, 1.48fr);
Expand Down Expand Up @@ -2242,9 +2243,9 @@ html[data-theme="light"] .domain-bay__count i {
size worth reading, so it stops scrolling and takes its one break. The docs
footer is the tightest instance and starts hiding characters at 547px, which
is where this threshold comes from rather than from a round number. The
component puts each argument in its own `pre` span and keeps `--skill '*'` in
one, so the spaces between arguments are the only breaks the browser is
offered and the flag never arrives split from its value. */
component puts each argument in its own `pre` span, so the spaces between
arguments are the only breaks the browser is offered and no argument ever
arrives split at one of its own hyphens. */
@media (max-width: 34.5rem) {
.install-command code {
overflow-x: visible;
Expand Down
2 changes: 1 addition & 1 deletion skills/oss-audit/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ This skill owns no rule. It reads what `STANDARD.md` says a rule needs, checks t

`STANDARD.md` sits next to this file, in this skill's own installed directory. Read it from there, not from the repository under audit. The audit runs with the target repository as the working directory, so a bare `STANDARD.md` or `./STANDARD.md` resolves against that repository and is the wrong file or no file. Resolve the standard from the absolute directory this `SKILL.md` was loaded from, and read `STANDARD.md` beside it.

The directory travels intact in every documented install, so the file is always beside this one: a git checkout, the Claude Code plugin install, `npx skills add svyatov/oss-kit --skill '*'` for the whole kit, and `npx skills add svyatov/oss-kit --skill oss-audit` for this skill alone. There is no documented install that brings in this skill's directory but leaves one of its own files behind.
The directory travels intact in every documented install, so the file is always beside this one: a git checkout, the Claude Code plugin install, `npx skills add svyatov/oss-kit` for the whole kit, and `npx skills add svyatov/oss-kit --skill oss-audit` for this skill alone. There is no documented install that brings in this skill's directory but leaves one of its own files behind.

If no `STANDARD.md` sits beside this file, the file is genuinely missing: the skill's own directory did not install completely, or the file was moved or deleted afterward. Say this plainly, name the file that is missing, and stop rather than guessing at another path or scoring against a remembered or reconstructed rule set. An audit with no rules to check against is not a smaller audit; it is no audit.

Expand Down
2 changes: 1 addition & 1 deletion skills/oss-readme/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ Curated agent skills for open source maintainers.
- **Both forges.** 57 of the 61 rules score GitHub and GitLab alike.

```bash
npx skills add svyatov/oss-kit --skill '*'
npx skills add svyatov/oss-kit
```

Then ask your agent:
Expand Down
4 changes: 3 additions & 1 deletion skills/oss-skill/references/hosts.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ Running `npx skills add <owner>/<repo>` checks the repository root, `skills/`, t

`--skill <name>` (short form `-s`) installs only the named skill or skills from the source instead of every skill found. `--list` prints what is available without installing anything.

Installation is interactive by default, so a bare `add` prompts for the skills, the agents, and the scope. The value `'*'` means every match, for `--skill` and for `--agent` alike, and `-y` skips the confirmation prompts. `--all` is the shorthand for `--skill '*' --agent '*' -y`. A repository that documents a whole-collection install wants `--skill '*'`, which preselects the skills and leaves the agent and scope questions to the reader; `--all` answers those two for them.
Installation is interactive by default, so a bare `add` prompts for the skills, the agents, and the scope. The value `'*'` means every match, for `--skill` and for `--agent` alike, and `-y` skips the confirmation prompts. `--all` is the shorthand for `--skill '*' --agent '*' -y`.

A repository that documents a whole-collection install does not need `--skill '*'` for it. The CLI groups a repository's skills under one select-all row when a plugin manifest at the repository root names each skill's own directory, so a bare `add` offers the whole collection in a single keystroke and still leaves the agent and scope questions to the reader. The manifest has to name each directory: a single `./skills/` entry matches no skill's own directory and groups nothing. Without such a manifest the picker lists every skill as a loose row, which is what `--skill '*'` used to answer. Verified 2026-08-11 against `getPluginGroupings` in `src/plugin-manifest.ts`.

The receiving path is client-specific. Current examples are `.claude/skills/` for Claude Code and `.agents/skills/` for Codex, Cursor, Gemini CLI, GitHub Copilot, Kimi Code CLI, and the universal target. Global paths differ by client, so read the CLI's current `Supported Agents` table instead of deriving one. Interactive installation uses one canonical copy with client symlinks by default; `--copy` requests independent copies.

Expand Down
Loading