Releases: TaewoooPark/Agent-Blackbox
Release list
v0.48.0 — first-class Codex support
Codex can now fly with its black box on. ✦
This release makes OpenAI Codex a first-class Agent-Blackbox host alongside Claude Code and OpenCode: the same live map, replay, efficiency score, subagent genealogy, handoff, and optimization loop—without asking you to change how you work.
What’s new
Zero-setup Codex recording
Agent-Blackbox now tails the rollout sessions Codex already writes under $CODEX_HOME/sessions (default: ~/.codex/sessions). It works with both the Codex CLI and desktop app, and recording itself does not install a plugin or modify Codex configuration.
agent-blackbox up --host codexWant one dashboard for everything?
agent-blackbox up --host allThat starts the Claude Code, Codex, OpenCode, and Gajae-Code recorders together.
Rich, native Codex traces
Codex activity is normalized into the same canonical event model used by the existing hosts, including:
- sessions, turns, prompts, completion, and errors
- model changes plus input/output/cache token telemetry
- shell commands, searches, file reads, edits, creates, and deletes
- structured patches without double-counting fallback events
- MCP and dynamic tool calls
- context compaction, plan updates, and permission requests
- subagent spawning, parent/child grouping, and dedicated agent lanes
The adapter understands both Codex’s structured runtime events and its response-item fallback format, so different Codex surfaces can produce one clean timeline.
Optional in-run optimizer
Recording remains zero-config. If you also want the in-run optimizer, enable it explicitly:
agent-blackbox up --host codex --optimizeThen review and trust the installed commands once with /hooks in Codex.
The optimizer:
- blocks only a conservative, unchanged full-file reread already present in the current context
- carries a compact working-set reminder across turns
- resets read assumptions after compaction
- preserves existing user hooks and removes only Agent-Blackbox entries on uninstall
- fails open—an optimizer problem never breaks the Codex run
Standalone management is also available through install-codex-hooks and uninstall-codex-hooks.
Full feature parity
Codex runs now flow through the existing host-agnostic pipeline, so they receive the same:
- live dashboard and durable local NDJSON trace
- timeline replay and workflow graph
- context-efficiency and effectiveness scoring
- project baselines and custom rule packs
- handoff export
- reversible
AGENTS.mdefficiency memory
The published CLI bundle now includes the Codex optimizer hook and, as a packaging fix, the existing Claude Code hook as well. Documentation was updated in English, Korean, Chinese, and Japanese.
Safety and privacy
- Recording is read-only and local-first.
- Raw file contents are not stored as trace payloads; sizes and redacted metadata are used instead.
- Home/project paths and recognized secrets are redacted before persistence.
- Optimizer hooks are optional, visible through Codex’s hook review, and deliberately conservative.
Verified before release
- clean
npm ciwith 0 known vulnerabilities - 281 tests across 46 test files
- complete workspace, dashboard, and self-contained CLI bundle build
- Ubuntu and Windows GitHub Actions CI passed on the release commit
- live end-to-end capture with Codex CLI
0.144.4 - a real successful rollout reconstructed as two searches, two reads, and exactly one edit
- a real 928-event Codex subagent rollout grouped entirely under its parent run
- live hook probe confirmed the first full-file read succeeds and the unchanged duplicate is blocked
- isolated
--host allstartup confirmed all supported recorders can run together
Upgrade notes
No data migration is required. Existing Claude Code, OpenCode, and Gajae-Code workflows keep their current behavior. To start recording Codex, select --host codex or include it through --host all.
Full comparison: v0.47.16...v0.48.0
v0.47.16 — stale session-map edges cleared on run switch
Switching to a different session no longer leaves the previous run's connection lines lingering over the new tree (most visible on Chrome/Windows).
- The earlier fix reset only the workspace file-arc layer; the session map's own node-to-node lines and in-map file arcs were never cleared on a run switch. They're now cleared before paint the instant the run changes.
- The edge SVG layers remount per session so a stale GPU-composited layer (Chrome/Windows can skip repainting a transformed SVG when only path data changes) can't carry old lines into the new run.
Host-agnostic — applies to Claude Code, OpenCode, Gajae-Code, and the rest.
v0.47.15 — Gajae-Code (gjc) recorder support
Adds first-party support for Gajae-Code (gjc) — community contribution by @Yeachan-Heo (#4), reviewed and hardened before merge.
- New
gjcadapter — tails Gajae-Code session JSONL (~/.gjc/agent/sessions/), no install. Record with--host gjc, or alongside the others with--host all. Same recorder, map, and efficiency score. (Experimental; minor next to Claude Code / OpenCode.) - Review hardening: subagent transcripts are detected by the absence of a trailing session UUID (an underscored agent name no longer misfiles as a main run); subagent lanes fall back to the subagent type when no id is present; the redaction
secret-assignmentrule now also catches quoted JSON values ("password": "…"). - Cross-platform: separator-portable tests; verified green on ubuntu + windows-latest CI.
- README documents gjc as an optional experimental host in all four languages (en/ko/zh/ja).
Run it: npx @taewooopark/agent-blackbox@0.47.15 up --host gjc
v0.47.14 — cross-platform theme-toggle icons
The dark/light theme toggle used the ☀/☾ glyphs (U+2600/U+263E), which aren't in the app's serif font stack on Windows — they fell back to tofu (showed as a stray C). Surfaced by a real Windows render via the new on-demand windows-visual CI job.
Swapped both for inline currentColor SVG sun/moon icons, so the control renders identically on every platform.
Run it: npx @taewooopark/agent-blackbox@0.47.14 up
v0.47.13 — Windows hardening
Records Claude Code on native Windows cleanly. The recorder tails the JSONL transcripts (no hook install), so it sidesteps Claude Code's Windows hook bugs — but the transcripts store paths with backslashes ("cwd":"C:\\Users\\..."), which needed handling end to end.
Fixes
- Separator-safe file paths — the session map's FILES panel split paths on
/only, so a Windows path ($PROJECT\src\foo.ts,C:\proj\src\foo.ts) collapsed into one mangled segment. Now separator-agnostic; the file tree, connection arcs, and rows render correctly on Windows. - Separator-insensitive redaction — a home/project dir is now stripped whether a path uses
\or/(Claude Code mixes both on Windows). Closes a latent leak where a mixed-separator absolute home path could survive in the trace, and makes the$PROJECT/~rewrite reliable. - CRLF-safe transcript tailing — Windows
\r\nline endings handled explicitly.
Verification
- A
windows-latestCI job now runsnpm ci+ check + build on every push, plus a daemon smoke test that POSTs aC:\…event and asserts the snapshot — real Windows file I/O. Both OS legs green. - 253 tests, including Windows path-segmentation + mixed-separator redaction cases.
(Live browser gestures + a real recorded session are still best confirmed on a Windows desktop.)
Run it: npx @taewooopark/agent-blackbox@0.47.13 up
v0.47.12 — trackpad map controls
Trackpad support for the session map
Without a mouse the map was hard to drive — a trackpad has no middle button to pan with, and two-finger scroll only zoomed. The map now routes by gesture so each device feels native:
| Input | Pan | Zoom |
|---|---|---|
| Trackpad | two-finger swipe | pinch |
| Mouse | middle-button drag | wheel (cursor-anchored) |
Detection: a trackpad emits horizontal and/or fractional sub-pixel wheel deltas a notched mouse never does. That verdict latches, so the integer momentum tail of a fling keeps panning instead of flipping to zoom; a mouse never latches, so its wheel keeps zooming.
Note: trackpad-vs-mouse detection has no standard browser API and is OS/driver-dependent. These gestures are verified on macOS; Windows precision-touchpad behavior is being tested separately. Universal fallbacks (Ctrl/⌘+wheel and the
−/%/+buttons to zoom) work on every platform.
README (EN + KO) documents the controls.
Run it: npx @taewooopark/agent-blackbox@0.47.12 up
v0.47.11 — map mouse controls + node-text ellipsis
Map mouse controls — standard pan-and-zoom canvas
The session map's mouse controls weren't optimal for a 2D canvas (a plain wheel panned; only ctrl/⌘+wheel zoomed). Now:
- Wheel = zoom, anchored under the cursor — the tree point beneath the pointer stays fixed (~1px drift). Corrects for the column's flex-centering shift so X anchors as cleanly as Y, and normalizes line/page wheel deltas so a notched mouse and a trackpad pinch both zoom sanely.
- Middle-button (wheel press) drag = pan in every direction, 1:1 with the pointer.
- Left-drag still rubber-band selects; the
−/%/+buttons, Tracing, and Auto layout are unchanged.
Node text ellipsis
Long agent role names in step nodes now truncate with a "…" instead of clipping abruptly — they were a raw text child of a display:flex pill where text-overflow: ellipsis never applied. (Titles and agent-start labels already ellipsised.)
CI
Restored the @emnapi cross-platform optional deps that a macOS npm install had pruned from the lockfile, which broke npm ci on the linux runner.
README (English + Korean) now documents the map controls.
Run it: npx @taewooopark/agent-blackbox@0.47.11 up
v0.47.10 — session map stays in its lane
Fix: session-map file lines never bleed into the right panel, and stop lingering
The moment→file connection lines live in an un-transformed, workspace-wide SVG overlay that paints above the co-pilot. On a dense run the tree is fit-zoomed wide, so moment nodes scroll off the right of the clipped map — getBoundingClientRect still reports their off-screen x, so a line could originate over the co-pilot and paint across the right panel.
No-bleed guarantee (geometric — holds at any width, zoom, or animation frame):
- The SVG clip band and every line's endpoint are clamped to the map column's right edge, so a line only ever hands off toward the files across the gap, never into the panel.
- A line whose origin node has scrolled past the map edge is dropped, not stubbed.
- The measure bails entirely if the map canvas can't be located (no full-width fallback).
No more lingering lines:
- The follow camera moves nodes via a CSS transform that fires no scroll/resize event — each follow pan now nudges a re-measure so the lines track the eased camera instead of freezing where the nodes used to be.
- All measured lines clear on a run switch (their origin nodes are gone).
Verified on a 320-moment / 277-line run at 417% zoom: 0 lines cross into the co-pilot, the clip stops at the map edge (1097 vs co-pilot 1109), and every line stays glued to its node (gap 0) after a hard pan + re-engaged tracing. npm run check: 245/245 tests pass.
Run it: npx @taewooopark/agent-blackbox@0.47.10 up
v0.47.9
Make the session map legible for heavy parallel / workflow runs (driven by viewing a real 96-lane workflow).
- Lanes read as roles, not paragraphs. A workflow fans out dozens of subagents; the transcript-only ones had only their first prompt to label with. Each lane is now named by its role — the spawn type (
general-purpose,workflow:urp-report-korean), or distilled from the task prompt ("You are a literature-search specialist…"→literature-search specialist;"너는 내용 충실성 감사관이다…"→내용 충실성 감사관). Applied at render (so runs recorded before this read as roles too) and in the adapter (new recordings store the role).graph.tsis now the sole authority on a lane's display name and prefers the concise spawn role over a long prompt label. - Dense runs open at a readable zoom instead of fit-to-tiny; the % button still resets to 100% = fit the whole tree, so the full picture is one click away.
- A finished run's lanes read DONE, not stuck on ACTIVE (subagent transcripts rarely emit a clean end, so the node status used to stick).
245 tests pass; verified live on a 1429-event / 96-lane workflow run.
`npx -y @taewooopark/agent-blackbox@0.47.9 up --host claude-code`
v0.47.8
Hardening found by actually opening the rendered dashboard and reviewing it as a hostile quality/UX/robustness reviewer would — the data-layer tests were green but the UI surfaced real issues.
- Custom checks were silently empty in global multi-project mode. The daemon loaded
rules.jsonfrom the dominant cwd of the whole event window, so a run in project A got project B's rules — or none. Same "daemon's-latest ≠ the viewed run" mismatch already fixed for optimize and baselines. The daemon now ships a{project → RulePack}map and the dashboard evaluates the pack for the run it's showing. (Verified live: anode_modulesread and a test-less commit render for the right project.) - Accessibility: rule severity was border-colour only — added a text WARN/BAD/INFO tag (works in forced-colors / for colour-blind users) and
aria-labels on the rule rows and the archetype/outcome/baseline chips (were title-only). - Two-score clarity: the effectiveness chip is captioned OUTCOME (e.g. "OUTCOME · likely ok · 80") so it isn't read as a second efficiency number.
In-browser audit: all 11 metrics + the new chips render, low-signal runs hide tentative chips, the optimize modal targets the viewed run's project, 0 console errors on a clean load. 239 tests pass.
`npx -y @taewooopark/agent-blackbox@0.47.8 up --host claude-code`