Code review headless con claude -p output-format json validado contra schema; el humano sigue siendo gate final de merge.
Claude Code corre en CI sin TTY (claude -p) y produce JSON estructurado con anotaciones por línea (file,line,severity,rule_id,message). El pipeline valida la salida contra un schema declarado y publica comentarios deterministas en el PR. Cero parsing de prosa libre: el modelo anota, el pipeline valida, el humano decide el merge.
Un reviewer humano no escala a 100 PRs/día. Un reviewer LLM en CI encuentra issues consistentes, pero solo si su salida es estructurada. Si se parsea prosa con regex (grep -E 'ERROR|WARNING'), el pipeline rompe el primer día que el modelo cambie de redacción o de idioma. La estructura no es cosmética: es la única forma de que la integración sobreviva a la variabilidad del modelo.
claude -p 'prompt' --output-format=json produce JSON validable contra un schema declarado, no prosa para humanos.Annotation: {file, line, severity, rule_id, message}.--output-format=json.# .github/workflows/review.yml
# workspace-example: the consuming repository supplies annotations.schema.json
# and scripts/post_annotations.py; they are not toolkit package resources.
- name: LLM review
run: |
claude -p "$REVIEW_PROMPT" \
--output-format=json \
--schema annotations.schema.json > out.json
python scripts/post_annotations.py out.jsonThe workspace-example script workspace-example:scripts/post_annotations.py validates out.json
against the consuming repository's annotations.schema.json before publishing.
If validation fails, it exits nonzero and the job fails. Neither example path is
claimed as a resource shipped by this skill.
claude -p "$REVIEW_PROMPT" > review.txt
grep -E 'ERROR|WARNING|issue' review.txt | awk '{...}' | xargs gh pr commentParsea prosa libre con grep/awk: se rompe en cuanto el modelo cambie de redacción, idioma o formato. No hay contrato, solo heurística frágil.
El flag --output-format=json fuerza salida estructurada; la validación contra schema declarado es extracción defensiva (Kata 5); el control por señal de salida (Kata 1) decide éxito o fallo del job sin parsear prosa. Si el JSON no valida, el job falla y ningún comentario se publica: un humano investiga. El humano sigue siendo el gate final de merge porque el LLM puede tener FP/FN y no asume responsabilidad del merge.
claude -p.katas-defensive-structured-extractionkatas-mcp-structured-errorskatas-human-handoff-protocolCapas del packet, cargables bajo demanda (disciplina ICM: una capa por vez, nunca todas juntas): knowledge/ cuerpo de conocimiento · prompts/ prompts listos · examples/ salida de ejemplo · agents/ subagentes del packet · templates/ plantilla de output.
e8f986b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.