Your harness hit a rate limit 80% through the fix. Relocate the whole session to a live agent in two seconds and resume exactly where you left off.
When your agent goes dark mid-task you lose more than time — you can't even ask it for a handoff doc, because the thing that would write it is the thing that's down. hc reads the session transcript straight off disk. The dead harness never needs to be running, and your quota never needs to come back.
One common interface every harness must satisfy, plus a sparse map for the extras — so any pair converts, and special pairs convert richer.
Every harness maps to four records — user message, assistant reply,
ToolCall, ToolResult. The universal floor that
guarantees any pair resumes.
Surplus the floor can't hold — session titles, modes — rides a sparse
(from, to) map, layered on top. Never re-encodes the common stuff.
Writes both the model-context stream and the UI scrollback — including
exec and diff tool cards — so history renders, not just resumes.
The source usually died mid-tool-call. Every orphaned call gets closed, or the resumed agent would reject the history. The normal case, handled.
An escape hatch can't ask you to npm install while you're on fire.
One Python file, nothing to pull.
pipx install harness-convert
hc --from claude --to codex # the whole thing