Skip to content

Releases: neochoon/agenthud

v0.18.2

12 Jun 14:03

Choose a tag to compare

Fixed

  • No more --trust-tools warning on Kiro summaries. kiro-cli
    documents --trust-tools= as "trust no tools" (the guard that keeps a
    headless summary run from silently executing filesystem/shell tools)
    but then warns that the empty value looks like a custom MCP tool. That
    benign stderr line is now stripped from the passed-through output while
    real diagnostics still surface.

Changed

  • CI actions moved off the deprecated Node 20 runtime.
    actions/checkout v4→v6, actions/setup-node v4→v6, and
    softprops/action-gh-release v2→v3 — all now on Node 24, ahead of
    GitHub forcing the switch on 2026-06-16. No user-facing change.

v0.18.1

12 Jun 13:39

Choose a tag to compare

Fixed

  • Kiro summary engine now actually summarizes. summary --engine kiro previously fed the activity report to kiro-cli on stdin while
    passing the prompt as a positional argument — but Kiro reads stdin
    only when no positional question is given, so it ignored the report
    and replied that the log was empty. The prompt and report are now
    combined onto stdin (no positional), so the model sees both. Claude
    and Codex are unaffected.
  • No more EPIPE crash when an engine closes stdin early. Writing the
    large report to a child that had already closed its input surfaced as
    an unhandled EPIPE error and aborted the process; the stdin pipe now
    has an error handler, so the run degrades gracefully.

v0.18.0

12 Jun 13:03

Choose a tag to compare

Added

  • Pluggable summary engine. agenthud summary is no longer hard-wired
    to claude — it can now run through Claude Code, OpenAI Codex CLI, or
    Kiro CLI. Pick one per run with --engine <claude|codex|kiro|auto>, or
    set a default with summary.engine in ~/.agenthud/config.yaml. The
    default is auto, which detects the first installed CLI in
    claude → codex → kiro order. This lets Codex- or Kiro-only users
    generate summaries without installing Claude.

Changed

  • Summary cache is now keyed by engine and model, not just date. Each
    cached daily/range summary records which (engine, model) produced it via
    an inert HTML-comment marker; switching the engine or model regenerates
    the summary instead of serving the previous engine's stale text. Caches
    written before this release are treated as Claude output and reused for
    Claude requests, so existing summaries are not needlessly regenerated on
    upgrade.

v0.17.0

12 Jun 11:56

Choose a tag to compare

Added

  • OpenAI Codex CLI as a fourth session provider. Reads
    ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl (override
    CODEX_SESSIONS_DIR). Sessions group by cwd, show the model
    (turn_context.model), a context-window gauge (taken directly
    from the token_count event — no inference), and a cyan codex
    provider label. Sub-agents are separate rollout files linked by
    parent_thread_id and nest under their parent; older
    (source: { subagent: "<role>" }, no parent link) sub-agents
    surface at top level instead of being dropped.
  • Per-agent session-file schemas for all four providers under
    docs/schemas/ (Claude, Kiro CLI, Kiro IDE, Codex), each with
    the jq commands used to derive it.

Changed

  • Repositioned as a multi-agent monitor. README, npm
    description/keywords, and FEATURES now cover Claude Code + Codex
    CLI + Kiro IDE + Kiro CLI rather than Claude-only. The same
    project worked from multiple agents merges into one tree row.
  • Consistent session-row titles across providers. Every
    provider now shows the latest substantial user message (skipping
    slash commands), matching Claude. Previously Codex/Kiro CLI
    showed the first prompt and Kiro IDE showed an auto-generated
    label ("Clean State") the user never typed.
  • Cool sessions render dim. The active count is hot + warm, but
    cool sessions used to render bright like active ones — visually
    contradicting the count. Cool now dims (still expanded/visible,
    unlike collapsed cold); only hot/warm render bright.

Performance

  • Discovery is cached per file by (path, mtime). The Claude
    provider re-read every session + sub-agent file's tail on each
    ~2 s poll; with hundreds of mostly-cold files this was ~1.4 s and
    blocked navigation. Cold files now read once — warm discovery
    ~1450 ms → ~6 ms.
  • The activity viewer no longer re-parses unchanged files.
    Parsed history is cached by (path, mtime), so reading or
    navigating a stable session costs nothing.
  • Growing JSONL parses only the appended tail. When a session
    file grows, agenthud re-parses just the new bytes (bounded-tail,
    with the seam aligned to a turn boundary so nothing cross-line
    straddles it) instead of the whole file. On a 25 MB session a new
    response went from ~150 ms to ~12 ms, and stays bounded as the
    session keeps growing. Kiro IDE (single JSON document) still
    parses whole, gated by mtime.

v0.16.0

12 Jun 09:08
e668279

Choose a tag to compare

Added

  • Kiro IDE sessions appear alongside Claude Code and Kiro CLI.
    Reads the IDE's VSCode-fork storage
    (<app-storage>/Kiro/User/globalStorage/kiro.kiroagent/,
    override: KIRO_IDE_SESSIONS_DIR). Sessions group by
    workspaceDirectory, the title becomes the row description,
    selectedModel the model, and contextUsagePercentage the
    context gauge. Rows carry a magenta kiro-ide provider label.
  • Kiro IDE sub-agents nest under their parent. Unlike the CLI,
    IDE sub-agents live as invokeSubAgent actions inside the
    parent's execution log (tagged subExecutionId), not as
    separate files. agenthud parses those execution documents,
    surfaces each sub-agent as a tree row, and renders its tool
    stream (runCommand → Bash, readFiles → Read, etc.) in the
    activity viewer.
  • waiting badge for IDE approval gates. A sub-agent parked on
    a PendingAction (the IDE's run-command approval prompt) shows
    [waiting] — answering the "is it even running?" question
    directly.
  • AGENTHUD_HOME env override for the app data directory
    (~/.agenthud), mirroring CLAUDE_PROJECTS_DIR /
    KIRO_SESSIONS_DIR. Used for test isolation and mounted/synced
    setups.

Changed

  • Live badges are recency-gated across all providers. A .lock
    file (Kiro CLI) or a running execution (Kiro IDE) only drives a
    [working]/[waiting] badge when the session was touched in the
    last 30 minutes — the same rule Claude already used. A terminal
    left open for hours now falls back to the time-based
    [cool]/[cold] badge instead of looking perpetually active.
  • Session-row description shows the latest user message of any
    length.
    The previous 10-character minimum dropped short
    follow-ups ("ok", "go", "yes") in favor of a stale older
    message; now the literal latest non-slash-command message wins.

Fixed

  • agenthud report truncated piped output. process.exit(0)
    fired before the async stdout pipe drained, silently cutting
    ~40% of a long report (| grep/| less lost trailing session
    blocks while a file redirect kept everything). All exits after a
    stdout write now flush first.
  • Kiro IDE sessions were missing from reports — history
    entries carried no timestamps, so the same-day filter dropped
    them. Activities now inherit the session file's mtime.
  • macOS/Windows watch mode never refreshed on non-Claude
    activity.
    Polling was Linux-only; fs.watch only covers the
    Claude projects dir, so Kiro CLI/IDE changes never triggered an
    update. Polling is now always primary on every platform.
  • KIRO_SESSIONS_DIR overrides routed to the wrong parser.
    Activity from an overridden Kiro root was parsed as Claude JSONL
    (and came back empty). Routing now prefix-matches each provider's
    actual configured root.
  • summary --last Nd --force rebuilt ranges from stale daily
    caches.
    --force now regenerates the per-day summaries too.
  • --with-git duplicated commits once per session of the same
    project; commits are now fetched once per project.
  • --date 2026-02-31 was accepted (JS silently normalized it
    to Mar 3); impossible dates are now rejected.
  • --help / --version / -V created ~/.agenthud/config.yaml
    as a side effect; read-only commands now short-circuit before
    loading config.
  • Summary cache could be left partial on a crash. Output now
    streams to a temp file and renames into place on success.
  • task activity type was inconsistent between the default
    include set, --include all, and the generated config template —
    all three now agree, so first-run and later-run payloads match.
  • Multi-provider project order depended on provider registration
    order
    ; merged trees are now re-sorted by status/mtime.

Internal

  • Provider abstraction (src/data/providers/) with SessionProvider
    interface; Claude / Kiro CLI / Kiro IDE are independent providers
    merged into one tree.
  • Per-provider session-file schemas under docs/schemas/.
  • CI gained a lint gate; the publish workflow now refuses tags
    whose commit is not an ancestor of main.
  • @types/node pinned to the lowest supported runtime (^20);
    publish builds on Node 20.

v0.15.0

12 Jun 04:49

Choose a tag to compare

Added

  • Kiro CLI sessions appear alongside Claude Code. agenthud now
    reads ~/.kiro/sessions/cli/ (override: KIRO_SESSIONS_DIR) as
    a second session source. Both providers merge into one tree —
    the same project worked from both CLIs renders as a single row
    with combined counts. Discovery uses Kiro's .json sidecar
    (cwd for grouping, title as the row description,
    parent_session_id for sub-agent nesting) and the .lock file
    as the liveness signal. The Kiro JSONL record format
    (Prompt / AssistantMessage / ToolResults) is parsed into
    the same activity stream the viewer, report, and summary
    consume.
  • Provider label on session rows. Top-level sessions show
    which CLI created them — claude (yellow) or kiro
    (magenta) — between elapsed time and model name.
  • Context-window usage gauge on session rows. A colored NN%
    (green < 60%, yellow 60–85%, red ≥ 85%) shows how full each
    session's context is. Kiro reports the percentage directly in
    its sidecar; Claude derives it from the last assistant turn's
    usage fields with an adaptive window inference (usage > 200K ⇒
    the session must be on the 1M long-context window). Verified
    against /context output.
  • Report headers carry provenance. Markdown session blocks
    now read ## project (start – end) · provider · model; the
    JSON format gains provider and model keys per session. The
    summary LLM sees the provenance for free.
  • Canonical tool labels across providers. Kiro's raw tool
    names (shell, subagent, introspect, web_fetch) map to
    the Claude-style canonical taxonomy (Bash, Task, Read,
    WebFetch) at the parser boundary, so report include-filters
    and the activity viewer treat both providers uniformly.
    Unknown names pass through visibly instead of being mislabeled.
  • Per-provider session-file schema docs at docs/schemas/
    (claude-session.md, kiro-session.md), each ending with the jq
    commands used to derive the field inventory — re-run them to
    falsify the doc against your own sessions.

Changed

  • Census is now the single source of truth for per-project
    counts.
    computeCensus builds a per-project map in the same
    walk as the tree-wide totals and ProjectRow reads from it, so
    the panel title and row counts can no longer disagree.
  • Fable/Mythos model ids shorten like other families
    (claude-fable-5fable-5).

Fixed

  • Windows: Kiro session history routed to the wrong parser.
    The path check hardcoded / separators; backslash paths now
    normalize first.

v0.14.1

11 Jun 23:30

Choose a tag to compare

Changed

  • ProjectRow name renders dim when no session or sub-agent is
    active.
    Previously every non-hidden project name was bold
    bright white regardless of activity, so a tree full of
    cool/cold projects with one genuinely hot one all looked
    equally "alive" at a glance. New rule: bold + bright only when
    isProjectAlive(project) — at least one session or sub-agent
    is hot or warm. Otherwise dim, non-bold. Hidden projects still
    dim with ; selection background still wins.

v0.14.0

11 Jun 06:41

Choose a tag to compare

Changed (BREAKING)

  • Hide moved from h to Shift+H. Lowercase h is now the
    vim-left alias for (jump to parent).
    The old binding
    (h = hide) was a footgun: vim users coming for navigation
    hit h and silently hid whichever item was selected. The
    user wouldn't even remember pressing it. Capital H keeps the
    mutation behind a deliberate keystroke.

Added

  • Tree-wide census in the Projects panel title. Each level
    shows total + visible-active count:
    12p (3) · 68 sessions (5) · 142 sub-agents (2) · ⊘ 14 hidden (1).
    The (N) parentheticals are green so the eye lands on the
    actionable count. The hidden (M) is yellow — the alert for
    content you can't see. Narrow terminals fall back to short
    form (68s (5), 142a (2)), then drop segments from the
    right; the hidden alert is the last thing to go.
  • a key toggles "show hidden items" in the tree. Hidden
    projects and sessions render dim with a marker so they're
    recognizable at a glance. Combined with the H change below,
    a full hide → toggle → unhide cycle now lives inside the TUI —
    no more state.yaml editing to recover an accidentally-hidden
    item.
  • H is now a toggle, not just hide. Pressing H on a
    visible item hides it (same as before); pressing it on a
    hidden item unhides it. Combine with a to reveal hidden
    items in the tree, navigate to the one you want, and toggle
    with H.
  • Per-project session + sub-agent counts on the project row.
    > myproj ~/path 5 sessions (2) · 142 sub-agents (3) 3m.
    Totals are dim; active subset (N) is mid-tone green
    (non-bold, softer than the panel-title census so it doesn't
    compete with the row's own [hot]/[warm] badge). Width-
    aware: short form 5s (2) · 142a (3), dropped entirely on
    very narrow terminals.
  • Status bar surfaces hidden-but-still-active items. A hidden
    session producing live activity used to be completely
    invisible — combined with the h footgun above, that broke
    discovery in a way that took a state.yaml edit to recover.
    Now the title bar shows the count: · ⊘ N hidden (dim) or
    · ⊘ M active in N hidden (yellow M) when something hot
    or warm is hidden.
  • Cold sessions under active projects collapse to a
    ... N cold sentinel.
    Active projects often hold a long
    tail of historical cold sessions that bury the live work;
    pressing on the sentinel reveals them.

Changed (layout)

  • Census moved to the Projects panel title bar; branding +
    keybindings moved to a single bottom row.
    The top status
    bar was wasted space (just "AgentHUD vX · ⊘ N hidden …"
    floating above the panels) and the Projects title was equally
    wasted (just "Projects"). Both fixed: census now sits where
    it belongs — directly above the tree it describes — and the
    bottom row carries the brand + keys.
  • Session row description = latest substantial user request.
    Was: first natural-language user prompt (often stale by hour
    3 of a long session). Now: the most recent user message that
    is ≥ 10 chars and doesn't start with / (so trivial
    follow-ups like "ok", "go", "yes" and slash commands like
    /compact, /clear are skipped). Falls back to first prompt
    when no later message qualifies.
  • t (toggle tracking) now requires tree focus. It moves
    the tree cursor — accidentally pressing it while reading the
    viewer used to yank focus away. The TRK ● indicator still
    appears on both tree and viewer banners while the mode is on.
  • t: track and r: refresh hints dropped from the status
    bar.
    Tracking is a niche mode; refresh is automatic via the
    2s poll + fs.watch. Both keys still work and are documented
    in the ? help.

Fixed

  • Hidden sub-agents are now MARKED, not filtered, in the data
    layer.
    Previously hidden sub-agents were silently dropped
    before the tree was built, so the panel-title census
    undercounted sub-agent totals, the yellow hidden-active alarm
    was silent for them, and the a (show hidden) + H (unhide)
    round-trip couldn't reach them at all. Now they ride along
    with hidden: true and the show-hidden/unhide flow works
    end-to-end.
  • H no longer teleports selection when showHidden is on.
    In show-hidden mode the row stays rendered (dimmed with )
    after hiding, so jumping selection away made no sense — the
    user just acted on that row and expects to remain on it. Now
    selection only advances when the row is about to disappear
    (showHidden off).
  • Cold session rows render dim instead of bold-bright. The
    cold IDs used to compete visually with the active rows in the
    same project.

v0.13.3

10 Jun 08:46

Choose a tag to compare

Changed

  • README install section split into "Try without installing" /
    "Install for daily use", each showing both npm and bun.

    The previous structure mixed an npx agenthud install hint with
    bare agenthud … Quickstart commands — copy-paste failed for
    anyone who took the trial path. Two clearly-labeled H2 sections
    now exist side-by-side; the Quickstart still targets the
    daily-use form, and bun users are first-class instead of
    "check the docs". Doc-only; no behavior changes.

v0.13.2

09 Jun 12:05

Choose a tag to compare

Changed

  • Package description and keywords optimized for npm search
    ranking.
    Description rewritten to compress every realistic
    search query — "Claude Code", "TUI", "dashboard", "live
    monitor", "parallel sessions", "sub-agents", "LLM", "digest" —
    into one natural sentence without keyword-stuffing reading.
    Keywords expanded from 7 to 26 across the Claude/Anthropic /
    agent / TUI / observability / session-monitor / LLM-summary
    clusters, with phrase keywords like claude-code-tui and
    claude-code-cli for multi-word query matches. Pure metadata
    change, no code or behavior shift; surfaces in npm's search
    index on next crawl.