extract-build-log
Slice the build conversation out of Claude Code's session transcript and
render it as a markdown log at evals/<run>/session-log.md.
Steps
- Verify cwd is a course folder. Confirm
spec.md,materials/,builds/,evals/exist. Refuse otherwise: "Run /extract-build-log from inside a course folder —cd courses/<name>first." Stop. - Require a run. If
$ARGUMENTS(or its first whitespace-separated token) is empty:
List those runs and ask: "Which run should I extract? Pick one — I won't default to the latest." Stop until they answer.ls -1 builds/ 2>/dev/null | grep -E '^run-[0-9]+$' | sort - Validate the run. Confirm
evals/$ARGUMENTS/.sessionexists. Refuse otherwise: "evals/$ARGUMENTS/.session is missing — this run wasn't allocated by /prepare-build, so I can't locate its transcript." Stop. - Run the extractor. From the project root:
Passpython3 "$CLAUDE_PROJECT_DIR/.claude/skills/extract-build-log/scripts/extract.py" \ "evals/$ARGUMENTS" \ [--until="<user-supplied phrase>"]--untilonly if the user gave one. The script:- Reads
evals/$ARGUMENTS/.sessionto find the transcript - Slices between the opening bookend (the
/prepare-buildannouncement matching this run number) and the closing bookend (--untilregex if given, else a fuzzy default, else end of transcript) - Writes
evals/$ARGUMENTS/session-log.md(overwrites if present — re-run freely with different bookends)
- Reads
- Report. Echo the script's stdout — it prints the path written plus a one-line summary of how many turns were extracted and which bookends were used.
- Hand off. Tell the user: "Ready to evaluate run-$ARGUMENTS — I can run /eval-spec-vs-build $ARGUMENTS and /eval-materials-vs-build $ARGUMENTS next. Say 'go ahead' to proceed, or pick one if you only want to run one of them."
Don't
- Don't generate or judge content — this skill is a transcript slicer, not an analyst.
- Don't read or write to
builds/<run>/— that's the build artifact, out of scope. - Don't pick a default run. List the runs in
builds/and ask. - Don't fabricate a
.sessionfile if it's missing — that means the run wasn't allocated normally; refuse and ask the user to investigate.