HC-CHANGELOG(7)MiscellaneousHC-CHANGELOG(7)

NAME

hc-changelog - release history for harness-convert

DESCRIPTION

Newest first. Full GitHub notes and assets: releases.

RELEASES

0.6.0

2026-08-07

hc truncate PCT: free context without losing the thread. A long session is mostly dead tool payload, so this clips the heaviest payloads until PCT% of the session is gone and writes a new session in the same harness. The original is never touched, so a bad trim costs nothing: resume it and pick a different number. Dry run by default, like hc convert.

The policy came from measuring the 40 largest sessions per harness. Payload concentration is extreme, so it clips the biggest payloads rather than the oldest: on Codex, 41 records over 200KB are 45.9% of all payload, and the newest decile holds the most tool output, so an oldest-first rule would free almost nothing. It pools tool inputs alongside outputs (Bash.command, Write.content, Edit.new_string) because inputs are 37% of a Claude session and outputs alone cannot pass ~44% freed. Conversation text is never clipped, view_image payloads are dropped whole rather than head-clipped, and a target that cannot be reached reports an honest shortfall instead of quietly under-delivering.

The new session id is a deterministic uuid5 of the source id and the percent, so re-running the same trim upserts one session instead of piling up copies, while a different percent gives you a distinct one. Cursor is read-only and cannot be truncated.

Also: same-harness relocation no longer drops the session title (the enrichment map had no identity pairs, though the README called that path lossless); converted Claude turns now carry the model that actually produced them instead of a hardcoded id.

0.5.0

2026-08-03

Interactive CLI (gh-shaped, stdlib only). Flags always win; missing pieces prompt on a TTY. Bare hc runs a convert wizard (from → session → to → preview → confirm write). hc list on a TTY lets you arrow/jk pick a session and continue into convert.

-y / --yes writes without asking. --no-interactive and HC_NO_INTERACTIVE=1 force the scriptable path. Pipes stay plain tables. Still zero runtime dependencies.

0.4.0

2026-08-03

Grok Build adapter (full R/W). --from grok / --to grok against ~/.grok/sessions (or $GROK_HOME). Writes summary.json, chat_history.jsonl, and updates.jsonl so grok --resume loads history. Non-UUID source ids map to a deterministic UUID. Title enrichment across harnesses.

Multi-session list. hc list --from HARNESS -n N shows the newest N sessions for the cwd (default 10): id, UTC time, title. All harnesses including Cursor.

Also: landing/README updates; hermetic tests for Grok write, round-trip, locate, and list.

0.3.0

2026-08-03

Read-only Cursor adapter. --from cursor reads content-addressed protobuf blob sessions under ~/.cursor/chats (full tool outputs). --to cursor is refused: no import path to validate against. Subagent sessions (no meta.json) are excluded from locate.

0.2.2

2026-07-18

Packaging and release-pipeline polish after 0.2.1. Same conversion surface as 0.2.1.

0.2.1

2026-07-18

Codex >= 0.144 resume fix. Emit model_provider (and related identity fields) on session_meta so TUI resume does not die with an empty provider.

OpenCode ses_ id mapping. Foreign session ids are mapped to deterministic ses_-prefixed ids on write so opencode -s can resume after import.

0.2.0

2026-07-18

OpenCode as a third harness: any direction between Codex, Claude Code, and OpenCode. Converting into OpenCode writes a canonical import file; resume with opencode import then opencode -s.

npm package (@theharshitsingh/hc) and Homebrew formula (harshitsinghbhandari/tap/harness-convert). Landing page shipped.

0.1.0

2026-06-27

First release. Codex ↔ Claude Code session conversion, native resume, rendered scrollback with tool cards, title transfer, and ragged-tail handling. Stdlib-only Python CLI.

SEE ALSO

hc(1) · source

MIT · built by Harshit Singh Bhandari

harness-convert 0.6.02026-08-07HC-CHANGELOG(7)