Skip to content

neckbeard 1.15.0

Latest

Choose a tag to compare

@jerrydboonstra jerrydboonstra released this 18 Oct 15:13
  • A hook run through ${CLAUDE_PLUGIN_ROOT:-...} is identified. Cat Herder runs every hook as "${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT}}/bin/meow", so one hook file serves several hosts, and the inventory, which expanded only ${CLAUDE_PLUGIN_ROOT} and $CLAUDE_PLUGIN_ROOT, listed all three of its hooks as unidentifiable; the judge then read the hook code by hand, differently each run. The shell's default forms (:-, -, :=, =, :?, ?, with a word that may hold its own ${...}) now expand to the plugin root, since Claude Code always sets the variable. ${CLAUDE_PLUGIN_ROOT:+word} is left alone, and so is $CLAUDE_PLUGIN_ROOTX, a different variable that a substring replace used to expand. Cat Herder's hooks now read as found, with their payload not traced (unresolved_hooks), since its script builds the text it injects at run time. Five self-check cases, each through the CLI or the call site that identifies a hook's script.
  • A guide for building a plugin neckbeard will vet, and a ledger format. PLUGIN-GUIDE.md lists, for each of the sample reader's rules and each card, what neckbeard reads as a conflict and the usual way to comply, plus three patterns (a pinned agent instead of a model on the call, a hook's cost weighed before a rule is promoted into it, bounds on the actions verdicts flip on). A plugin's neckbeard-ledger.md records one stance per rule and card (comply, exception, open or n/a) and the files each covers. neckbeard still reports a declared exception as a conflict; a plugin's own gate can count only the undeclared ones, matched on reader rule and plugin file. neckbeard does not read the ledger yet, and SKILL.md is unchanged. Cat Herder 0.53.2's ledger is the worked example, in examples/ledgers/cat-herder.md.