diff --git a/README.md b/README.md index a7e71200..87ded786 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@
- One source of truth for AI CLI skills, agents, rules, commands & more. Sync everywhere with one command — from personal to organization-wide.
+ One source of truth for AI CLI skills, agents, native plugins, standalone hooks, rules, commands & more. Sync everywhere with one command — from personal to organization-wide.
Codex, Claude Code, OpenClaw, OpenCode & 60+ more.
diff --git a/website/docs/reference/targets/configuration.md b/website/docs/reference/targets/configuration.md index a5b1f15a..9466ab9a 100644 --- a/website/docs/reference/targets/configuration.md +++ b/website/docs/reference/targets/configuration.md @@ -16,6 +16,8 @@ Configuration file reference for skillshare. │ ├── my-skill/ │ ├── another/ │ └── _team-repo/ ← Tracked repository +├── plugins/ ← Plugin bundle source +├── hooks/ ← Hook bundle source ├── extras/ ← Extras source root │ └── rules/ ← Extra resource (e.g., rules) @@ -117,6 +119,10 @@ skills: # Custom agents source (optional, overrides default location) agents_source: ~/my-agents +# Custom plugin and hook sources (optional, override defaults) +plugins_source: ~/my-plugins +hooks_source: ~/my-hooks + # Custom extras source (optional, overrides default location) extras_source: ~/my-extras @@ -850,6 +856,39 @@ Uses NTFS junctions (no admin required). --- +### `plugins_source` + +Path to the native plugin bundle source directory. + +```yaml +plugins_source: ~/.config/skillshare/plugins +``` + +Default: + +- Global mode: `~/.config/skillshare/plugins` +- Project mode: fixed at `.skillshare/plugins` + +### `hooks_source` + +Path to the standalone hook bundle source directory. + +```yaml +hooks_source: ~/.config/skillshare/hooks +``` + +Default: + +- Global mode: `~/.config/skillshare/hooks` +- Project mode: fixed at `.skillshare/hooks` + +Notes: + +- Project mode always uses the fixed `.skillshare/plugins` and `.skillshare/hooks` roots. +- Plugin and hook management currently target only Claude and Codex. + +--- + ## Related - [Source & Targets](/docs/understand/source-and-targets) — Core concepts diff --git a/website/docs/reference/targets/supported-targets.md b/website/docs/reference/targets/supported-targets.md index 56502a51..bc17dd57 100644 --- a/website/docs/reference/targets/supported-targets.md +++ b/website/docs/reference/targets/supported-targets.md @@ -10,6 +10,8 @@ Complete list of AI CLIs that skillshare supports out of the box. skillshare supports **64+ AI CLI tools**. When you run `skillshare init`, it automatically detects and configures any installed tools. +The built-in target table below describes **skill target paths**. Other resource kinds have different support coverage; see the support matrix later on this page. + --- ## Built-in Targets @@ -205,6 +207,25 @@ Aliases are resolved automatically. The canonical name is used in config files a --- +## Resource Support Matrix + +| Resource | Built-in target support | +|----------|-------------------------| +| `skills` | All built-in targets with a skills path | +| `agents` | `augment`, `claude`, `cursor`, `opencode` | +| `plugins` | `claude`, `codex` | +| `hooks` | `claude`, `codex` | +| `extras` | Path-configurable; support depends on configured target paths, not built-in target names | + +Notes: + +- `agents` are intentionally limited to targets with explicit agent directory support. +- `plugins` and `hooks` are native integration subsystems, not generic path-based skill sync. +- Codex plugin activation still writes the global `~/.codex/config.toml`, even when the plugin source itself is project-scoped. +- Claude plugin rendering uses a Skillshare-managed marketplace root rather than writing directly into `~/.claude/plugins/`. + +--- + ## Check Target Path For any target, run: diff --git a/website/docs/understand/source-and-targets.md b/website/docs/understand/source-and-targets.md index c132f0d7..2230f1c5 100644 --- a/website/docs/understand/source-and-targets.md +++ b/website/docs/understand/source-and-targets.md @@ -7,7 +7,7 @@ sidebar_position: 2 The core model behind skillshare: one source, many targets. :::tip When does this matter? -Understanding source vs targets helps you know where to edit skills and agents (always in source — changes reflect via symlinks), why `sync` is a separate step, and how `collect` works in the reverse direction. +Understanding source vs targets helps you know where to edit skills, agents, plugins, hooks, and extras, why `sync` is a separate step for some resource kinds, and how `collect` or import flows work in the reverse direction. ::: ## The Problem @@ -34,29 +34,29 @@ Without skillshare, you manage skills separately for each AI CLI: ## The Solution -skillshare introduces a **source directory** that syncs to all **targets**: +skillshare introduces source-managed resource roots that sync to targets or target config: ```mermaid flowchart TD - SRC["SOURCE — ~/.config/skillshare/skills/"] - TGT_CLAUDE["~/.claude/skills/"] - TGT_CURSOR["~/.cursor/skills/"] - TGT_CODEX["~/.codex/skills/"] - SRC -->|"sync"| TGT_CLAUDE - SRC -->|"sync"| TGT_CURSOR - SRC -->|"sync"| TGT_CODEX + SRC["skills/ + agents/ + extras/ + plugins/ + hooks/"] + TGT_CLAUDE["Claude"] + TGT_CURSOR["Cursor"] + TGT_CODEX["Codex"] + SRC -->|"resource-specific sync"| TGT_CLAUDE + SRC -->|"resource-specific sync"| TGT_CURSOR + SRC -->|"resource-specific sync"| TGT_CODEX ``` **Benefits:** -- Edit in source → all targets update instantly -- Edit in target → changes go to source (via symlinks) +- Edit in source → targets or target config can be regenerated consistently +- Skills and agents can reflect edits instantly through symlinks - Single source of truth --- ## Why Sync is a Separate Step -Operations like `install`, `update`, and `uninstall` only modify the **source** directory. A separate `sync` step propagates changes to all targets. This two-phase design is intentional: +Operations like `install`, `update`, `uninstall`, `plugins import`, and `hooks import` only modify the **source** side. A separate `sync` step propagates changes to targets or target config. This two-phase design is intentional: **Preview before propagating** — Run `sync --dry-run` to review what will change across all targets before applying. Especially useful after `uninstall` or `--force` operations. @@ -69,7 +69,7 @@ Operations like `install`, `update`, and `uninstall` only modify the **source** ::: :::info When sync is NOT needed -Editing an existing skill doesn't require sync — symlinks mean changes are instantly visible in all targets. You only need sync when the set of skills changes (add, remove, rename) or when targets/modes change. +Editing an existing skill or agent usually doesn't require sync because symlinks mean changes are instantly visible in linked targets. Plugins, hooks, and extras still require explicit sync because they render into managed roots or config files. ::: --- @@ -201,6 +201,69 @@ The same feature exists in project mode (see [Project Skills](/docs/understand/p --- +## Plugin source + +Plugins are their own source-managed subsystem: + +```text +~/.config/skillshare/plugins/ # global +.skillshare/plugins/ # project +``` + +A plugin bundle is not synced like a skill directory. The flow is: + +```text +source bundle + -> target-specific staged bundle + -> rendered marketplace root + -> optional install/enable step +``` + +Target render roots: + +- Claude: + - Global: `~/.config/skillshare/rendered/claude-marketplace/` + - Project: `.skillshare/rendered/claude-marketplace/` +- Codex: + - Global: `~/.agents/plugins/` + - Project: `.agents/plugins/` + +Codex activation is still global because enablement writes `~/.codex/config.toml`, even when the plugin source itself is project-scoped. + +--- + +## Hook source + +Hooks are another separate subsystem: + +```text +~/.config/skillshare/hooks/ # global +.skillshare/hooks/ # project +``` + +The hook flow is: + +```text +source bundle + -> managed hook script root + -> merge managed entries back into target config +``` + +Managed config files: + +- Claude: `.claude/settings.json` or `~/.claude/settings.json` +- Codex: `.codex/hooks.json` or `~/.codex/hooks.json` +- Codex also enables `features.codex_hooks = true` in `~/.codex/config.toml` + +This merge model preserves unmanaged hook entries that already exist in those config files. + +For native resources, reporting stays target-aware: + +- plugin reporting includes only targets the bundle can actually sync to, including generated manifests +- hook reporting includes only target sections defined in `hook.yaml` + +--- + ## Targets Targets are AI CLI skill directories that skillshare syncs to. @@ -269,6 +332,12 @@ $EDITOR ~/.claude/skills/my-skill/SKILL.md - [sync](/docs/reference/commands/sync) — Propagate changes from source to targets - [collect](/docs/reference/commands/collect) — Pull skills from targets back to source +- [plugins](/docs/reference/commands/plugins) — Native plugin bundle flow +- [hooks](/docs/reference/commands/hooks) — Standalone hook bundle flow - [Sync Modes](./sync-modes.md) — How files are linked (merge, copy, symlink) - [Agents](./agents.md) — Agent resource model and discovery - [Configuration](/docs/reference/targets/configuration) — Target config reference + +:::note Current web UI scope +The web UI exposes skills, targets, extras, and related operations, but it does not yet have dedicated plugin or hook screens. Use the CLI or server API endpoints for plugin/hook workflows. +::: diff --git a/website/sidebars.ts b/website/sidebars.ts index 76c5d532..05893309 100644 --- a/website/sidebars.ts +++ b/website/sidebars.ts @@ -158,6 +158,8 @@ const sidebars: SidebarsConfig = { items: [ 'reference/commands/collect', 'reference/commands/extras', + 'reference/commands/plugins', + 'reference/commands/hooks', 'reference/commands/backup', 'reference/commands/restore', 'reference/commands/trash',