publicity-review
Publicity Review
The convergence signal is the executor itself returning findings: [] AND suggested_edits: [] on a pass verdict — that is, the subagent declares nothing more is left to flag. This skill loops until that signal, max iterations is reached, a divergence is detected, or a safety rail trips.
The detection scope is narrow on purpose: secrets, user-specific absolute paths (e.g. /Users/<name>/...), internal-only URLs / hostnames, personal identifiers, and obvious proprietary internal info. It is not a generic linter — license, brand, or stylistic content is out of scope.
Designed to be called from non-interactive routines such as dev-workflow-triage or dev-workflow's hooks.on_complete. It never prompts the user; it either returns a structured summary or terminates early with a machine-readable reason code.
Invocation contract
The caller passes these fields in natural language (the skill extracts them from the invocation text):
Base ref(optional, defaultHEAD) — git ref to diff againstMax iterations(optional, default2) — upper bound on the refinement loopModel(optional, defaultsonnet) — model for the reviewerAgentdispatch (sonnet/opus/haiku, orinheritto use the session model). An independent optional field — adding it does not turn the contract into a fixed-arity mode gate (the other fields keep their own defaults). Defaultsonnet: publicity-review's detection task is mechanical pattern-matching (secrets / paths / URLs), so it runs onsonnetby default — a deliberate skill-side cost choice that applies to every caller (e.g.dev-workflow-triage,dev-workflow'shooks.on_complete). A caller-suppliedModel:value wins over this default (arg-wins). The model applies only on the Claude CodeAgent-dispatch path; on the inline fallback path noAgentis spawned, so it is moot (the executing agent's own model governs).
The caller must not stage changes while this skill is running. The skill reads the working tree vs Base ref; staged content would mix into the diff and corrupt the verdict.