From livespec
Rank the next spec-side action (revise, propose-change, critique, prune-history, or none) over the current `<spec-target>/proposed_changes/` and `<spec-target>/history/` state, emitting structured JSON. Invoked by /livespec:next, "what should I work on next on the spec side", or as a primitive composed by a cross-repo loop driver.
How this skill is triggered — by the user, by Claude, or both
Slash command
/livespec:nextThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
This file is the thin Claude Code binding for the `next` operation,
This file is the thin Claude Code binding for the next operation,
shipped by the livespec-driver-claude Driver plugin (plugin name
livespec, so the surface stays /livespec:*). The complete
harness-neutral driving prose is livespec CORE's artifact at
<core-root>/prose/next.md. FIRST resolve <core-root> (next
section), THEN read that prose file in full, then execute it
end-to-end, binding its harness-neutral vocabulary to this runtime as
follows.
<core-root>)This Driver plugin ships ONLY bindings. The harness-neutral prose and
the reference spec-side CLIs ship with livespec core — the
livespec plugin from the thewoolleyman/livespec marketplace, which
must be installed alongside this Driver. The plugin-root placeholder
of THIS plugin resolves to the Driver's own root, which carries no
prose/ and no scripts/ — NEVER use it for core paths. Resolve
<core-root> once, in this order:
LIVESPEC_CORE_PLUGIN_ROOT environment variable is set and
non-empty, use its value (explicit override; covers nonstandard
dev setups, e.g. driving a sibling checkout's core).<project-root>/.claude-plugin/prose/next.md exists — the
governed project IS the livespec core repo itself (--plugin-dir .
dev mode / dogfooding) — use <project-root>/.claude-plugin.livespec@livespec plugin's flattened
cache root, read from ~/.claude/plugins/installed_plugins.json.Canonical Bash form (<project-root> defaults to the cwd):
LIVESPEC_CORE_ROOT="$LIVESPEC_CORE_PLUGIN_ROOT"
if [ -z "$LIVESPEC_CORE_ROOT" ] && [ -d "./.claude-plugin/prose" ]; then
LIVESPEC_CORE_ROOT="$(pwd)/.claude-plugin"
fi
if [ -z "$LIVESPEC_CORE_ROOT" ]; then
LIVESPEC_CORE_ROOT="$(python3 -c 'import json, pathlib; entries = json.loads((pathlib.Path.home() / ".claude" / "plugins" / "installed_plugins.json").read_text(encoding="utf-8"))["plugins"]["livespec@livespec"]; print(entries[0]["installPath"])' 2>/dev/null || true)"
fi
if [ -z "$LIVESPEC_CORE_ROOT" ] || [ ! -d "$LIVESPEC_CORE_ROOT/prose" ]; then
echo "livespec core not found. Install it first:" >&2
echo " claude plugin marketplace add thewoolleyman/livespec" >&2
echo " claude plugin install livespec@livespec" >&2
exit 1
fi
echo "$LIVESPEC_CORE_ROOT"
If resolution fails, STOP and surface those install instructions to the user instead of improvising paths.
Per livespec core's contract (its contracts.md §"Spec-side CLI
contract"), every spec-side operation is named in the governed
project's .livespec.jsonc under spec_clis.next as an argv-form
array, pre-populated with core's reference default and individually
overridable. To "run the next CLI named in config":
<project-root>/.livespec.jsonc (JSONC — tolerate //
comments). If the file, the spec_clis section, or the
spec_clis.next key is absent, use core's reference default
argv: python3 <core-root>/scripts/bin/next.py.CLAUDE_PLUGIN_ROOT placeholder, written
as a $-brace expansion in config), expand it to <core-root> —
core's schema defines that token as "the installed livespec plugin
root", which is CORE's root, never this Driver's.With the default config this collapses to:
python3 "$LIVESPEC_CORE_ROOT/scripts/bin/next.py" [--spec-target <path>] [--project-root <path>]
"run the next CLI named in config" / "invoke the next CLI" — dispatch per §"Config-named CLI dispatch" above; with the default config:
python3 "$LIVESPEC_CORE_ROOT/scripts/bin/next.py" [--spec-target <path>] [--project-root <path>] [--limit <count>] [--offset <count>]
"surface the captured stdout to the user" / "present the JSON verbatim" (prose Step 2) — plain narration in this session: emit the CLI's stdout JSON without re-interpretation, re-summarization, or judgment.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub thewoolleyman/livespec-driver-claude --plugin livespec