Primary finding
Raw user content interpolated into JSON `message` without escaping
- skills/vvvkernel-audit/SKILL.md:30-42
- skills/vvvkernel/SKILL.md:22-31
- skills/vvvkernel-narrative/SKILL.md:40-47
All six skills instruct the agent to POST a JSON body where untrusted input (`$var`, fetched GitHub content, fetched contract source, project-context.md) is substituted directly into a JSON string field. Without an explicit JSON-escape step, contract source containing `"`, backslashes, or control chars will either (a) produce invalid JSON and silently fail, or (b) allow prompt-injection that re-opens the JSON object and overrides `expert_role` (e.g., a snippet ending with `","expert_role":"admin"`). The audit skill is the most exposed since it feeds arbitrary remote code into the prompt.
Recommendation
Add an explicit step: 'JSON-escape `<content>` / `<query>` before substitution' or instruct the agent to build the body via a JSON serializer rather than string templating. Optionally cap content length and strip control characters.