skit

CLI reference

Every command, flag, and exit code.

Plain skit opens the TUI menu. Everything below is the scriptable surface — the same actions, deterministic behavior.

Conventions

  • --json on every read command: list, show, params, deps, preset list, runner list, doctor, config.
  • --no-input on commands that can prompt: add, run, remove, edit, runner remove, and preset delete. Read commands never prompt and do not take it.
  • -y or --yes confirms remove, runner remove, and preset delete. Use this option only after the user approves the operation.
  • --dry-run on run only: prints the exact command — tokens and globs expanded — and runs nothing.
  • Non-interactive contract: in a pipe, in CI, or under --no-input, skit never prompts and never guesses — it fails fast with a named error. "Interactive" requires both stdin and stdout to be TTYs.
  • Shell completion is dynamic: entry names, preset names, and runner names all complete.

Global flags

FlagEffect
--data-dir PATHuse a specific skit data directory for this command
--install-completioninstall completion for the current shell
--show-completionprint completion for the current shell

Exit codes

CodeMeaning
0success
2usage error — bad flag combination, unknown --set name, unknown preset, a flag refused for the entry's type
125skit-side failure — missing/invalid parameter value, drift, token expansion error, over-long rendered command
126the target exists but cannot run — missing interpreter or JS runtime, a needs command absent from PATH, no runner resolvable for a prompt
127no such entry in the library
130user cancelled an interactive screen (128 + SIGINT)

skit run passes the launched process's own exit code through untouched — even 125–127 (docker convention: 1–124 always belong to your script). A script killed by signal N reports 128+N, matching POSIX shells. skit doctor's exit code reflects uv availability only (0 = present or not needed, 1 = required but missing); per-entry warnings never change it.

skit add

skit add [PATH] — add a script, executable, prompt, or command template. PATH may be a file, - for stdin, or omitted in a terminal to be asked.

FlagEffect
--name, -nentry name (default: derived from the filename)
--description, -ddescription shown in the library
--refreference the original file in place instead of copying
--kind KINDforce a language kind
--exeforce the executable kind
--cmd 'TEMPLATE'register a command template
--promptadd as an AI-agent prompt
--edit, -edraft a new script in your editor
--runner NAMEpin the prompt's agent
--no-interpolateprompt: deliver verbatim, no placeholder insertion
--dep SPECpackage dependency (repeatable)
--python 'CONSTRAINT'Python version constraint
--no-inputnever prompt

The lane selectors — a file path, -, --cmd, --edit — are mutually exclusive (exit 2), and per-lane flags are refused with a hint when they do not apply to the chosen lane.

skit run

skit run NAME [flags] [-- ARGS]

FlagEffect
--set NAME=VALUEset a parameter (repeatable; tokens expand; --set NAME= delivers a real empty where the type supports it)
--preset, -p NAMEapply a saved preset
--save-preset NAMEsave this run's values as a preset
--runner NAMEprompt: override the pinned runner for this run
--dry-runprint the exact command, run nothing
--no-inputnever prompt; a required value with no source fails with 125
--plainline prompts instead of the TUI mini-form
--rawrun the stored copy as-is: no injection, no remembered args; refused for prompt/command (exit 2) and incompatible with --set/-p/--save-preset
--forget-argserase the remembered -- tail before this run

Value resolution, highest wins: --set → preset → last-used → the declared default. Extra -- ARGS are remembered per entry and replay on the next argument-less run (with a note on stderr); --forget-args clears them, --raw never replays them.

skit list / show

  • skit list [--json] — every entry: name, kind, description.
  • skit show NAME [--json] — full metadata, dependencies, parameters, presets. The JSON schema is stable; each parameter carries key, label, type, source, required, secret, multiple, repeat, degraded, choices, default, help, flag, action, env_source, delivers_empty, plus top-level param_origin, degraded_reason, and needs. Prompt entries add runner, runners_available, and interpolate.

skit remove / rename / describe / edit

  • skit remove NAME [--yes] — remove an entry (the original file is untouched; copy mode deletes skit's copy). Confirms unless --yes.
  • skit rename NAME NEW — presets, remembered values, and history follow.
  • skit describe NAME TEXT — set the description; empty text clears it.
  • skit edit NAME — open the stored source (the original, in reference mode) in your editor; offers to create the entry if the name is new. Refused for exe/command — there is no editable source.

skit params

skit params NAME [--json] shows managed parameters and last-used values. With flags it edits definitions — generally one editing operation per invocation:

FlagEffect
--resyncprune/refresh definitions to match the script's current source
--manage NAME / --unmanage NAMEmanage or drop a detected constant/prompt (repeatable)
--add NAME / --rm NAMEdeclare or remove a parameter by hand (exe/command and friends)
--type NAME=Tstr, int, float, bool, choice, path
--default NAME=VALUEdeclared default
--choices NAME=a,b,cchoice values
--deliver NAME=env|flag|placeholderhow the value reaches the script
--binding NAME=const|input|envdefault|nonesource binding for a declared field
--flag NAME=--outthe CLI flag to assemble (empty = positional)
--multiple NAME / --no-multiple NAMEallow many values or only one value
--repeat NAME / --no-repeat NAMErepeat the flag for each value or put all values after one flag
--env-target NAME=ENVVARenvironment variable set by env delivery
--action NAME=ACTIONBoolean flag action, such as store_true or store_false
--required NAME / --optional NAMErequiredness
--help-text NAME=TEXT / --prompt NAME=TEXTdescriptions
--secret NAME / --no-secret NAMEsecret marking (see Secrets)
--env-source NAME=ENVVARread the value from an env var at run time (empty clears)
--normalize NAMEshell only: rewrite a bare NAME=value into ${NAME:-value} in the stored copy — consent-gated, never the original
--runner NAMEprompt: pin a runner (empty clears the pin)
--interpolate / --no-interpolateprompt: placeholder insertion on/off
--workdir origin|store|invoke|/abs/pathworking directory policy
--template 'T'command entries: replace the template
--interpreter NAMEpin the interpreter for interpreted kinds (empty = auto; refused on python/prompt)

skit deps

skit deps NAME [--json] — package dependencies, Python constraint, and needed external commands.

FlagEffect
--dep SPECrepeatable; replaces the whole dependency list
--clearremove all package dependencies
--python 'CONSTRAINT'Python version constraint
--need CMDrepeatable; replaces the whole needs list
--clear-needsremove all needs

Package deps apply to Python and JS/TS entries; --need applies to every kind.

skit preset

  • skit preset save NAME PRESET [--from-last] — --from-last snapshots the last run's values without asking.
  • skit preset list NAME [--json]
  • skit preset delete NAME PRESET

skit runner

  • skit runner list [--json] [--all] — configured prompt runners; --all also shows malformed raw rows with repair indexes.
  • skit runner add NAME COMMAND… — register a runner. Each word is one argv token (no shell); exactly one token must be {{prompt}} — see Prompts → Runners. --force replaces an existing name.
  • skit runner remove [NAME] [--row INDEX] [--yes] [--no-input]

skit agent

skit agent install [TARGET] — install the bundled Agent Skill. TARGET is claude, codex, or agents; --to DIR picks a directory explicitly; --project installs into the current repo (./.claude / ./.codex) instead of home. The bare form uses the directory only when it finds exactly one supported directory. If it finds none or more than one, it requires an explicit target.

skit doctor

skit doctor [--json] [--rebuild] — checks uv and library integrity, prints the resolved library path. --rebuild reconstructs the index from each entry's meta.toml. JSON keys include uv, entries, missing, drift, needs_missing, launch_blocked, runner_rows_invalid, rebuilt, rebuild_problems, mirror, location, size_bytes.

skit config

Git-config grammar: skit config lists everything, skit config KEY reads, skit config KEY VALUE writes; --json for machines. Every key is documented in Configuration.

On this page