Releases: CVERInc/clikae
v0.6.0 — vertical orchestration
[0.6.0] — 2026-06-14
The vertical-orchestration step: clikae grows the muscle for directing a fleet of
AI CLIs that each burn their own subscription — and a sibling Claude Code skill
(conductor) stands on it. All additive; the existing command surface is unchanged.
Added
clikae conduct(BETA) — fan ONE prompt across N accounts in parallel,
each running headless read-only on its own tank (its own quota), then collect
every leg's full output and print a captured/dry table. clikae does not judge —
it hands you N result files and an honest table; you (or a session model acting as
conductor) pick the winner. Read-only by design so legs can't clobber a shared
tree. New optional adapter hookadapter_audit_flags(claude, codex).clikae git-id <engine> <tank> --name … --email …(issue #22) — give a tank
an optional git commit identity. When set,clikae envalso exports
GIT_AUTHOR_*/GIT_COMMITTER_*, so commits made in that shell are stamped with
the identity you intended — not the engine's account email (the HANDOFF §13
mis-attribution incident). git env vars beatgit config; honest limits (loses to
an explicitgit -c user.email=…, per-shell only, future commits only) are
documented in the command's help anddocs/grammar.md.clikae burn --prompt-file <f>/--prompt <str>/--add-dir <dir>(issue
#24) — the easy way to burn a write-task: clikae fills each engine's headless-write
flags from a new optional adapter hookadapter_burn_flags(claude, codex), so you
no longer hand-assemble-p … --dangerously-skip-permissions/exec -s workspace-write …. A cross-engine--toreroute now regenerates the flags for the
new engine (previously it shipped the wrong engine's flags). The explicit-- <cmd…>
form keeps working unchanged.
Fixed
- The new
adapter_burn_flags/adapter_audit_flagsrecipes are NUL-separated,
not newline-separated, so a multi-line prompt survives as a single argv item (a
newline framing shattered a prompt that itself contained newlines). clikae conductclassifies a leg by its captured output, not the result file's
size, so an empty (failed) leg is reported as a real failure rather than a false
"captured" (an emptyprintfstill writes a trailing newline).
v0.5.14 — final polish (released tarball == main)
Docs/comment-only, no behaviour change. Folds the post-v0.5.13 cleanups into a release so the published tarball matches main: dropped a phantom $CLIKAE_HOME/adapters TODO comment (adapter overrides live in lib/adapters/) and marked docs/HANDOFF-world-class-gaps.md historical (punch-list cleared). All v0.5.13 functionality unchanged.
v0.5.13 — burn hardening + accurate agy docs
Hardens clikae burn (two dogfoods) and corrects inaccurate agy docs/strings.
burn
- Stale artifact no longer counts as success — judged by mtime change (GNU-stat-first
_clikae_mtime); new--freshclears it first. --timeoutfalls back to aperlalarm when coreutilstimeout/gtimeoutis absent.- One-line run summary (tank / reroutes / elapsed / artifact size); usage boundary docs.
agy docs/i18n
- State follows
$HOME, but login is one global Keychain entry (so accounts switch globally, not per-shell). Removed a dead "can't rename" string;removenow names a concrete other tank.
Testing: full bats suite green on macOS and ubuntu CI; shellcheck clean; real-engine e2e validated dry/reroute/timeout/summary on macOS. macOS-developed — Linux/BSD testers welcome (see CHANGELOG / PR #21).
v0.5.12 — state schema versioning
Added
- State schema versioning.
$CLIKAE_HOME/now carries aversionmarker + a forward-migration runner, so a future change to an on-disk format is safe: clikae reads it on startup and migrates if an older clikae last wrote your state (and warns, not downgrades, if a newer one did). Deliberately minimal — one version file + one runner, read-only-preserving, invisible in normal use. Groundwork for safe format changes later.
With this, clikae's quality punch-list is empty. bats -r tests = 345/345. Full notes: CHANGELOG.md
v0.5.11 — reliability + honesty polish
Found via an "implementation vs expectation" audit.
Fixed
clikae watchstarts reliably — its live-tail path validated the handoff target through an undefined helper and could exit before tailing. Now validated up front + test-covered.clikae to codex <tank>says "FRESH (not a resume)" — codex can't resume a carried session, so the message no longer promises one.- Auto-reroute won't dead-end on agy —
next_tankskips global/single-account agy entries. clikae tanksshows an agy tank's real account (signed-in email), not a(active)state marker.
Docs
- New EXPECTATIONS.md — an "is this a bug?" guide to deliberate-but-surprising behaviours.
- Corrections: board language key is
l(noth);langopens a picker;handoffauto-detects a local summariser;autois claude-launched-only; and more.
bats -r tests = 337/337. Full notes: CHANGELOG.md
v0.5.10 — burn won't spend the quota you're using
Fixed — the original "燒爆" footgun
clikae burn claude <X> could reroute its dry-fallthrough onto the tank an interactive session is live on (claude/C), silently spending that conversation's quota. (A prior log declared this fixed after testing codex only — a false clear; the claude same-engine reserve includes the active tank.)
burn's auto-reroute now skips a tank an interactive session holds (--allow-activeto override).burn's reserve is account-aware — skips a candidate sharing an account with an already-dry tank (same login = same quota).
Changed
- Clearer
agyburn-refusal;clikae tanksfootnotes that agy is interactive-only / not burnable.
bats -r tests = 331/331. Full notes: CHANGELOG.md
v0.5.9 — update notice, carry-when-fuelled, honest snapshot times
Added
- "✨ Update available" board notice (codex-style): before the tank board, a 3-way choice — update now / skip / skip until next version. "Update now" runs the right command for your install (auto-detects
brewvscurl); if it can't tell, it only shows it — never a guess-run. Throttled to once/day, cached, offline-safe, opt-out viaCLIKAE_NO_UPDATE_CHECK. (en-US / ja-JP / zh-TW) - Carry a session to another tank even when it's not dry — a third Continue choice: a deliberate account switch that keeps the conversation.
- "· seen HH:MM" tag on snapshot reset times — codex (and agy) report a time clikae can only catch headless (codex in UTC, for whichever limit window the run hit), so the board states when we observed it and a stale/off-timezone reset reads honestly. claude is exempt (its dry is live + already timezoned).
Changed
burn --timeoutdiscloses its dependency — it needstimeout/gtimeout(coreutils); stock macOS has neither, so without it the run is not bounded (the help says so).
Fixed
- Pinned a regression test for
clikae torefusing when a shell is on more than one engine.
Also closed two "世界第一讚" world-class punch-list P1s; full notes in CHANGELOG.md.
v0.5.8 — carry on from a dry tank
A dry tank no longer dead-ends, and the carry-onward logic finally picks the right tank.
Added
- Carry on from a dry tank, right from the board. Pressing Enter on a Continue row whose tank is out of fuel now leads with carry this session onto the next fuelled tank — a real
relay(same engine resumes) or a written brief (cross engine) — instead of the old resume / open-fresh choice that only put you back on the exhausted quota. - codex tanks can light a red dot now. codex's limit is exec-stdout-only and never lands in a transcript.
clikae burnalready detects it (and the reset phrase); it now persists that to a small dry-until store, so a laterclikaeshows codex red with its verbatim reset time. Self-clears on a successful run or a 6h TTL.
Changed
- The carry-onward selector is now a ring — account- and fuel-aware. It circles the whole burn order (a tank earlier in your order is still a reserve), prefers a fuelled same-engine tank (a real resume) over a cross-engine cold brief, and skips any tank whose account is already exhausted (a sibling on the same login shares the dead quota). When the whole ring is dry it says so, instead of faking a hop.
- Clearer "open this tank fresh" wording on the board (it never switched tanks).
Full notes: CHANGELOG.md
v0.5.7 — fuel-tank board, Ghostty config-file launcher, app --board, install hints
Added
clikae app --board— a.applauncher for the board (your menu of
recent sessions + tanks), not a single tank: one double-click button for the
whole on-ramp. Works for Terminal, iTerm2, and Ghostty.- A helpful "engine isn't installed" message. Switching to a tank whose CLI
binary isn't on your PATH now reports it clearly — with a per-engine install
hint (e.g.npm install -g @anthropic-ai/claude-code) — instead of a bare
exec: …: not found. clikae switches accounts; it doesn't install the CLI.
(New optional adapter hookadapter_install_hint.)
Changed
- The board shows only burnable fuel tanks (claude / codex / agy). Tool-CLI
tanks (gh, npm, aws, …) aren't AI sessions — "launching" one only printed a
usage screen — so they now live inclikae tanks(the full inventory), not on
the board. The adapters are unchanged; only their presence on the board is. - Ghostty
.applaunchers pass their command through a trusted config file
(--config-file=) instead of-e. Ghostty pops an "Allow Ghostty to execute…?"
dialog for an externally-injected-ecommand (so a-elauncher looked like an
empty shell until you clicked Allow); a config file is trusted, so the window
just opens. The config is located at runtime viapath to me(so the .app keeps
working if moved), and the bundle is re-signed after the config is written so
Apple Silicon doesn't block it.
Fixed
- The board no longer renders blank when there are 0 fuel tanks (e.g. only
tool-CLI tanks): agrep -c .returning exit 1 on a zero count aborted the whole
render underset -eo pipefail.
v0.5.6 — fix: in-use scan best-effort (no abort on a failing ps)
Fixed
rename/migrate/removeno longer abort when the in-use process scan
can't run. v0.5.5's new cross-shell guard (lib/core/proc.sh) leaked
ps eww's exit code, so underset -eo pipefaila non-zerops— on a
locked-down host, a CI runner, or a restricted sandbox — took the whole command
down instead of degrading to "couldn't scan, proceed". The scan is now truly
best-effort, as HANDOFF §11 intended (no reading ⇒ no users found, never a hard
error). Regression test added (a deliberately failingpsmust not abort rename).