← back to Codex Review 2026 04 30
run-codex.sh
49 lines
#!/usr/bin/env bash
# Driver: runs codex exec against one project, captures review.md, exit code, timing.
# Usage: ./run-codex.sh <project-name>
set -uo pipefail
PROJECT="$1"
ROOT="$HOME/Projects/codex-review-2026-04-30"
SRC="$HOME/Projects/$PROJECT"
OUT_DIR="$ROOT/$PROJECT"
PROMPT_FILE="$ROOT/REVIEW_PROMPT.txt"
mkdir -p "$OUT_DIR"
if [ ! -d "$SRC" ]; then
echo "MISSING: $SRC" > "$OUT_DIR/error.log"
exit 2
fi
START=$(date +%s)
echo "=== codex review of $PROJECT @ $(date -Iseconds) ===" > "$OUT_DIR/run.log"
# Read-only sandbox, skip git check, persist last assistant message to review.md.
# Self-imposed 10 min wall via background PID + sleep watchdog.
codex exec \
--skip-git-repo-check \
--sandbox read-only \
-C "$SRC" \
--output-last-message "$OUT_DIR/review.md" \
"$(cat "$PROMPT_FILE")" \
>> "$OUT_DIR/run.log" 2>&1 &
CODEX_PID=$!
( sleep 600; kill -TERM "$CODEX_PID" 2>/dev/null ) &
WATCH_PID=$!
wait "$CODEX_PID" 2>/dev/null
RC=$?
kill "$WATCH_PID" 2>/dev/null
END=$(date +%s)
echo "=== exit=$RC duration=$((END-START))s ===" >> "$OUT_DIR/run.log"
echo "$RC" > "$OUT_DIR/exit_code"
echo "$((END-START))" > "$OUT_DIR/duration_s"
# Flag if review.md is empty or missing
if [ ! -s "$OUT_DIR/review.md" ]; then
echo "EMPTY_OR_MISSING review.md (rc=$RC)" > "$OUT_DIR/error.log"
fi
exit $RC