원클릭으로
audit-prompt-schema-sync
"
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
"
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
"
"
"
"
"
"
prompts/ — 14 markdown prompt files; output sections describe field names in proseschemas/ — 14 JSON schema files; properties keys are the actual field namesschemas/CLAUDE.md — notes on which schema issues are known (MCP shape mismatch, developer-answers has no schema)Prompts describe output fields in prose ("For each finding, include: name, category, evidence_files"). Schemas enforce field types. When they drift, the agent either drops fields (prompt describes them but schema doesn't declare them) or returns unexpected fields (schema has them but prompt doesn't describe them). Neither case errors — both silently produce wrong findings.
For each gather prompt, find the output contract section. Look for patterns like "For each X, determine: field1, field2" or "Returns: { field1, field2 }":
# Manually read the output contract in each prompt
grep -n 'determine\|Returns\|output\|For each' prompts/patterns.md | head -20
cat prompts/patterns.md | grep -A20 'output'
# Top-level properties
jq -r '.properties | keys[]' schemas/patterns.json
# Properties of array items
jq -r '.properties.patterns.items.properties | keys[]' schemas/patterns.json
For patterns.md → schemas/patterns.json:
# Fields in prompt but not schema: agent may emit them, schema drops them
# Fields in schema but not prompt: agent may not populate them, findings are empty
# Example manual diff for patterns agent:
prompt_fields="name type evidence_files description is_consistent"
schema_fields=$(jq -r '.properties.patterns.items.properties | keys[]' schemas/patterns.json)
for f in $prompt_fields; do
echo "$schema_fields" | grep -q "^$f$" || echo "IN PROMPT, NOT SCHEMA: $f"
done
Always fix both the prompt and schema in the same commit:
Adding a missing field to schema:
// In schemas/patterns.json, add to items.properties:
"new_field": {
"type": "string",
"description": "..."
}
// Do NOT add to required[] — add as optional
Removing a field from prompt that schema doesn't support:
Edit the prose in prompts/<name>.md to remove the field description from the output section.
After any schema change, update tests/fixtures/findings/<agent-name>.json to match. Run make test-all to catch breakage.
bash -n lib/gather.sh
jq empty schemas/<agent-name>.json
make test-unit
developer-answers.json has no schema — it is hand-assembled by lib/ask.sh. Any change to field names requires updating all jq expressions in lib/synthesize.sh that read from it.
Two MCP schema shapes exist — schemas/mcp-recommendations.json has relevance and a nested configuration object. schemas/synthesis-tooling.json flattens command/args/env. The synthesizer must reshape MCP data between passes. When debugging MCP config, check both schemas.