Purpose
Bring the knowledge plugin to a working state: confirm the effective library_dir against this
repository's artifact convention, and verify (or provision) the extraction pipelines'
prerequisites. library_dir is a personal userConfig option. Claude Code prompts for it when
the plugin is enabled, stores non-sensitive options in user settings, and ignores project/local
pluginConfigs entries on current releases.
Official contract: https://code.claude.com/docs/en/plugins-reference#user-configuration.
Check-centric per the uniform setup contract (docs/PLUGIN-PHILOSOPHY.md
"Setup is explicit and repeatable" in the marketplace repository): check inspects and
reports, apply resolves what check found, and the extraction-dependency provisioning is a
distinct opt-in subaction. The library_dir option is Claude-Code-owned; this skill never
writes it, only reports and routes.
Action routing: no argument or check runs the check; apply runs the check first, then the
library_dir guidance; apply install-deps additionally provisions the extraction dependencies
below. All actions are non-interactive when the action is given, never prompt.
check (read-only)
Report a PASS/FAIL/INFO table with one remediation line per FAIL. Do not edit settings, write
config, or install anything.
library_dir vs repository convention. Read the rendered ${user_config.library_dir}
value (default . = repository root). Inspect the consumer's CLAUDE.md, AGENTS.md,
.claude/rules, and existing artifact directories for a declared knowledge/artifact
convention, the team source of truth. Do not infer library_dir from .claude/topic-docs.yaml
or its memory_dir: topic-docs governs lifecycle working documents, while library_dir owns the
knowledge corpus. Mapping both to .work would nest the video-digest pipeline's own
.work/<watch-epic>/... layout as .work/.work/.... PASS when the personal value matches the
convention (or the portable . default with no distinct convention). FAIL on a mismatch
(remediation: Claude Code's plugin configuration prompt for knowledge) or a machine-absolute
path (not portable for repository work).
- Extraction node deps. INFO. Probe whether
${CLAUDE_PLUGIN_DATA}/node_modules/@melodic/video-digestion exists (the video-digest and
course-digest pipelines share it). Missing is INFO, not FAIL: each ingest skill self-provisions
on first run, and apply install-deps pre-provisions. Remediation: apply install-deps.
- Playwright Chromium. INFO. Probe whether the browsers path
(
PLAYWRIGHT_BROWSERS_PATH, else ${CLAUDE_PLUGIN_DATA}/ms-playwright) holds a chromium-*
or chromium_headless_shell-* build (course-digest frame capture). Missing is INFO with
remediation apply install-deps.
- OS-level media tools. INFO. Probe
yt-dlp --version (video acquisition), ffmpeg -version (frame extraction, watch/course actions), and magick -version (ImageMagick 7,
contact sheets. Watch/course actions). Each absence is INFO with the platform install command
from the ingest skill's Prerequisites; this skill never installs system packages. book-distill
(PDF) needs none of these.
apply (idempotent)
Run check, then resolve each finding. Re-running after everything passes changes nothing and
reports "already configured".
library_dir mismatch. Guidance only. library_dir is a personal userConfig scalar;
never hand-edit pluginConfigs or write Claude Code settings. Reconfigure through Claude
Code's native flow, per the marketplace's plugin-reconfiguration convention
(https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/plugin-reconfiguration/README.md,
which owns the verified-version record): interactive /plugin configure knowledge@<marketplace>
any time, or headless claude plugin install knowledge@<marketplace> -s <scope> --config library_dir=<value>
(repeatable per key) — against an already-installed plugin it prints already installed and
still writes the value. Do not uninstall to reconfigure: that drops the plugin's entire
stored pluginConfigs entry, resetting every option in the README's Options reference to its
manifest default. -s defaults to user; pass the scope claude plugin list reports, and run
from that project's directory for a project/local scope, or the write lands at a scope that
does not load. Afterwards rerun check in a fresh session — the rendered
${user_config.*} is injected at skill load, so a same-session check still reports the OLD
value; report the observed effective value, never an unobserved change.
For a root outside the project and home directories, recommend the portable value forms from the
README's option table (~ prefix or ${NAME} / %NAME% env-var reference) instead of a literal
machine path, which guardrail hardcoded-path checks rightly block.
apply install-deps. Provision the extraction dependencies. Only with this subaction, run
both idempotent provisioners (each installs the vendored node dependencies into
${CLAUDE_PLUGIN_DATA}, and course-digest additionally provisions Chromium into
${CLAUDE_PLUGIN_DATA}/ms-playwright):
node "${CLAUDE_PLUGIN_ROOT}/skills/video-digest/extraction/setup-deps.mjs"
node "${CLAUDE_PLUGIN_ROOT}/skills/course-digest/extraction/setup-deps.mjs"
A stored fingerprint gates reinstalls, so re-running is safe and cheap. After provisioning,
re-run the check node-deps and Chromium probes and report their actual results, never claim
provisioned on the script exit codes alone.
OS-level media tools. Guidance only. For a missing yt-dlp, ffmpeg, or ImageMagick 7,
give the platform install command from the ingest skill's Prerequisites. This skill never
installs system packages.
Confirm. Report the observed library_dir, the repository convention and any mismatch, and
whether extraction dependencies were provisioned or intentionally skipped. Note that
/knowledge:book-distill writes to its explicitly named target skill rather than this seam.
Output
Report the observed personal value, the repository convention, any mismatch, the state of each
prerequisite, and the exact next action (/plugin configure knowledge for library_dir,
or apply install-deps for provisioning). A library_dir change takes effect in a fresh session,
not this one. Do not claim it this session.
Boundaries
- Do not run an ingestion pipeline. Provisioning dependencies is not the same as running one.
- Do not write the plugin cache, Claude Code user settings, or
pluginConfigs.
- Do not invent organization-specific paths or environment-variable prefixes.
1---2name: setup-143description: Verify the knowledge artifact-root configuration and extraction prerequisites, or provision the video-pipeline dependencies. Use when: 'set up knowledge', 'configure knowledge', 'is knowledge ready', or 'where do knowledge artifacts land'. Actions: check (read-only verification, default) | apply (resolve what check found) | apply install-deps (provision the extraction node deps + Chromium).4---56## Purpose78Bring the knowledge plugin to a working state: confirm the effective `library_dir` against this9repository's artifact convention, and verify (or provision) the extraction pipelines'10prerequisites. `library_dir` is a personal `userConfig` option. Claude Code prompts for it when11the plugin is enabled, stores non-sensitive options in user settings, and ignores project/local12`pluginConfigs` entries on current releases.1314Official contract: <https://code.claude.com/docs/en/plugins-reference#user-configuration>.1516Check-centric per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md`17"Setup is explicit and repeatable" in the marketplace repository): `check` inspects and18reports, `apply` resolves what `check` found, and the extraction-dependency provisioning is a19distinct opt-in subaction. The `library_dir` option is Claude-Code-owned; this skill never20writes it, only reports and routes.2122Action routing: no argument or `check` runs the check; `apply` runs the check first, then the23`library_dir` guidance; `apply install-deps` additionally provisions the extraction dependencies24below. All actions are non-interactive when the action is given, never prompt.2526## `check` (read-only)2728Report a PASS/FAIL/INFO table with one remediation line per FAIL. Do not edit settings, write29config, or install anything.30311. **`library_dir` vs repository convention.** Read the rendered `${user_config.library_dir}`32 value (default `.` = repository root). Inspect the consumer's `CLAUDE.md`, `AGENTS.md`,33 `.claude/rules`, and existing artifact directories for a declared knowledge/artifact34 convention, the team source of truth. Do not infer `library_dir` from `.claude/topic-docs.yaml`35 or its `memory_dir`: topic-docs governs lifecycle working documents, while `library_dir` owns the36 knowledge corpus. Mapping both to `.work` would nest the video-digest pipeline's own37 `.work/<watch-epic>/...` layout as `.work/.work/...`. PASS when the personal value matches the38 convention (or the portable `.` default with no distinct convention). FAIL on a mismatch39 (remediation: Claude Code's plugin configuration prompt for `knowledge`) or a machine-absolute40 path (not portable for repository work).412. **Extraction node deps**. INFO. Probe whether42 `${CLAUDE_PLUGIN_DATA}/node_modules/@melodic/video-digestion` exists (the video-digest and43 course-digest pipelines share it). Missing is INFO, not FAIL: each ingest skill self-provisions44 on first run, and `apply install-deps` pre-provisions. Remediation: `apply install-deps`.453. **Playwright Chromium**. INFO. Probe whether the browsers path46 (`PLAYWRIGHT_BROWSERS_PATH`, else `${CLAUDE_PLUGIN_DATA}/ms-playwright`) holds a `chromium-*`47 or `chromium_headless_shell-*` build (course-digest frame capture). Missing is INFO with48 remediation `apply install-deps`.494. **OS-level media tools**. INFO. Probe `yt-dlp --version` (video acquisition), `ffmpeg50 -version` (frame extraction, watch/course actions), and `magick -version` (ImageMagick 7,51 contact sheets. Watch/course actions). Each absence is INFO with the platform install command52 from the ingest skill's Prerequisites; this skill never installs system packages. `book-distill`53 (PDF) needs none of these.5455## `apply` (idempotent)5657Run `check`, then resolve each finding. Re-running after everything passes changes nothing and58reports "already configured".59601. **`library_dir` mismatch. Guidance only.** `library_dir` is a personal `userConfig` scalar;61 never hand-edit `pluginConfigs` or write Claude Code settings. Reconfigure through Claude62 Code's native flow, per the marketplace's plugin-reconfiguration convention63 (<https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/plugin-reconfiguration/README.md>,64 which owns the verified-version record): interactive `/plugin configure knowledge@<marketplace>`65 any time, or headless `claude plugin install knowledge@<marketplace> -s <scope> --config library_dir=<value>`66 (repeatable per key) — against an already-installed plugin it prints `already installed` and67 still writes the value. Do **not** uninstall to reconfigure: that drops the plugin's entire68 stored `pluginConfigs` entry, resetting every option in the README's Options reference to its69 manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run70 from that project's directory for a `project`/`local` scope, or the write lands at a scope that71 does not load. Afterwards rerun `check` in a **fresh session** — the rendered72 `${user_config.*}` is injected at skill load, so a same-session check still reports the OLD73 value; report the observed effective value, never an unobserved change.74 For a root outside the project and home directories, recommend the portable value forms from the75 README's option table (`~` prefix or `${NAME}` / `%NAME%` env-var reference) instead of a literal76 machine path, which guardrail hardcoded-path checks rightly block.772. **`apply install-deps`. Provision the extraction dependencies.** Only with this subaction, run78 both idempotent provisioners (each installs the vendored node dependencies into79 `${CLAUDE_PLUGIN_DATA}`, and course-digest additionally provisions Chromium into80 `${CLAUDE_PLUGIN_DATA}/ms-playwright`):8182 ```bash83 node "${CLAUDE_PLUGIN_ROOT}/skills/video-digest/extraction/setup-deps.mjs"84 node "${CLAUDE_PLUGIN_ROOT}/skills/course-digest/extraction/setup-deps.mjs"85 ```8687 A stored fingerprint gates reinstalls, so re-running is safe and cheap. After provisioning,88 re-run the `check` node-deps and Chromium probes and report their actual results, never claim89 provisioned on the script exit codes alone.903. **OS-level media tools. Guidance only.** For a missing `yt-dlp`, `ffmpeg`, or ImageMagick 7,91 give the platform install command from the ingest skill's Prerequisites. This skill never92 installs system packages.934. **Confirm.** Report the observed `library_dir`, the repository convention and any mismatch, and94 whether extraction dependencies were provisioned or intentionally skipped. Note that95 `/knowledge:book-distill` writes to its explicitly named target skill rather than this seam.9697## Output9899Report the observed personal value, the repository convention, any mismatch, the state of each100prerequisite, and the exact next action (`/plugin configure knowledge` for `library_dir`,101or `apply install-deps` for provisioning). A `library_dir` change takes effect in a fresh session,102not this one. Do not claim it this session.103104## Boundaries105106- Do not run an ingestion pipeline. Provisioning dependencies is not the same as running one.107- Do not write the plugin cache, Claude Code user settings, or `pluginConfigs`.108- Do not invent organization-specific paths or environment-variable prefixes.