CLI reference
This page lists every skc command with its arguments and notes on output, side effects, follow-on behavior, and exit status. It is generated from the help text built into skc. Run skc <command> --help to read the same notes in a terminal, or skc help-json to get them as JSON.
In usage lines, <VALUE> is required, [VALUE] is optional, and ... means the argument can be repeated. Exit codes and the JSON envelope are described in Output and exit codes.
Global options
These options work with every command, before or after the command name.
skc [OPTIONS] <COMMAND>| Option | Description |
|---|---|
--json | Render output as JSON when the selected command supports it. |
--quiet | Suppress non-essential command output. |
--config-dir <PATH> | Use this folder as the SkillCatalog folder, instead of ~/.skillcatalog. |
-h, --help | Print help. |
-V, --version | Print version. Put it before any command: skc --version or skc -V. |
Commands
| Command | Description |
|---|---|
skc init | Alias for profile init. Creates the team manifest in the folder where you run it. |
skc install | Alias for profile install. Installs the project profile for the checkout where you run it, refreshing declared catalogs that are already registered. |
skc uninstall | Alias for profile uninstall. Removes the project profile for the checkout where you run it. |
skc update | Refresh only the catalogs and project profile of the checkout where you run it. |
skc sync | Sync registered catalogs (optional commit, pull, push, deliver). |
skc deliver | Deliver profiles to the enabled delivery targets, without pulling or pushing catalogs. |
skc profile | Manage profiles and team manifests. |
skc settings | Inspect or update application settings. |
skc catalog | Manage registered catalogs and their sync policy. |
skc proposal | Manage active local proposal records and remote-only branches. |
skc skill | Inspect, score, and improve skills in registered catalogs. |
skc score-history | Alias for skill score-history. |
skc scoring | Manage scoring settings. |
skc stack | Inspect stacks in registered catalogs. |
skc bundle | Inspect bundles in registered catalogs. |
skc validate | Check catalogs, profiles, settings, delivered files, and the team manifest in this folder. |
skc hook | Run the check that a catalog's pre-commit hook calls. Not for direct use. |
skc status | Show your catalogs, profiles, tools, and drift. |
skc completions | Generate shell completions for skc. |
skc help-json | Print the full command tree as JSON. |
skc init
Alias for skc profile init, with the same arguments and behavior.
skc install
Alias for skc profile install, with the same arguments and behavior.
skc uninstall
Alias for skc profile uninstall, with the same arguments and behavior.
skc update
Refresh only the catalogs and project profile of the checkout where you run it.
skc update [OPTIONS]This command reads .skillcatalog/skillcatalog.yml only from the folder where you run it. A root-level skillcatalog.yml is read when .skillcatalog/skillcatalog.yml is absent; having both is an error. It does not search parent folders for a manifest. It fails when this folder has no team manifest, when that manifest is malformed, or when no project profile is installed for this checkout. It never installs a profile and never syncs other catalogs. A catalog the manifests declare that this machine has not registered yet is cloned and registered first, as a first install does, and the output names it.
Use --check to report how many files delivery would create, update, or remove in this checkout, without syncing catalogs or applying delivery.
| Argument | Description |
|---|---|
--check | Report, as a read-only check, how many files delivery would create, update, or remove in this checkout. |
Output
- By default this command prints the refresh result of each catalog, plus a summary of the delivery for this profile.
--checkis read-only and prints how many files delivery would create, update, or remove in this checkout for its project profile;--jsonalso lists each planned action with its path.--jsonreturns the standard SkillCatalog JSON envelope; with--check, itsdataincludesmode: "check",needs_update, and create/update/remove counts.
Side effects
- Successful runs pull upstream catalog changes for the catalogs this checkout's manifests declare and refresh the checkout's project profile.
--checkis read-only: it does not write log files, tidy the SkillCatalog folder, sync catalogs, deliver, or lock delivery records.
Follow-on behavior
- Each run then delivers the refreshed profile, and only that profile, right away.
--checkdoes not repair anything. Runskc updateto apply the changes it reports.- If delivering the profile reports conflicts or failed writes, the command exits non-zero with
delivery-failed.
Exit status
- This command exits non-zero, without installing anything, when no project profile is installed for the checkout.
--checkexits non-zero withupdate-neededwhen the selected checkout would create, update, or remove delivered files, and withdelivery-blockedwhen nothing is pending but drifted files or files SkillCatalog did not write block delivery.--checkexits non-zero withdelivery-failedwhen delivery would withhold a skill or the profile, and lists what it would withhold.update-neededanddelivery-blockedboth exit 24 inskc update. The same exit code can mean different things in different commands, so scripts should check the JSONcommandandoutcomefields.--checkonly reports this checkout's pending delivery changes; it does not check other installed profiles.- This command exits non-zero when delivering the profile reports conflicts or failed writes.
skc sync
Sync registered catalogs (optional commit, pull, push, deliver).
skc sync [OPTIONS] [CATALOG_ID]...Bidirectional sync across registered catalogs.
For each registered catalog (or the named subset), sync first commits pending changes when you give a message (--message, or an interactive prompt), then pulls, then pushes, and finally runs delivery once for every profile unless --no-deliver is set. On a review-branch catalog, commits go to proposal branches, and the primary branch is never pushed.
Dirty-tree handling:
- With
--message <msg>: commit pending changes, then pull, push, deliver. - Interactive terminal, no
--message: reviews each dirty writable catalog and prompts for its own commit message; empty input or end of input cancels the whole sync with exit 0 and says that nothing was synced. - stdin or stdout is not a terminal, no
--message: refuses with the typeddirty-treeenvelope at exit 33.
Commit-message validation:
- Empty
--message ""is rejected withempty-messageat exit 10. - Trimmed messages whose byte length exceeds 1000 are rejected with
commit-message-too-longat exit 11.
Before a commit (with --message, or before a prompt), sync refuses with missing-config at exit 12 when git config user.email or user.name is unset. A sync that only pulls needs neither.
| Argument | Description |
|---|---|
[CATALOG_ID]... | Catalog ids to sync. Repeatable. When omitted, every registered catalog is synced. |
--message <MSG> | Commit pending changes with this shared message before pulling. When omitted and a catalog has uncommitted changes, the command shows them and prompts for a message per catalog when standard input and standard output are terminals, and refuses otherwise (see dirty-tree). |
--no-deliver | Skip the delivery that normally runs after the sync. |
Output
- By default this command prints per-catalog results and any delivery follow-up summary.
--jsonreturns the standard SkillCatalog JSON envelope with per-catalog reports andcommand: "sync".
Side effects
- Successful syncs update the local clone of each requested catalog.
- When
--message <msg>is supplied, each requested catalog with uncommitted changes is committed before the pull and push; the Essentials catalog is never committed to, even when it has changes. - Every commit created via
--message <msg>lands with a subject prefixed by[skillcatalog]so SkillCatalog's commits are easy to find in the catalog's Git history. - On a review-branch catalog, commits on the primary branch that
originlacks are pushed as a new proposal branch, and the primary branch then returns toorigin/<primary>.
Follow-on behavior
- Unless
--no-deliveris set, successful syncs automatically rerunskc deliverfor every profile. Delivery runs only when every requested catalog synced. - If delivery fails with an error after an otherwise complete sync, for example because SkillCatalog could not check a review-branch catalog's proposals on the Git host, the command exits non-zero with
delivery-failed. Delivery conflicts and failed writes make the command exit non-zero withdelivery-failed.
Exit status
- With no registered catalogs, sync exits 0 with
outcome: "no-catalogs"; unknown requested catalog ids exit non-zero withcatalog-not-foundbefore sync starts. --message ""exits non-zero withempty-message; messages over 1,000 bytes exit non-zero withcommit-message-too-long.- When a commit is about to happen (
--messageis supplied, or sync is about to prompt for a message) and Gituser.emailoruser.nameis unset, the command exits non-zero withmissing-config. - When a catalog has uncommitted changes,
--messageis not supplied, and standard input or standard output is not a terminal, the command refuses withdirty-treeand exit code 33 without committing or pushing. - When another sync or save is already running on the same catalog, or another Git operation holds its index lock, the command exits non-zero with
another-sync-running. - When the commit of any catalog fails (for example, because its pre-commit hook fails), the other catalogs are skipped; their message reads
"Skipped after peer catalog failed earlier in the run.", and sync exits non-zero. - When any requested catalog fails to sync, the command exits non-zero (
sync-partialorsync-all-failed) and skips delivery. - When the Git host refuses the proposal push of a sync commit, or a change cannot be merged onto its waiting proposal, the command exits non-zero and puts those changes back in the catalog folder, uncommitted. When it refuses the proposal for local commits on the primary branch, the commits stay there and the next sync retries.
- When local commits on a review-branch catalog conflict with new commits on
origin, the command exits non-zero, skips delivery, and prints agit -C <clone> reset --soft <commit>command that stages only those local commits.
skc deliver
Deliver profiles to the enabled delivery targets, without pulling or pushing catalogs.
skc deliver [OPTIONS] [PROFILE_ID]This command is local-apply only and never touches Git. To pull upstream catalog changes and run delivery, use skc sync.
Flags:
--dry-run: compute the delivery report without writing files.--check: only check for drift between delivered files and the manifest. Exits non-zero (26) when drift is detected.--adopt-matching: take over existing files that already match what delivery would write, such as after the delivery record was lost. Useskc deliver <PROFILE_ID> --adopt-matchingfor one profile. Files with different content are never overwritten. Cannot be combined with--dry-runor--check.
Without --adopt-matching, delivery never takes over a file it did not write: an existing file at a delivery path is reported as unmanaged_target_exists and the command exits 25.
When some profiles or skills cannot be delivered, such as a profile entry that does not resolve, a missing checkout, a symbolic link in a skill folder, or a catalog whose proposal state is unknown, the healthy profiles and skills are still delivered, the rest are listed, and the command exits 25. Withheld skills keep the files they delivered earlier. The command exits 43, 44, or 45 only when no profile with entries could be delivered.
Positional PROFILE_ID is optional; when omitted every profile is delivered.
| Argument | Description |
|---|---|
[PROFILE_ID] | Deliver only the named profile. Omit to deliver every profile. |
--dry-run | Compute the delivery report without writing files. Cannot be combined with --check. |
--check | Check only for drift and return a non-zero exit if drift exists. |
--adopt-matching | Take over existing files that already match what delivery would write. Files with different content are never overwritten. Cannot be combined with --dry-run or --check. |
Output
- Execute mode writes enabled target files and prints the delivery summary.
--dry-runcomputes the delivery report without writing files.--checkinspects drift without changing files.--jsonreturns the standard SkillCatalog JSON envelope withcommand: "deliver"in every delivery mode.
Side effects
- Execute mode writes or removes files under enabled delivery targets; this command never pulls, commits, or pushes catalog changes.
--dry-runand--checkdo not write or remove delivered files.
Follow-on behavior
- To pull upstream catalog changes and run delivery in the same step, use
skc syncinstead ofskc deliver.
Exit status
--checkexits non-zero when drift is found.--dry-runand--checkcannot be combined.- Execute mode exits non-zero for delivery conflicts, delivery failures, or composition failures.
skc profile
Manage profiles and team manifests.
skc profile [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc profile list | List every known profile. |
skc profile show | Show one profile's name, folder, and entries. |
skc profile create | Create a personal profile for one folder. |
skc profile delete | Delete a profile and the skills it delivered. |
skc profile add | Add one entry to a profile. |
skc profile remove | Remove one entry from a profile. |
skc profile reorder | Replace a profile's entry ordering. |
skc profile init | Create the team manifest, .skillcatalog/skillcatalog.yml, in the folder where you run it. |
skc profile install | Install the project profile for the checkout where you run it, refreshing declared catalogs that are already registered. |
skc profile uninstall | Remove the project profile for the checkout where you run it. |
skc profile list
List every known profile.
skc profile list [OPTIONS]skc profile show
Show one profile's name, folder, and entries.
skc profile show [OPTIONS] <PROFILE_ID>| Argument | Description |
|---|---|
<PROFILE_ID> | Profile id to inspect. |
--effective | Show the profile combined with the entries it inherits from its team manifest. |
skc profile create
Create a personal profile for one folder.
skc profile create [OPTIONS] <NAME> <DIRECTORY>--entry is repeatable and accepts KIND:CATALOG_ID:SLUG. Each --entry adds one entry to the new profile; the referenced catalog id must already be registered with SkillCatalog and have a ready local clone. Supplying an --entry whose catalog id is not registered or not ready fails the whole command and saves no profile.
| Argument | Description |
|---|---|
<NAME> | Human-readable profile name. |
<DIRECTORY> | Absolute folder path, or ~ / ~/.... |
--catalog-id <CATALOG_ID> | Catalog id to check before the profile is created. The command fails unless that catalog has a ready local clone. |
--entry <KIND:CATALOG_ID:SLUG> | An entry for the new profile, in KIND:CATALOG_ID:SLUG form. Catalog id must be registered and have a ready local clone. Repeatable. |
Output
- By default this command prints the created profile id, display name, and folder.
--jsonreturns the created profile in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs save the profile in the SkillCatalog folder.
Exit status
- This command exits non-zero for invalid profile names, unsafe folders, id conflicts, unreadable profile files, or catalogs that are not ready, including
--entrycatalog ids that are not registered or have no ready local clones.
skc profile delete
Delete a profile and the skills it delivered.
skc profile delete [OPTIONS] <PROFILE_ID>| Argument | Description |
|---|---|
<PROFILE_ID> | Profile id to delete. |
Output
- By default this command prints the deleted profile id and delivery cleanup summary.
--jsonreturns the deleted profile id plus cleanup report in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs remove the profile from the SkillCatalog folder.
- Successful runs clean delivered files that belonged to the deleted profile.
Exit status
- This command exits non-zero when the profile cannot be deleted, when the Home profile is selected, or when delivery cleanup fails.
skc profile add
Add one entry to a profile.
skc profile add [OPTIONS] --kind <KIND> --slug <SLUG> --catalog-id <CATALOG_ID> <PROFILE_ID>| Argument | Description |
|---|---|
<PROFILE_ID> | Profile id to change. |
--kind <KIND> | Required. Entry kind. Allowed values: skill, stack, bundle. |
--slug <SLUG> | Required. Entry slug. The catalog must already have an item of this kind with this slug; otherwise nothing is added. |
--catalog-id <CATALOG_ID> | Required. Catalog id of the entry. The catalog must be registered and have a ready local clone. |
--position <POSITION> | Insert position, counting from 0. Defaults to the end of the list. |
Output
- By default this command prints a summary of the change and any delivery warning.
--jsonreturns the updated profile and any delivery warning in the standard JSON envelope.
Side effects
- For the Home profile and personal profiles, this command rewrites the profile's file in the SkillCatalog folder.
- For a project profile, it writes the change to the local manifest,
.skillcatalog/skillcatalog.local.yml, in the profile's checkout, and makes sure Git ignores that file.
Follow-on behavior
- After the change, SkillCatalog automatically reruns delivery for that profile and reports delivery conflicts, failed writes, or preserved edited files as warnings in the success output.
Exit status
- This command exits non-zero for missing profiles, invalid entries, or catalog clones that cannot be read.
skc profile remove
Remove one entry from a profile.
skc profile remove [OPTIONS] --kind <KIND> --slug <SLUG> --catalog-id <CATALOG_ID> <PROFILE_ID>| Argument | Description |
|---|---|
<PROFILE_ID> | Profile id to change. |
--kind <KIND> | Required. Entry kind. Allowed values: skill, stack, bundle. |
--slug <SLUG> | Required. Entry slug. |
--catalog-id <CATALOG_ID> | Required. Entry catalog id for the entry to remove. |
Output
- By default this command prints a summary of the change and any delivery warning.
--jsonreturns the updated profile and any delivery warning in the standard JSON envelope.
Side effects
- For the Home profile and personal profiles, this command rewrites the profile's file in the SkillCatalog folder.
- For a project profile, it writes the change to the local manifest,
.skillcatalog/skillcatalog.local.yml, in the profile's checkout, and makes sure Git ignores that file.
Follow-on behavior
- After the change, SkillCatalog automatically reruns delivery for that profile and reports delivery conflicts, failed writes, or preserved edited files as warnings in the success output.
Exit status
- This command exits non-zero for missing profiles, invalid entries, or catalog clones that cannot be read.
skc profile reorder
Replace a profile's entry ordering.
skc profile reorder [OPTIONS] --catalog-id <CATALOG_ID> --entry <KIND:CATALOG_ID:SLUG> <PROFILE_ID>| Argument | Description |
|---|---|
<PROFILE_ID> | Profile id to change. |
--catalog-id <CATALOG_ID> | Required. Must be a valid catalog id; the catalog id inside each --entry decides where that entry comes from. |
--entry <KIND:CATALOG_ID:SLUG> | Ordered entries in kind:catalog-id:slug format, as in skc init and skc profile create. Required and repeatable; reorder will not clear a profile's entry list. |
Output
- By default this command prints the reorder summary and any delivery warning.
--jsonreturns the updated profile and any delivery warning in the standard JSON envelope.
Side effects
- For the Home profile and personal profiles, this command rewrites the profile's file in the SkillCatalog folder with the
--entryorder exactly as provided. - For a project profile, it writes the new order to the local manifest,
.skillcatalog/skillcatalog.local.yml, in the profile's checkout, and makes sure Git ignores that file.
Follow-on behavior
- After the reorder, SkillCatalog automatically reruns delivery for that profile and reports delivery conflicts, failed writes, or preserved edited files as warnings in the success output.
Exit status
- This command exits non-zero for missing profiles, badly formed
--entryvalues, or catalog clones that cannot be read. --entryis required; without it, the command fails while the arguments are parsed. Reorder cannot delete entries. Useprofile removeto remove individual entries.
skc profile init
Create the team manifest, .skillcatalog/skillcatalog.yml, in the folder where you run it.
skc profile init [OPTIONS]This command does not search parent folders or use any other folder. It fails if this folder already contains .skillcatalog/skillcatalog.yml or a root-level skillcatalog.yml. --source accepts remote Git URLs only. Sources must not include passwords, tokens, query strings, or fragments.
--catalog-id is repeatable. When a --catalog-id is supplied without a paired --source, the URL comes from the registered catalog with that id. An unregistered catalog id without a paired --source is a user-input error.
--source is repeatable and positionally paired with the --catalog-id values: the i-th --source pairs with the i-th --catalog-id. Supply a remote Git URL.
Missing values are asked for only in a terminal. Without a terminal on standard input, or with --json, pass --catalog-id, --id, and --display-name; otherwise the command fails at once and names the missing flags.
| Argument | Description |
|---|---|
--source <SOURCE> | Catalog source as a remote Git URL. Repeatable; the i-th --source pairs with the i-th --catalog-id. Sources must not include passwords, tokens, query strings, or fragments. |
--catalog-id <CATALOG_ID> | Catalog id to write into the team manifest's catalogs: block. Repeatable. Without a paired --source, the URL comes from the registered catalog with that id. |
--id <SLUG> | Stable profile id written to the team manifest. |
--display-name <NAME> | Human-readable profile display name written to the team manifest. |
--entry <KIND[:CATALOG_ID]:SLUG> | Optional initial team manifest entry, repeated as kind:slug or kind:catalog_id:slug. |
Output
- By default this command prints the manifest path it wrote.
--jsonreturns the standard SkillCatalog JSON envelope.
Side effects
- Successful runs create
.skillcatalog/skillcatalog.ymlin the folder where you run the command.
Exit status
- This command exits non-zero when the current folder is not usable, when that folder already has a team manifest, when the manifest cannot be written, when the catalog source is not a remote Git URL without passwords, tokens, query strings, or fragments, or when required flags are missing and there is no terminal to ask for them.
skc profile install
Install the project profile for the checkout where you run it, refreshing declared catalogs that are already registered.
skc profile install [OPTIONS]This command reads .skillcatalog/skillcatalog.yml only from the folder where you run it. A root-level skillcatalog.yml is read when .skillcatalog/skillcatalog.yml is absent; having both is an error. It does not search parent folders for a manifest. It fails when this folder has no team manifest, when that manifest is malformed, or when profiles already on this machine conflict with it.
Delivery destination: --target-dir PATH selects an existing folder to deliver into. Relative paths resolve from the folder where you run the command; the resolved absolute path is saved only with the project profile in the SkillCatalog folder. Enabled tools keep their standard .agents/skills, .claude/skills, and .cursor/skills folders below it. Source manifests always come from the checkout where you run the command, even when the destination has its own manifest. Later installs without the flag, delivery, and updates reuse the saved destination. Without a saved override, delivery stays in the source checkout. Passing another destination moves the same profile there. Delivery removes obsolete delivered files you did not edit, and keeps edited files and files SkillCatalog did not write. A failed delivery can leave the new destination saved and some files changed; rerun after fixing the reported problem. Uninstall from the source checkout removes the delivered files, except edited ones.
Catalog refresh: a repeated install, or a first install whose declared catalogs were all already registered, refreshes those catalogs from their upstream sources before delivery; a first install that clones a catalog does not refresh anything. A declared catalog that this machine has not registered is cloned and registered, on a repeated install as on a first one, and the output names each catalog it registered. Only the catalogs this checkout's team and local manifests declare are refreshed, never every registered catalog. Each qualifying run fetches per declared catalog, so it needs network access to those sources; a failed refresh stops the install with catalog-refresh-failed instead of delivering stale content.
| Argument | Description |
|---|---|
--target-dir <PATH> | Deliver into this existing folder and save it for later runs; a relative path starts from the checkout. |
Output
- By default this command prints a summary of the install and of the delivery for this profile.
--jsonreturns the standard SkillCatalog JSON envelope.
Side effects
- Successful installs create or refresh the checkout's project profile in the SkillCatalog folder.
--target-dir PATHsaves an existing folder as the project profile's delivery destination; relative paths resolve from the checkout and are saved as absolute paths. Source manifests still come from that checkout.- Later installs without the flag, delivery, and updates reuse the saved destination. Enabled tools keep their standard skills folders. A different destination moves the same profile there, removing obsolete delivered files you did not edit and keeping edited files and files SkillCatalog did not write.
- A repeated install, or a first install whose declared catalogs were all already registered, updates those catalogs' clones from their upstream sources; a first install that clones a catalog does not.
Follow-on behavior
- Qualifying installs refresh the catalogs this checkout's team and local manifests declare, never every registered catalog, before delivery reads them.
- Each install then delivers the installed profile, and only that profile, right away.
- If that delivery reports conflicts or failed writes, the command exits non-zero with
delivery-failed.
Exit status
- This command exits non-zero for missing or malformed manifests, missing catalog content, profile conflicts, or delivery failures.
- A target that is empty, missing, or not a folder exits with
target-directory-invalidbefore profile save or destination writes. A failed delivery can leave the saved destination and partial file changes available for retry. - A declared catalog that cannot be refreshed exits non-zero with
catalog-refresh-failedbefore any profile is saved or delivered.
skc profile uninstall
Remove the project profile for the checkout where you run it.
skc profile uninstall [OPTIONS]This command removes the project profile installed for the folder where you run it. It does not search parent folders for a profile. It fails when no project profile is installed for this checkout.
Output
- By default this command prints a summary of the removed project profile and the delivered files it removed.
--jsonreturns the standard SkillCatalog JSON envelope.
Side effects
- Successful uninstalls remove this checkout's project profile from the SkillCatalog folder.
Follow-on behavior
- Successful uninstalls clean delivered files that belong only to the removed profile.
Exit status
- This command exits non-zero when no installed profile matches the checkout, when checkout ownership is inconsistent, or when delivery cleanup fails.
skc settings
Inspect or update application settings.
skc settings [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc settings show | Show the current settings. |
skc settings list | Alias for settings show. |
skc settings enable | Enable a delivery target. |
skc settings disable | Disable a delivery target. |
skc settings telemetry | Inspect or change shared usage metrics. |
skc settings show
Show the current settings.
skc settings show [OPTIONS]skc settings list
Alias for skc settings show, with the same arguments and behavior.
skc settings enable
Enable a delivery target.
skc settings enable [OPTIONS] <TARGET_ID>| Argument | Description |
|---|---|
<TARGET_ID> | Supported target id. Allowed values: claude-code, cursor, codex. |
Output
- By default this command prints whether the delivery target is now on or off, and any delivery warning.
--jsonreturns the target id, its newenabledvalue, any delivery warning, and the updated settings, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs save whether the delivery target is on or off in
settings.toml.
Follow-on behavior
- After saving settings, SkillCatalog attempts delivery for all profiles and reports delivery conflicts, failed writes, or preserved edited files as warnings while keeping the settings change.
Exit status
- This command exits non-zero for unsupported target ids, or when
settings.tomlcannot be saved.
skc settings disable
Disable a delivery target.
skc settings disable [OPTIONS] <TARGET_ID>| Argument | Description |
|---|---|
<TARGET_ID> | Supported target id. Allowed values: claude-code, cursor, codex. |
Output
- By default this command prints whether the delivery target is now on or off, and any delivery warning.
--jsonreturns the target id, its newenabledvalue, any delivery warning, and the updated settings, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs save whether the delivery target is on or off in
settings.toml.
Follow-on behavior
- After saving settings, SkillCatalog attempts delivery for all profiles and reports delivery conflicts, failed writes, or preserved edited files as warnings while keeping the settings change.
Exit status
- This command exits non-zero for unsupported target ids, or when
settings.tomlcannot be saved.
skc settings telemetry
Inspect or change shared usage metrics.
skc settings telemetry [OPTIONS]Inspect or change shared usage metrics for the SkillCatalog desktop app and skc.
A catalog's owner can name a metrics address in the catalog's catalog.yaml. While usage metrics are on, SkillCatalog sends anonymous usage counts to that address. Metrics contain command outcomes and durations, and counts about that catalog and its skills, stacks, and bundles, named by id and slug. Counts about catalogs without an address are never sent.
Usage metrics are on by default. With no flag, this command shows the switch and the catalogs that declare a metrics address.
| Argument | Description |
|---|---|
--enable | Turn usage metrics on for the desktop app and skc. Cannot be combined with --disable. |
--disable | Turn usage metrics off for the desktop app and skc, and discard unsent counts. Cannot be combined with --enable. |
skc catalog
Manage registered catalogs and their sync policy.
skc catalog [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc catalog add | Register and clone a catalog from a remote Git URL. |
skc catalog list | List registered catalogs. |
skc catalog remove | Unregister a catalog by id. |
skc catalog stats | Count readable skills, stacks, and bundles in one catalog. |
skc catalog changes | Show pending local changes across registered catalogs. |
skc catalog policy | Show or change a catalog's sync policy. |
skc catalog add
Register and clone a catalog from a remote Git URL.
skc catalog add [OPTIONS] <URL>This command accepts only remote Git URLs via SSH, ssh://, or HTTP(S) without passwords, tokens, query strings, or fragments.
| Argument | Description |
|---|---|
<URL> | Catalog source as a remote Git URL without passwords, tokens, query strings, or fragments. |
--metrics-url <ADDRESS> | Metrics address for a catalog this command creates in an empty repository. SkillCatalog saves it in the new catalog.yaml as metrics_url. Everyone who adds the catalog then sends anonymous usage counts to it. If the repository already has a catalog, SkillCatalog adds that catalog without the address and prints a warning. The address starts with http:// or https://, ends in /v1/metrics, and has no user name, password, query, or fragment. |
Output
- By default this command prints the added or already-registered catalog and its clone path when known.
--jsonreturns the catalog registration in the standard SkillCatalog JSON envelope.- When SkillCatalog does not save the
--metrics-urladdress, it prints a warning on standard error, and--jsonholds it indata.metrics_url_warning.
Side effects
- Successful fresh additions register the catalog and clone it into the SkillCatalog folder, under
catalogs/. - When the remote repository is empty, a fresh addition also writes starter files (
catalog.yaml,README.md, andskills,stacks, andbundlesfolders), commits them, and pushes that commit. - With
--metrics-url, adding an empty repository also writes the address into the newcatalog.yamlasmetrics_url. - Fresh additions add SkillCatalog's pre-commit hook to the clone, which checks each commit to the catalog without the drift checks.
- SkillCatalog rewrites its own block in that hook when it syncs or saves the catalog, so the hook runs the current
skc; a hook without SkillCatalog's markers is left alone. - Adding a source that is already registered changes nothing.
- For a repository that already has a catalog, or a source that is already registered,
--metrics-urlsaves nothing. The add runs as it would without the flag, and SkillCatalog prints a warning.
Exit status
- This command exits non-zero for non-remote sources, sources with passwords, tokens, query strings, or fragments, clone failures, unreadable clones, or registry conflicts.
skc catalog list
List registered catalogs.
skc catalog list [OPTIONS]skc catalog remove
Unregister a catalog by id.
skc catalog remove [OPTIONS] <CATALOG_ID>| Argument | Description |
|---|---|
<CATALOG_ID> | Catalog id (from catalog.yaml). Must match a registered catalog; unknown ids fail with catalog-not-found. |
--keep-clone | Keep the catalog's clone folder on disk after unregistering. |
--force | Skip the in-use check and unregister the catalog even when profiles use it. Their entries stay as they are, and those profiles are not delivered until you remove the entries with skc profile remove <profile-id> --kind <kind> --slug <slug> --catalog-id <id>. A registration that cannot be read can also be removed this way; its local files are always kept. |
Output
- By default this command prints the removed catalog and whether the clone was removed or kept.
--jsonreturns the removed catalog pluskept_cloneandclone_removedfields in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs unregister the catalog.
- By default this command removes the catalog's clone folder when the registration records one.
--keep-cloneleaves the clone folder on disk after unregistering.- Removing a catalog deletes its local folder, including changes not yet synced;
--keep-clonekeeps the folder.
Exit status
- This command exits non-zero with
catalog-remove-in-usewhen any profile still uses the catalog: through its own entries, its checkout's local manifest, or its team manifest. - The refusal lists one
skc profile remove <profile-id> --kind <kind> --slug <slug> --catalog-id <id>command per entry, including entries in a checkout's local manifest. A catalog that a team manifest declares stays in use after its entries are excluded, untilskc uninstallruns in that checkout. - Rerun with
--forceto unregister anyway. Profiles with entries from the catalog are not delivered until those entries are removed; other profiles still deliver, and delivery exits non-zero. - This command exits non-zero for unknown catalog ids or when the clone folder cannot be deleted safely.
skc catalog stats
Count readable skills, stacks, and bundles in one catalog.
skc catalog stats [OPTIONS] <CATALOG_ID>| Argument | Description |
|---|---|
<CATALOG_ID> | Catalog id (from catalog.yaml). Must match a registered catalog; unknown ids fail with catalog-not-found. |
skc catalog changes
Show pending local changes across registered catalogs.
skc catalog changes [OPTIONS] [CATALOG_ID]...| Argument | Description |
|---|---|
[CATALOG_ID]... | Catalog ids (from catalog.yaml) to inspect. Without a selector, every registered catalog is inspected. |
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml) to inspect. May be repeated. |
skc catalog policy
Show or change a catalog's sync policy.
skc catalog policy [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc catalog policy show | Show a catalog's sync policy. |
skc catalog policy set | Set a catalog's sync policy. |
skc catalog policy show
Show a catalog's sync policy.
skc catalog policy show [OPTIONS] <CATALOG_ID>| Argument | Description |
|---|---|
<CATALOG_ID> | Catalog id (from catalog.yaml). Must match a registered catalog; unknown ids fail with catalog-not-found. |
skc catalog policy set
Set a catalog's sync policy.
skc catalog policy set [OPTIONS] <CATALOG_ID> <COMMAND>| Argument | Description |
|---|---|
<CATALOG_ID> | Catalog id (from catalog.yaml). Must match a registered catalog; unknown ids fail with catalog-not-found. |
| Subcommand | Description |
|---|---|
skc catalog policy set <CATALOG_ID> direct | Pull and push SkillCatalog commits on the same branch. |
skc catalog policy set <CATALOG_ID> review-branch | Pull from primary and push each change as a proposal on its own branch. |
skc catalog policy set direct
Pull and push SkillCatalog commits on the same branch.
skc catalog policy set <CATALOG_ID> direct [OPTIONS]skc catalog policy set review-branch
Pull from primary and push each change as a proposal on its own branch.
skc catalog policy set <CATALOG_ID> review-branch [OPTIONS] --primary <PRIMARY> --review <REVIEW>| Argument | Description |
|---|---|
--primary <PRIMARY> | Required. Branch that SkillCatalog pulls from, for example main. |
--review <REVIEW> | Required. Review branch, for example skillcatalog/<catalog-id>, the desktop default. Each proposal gets its own branch: this name without its last segment, then the catalog id, then the proposal, such as skillcatalog/<catalog-id>/<proposal-id>-<item>. Must differ from --primary. |
skc proposal
Manage active local proposal records and remote-only branches.
skc proposal [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc proposal list | List active local proposal records. |
skc proposal show | Show one proposal record by id. |
skc proposal refresh | Check one or every active proposal on the Git host and update its record. |
skc proposal discard | Discard an active proposal record (transitions to Discarded). |
skc proposal verify-clean | Check the local setup that proposals need in registered catalog clones. |
skc proposal list
List active local proposal records.
skc proposal list [OPTIONS]| Argument | Description |
|---|---|
--catalog-id <CATALOG_ID> | Restrict listing to one catalog id (default: every registered catalog). |
--include-remote-only | Also list proposal branches that exist only on the Git host. At most remote_only_discovery_cap branches are listed; set it in the [proposals] section of settings.toml (default 200, also used when settings cannot be read). |
skc proposal show
Show one proposal record by id.
skc proposal show [OPTIONS] <PROPOSAL_ID>| Argument | Description |
|---|---|
<PROPOSAL_ID> | Proposal id (ULID, 26 chars). |
--catalog-id <CATALOG_ID> | Restrict to one catalog id (default: search every registered catalog). |
skc proposal refresh
Check one or every active proposal on the Git host and update its record.
skc proposal refresh [OPTIONS] [PROPOSAL_ID]| Argument | Description |
|---|---|
[PROPOSAL_ID] | Optional proposal id; if omitted, refreshes every active record across every registered catalog. |
--catalog-id <CATALOG_ID> | Restrict to one catalog id. |
skc proposal discard
Discard an active proposal record (transitions to Discarded).
skc proposal discard [OPTIONS] <PROPOSAL_ID>| Argument | Description |
|---|---|
<PROPOSAL_ID> | Proposal id (ULID, 26 chars). |
--catalog-id <CATALOG_ID> | Restrict to one catalog id. |
skc proposal verify-clean
Check the local setup that proposals need in registered catalog clones.
skc proposal verify-clean [OPTIONS] [CATALOG_ID]| Argument | Description |
|---|---|
[CATALOG_ID] | Restrict the check to one catalog id (default: every registered catalog). |
skc skill
Inspect, score, and improve skills in registered catalogs.
skc skill [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc skill list | List skills from every registered catalog, or from one catalog. |
skc skill show | Show one skill from a registered catalog. |
skc skill score | Score one skill from a catalog. |
skc skill improve | Generate, save, or apply a scored improvement proposal for one skill from a catalog. |
skc skill publish-accepted | Publish a reviewed improvement that has already been accepted. |
skc skill score-history | Show scoring history for one skill from a catalog. |
skc skill list
List skills from every registered catalog, or from one catalog.
skc skill list [OPTIONS] [CATALOG_ID]Without a filter, the command lists every registered catalog, one group per catalog. Pass --catalog-id <CATALOG_ID> to list only that catalog.
A positional CATALOG_ID also works as an alias for --catalog-id. Supplying both the positional and --catalog-id with different values is a user-input error.
A skill that cannot be read is left out of the list and does not stop the listing: text output prints a warning line for it on standard error, and --json lists it under invalid_items with its slug, path, and error. skc validate still reports it.
| Argument | Description |
|---|---|
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml) to list. Must match a registered catalog; unknown ids fail with catalog-not-found. |
[CATALOG_ID] | Positional alias for --catalog-id. Supplying both forms with different values is rejected. |
--compact | Omit full skill bodies from JSON output. |
skc skill show
Show one skill from a registered catalog.
skc skill show [OPTIONS] <ARGS>...Use either the positional form skc skill show <CATALOG_ID> <SLUG> or the explicit flag form skc skill show <SLUG> --catalog-id <CATALOG_ID>.
The catalog id must match a registered catalog; unknown ids fail with catalog-not-found.
| Argument | Description |
|---|---|
<ARGS>... | Positional arguments. Use <CATALOG_ID> <SLUG> without --catalog-id, or <SLUG> with --catalog-id. |
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml). Must match a registered catalog; unknown ids fail with catalog-not-found. |
skc skill score
Score one skill from a catalog.
skc skill score [OPTIONS] <SLUG>| Argument | Description |
|---|---|
<SLUG> | Skill slug. |
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml). If omitted, uses the catalog last chosen in the desktop app. |
--model <MODEL> | Use this model instead of the AI provider's saved or default model. Passed to the provider's command-line tool (claude --model <name> or codex -m <name>). The model_id saved in SCORE.json is the model id the provider reports, which can differ from the name you pass. |
Output
- On success, this command prints its result as raw JSON to standard output.
- Successful scoring output contains the appended
historyplus thenew_run_idfor the run that just completed, and may includeprovider_failureswhen one or more providers failed after another provider succeeded. - It can also include
provider_warnings, which lists AI providers that failed while another succeeded, and AI provider text that SkillCatalog cleaned up before using it. --quietprints the same JSON and hides the AI provider's progress and output.- Successful scoring output does not use the standard SkillCatalog JSON envelope, even when
--jsonis present. --jsonalso hides the AI provider's progress and output, so--quiet --jsonprints the same as--json.- Scoring rates the skill against a rubric built into SkillCatalog, using the AI providers enabled in
settings.toml. --catalog-idselects a registered catalog explicitly; when omitted, the catalog last chosen in the desktop app is used.- Failures print a JSON error envelope on standard error, even without
--json. Problems choosing the catalog print as plain text unless--jsonis present. The command fails only when no AI provider's result can be saved, or another check fails.
Side effects
- Successful runs add the run to the skill's
SCORE.json, with the scores of the AI providers that succeeded. - This command does not modify
SKILL.mdor other catalog source files.
Exit status
- This command exits non-zero when no catalog can be selected, when the selected catalog clone is unreadable, when the selected catalog is the Essentials catalog, which is read-only, when no enabled AI provider is usable, when every AI provider that runs fails, when the skill is a single file such as
skills/review-checklist.mdorskills/review-checklist.yaml, which scoring does not support (move it toskills/review-checklist/SKILL.mdand retry), or when a scoring run for the same catalog and skill is already in progress.
skc skill improve
Generate, save, or apply a scored improvement proposal for one skill from a catalog.
skc skill improve [OPTIONS] [SLUG]| Argument | Description |
|---|---|
[SLUG] | Skill slug. |
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml). If omitted, uses the catalog last chosen in the desktop app. |
--model <MODEL> | Use this model instead of the AI provider's saved or default model. Passed to the provider's command-line tool (claude --model <name> or codex -m <name>). The model_id saved with the improvement proposal is the model id the provider reports, which can differ from the name you pass. |
--dry-run | Preview the proposal without writing the catalog. This is the default. Cannot be combined with --apply or --apply-proposal. |
--proposal-out <PATH> | Write a reviewed proposal document during preview without changing the catalog. Cannot be combined with --apply-proposal. |
--apply-proposal <PATH> | Apply a reviewed proposal document without regenerating the proposal. Cannot be combined with --apply, --dry-run, or --proposal-out. |
--apply | Generate and apply a proposal in one run, then add its scores to SCORE.json. Cannot be combined with --apply-proposal. |
Output
- By default this command prints a scored improvement proposal: the AI provider and model, the old score, the new score, the change, any AI provider warnings, and the diff between the current
SKILL.mdand the rewrite. --dry-runis the same as the default preview mode, which changes nothing.--proposal-out <path>writes a reviewed proposal document during preview, without changing the catalog.--apply-proposal <path>applies that reviewed proposal document as it is, without generating a new proposal or calling the AI providers again.--applygenerates and applies a new proposal in one run, then adds the rewrite's scores toSCORE.json.--jsonreturns the standard SkillCatalog JSON envelope withmode: dry-run,mode: reviewed-apply, ormode: generate-and-apply.--quietprints a shorter summary, still with any warnings and publish guidance, and hides the AI provider's progress and output.--jsonalso hides the AI provider's progress and output, so--quiet --jsonreturns the same JSON envelope as--json.- With
--json,data.provider_warningslists AI providers that failed while another succeeded, and AI provider text that SkillCatalog cleaned up before using it. --catalog-idselects a registered catalog explicitly; when omitted, the catalog last chosen in the desktop app is used.
Side effects
- Default and
--dry-runmode never writeSKILL.md,SCORE.json, delivery targets, commits, or remote branches. --proposal-out <path>writes only the reviewed proposal document, at the path you give.--apply-proposal <path>writes the reviewed proposal'sSKILL.mdand adds the rewrite's scores to that skill'sSCORE.json.--applywrites the generated proposal'sSKILL.mdand adds the rewrite's scores to that skill'sSCORE.json.- The AI providers never edit
SCORE.json; only SkillCatalog's scoring writes it.
Follow-on behavior
- Review the preview before you use
--proposal-outor--apply. - After
--apply-proposal, the output tells you how to publish the rewrite withskc skill publish-accepted. skc skill publish-acceptedchecks the acceptedSKILL.mdand its scores, commits onlySKILL.mdandSCORE.json, then runs delivery only when the push settled and no unrelated changes are pending.
Exit status
--apply-proposalcannot be combined with--dry-run,--proposal-out, or--apply, and--dry-runcannot be combined with--apply; these combinations fail while the arguments are parsed. Combining--proposal-outwith--applyfails with aproposal-out-with-applyerror before any provider runs, because--applygenerates and applies in one run and does not produce a reviewed proposal document.- This command exits non-zero when no catalog can be selected, when a reviewed proposal document is missing, malformed, invalid, out of date, or for a different catalog or skill, when
SCORE.jsonhas no score for the currentSKILL.md(runskc skill scorefirst), when every AI provider fails to write a rewrite, when every rewrite is invalid, when no AI provider can score the rewrite, when the selected catalog is the Essentials catalog, which is read-only, or when the skill changes before apply. - When one AI provider fails or writes an invalid rewrite and another produces a valid, scored proposal, the command succeeds and shows the failure as a warning.
skc skill publish-accepted
Publish a reviewed improvement that has already been accepted.
skc skill publish-accepted [OPTIONS] --proposal <PATH> --message <MESSAGE>| Argument | Description |
|---|---|
--proposal <PATH> | Required. Reviewed proposal document created by skc skill improve --proposal-out. |
--message <MESSAGE> | Required. Commit message for the accepted skill publish commit. |
--update-proposal <PROPOSAL_ID> | Add this commit to the active proposal with this id instead of creating a new proposal. Mutually exclusive with --new-proposal. The id is the 26-character proposal id that skc proposal list shows. A malformed id fails while the arguments are parsed, before any catalog work starts. With --json, data.userSaveChoice reports the choice. |
--new-proposal | Create a new proposal even when an active proposal already covers this skill. Mutually exclusive with --update-proposal. With --json, data.userSaveChoice reports the choice. |
Output
- By default this command prints a summary: the commit, push, and delivery status, the committed files, and any other changed files it left uncommitted.
--jsonreturns the standard SkillCatalog JSON envelope withcommand: "skill.publish-accepted"and the same commit, push, delivery, and preserved-path fields.- The command reports success only when the commit status is
committedornothing_to_commit, the push status ispushed,nothing_to_push, orlocal_only, and the delivery status isdelivery_allowed. These are the JSON values; the summary prints them as words, such asnothing to commit. - With
--json, failures print a JSON error envelope on standard error, withcommand: "skill.publish-accepted".
Side effects
- Successful runs commit only
skills/<slug>/SKILL.mdandskills/<slug>/SCORE.jsonof the accepted rewrite, push, and then run delivery. - This command never commits other files: other changes in the catalog, such as to
taxonomy.yamlor the skill's companion files, stay uncommitted.
Follow-on behavior
- After a successful publish the durable accepted-improvement handoff is cleared: SkillCatalog deletes its saved record of the accepted rewrite, so the desktop app and the CLI stop offering to publish or keep it.
- If the commit fails, the push fails or is skipped after a commit, or delivery is blocked, fails, or is not reached, the durable handoff is preserved: SkillCatalog keeps the record, so you can publish again without running apply again.
Exit status
- This command exits non-zero when the reviewed proposal is missing, malformed, invalid, out of date, or for a different catalog or skill, when the accepted
SKILL.mdhas no scores inSCORE.json, when the selected catalog is the Essentials catalog, which is read-only, when the commit fails, when the push fails or is skipped after a commit, when a failed push or other uncommitted changes in the catalog stop delivery, when delivery fails, or when delivery is not reached. - JSON error envelopes always have
command: "skill.publish-accepted". When the commit, push, or delivery step fails,error.details.kindis one ofpublish_commit_failed,publish_push_failed,publish_push_skipped,publish_delivery_blocked_by_push,publish_delivery_blocked_by_unrelated_changes,publish_delivery_failed, orpublish_delivery_not_reached.
skc skill score-history
Show scoring history for one skill from a catalog.
skc skill score-history [OPTIONS] <SLUG>| Argument | Description |
|---|---|
<SLUG> | Skill slug. |
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml). If omitted, uses the catalog last chosen in the desktop app. |
--repair | Trim a SCORE.json that is too large to read, keeping a backup, before showing the history. |
Output
- On success, this command prints the skill's score history as raw JSON to standard output.
- Successful history output contains the skill slug and every run in the skill's
SCORE.json, oldest first. --quietprints the same JSON.- Successful history output does not use the standard SkillCatalog JSON envelope, even when
--jsonis present. --quiet --jsonprints the same JSON as--json.--catalog-idselects a registered catalog explicitly; when omitted, the catalog last chosen in the desktop app is used.- Failures print a JSON error envelope on standard error, even without
--json. Problems choosing the catalog print as plain text unless--jsonis present.
Side effects
--repairrewritesSCORE.jsonin the clone and keeps the original under<config>/score-history-backups/<catalog-id>/<slug>/.
Exit status
- This command exits non-zero when no catalog can be selected, when the selected catalog clone is unreadable, when the skill is a single file such as
skills/review-checklist.mdorskills/review-checklist.yaml, which scoring does not support (move it toskills/review-checklist/SKILL.mdand retry), or whenSCORE.jsoncannot be read.
skc score-history
Alias for skc skill score-history, with the same arguments and behavior.
skc scoring
Manage scoring settings.
skc scoring [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc scoring providers | List AI providers and change their settings. |
skc scoring providers
List AI providers and change their settings.
skc scoring providers [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc scoring providers list | List AI providers, with whether each is enabled and usable. |
skc scoring providers enable | Enable one AI provider for scoring. |
skc scoring providers disable | Disable one AI provider for scoring. |
skc scoring providers set-model | Save the model that one AI provider uses. |
skc scoring providers set-effort | Save the reasoning effort that one AI provider uses. |
skc scoring providers clear-model | Clear the saved model of one AI provider. |
skc scoring providers clear-effort | Clear the saved reasoning effort of one AI provider. |
skc scoring providers list
List AI providers, with whether each is enabled and usable.
skc scoring providers list [OPTIONS]Output
- By default this command prints a table with one row per AI provider: its id, whether it is enabled and usable, its auth mode, credential source, readiness, saved model and effort, and display name.
--jsonreturns the same details for each AI provider in the standard SkillCatalog JSON envelope, with readiness underlocal_readiness.
Exit status
- This command exits non-zero when
settings.tomlcannot be read, or when checking an enabled AI provider fails.
skc scoring providers enable
Enable one AI provider for scoring.
skc scoring providers enable [OPTIONS] <PROVIDER_ID>| Argument | Description |
|---|---|
<PROVIDER_ID> | Provider id: claude-code-local or codex-local. |
Output
- By default this command prints the id of the AI provider it enabled.
--jsonreturns the provider id, its newenabledvalue, and the updated provider list, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs save the AI provider as enabled for scoring in
settings.toml.
Follow-on behavior
- Future
skc skill scoreruns use this AI provider when its command-line tool is installed and signed in.
Exit status
- This command exits non-zero for unknown provider ids or settings read and write failures.
- An enabled AI provider takes part in scoring only once it is usable, that is, once its command-line tool is installed and signed in.
skc scoring providers disable
Disable one AI provider for scoring.
skc scoring providers disable [OPTIONS] <PROVIDER_ID>| Argument | Description |
|---|---|
<PROVIDER_ID> | Provider id: claude-code-local or codex-local. |
Output
- By default this command prints the id of the AI provider it disabled.
--jsonreturns the provider id, its newenabledvalue, and the updated provider list, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs save the AI provider as disabled for scoring in
settings.toml.
Follow-on behavior
- Future
skc skill scoreruns skip this AI provider.
Exit status
- This command exits non-zero for unknown provider ids or settings read and write failures.
skc scoring providers set-model
Save the model that one AI provider uses.
skc scoring providers set-model [OPTIONS] <PROVIDER_ID> <MODEL>| Argument | Description |
|---|---|
<PROVIDER_ID> | Provider id: claude-code-local or codex-local. |
<MODEL> | Model name to save for this AI provider. Must not be empty. Use clear-model to remove a saved model. |
Output
- By default this command prints a confirmation with the provider id and the new model.
--jsonreturns the provider id,field: "model", the savedvalue, and the updated provider list, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs save the
modelkey for the AI provider under[scoring.enabled_providers.<provider-id>]insettings.toml.
Follow-on behavior
- Future
skc skill scoreandskc skill improveruns pass the saved model to the AI provider's command-line tool, unless the run's own--modelflag overrides it.
Exit status
- This command exits non-zero for unknown provider ids, an empty
<MODEL>value (useclear-modelto remove the saved value), or whensettings.tomlcannot be read or written.
skc scoring providers set-effort
Save the reasoning effort that one AI provider uses.
skc scoring providers set-effort [OPTIONS] <PROVIDER_ID> <EFFORT>| Argument | Description |
|---|---|
<PROVIDER_ID> | Provider id: claude-code-local or codex-local. |
<EFFORT> | Reasoning effort to save for this AI provider. It must be a level the provider supports. Use clear-effort to remove a saved effort. |
Output
- By default this command prints a confirmation with the provider id and the new effort.
--jsonreturns the provider id,field: "effort", the savedvalue, and the updated provider list, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs save the
effortkey for the AI provider under[scoring.enabled_providers.<provider-id>]insettings.toml.
Follow-on behavior
- Future
skc skill scoreandskc skill improveruns pass the saved effort to the AI provider's command-line tool. No flag overrides it for a single run.
Exit status
- This command exits non-zero for unknown provider ids, an empty
<EFFORT>value (useclear-effortto remove the saved value), effort values the provider does not support, or whensettings.tomlcannot be read or written.
skc scoring providers clear-model
Clear the saved model of one AI provider.
skc scoring providers clear-model [OPTIONS] <PROVIDER_ID>| Argument | Description |
|---|---|
<PROVIDER_ID> | Provider id: claude-code-local or codex-local. |
Output
- By default this command prints a confirmation with the id of the AI provider whose saved model it cleared.
--jsonreturns the provider id,field: "model",value: null, and the updated provider list, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs remove the
modelkey for the AI provider from[scoring.enabled_providers.<provider-id>]insettings.toml, and keep itsenabledandeffortkeys.
Follow-on behavior
- Future
skc skill scoreandskc skill improveruns use the default model of the AI provider's command-line tool, unless the run's own--modelflag names one.
Exit status
- This command exits non-zero for unknown provider ids or settings read and write failures.
skc scoring providers clear-effort
Clear the saved reasoning effort of one AI provider.
skc scoring providers clear-effort [OPTIONS] <PROVIDER_ID>| Argument | Description |
|---|---|
<PROVIDER_ID> | Provider id: claude-code-local or codex-local. |
Output
- By default this command prints a confirmation with the id of the AI provider whose saved effort it cleared.
--jsonreturns the provider id,field: "effort",value: null, and the updated provider list, in the standard SkillCatalog JSON envelope.
Side effects
- Successful runs remove the
effortkey for the AI provider from[scoring.enabled_providers.<provider-id>]insettings.toml, and keep itsenabledandmodelkeys.
Follow-on behavior
- Future
skc skill scoreandskc skill improveruns pass no effort to the AI provider's command-line tool, so it uses its own default.
Exit status
- This command exits non-zero for unknown provider ids or settings read and write failures.
skc stack
Inspect stacks in registered catalogs.
skc stack [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc stack list | List stacks from every registered catalog, or from one catalog. |
skc stack show | Show one stack from a registered catalog. |
skc stack list
List stacks from every registered catalog, or from one catalog.
skc stack list [OPTIONS] [CATALOG_ID]Without a filter, the command lists every registered catalog, one group per catalog. Pass --catalog-id <CATALOG_ID> to list only that catalog.
A positional CATALOG_ID also works as an alias for --catalog-id. Supplying both the positional and --catalog-id with different values is a user-input error.
| Argument | Description |
|---|---|
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml) to list. Must match a registered catalog; unknown ids fail with catalog-not-found. |
[CATALOG_ID] | Positional alias for --catalog-id. Supplying both forms with different values is rejected. |
skc stack show
Show one stack from a registered catalog.
skc stack show [OPTIONS] <ARGS>...Use either the positional form skc stack show <CATALOG_ID> <SLUG> or the explicit flag form skc stack show <SLUG> --catalog-id <CATALOG_ID>.
The catalog id must match a registered catalog; unknown ids fail with catalog-not-found.
| Argument | Description |
|---|---|
<ARGS>... | Positional arguments. Use <CATALOG_ID> <SLUG> without --catalog-id, or <SLUG> with --catalog-id. |
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml). Must match a registered catalog; unknown ids fail with catalog-not-found. |
skc bundle
Inspect bundles in registered catalogs.
skc bundle [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc bundle list | List bundles from every registered catalog, or from one catalog. |
skc bundle show | Show one bundle from a registered catalog. |
skc bundle list
List bundles from every registered catalog, or from one catalog.
skc bundle list [OPTIONS] [CATALOG_ID]Without a filter, the command lists every registered catalog, one group per catalog. Pass --catalog-id <CATALOG_ID> to list only that catalog.
A positional CATALOG_ID also works as an alias for --catalog-id. Supplying both the positional and --catalog-id with different values is a user-input error.
| Argument | Description |
|---|---|
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml) to list. Must match a registered catalog; unknown ids fail with catalog-not-found. |
[CATALOG_ID] | Positional alias for --catalog-id. Supplying both forms with different values is rejected. |
skc bundle show
Show one bundle from a registered catalog.
skc bundle show [OPTIONS] <ARGS>...Use either the positional form skc bundle show <CATALOG_ID> <SLUG> or the explicit flag form skc bundle show <SLUG> --catalog-id <CATALOG_ID>.
The catalog id must match a registered catalog; unknown ids fail with catalog-not-found.
| Argument | Description |
|---|---|
<ARGS>... | Positional arguments. Use <CATALOG_ID> <SLUG> without --catalog-id, or <SLUG> with --catalog-id. |
--catalog-id <CATALOG_ID> | Catalog id (from catalog.yaml). Must match a registered catalog; unknown ids fail with catalog-not-found. |
skc validate
Check catalogs, profiles, settings, delivered files, and the team manifest in this folder.
skc validate [OPTIONS]| Argument | Description |
|---|---|
--drift | Run only the drift checks. |
--settings | Run only the settings-file checks. |
--profiles | Run only the checks of profile files in the SkillCatalog folder. |
--manifest | Run only the team manifest checks for the current checkout. |
--path <PATH> | Limit catalog, drift, or manifest validation to a specific path. |
--no-drift | Skip the drift checks that a full run includes. Cannot be combined with --drift. |
--warnings-ok | Exit successfully when diagnostics are warnings only. |
Output
- By default this command prints human-readable diagnostics for any failing checks.
--jsonreturns the standard SkillCatalog JSON envelope.
Exit status
- The default run includes drift checks unless
--no-driftis set. - Errors exit non-zero; warnings do too unless
--warnings-okis set. Informational findings never fail validation. --driftand--no-driftcannot be combined.- When
--pathpoints at a catalog root, validation scopes catalog checks and drift to that catalog. - Catalog checks treat missing
stacksandbundlesfolders as empty, like the rest of SkillCatalog, and report a missingskillsfolder, symbolic links that delivery would refuse in skill folders, and leftover Git conflict markers outside fenced code as errors.
skc hook
Run the check that a catalog's pre-commit hook calls. Not for direct use.
skc hook [OPTIONS] <COMMAND>| Subcommand | Description |
|---|---|
skc hook run | Run the check that a catalog's pre-commit hook calls. |
skc hook run
Run the check that a catalog's pre-commit hook calls.
skc hook run [OPTIONS] --protocol <PROTOCOL> --path <PATH>| Argument | Description |
|---|---|
--protocol <PROTOCOL> | Required. Hook protocol version, set by the hook. |
--path <PATH> | Required. Catalog clone to check. |
skc status
Show your catalogs, profiles, tools, and drift.
skc status [OPTIONS]Output
- By default this command prints registered catalogs, profiles, enabled delivery targets, and drift counts.
--jsonreturns the standard SkillCatalog JSON envelope with the same summary.
Exit status
- This command exits non-zero with
status-inconsistent-statewhen validating profile files, settings, or catalogs finds errors or warnings. Runskc validatefor diagnostics.
skc completions
Generate shell completions for skc.
skc completions [OPTIONS] <SHELL>| Argument | Description |
|---|---|
<SHELL> | Target shell for the generated completion script. Allowed values: bash, zsh, fish, powershell. |
Output
- This command always prints a shell completion script to standard output.
- It does not use the standard JSON envelope, even when
--jsonis present.
skc help-json
Print the full command tree as JSON.
skc help-json [OPTIONS]Output
- This command always prints raw JSON to standard output.
- It does not use the standard JSON envelope, even when
--jsonis present. - The JSON describes every command and argument, including the built-in help and version flags, aliases, options that cannot be combined, and these behavior notes.