The rich practice context from setup — jurisdiction footprint, risk
posture, playbook positions — was only accessible through structured
skills. A lawyer asking a quick question in the plugin's domain got a
generalist answer.
Now the plugin CLAUDE.md instructs Claude to read the practice profile
and apply the plugin's guardrails for ANY question in the domain, not
just skill invocations. A configured plugin feels like a colleague who
already knows your practice, not a form you fill out. The skills are
the structured workflows; this is everything in between.
Param values for matter_id and clause are interpolated directly into the
steering-prompt templates. Their patterns previously permitted spaces, which
would let a hostile document smuggle a natural-language sentence into the
prompt through a field that looks like an ID. Restrict both to slug shape
(no spaces); descriptive context belongs in the note/event fields, which are
never interpolated and are wrapped in the data frame.
Also render templates via format_map with an empty-string default so an
optional param the template references (e.g. playbook_monitor's clause)
degrades gracefully instead of raising KeyError, and ignore __pycache__.