modify template

This commit is contained in:
김경종
2026-04-24 08:34:53 +09:00
parent e2c2beae1a
commit 246d164827
68 changed files with 2378 additions and 0 deletions
@@ -0,0 +1,11 @@
name = "harness_reviewer"
description = "Read-only reviewer for Report Harness projects, focused on brief alignment, source quality, unsupported claims, feedback handling, and critical rule violations."
model = "gpt-5.4"
model_reasoning_effort = "high"
sandbox_mode = "read-only"
developer_instructions = """
Review changes like a report owner.
Prioritize brief alignment, factual support, source quality, uncertainty handling, feedback traceability, and CRITICAL rules over style.
Always compare the patch against AGENTS.md, docs/PRD.md, docs/ARCHITECTURE.md, docs/ADR.md, docs/UI_GUIDE.md, and the requested acceptance criteria.
Lead with concrete findings and file references. If no material issues are found, say so explicitly and mention residual risks.
"""
+12
View File
@@ -0,0 +1,12 @@
name = "phase_planner"
description = "Read-heavy Report Harness planner that decomposes report briefs into minimal, self-contained research, drafting, and revision phase files."
model = "gpt-5.4"
model_reasoning_effort = "high"
sandbox_mode = "read-only"
developer_instructions = """
Plan before implementing.
Read AGENTS.md and the docs directory, identify the smallest coherent report phase boundaries, and draft self-contained steps.
Keep each step scoped to one research question, source review task, outline task, draft task, or feedback task when possible.
Do not make file changes unless the parent agent explicitly asks you to write files.
Return concrete file paths, acceptance commands, source requirements, and blocking assumptions.
"""
+9
View File
@@ -0,0 +1,9 @@
# Project-scoped Codex defaults for the Report Harness template.
# As of 2026-04-15, hooks are experimental and disabled on native Windows.
[features]
codex_hooks = true
[agents]
max_threads = 6
max_depth = 1
+28
View File
@@ -0,0 +1,28 @@
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py\"",
"statusMessage": "Checking risky shell command"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "python3 \"$(git rev-parse --show-toplevel)/.codex/hooks/stop_continue.py\"",
"statusMessage": "Running Harness validation",
"timeout": 300
}
]
}
]
}
}
@@ -0,0 +1,47 @@
#!/usr/bin/env python3
"""Block obviously destructive shell commands before Codex runs them."""
from __future__ import annotations
import json
import re
import sys
BLOCK_PATTERNS = (
r"\brm\s+-rf\b",
r"\bgit\s+push\s+--force(?:-with-lease)?\b",
r"\bgit\s+reset\s+--hard\b",
r"\bDROP\s+TABLE\b",
r"\btruncate\s+table\b",
r"\bRemove-Item\b.*\b-Recurse\b",
r"\bdel\b\s+/s\b",
)
def main() -> int:
try:
payload = json.load(sys.stdin)
except json.JSONDecodeError:
return 0
command = payload.get("tool_input", {}).get("command", "")
for pattern in BLOCK_PATTERNS:
if re.search(pattern, command, re.IGNORECASE):
json.dump(
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "Harness guardrail blocked a risky shell command.",
}
},
sys.stdout,
)
return 0
return 0
if __name__ == "__main__":
raise SystemExit(main())
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/env python3
"""Run Report Harness validation when a Codex turn stops and request one more pass if it fails."""
from __future__ import annotations
import json
import subprocess
import sys
from pathlib import Path
def main() -> int:
try:
payload = json.load(sys.stdin)
except json.JSONDecodeError:
return 0
if payload.get("stop_hook_active"):
return 0
root = Path(payload.get("cwd") or ".").resolve()
validator = root / "scripts" / "validate_workspace.py"
if not validator.exists():
return 0
result = subprocess.run(
[sys.executable, str(validator)],
cwd=root,
capture_output=True,
text=True,
timeout=240,
)
if result.returncode == 0:
return 0
summary = (result.stdout or result.stderr or "workspace validation failed").strip()
if len(summary) > 1200:
summary = summary[:1200].rstrip() + "..."
json.dump(
{
"decision": "block",
"reason": (
"Validation failed. Review the output, fix the repo, then continue.\n\n"
f"{summary}"
),
},
sys.stdout,
)
return 0
if __name__ == "__main__":
raise SystemExit(main())