Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Releases: droidnoob/hew

0.12.0 — 2026年05月31日

30 May 19:15
@github-actions github-actions
142e75b
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Added

  • Project-local config file .hew.toml (hew-c0pa). Hew settings
    now layer across user-global (~/.config/hew/config.toml) and
    project-local (<repo>/.hew.toml, hew.toml legacy fallback). hew init emits a starter .hew.toml with header + version = 1. hew config set takes --global / --project flags (mutually exclusive)
    to pick the target; refuses to silently write user-global when a
    project file exists. hew config show renders the merged effective
    config with (user-global) / (project) / (merged) / (env) /
    (default) attribution per key, in text and --json. Merge rules:
    scalars project-wins, Option<T> falls back via or, arrays
    concat+dedupe, maps extend, tables recurse. Discovery anchors on the
    first .beads/ / .git ancestor (root-only; no ancestor walk in
    v1). New HEW_USER_CONFIG env var overrides the XDG user path
    without bypassing layering (HEW_CONFIG retains single-file bypass
    semantics). See docs/CONFIG.md.

Fixed

  • hew loop run --jobs >= 2 now actually runs N workers (hew-zt4z).
    The parallel dispatcher claimed N tasks at slot-fill time, but the
    per-worker loop then re-queried bd.ready() independently — and saw
    an empty list (since the dispatcher's own claim removed those tasks
    from ready). Result: 0 iters per worker, tasks stranded in
    in_progress. Fix threads the assigned ReadyTask into the worker
    via Worker.assigned_task; the worker prepends it to its
    bd.ready() poll for the first iter, then falls back to the normal
    query for iter 2+. Verified end-to-end: 2 workers, real claude -p
    spawns, real per-worker worktrees at ~/.hew/wt/<run-id>/{0,1}/,
    real merge-back, both worker branches landed cleanly.
  • hew loop run --jobs=1 --scope=epics now honors the scope filter
    (hew-s9mb).
    The serial path's bd.ready() poll skipped the
    scope-descendant check that the parallel Dispatcher::dispatch_tick
    enforces. Result: agent-explicit --scope=epics --epics=<id> could
    silently consume any bd-ready task. Fix re-resolves the descendant
    set at the worker's bd.ready() poll and filters every iter, matching
    dispatcher semantics. Verified: with P1 standalones at the top of
    bd ready and a P2 in the scoped epic, the loop now picks the P2.
  • hew loop summary renders an in-flight view instead of erroring
    with No such file (hew-cn2y).
    The command crashed with raw
    ×ばつ read run.json: No such file or directory when called against a
    run whose first iter hadn't completed yet. Fix classifies four
    cases: no run-dir → today's "not found" error; run-dir with
    manifest.json but no run.json → render parallel in-flight view from
    manifest worker states; run-dir with iter-*.json but no run.json →
    render serial in-flight view from latest iter; empty run-dir →
    minimal "iter 0 in flight" view with elapsed time. Includes a
    note: line pointing at re-running summary after iter 1 ends.

Changed

  • /hew:auto slash description corrected from the legacy
    "Run plan → decompose → execute → verify autonomously" to the
    in-conversation epic walk it actually does (per the rewrite in
    hew-6n0v / 0.11.0).

Install hew 0.12.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.12.0/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.12.0/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.12.0

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Assets 19

0.11.0 — 2026年05月30日

30 May 12:42
@github-actions github-actions
731d930
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Added

  • hew loop graph DAG renderer (hew-m7lq). Renders the loop's
    iter + batch + run + manifest history as a directed graph in
    mermaid (default), GraphViz dot, or terminal ASCII. Each iter is
    a node labelled with task id, outcome glyph, duration, and tokens;
    edges distinguish sequential next-iter, agent-suggested,
    planner-suggested, fallback (bd ready), and backpressure
    rollbacks. Unhappy paths render distinctly: incomplete iters get a
    dashed border (), cancelled-mid-run iters get with the stop
    timestamp, runtime errors with empty stderr annotate as possibly hung, backpressure failures draw a ↺ rolled back self-edge, and
    verify outcomes get a coloured tail node (Verify ✓ / Verify ✗ /
    Verify (skipped)). Parallel runs (--jobs >= 2) render
    per-worker swimlanes from manifest.json. CLI:
    hew loop graph [--run-id ID] [--format mermaid|dot|ascii] [--out PATH] [--all]; --out ending in .md wraps the mermaid
    body in a fenced ```mermaid block. --all aggregates every run
    under .hew/loop/ into one document with each as its own subgraph.
    Pre-batch-plan legacy runs render with sequential edges only. See
    docs/LOOP.md § Loop graph. Closes epic hew-lf40.
  • End-of-run verify step for hew loop (hew-bon7). Opt-in
    mandatory test step that runs after the last iter (and after
    merge-back on --jobs N >= 2) to prove the final stacked state is
    green. Conditional on both a resolvable test command (CLI
    --verify-command > loop.end_of_run.verify_command > project-
    authored signals via hew_core::gate::detect) and an explicit
    opt-in (--verify-tests or loop.end_of_run.verify_tests = true).
    Outcome (Passed / Failed / Skipped / TimedOut) persists as
    Run.verify_outcome in run.json, shows up as a verify: line in
    hew loop summary, and on failure files a
    STATUS:loop-verify-failed:<run-id> memory + exits non-zero so CI
    branches on it. Closed tasks are not rolled back on failure —
    the memory + summary line + exit code are the durable signals.
    Defaults are byte-identical to today (verify_tests = false). CLI:
    --verify-tests, --no-verify-tests, --verify-command=....
    Config: [loop.end_of_run] verify_tests, verify_command,
    verify_budget_wall (default "10m"). See docs/LOOP.md §
    End-of-run verification.
  • Batch planner for hew loop run --jobs N (epic hew-lf40).
    Parallel runs now layer two informed signals on top of bd ready to
    choose each iter's dispatch batch: (1) a next_iteration: block in
    the iter agent's close output (cheapest, in-band), and (2) a
    dedicated planner subprocess spawned between iters when (1) is
    absent — capped by loop.planner.budget_tokens (default 10_000)
    and skipped rather than truncated when over budget. bd ready
    remains the safety floor: agent / planner suggestions can only
    narrow the candidate set, never expand it
    (DECISION:loop-batch-planner-floor). Each iter persists a
    batch-NNN.json artifact (schema_version: 1) under the run dir; a
    future hew loop graph (hew-m7lq) replays them. The end-of-run
    summary gains a single-line planner: agent=N, runtime=M, fallback=K row right after scope: (omitted entirely for legacy /
    serial runs). CLI: --no-planner, --planner-budget. Config:
    [loop.planner] enabled = true, budget_tokens = 10_000. v1 only
    triggers under --jobs >= 2; --jobs=1 skips the layer. See
    docs/LOOP.md § Batch planner.
  • hew loop run --scope={ready|epics} — scoped run queue
    (hew-b3yl).
    Operators (and calling agents) now declare which
    slice of bd ready counts as the queue for a run: --scope=ready
    (everything ready — current behavior) or
    --scope=epics --epics=<csv> (only tasks transitively under the
    listed epics). The dispatcher resolves descendants once at startup
    and filters every tick against that set. Interactive runs get a
    picker; non-interactive runs without --scope fail with
    HewError::MissingFlag { flag: "scope" } so an agent-driven loop
    never accidentally consumes the rest of the graph. run.json gains
    a scope field; legacy runs without it load as None and
    hew loop summary renders them as scope: ready (legacy). End-of-
    run summary now carries a scope: line between outcomes and
    tokens. See docs/LOOP.md § Scope.
  • hew loop --jobs N — parallel worker slots via per-worker git
    worktrees.
    Default 1 keeps today's single-threaded loop
    byte-for-byte (no worktree, no merge-back, no manifest). N >= 2
    switches to a dispatcher path that lays down one git worktree per
    slot at ~/.hew/wt/<run-id>/<n>/, drains the ready queue in
    parallel, then merges each loop/<run-id>/w<n> branch back onto
    launch HEAD at shutdown. Clean merges prune the worktree on the way
    out (hew-kt5q); conflicted merges file a [merge-conflict] bug
    task and leave the worktree for hand-resolution. Trust-the-graph
    per DECISION:loop-parallel-overlap-policy: any bd ready task is
    parallelizable; ordering belongs in dep edges, not overlap
    metadata.
  • hew loop prune-worktrees [--apply] — garbage-collect orphan
    worktrees left behind by crashed parallel runs. Dry-run by default
    (lists what would be removed); --apply actually deletes. A
    worktree is "orphan" when its <run-id> has no live run-dir under
    <project>/.hew/loop/ (or that run-dir's run.json already
    records a stop_reason). Per-worker branches survive in the
    project's git history.
  • hew loop summary per-worker breakdown. Parallel runs render a
    wkr | iters | closed | runtime | tokens | stop table with a
    totals row before the aggregate summary block (hew-h0tu). Serial
    runs (no manifest.json) are unchanged.
  • hew_core::git::reset_hard_in(worktree, sha) — per-worker
    rollback helper. Runs git -C <worktree> reset --hard <sha> so the
    parallel loop's gate-fail revert is scoped to one worker's worktree
    and never touches siblings (DECISION:loop-parallel-overlap-policy).
    loop_cmd::git_reset_hard now delegates here.
  • hew_core::worktree::branch_exists + create() collision guard.
    Reusing a run_id after a crashed run would land git worktree add -b on a stale branch; create() now pre-checks via rev-parse --verify and returns a clear GitNonZero rather than silently
    overwriting. Branch naming stays the documented loop/<run-id>/w<n>
    (see worktree::branch_name).
  • Per-task model selection in hew loop. Heavy tasks can route to a
    stronger model without changing the rest of the queue. Precedence
    (highest first): description tag <!-- hew:model=opus-4-7 -->, label
    model:<name>, config loop.model.by_priority.<P>,
    loop.model.by_type.<type>, loop.model.default. The resolved model
    is passed to the spawner per iter as --model / -m and logged in
    iter-NNN.json::model. hew loop summary adds a "by model"
    breakdown table (iters, tasks, input/cached/output/total) when at
    least one iter recorded a model; hidden otherwise. See
    docs/LOOP.md "Per-task model selection" for syntax + the
    per-model prompt-cache caveat.
  • hew init re-run UX. Re-running hew init in an already-inited
    directory now detects the prior install via per-runtime artifact
    markers (.claude/skills/hew/SKILL.md, .agents/skills/hew-execute/SKILL.md,
    HEW:BEGIN in .cursorrules/.windsurfrules, CLAUDE.md for generic)
    and routes to one of three modes instead of silently re-prompting and
    overwriting ~/.config/hew/config.toml: Refresh (default —
    re-lay skill files only, keep config), Reconfigure (full prompt
    chain + config overwrite, opt in via --reconfigure), or Cancel
    (no changes). Interactive runs get a 3-option picker; non-interactive
    runs without --reconfigure default to Refresh. The summary panel
    header reflects the chosen mode (Setup complete / Refreshed /
    Reconfigured). Fresh installs are unaffected. (hew-0wa)

Changed

  • hew-decompose skill documents bd create --graph for batch task
    creation.
    Hand-rolling hew task new in a loop hits
    GOTCHA:zsh-cmd-substitution on apostrophes / backticks / $() in
    multi-line descriptions. The skill body now includes a graph-JSON
    example (nodes + edges + parent_key) and calls out batch mode as the
    recommended path for >3-task plans. No new hew code — bd create --graph is a documented hold-out (alongside bd orphans / bd lint).
    Also fixes two stale references to a bd gate create primitive that
    never existed, and drops gate from the task-type table (external
    blockers use the dedicated hew gate surface, not a task type).

Added

  • hew gate — external-state gates for /hew:ship and friends.
    hew gate new --gh-pr=N --title="..." creates a bd task labelled
    hew-gate with the wait condition stored as typed metadata.
    hew gate poll [<id>] queries the external surface (currently
    gh pr view <N> --json state,mergedAt) and closes any task whose
    condition has fired — MERGED resolves, OPEN / CLOSED-without-merge
    stay pending, unknown states surface as warnings. Pair with
    hew dep add <next-epic> <gate-id> to block downstream work on a
    PR merge. Future backends (gh:issue, gh:run, cmd:) are
    scaffolded behind the same GateKind enum.

Changed

  • /hew:ship skill body now uses hew gate. Replaces the previous
    step 3 (bd create --type=gate --await-type=gh:pr --await-id=N,
    which referenced flags that don't exist in bd v1.0.3) with the
    working hew gate new --gh-pr=N flow plus an explicit hew gate poll step so resolved gates flip closed.

  • hew init --runtime accepts multiple runtimes. Comma-separated
    (--runtime=claude,codex) and repeated (--runtime=claude --runtime=codex) forms both parse to the same list; the install loop
    then iterates each runtime in order with a pe...

Read more
Loading

0.10.0 — 2026年05月28日

27 May 19:27
@github-actions github-actions
3a9fdf9
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Makes the loop runner portable across language stacks and adds a way to
re-inspect any past run. Born from a real bug: hew loop died on iter 1
in a Python project because the per-iter gate was hardcoded to Rust.

Added

  • Language-aware loop gate. The per-iter test/lint gate no longer
    assumes cargo. It reads the commands from signals the project
    already wrote — a test / lint target in a Makefile, a recipe in
    a justfile, or a script in package.json — so the loop gates Rust,
    Python, Go, Node, or anything with those entry points. Detection lives
    in the new pure-logic hew_core::gate module. When no signal is
    present the gate is skipped (with a stderr breadcrumb) rather than
    failing the run, and a missing tool binary (ENOENT) degrades to
    skip-pass instead of trapping the loop.
  • hew loop summary [--run-id]. Re-renders the rich end-of-run
    report (token breakdown, cache-hit rate, per-iter spend sparkline,
    symbols touched, stop reason) for any completed or running loop from
    its persisted run.json + iter logs — previously that summary only
    printed once, live at the end of a run. Backed by a new
    StopReason::from_label with a round-trip drift test.

Fixed

  • hew loop no longer traps non-Rust projects. A Python (or any
    non-cargo) repo previously tripped GuardTrip after one iter because
    cargo test / cargo clippy errored on the missing Cargo.toml. The
    loop now drains the queue regardless of stack.
  • Homebrew install path in the README corrected to
    brew install droidnoob/hew/hew (the old droidnoob/tap/hew pointed
    at a tap repo that never existed).

Docs

  • New "The autonomous loop" section framing hew loop and its
    guardrails (graph-as-state, backpressure gate with rollback,
    byte-stable prompt prefix, budgets and clean stops).
  • Terminal demos added to the README: hew init, hew status, and a
    hew loop summary screenshot.

Install hew 0.10.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.10.0/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.10.0/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.10.0

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading

0.9.0 — 2026年05月26日

26 May 14:38
@github-actions github-actions
17365f1
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

The "loop runner" release. hew loop run is now a fully wired
autonomous outer harness against real claude -p, exercised
end-to-end on a toy CRUD project and instrumented with cache-hit
tracking, symbol-level changelog, and a coloured end-of-run summary.

Added

  • hew loop — process-level outer harness. A new subcommand
    group that drains the bd ready queue by spawning fresh claude -p
    subprocesses, with hard caps on iters, tokens, and wall clock.
    Per-iter outcome, token spend, prefix hash, decisions / deferred
    ids, stderr tail, and (when treesitter is on) the symbol-level
    changelog get atomically logged to .hew/loop/<run-id>/iter-NNN.json.
    • hew loop run — drive the loop until a stop fires.
    • hew loop list — recent runs + state.
    • hew loop logs --tail N — pretty-print iter rows for a run.
    • hew loop cancel — touch the stop-file of a running loop.
  • Backpressure gate. cargo test + cargo clippy run after each
    non-error iter. On Verdict::Fail the loop runs git reset --hard <pre-iter-sha> to revert the iter's commits, overrides the outcome
    to BackpressureFail, and files a STATUS:loop-iter-failed:<run>: <iter>:<iso> memory.
  • SIGINT → clean stop. A ctrlc handler flips the shared
    CancelFlag so Ctrl+C produces StopReason::Cancelled in
    run.json (the in-flight iter finishes; no orphaned subprocess).
  • --unattended flag + decision-resolution flow. Walks memory →
    code → research and files either DECISION:<topic> or
    DEFERRED:<topic> depending on provenance. When --unattended is
    on, the loop polls bd for new DEFERRED: memories the agent filed
    during an iter and tries to resolve them via prior art
    (case-insensitive memory match + git grep -n -i -F for code
    citations).
  • Out-of-band closure detection. If an iter's task disappears
    from bd.ready() after the spawn, the outcome is promoted to
    Closed even when the agent closed via the Bash tool (whose stdout
    doesn't propagate into the model's final reply text).
  • Rich end-of-loop summary, auto-shown after every run. Small
    magenta "hew" ASCII banner, outcome breakdown (colour-coded:
    green=closed, yellow=no_close, red=backpressure_fail), token split
    (input / output / cache_read / cache_create with percentages),
    cache-stability line computed from prompt_prefix_hash run-length,
    decisions / deferred counters, 8-block Unicode sparkline of
    per-iter token spend, symbols touched. NO_COLOR strips the ANSI.
  • hew blast as a first-class signal in two surfaces.
    • Loop iter logs gain symbols_touched: Vec<String> populated
      from blast::compute_blast_with(pre_iter_sha) after each
      non-error iter. End-of-run summary aggregates the symbol set
      deduped across the run.
    • hew status gains a "Since last close" section listing the
      working-tree symbol delta against the default base (upstream →
      main → master). Top-8 + ...(+N more) footer.
    • hew-execute skill body Step 6 close-checklist now nudges
      the agent to run hew blast pre-close to confirm the symbol
      delta matches task scope.
  • /hew:loop slash wires the loop into Claude Code.
  • docs/LOOP.md — full design + troubleshooting guide, plus a
    "First real run" section capturing the 2026年05月26日 E2E with three
    real-claude runs (artifacts under examples/loop-runs/2026-05-26/).
  • DEFERRED: joins the memory-prefix allowlist (14th prefix) so
    the loop can file unresolved topics for operator review via
    hew remember --type=deferred.
  • hew_core::time::parse_iso_utc — strict reverse of
    iso_from_unix, used by the loop summary for wall-clock duration.

Changed

  • /hew:auto slash body rewritten as a thin pointer at
    hew loop run --until-empty. The in-conversation walk is still
    reachable via /hew:work.
  • hew prime <skill> defaults to text. --json now gates the
    JSON shape for every skill (previously hard-coded JSON except for
    resume). Aligns with FEEDBACK:no-json-piping — text is the
    agent-facing contract. --pretty still implies --json.
  • Prompt cache invariant fixed. The per-iter primer used to live
    inside the cacheable prefix passed to prompt::assemble, so
    prompt_prefix_hash changed every iter and the Anthropic prompt
    cache missed every spawn. The primer is now captured once at run
    start via bd.prime_raw() and held byte-stable across the run;
    per-iter task fields moved into the task brief (tail). Cache hit
    rate is now observable in the rich summary.

Removed

  • --research-budget flag + research_gate module. The flag
    was wired but never consumed — real claude -p agents do their
    own web search inside the spawn, never round-tripping a request
    to the loop. -277 lines net. If a future runtime exposes a
    loop-mediated research hook, a typed budget can be re-added at
    that point.

Internal

  • New crate modules: hew_core::loop_summary, plus the deletion of
    hew_core::research_gate.
  • RuntimeSpawner trait + ClaudeSpawner (production) +
    MockSpawner (tests). GateRunner trait + CargoGateRunner
    (production) + StaticGateRunner (tests). Both injectable into
    run_loop_with so the integration tests under
    hew/tests/loop_backpressure.rs exercise the rollback,
    unattended-resolve, out-of-band-close, and prefix-hash-invariant
    paths against a tempdir git repo without burning real API tokens.
  • Captured live claude -p --output-format json fixture at
    hew-core/tests/fixtures/claude-output.json (redacted); unit test
    parses it to catch field-name drift.

Install hew 0.9.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.9.0/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.9.0/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.9.0

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading

0.8.1 — 2026年05月26日

25 May 20:17
@github-actions github-actions
419c550
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Tree-sitter on by default. The 0.8.0 release shipped hew blast but
the Homebrew formula and cargo install hew produced binaries built
without --features treesitter, so end users hit a "rebuild with
--features treesitter" error when invoking it.

Changed

  • treesitter feature is now on by default in hew-core and
    hew. Shipped binaries (brew, cargo-dist, cargo install hew)
    include hew blast out of the box.
  • Lean local build path preserved: cargo build --no-default-features
    strips every tree-sitter crate. The cfg gates that compile out the
    blast subcommand under no-features stay in place.
  • DECISION:treesitter-feature-gating memory updated to reflect the
    new default.

Install hew 0.8.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.8.1/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.8.1/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.8.1

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading

0.8.0 — 2026年05月26日

25 May 19:38
@github-actions github-actions
d8a8e3c
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Tree-sitter symbol extraction + hew blast. Five-slice epic
delivering a feature-gated pure library for diff-driven symbol
extraction across six languages, plus a new CLI surface that
consumes it.

Added

  • hew_core::treesitter library (feature treesitter, off by
    default — cargo build -p hew --features treesitter to enable).
    Parses Rust / Python / TypeScript / JavaScript / Go / Java sources
    via tree-sitter and extracts Symbol { name, kind, byte_range, line_range }. Hand-trimmed tags.scm queries per language follow
    the tree-sitter org capture convention. Dedupe by byte_range
    prefers Method > Function > Class. Error-tolerant — malformed
    source returns Ok with partial results.
  • hew_core::treesitter::diff::changed_symbols — pure
    line-overlap intersection between extracted symbols and a slice
    of changed line ranges.
  • hew_core::diff_hunks::parse_changed_ranges — parser for
    git diff --unified=0 hunk headers. Pure line math, not feature-
    gated. Skips zero-count pure-deletion hunks.
  • hew blast subcommand (feature treesitter). Walks
    git diff --unified=0 <base>...HEAD and prints, per file, the
    symbols whose definitions overlap a hunk. Different from
    git diff — answers "which functions / classes actually changed,"
    not "which lines moved." Three input modes:
    • default — scan everything in the diff
    • positional file args — intersect with the diff set
    • --no-diff <files>... — skip git; emit every symbol in each
      file (combines with --stdin for git ls-files | hew blast ...)
    • --path <substr> (repeatable) substring filter
    • --base <ref> override
    • --json for machine-readable output
  • /hew:blast slash command + hew-blast optional skill body.
    Opt-in via hew config set optional-skills.blast true.
  • craft.symbol_trace config flag. When true (and the binary
    was built with --features treesitter), hew task close auto-
    appends a symbols changed (blast vs <base>): ... block to the
    task's notes via bd update --append-notes. Permanent semantic
    trail in the bd graph. Silent best-effort; off under default
    builds. Default false.
  • ReviewBundle.changed_symbols field on hew review bundle --json. Per-symbol slices of the diff with source_slice so the
    review skill body can read just the changed regions instead of
    whole files. Populated when treesitter is enabled; absent under
    default builds (serde(skip_serializing_if = "Vec::is_empty")).
  • Statusline 1M context fix. The model id in the transcript
    reliably carries a [1m] suffix on the extended window; the
    statusline now uses that as the authoritative ceiling instead of
    the observed-usage heuristic.

Tests

  • 12 unit tests for diff intersection (treesitter::diff).
  • 30 unit tests for per-language extraction
    (treesitter::grammars).
  • 7 end-to-end integration tests with per-language fixtures
    (hew-core/tests/treesitter_integration.rs) + one non-gating
    perf signal (HEW_TS_BENCH=1 enforces <5ms warm; off otherwise
    prints).
  • 7 hunk-header parser tests (diff_hunks).
  • Statusline [1m]-context-suffix tests (3 new).

Internal

  • Three GOTCHA:test-counts-drift counts bumped: skills 20 → 21,
    slashes 39 → 40, install-claude file count 61 → 63, install-codex
    file count 41 → 43.
  • hew_core::blast::compute_blast / resolve_base / etc. accept
    &dyn GitClient so library callers (including the review bundle
    enrichment) can drive the pipeline with a mock or owned client.

Install hew 0.8.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.8.0/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.8.0/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.8.0

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading

0.7.1 — 2026年05月25日

25 May 15:33
@github-actions github-actions
58b384e
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Statusline fixes — hew statusline was overwriting Claude Code's
default bottom-bar instead of composing with it, and the scope label
was overflowing the truncation point. The previously-shown
context-usage indicator is now back as its own clearly-labeled
segment.

Changed

  • Composes with Claude Code's default line. The CLI now reads the
    session JSON it gets on stdin and renders a Claude-style prefix
    (<model> | <cwd> with ANSI color: cyan model, green cwd) ahead of
    the hew segment, separated by ||. New --bare flag emits just
    the hew segment. NO_COLOR honored.
  • Scope label condensed. condense_title splits an epic/milestone
    title on the first em-dash (matching the milestone-body convention)
    and truncates the head to 28 chars with an ellipsis. Stops the
    90-char epic descriptions from blowing past Claude Code's
    truncation point.

Added

  • Context-usage segment (ctx <bar> <pct>% · <used-tokens>).
    Parses transcript_path out of the stdin session JSON, walks the
    JSONL backward to the most-recent type=assistant message, and
    sums input_tokens + cache_creation_input_tokens + cache_read_input_tokens as "context used". Renders a color-
    gradient bar:
    • green < 60%
    • yellow 60–84%
    • red ≥ 85%
      Context limit inferred from observed usage (200K standard, 1M
      extended). Token count humanized as 847 / 41K / 1.2M.
      Best-effort: any IO / parse failure → segment skipped, statusline
      keeps working.
  • Hew segment is now bar-free. hew <label> N/M [(phase)]
    label-based so the two graphs (context bar vs. epic counter) aren't
    visually competing.

Tests

  • 8 new inline (humanize_tokens, infer_context_limit, claude prefix
    render with/without colors, condense_title em-dash strip +
    ellipsis truncation, TokenUsage::total).
  • 3 new e2e (compose with session JSON, --bare skips prefix, ctx
    segment appears when transcript carries a usage block).

Install hew 0.7.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.7.1/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.7.1/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.7.1

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading

0.7.0 — 2026年05月25日

25 May 14:29
@github-actions github-actions
09ba76d
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Ships feat/statusline — Claude Code agent statusline showing
what hew is working on, end-to-end. Auto-wired by hew init, and
self-heals onto installs that predate this release with no hew update needed.

Added

  • hew_core::statusline — pure render module. render(input, format, width) is a pure function over (StatuslineInput, StatuslineFormat, width); no I/O. Three formats:
    • Compact: <label> <bar> <pct>%
    • Medium (default): adds phase + epic-fraction
    • Full: adds <user> <user-done>/<user-total>
      Width clamped to [1, 80]; total=0 / done=0 short-circuit to all-
      empty; done > total saturates to all-filled. detect_phase infers
      Planning / Executing / Verifying from STATUS:* markers plus
      task counts. pick_scope_label falls through milestone → epic →
      "(no scope)". All types derive Serialize / Deserialize /
      JsonSchema. 17 unit tests cover the documented edge cases.
  • hew statusline subcommand — thin clap wrapper that owns the
    side-effects the pure layer can't: stdin drain, prime::resume
    query, env-based USER lookup, milestone-memory project label,
    current-epic discovery (in_progress parent → ready epic fallback).
    Flags: --compact / --full (mutually exclusive; default Medium),
    --scope=auto|project|milestone|epic, --width=N (default 10,
    clamped not rejected). Stdout is reserved for the line itself;
    errors and bd-not-initialized both exit 0 with empty stdout so
    Claude Code's statusLine hook degrades gracefully. 7 e2e tests
    via a PATH-stubbed bd plus 5 inline tests for the lenient JSON
    peek + project-label fallback.
  • hew init upserts a top-level statusLine block in
    .claude/settings.json
    carrying hew_managed: true. Mirrors the
    SessionStart hook pattern: re-install is idempotent, uninstall
    removes only the hew-owned variant, opt-out works by removing the
    flag. 5 new install tests cover write, idempotency, user-opt-out
    preservation on install, hew-owned removal on uninstall, and user-
    opt-out preservation through the full install / uninstall cycle.
  • Auto-migration on hew prime resume for installs that predate
    this release. install::auto_migrate_claude_statusline(cwd) runs
    on every SessionStart; injects the block iff (1) .claude/settings.json
    exists and parses, (2) carries a hew_managed: true SessionStart
    entry (proves it's a hew install), and (3) has no statusLine key
    yet. Silent / fail-closed on every other path — the SessionStart
    hook must never break because of a self-heal misfire. 5 new tests
    cover the happy migration, idempotency when block already present,
    skip-when-not-a-hew-install, missing-settings, and the malformed-
    JSON safety net.

Documentation

  • New "Statusline" subsection in CLAUDE.md covering the three
    formats, the hew_managed discriminator, the graceful-fallback
    contract, where the pure module lives, and the self-heal path.
  • README.md "Daily flow" notes the auto-wired statusline.
  • CONTRIBUTING.md notes the hew_managed: true pattern for future
    contributors wiring install plumbing into .claude/settings.json.
  • docs/COMMANDS.md CLI-only surfaces table gains a hew statusline
    entry.

Install hew 0.7.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.7.0/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.7.0/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.7.0

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading

0.6.1 — 2026年05月25日

25 May 10:18
@github-actions github-actions
00671de
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Fixes GitHub #40 hew prime resume surfacing a stale
CHECKPOINT: instead of the newest one. Root cause was on the
write side: the hew-checkpoint skill body told the agent to
roll the row by hand with hew remember --raw "CHECKPOINT:..." --key ..., which made it easy to produce a body without an ISO timestamp
directly after the CHECKPOINT: prefix. Such bodies sorted
lexicographically below well-formed newer entries in
prime::latest_checkpoint, silently shadowing them.

Added

  • hew checkpoint "<body>" subcommand. One-shot helper that
    auto-prepends CHECKPOINT:<ISO-8601-now> — , auto-generates a
    checkpoint-<sanitised-iso> key, and writes through the same path
    as hew remember. Supports --key override, --timestamp
    override (for back-dating / tests), and --related / --related-task
    for emitting LINK: sidecars in the same call. Body shapes already
    containing a well-formed CHECKPOINT:<ISO> prefix pass through
    verbatim; malformed prefixes are rewritten to the canonical shape.
  • hew_core::checkpoint — pure build_checkpoint_key /
    build_checkpoint_body helpers covering the three input shapes
    (no prefix, broken prefix, well-formed). Eight unit tests pin the
    rewrite behaviour, including the exact bug shape from #40.
  • hew_core::time — promoted the ISO-8601 formatter (previously
    duplicated in hew/src/commands/compact.rs) into a shared module
    with a looks_like_iso_date recogniser used by both the new
    checkpoint helper and the prime resume hardening.

Changed

  • hew_core::prime::latest_checkpoint now treats a non-ISO first
    token as "no timestamp" (instead of using whatever lex-sorts there).
    A malformed legacy checkpoint can no longer shadow a newer
    well-formed one in hew prime resume. Regression test pins the
    exact bug shape.
  • skills/core/hew-checkpoint.md rewritten to lead with hew checkpoint "<body>". The previous hew remember --raw "CHECKPOINT:..." --key ... instructions (and the worked example using
    them) are gone; an explicit "do not hand-roll the shape" anti-pattern
    is now called out.
  • commands/checkpoint.md mirrors the skill rewrite.

Fixed

  • GitHub #40 hew prime resume surfaces stale CHECKPOINT
    instead of newest. Closed by the combination of the new
    hew checkpoint subcommand (write-side fix), the
    latest_checkpoint recogniser tightening (defense-in-depth), and
    the skill-body rewrite (no longer recommends the foot-gunny path).

Install hew 0.6.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.6.1/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.6.1/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.6.1

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading

0.6.0 — 2026年05月22日

21 May 20:18
@github-actions github-actions
63621d5
This commit was created on GitHub.com and signed with GitHub’s verified signature.
GPG key ID: B5690EEEBB952194
Verified
Learn about vigilant mode.

Choose a tag to compare

Release Notes

Ships the Memory Links epic end-to-end — sidecar LINK: edges
between memories, with a writer, reader, body-scanner, cascade-aware
forget, compact exemption, and a remember-time suggestion prompt.
Plus a handful of independent fixes (bd init stealth/skip-agents,
hew forget as a top-level subcommand, gate-syntax + acceptance-flag
corrections in the decompose skill).

Added

  • LINK: row grammar + parser + index (hew-f75, hew-bfc).
    hew_core::memories::links exposes a frozen
    LINK:<from>->relates_to:(memory|task):<to> grammar with
    parse_link_row / format_link_row / build_link_row_body, a
    bidirectional LinkIndex (outbound, inbound, dangling), and a
    read_links builder over a (key, body) memory list. Dedupes
    identical rows surfaced from multiple bodies.
  • hew remember --related <KEY> / --related-task <ID> (hew-utn).
    Repeatable flags that emit LINK: sidecars after the primary
    write. Require --key so the link's <from> side is
    deterministic. Targets are charset-validated front-door — a bad
    value fails the whole command before any bd write.
  • hew memories --links <KEY> reader (hew-bhc). Text-default
    view of a memory's outbound / inbound / dangling edges, with
    --json emitting a stable {key, outbound, inbound, dangling_outbound} shape for downstream consumers. Picks up
    explicit LINK: rows AND inline [[memory-key]] / #bd-task
    body references in one merged index.
  • Body-reference scanner (hew-tcy). scan_body_refs(from, body)
    extracts [[memory-key]] and #prefix-id references into the
    same LinkIndex as explicit LINK rows. LinkSource { Explicit, BodyScan } lets readers distinguish authored from inferred
    edges; explicit wins on dedupe. Backslash-escape suppresses
    wikilinks; task refs require a word boundary; trailing sentence
    punctuation is stripped so #bd-99. captures bd-99 but
    subtask dots like hew-a3f8.1 survive.
  • hew forget <KEY> top-level subcommand (hew-7zi) — ergonomic
    alias for hew memories --forget <KEY>. Then extended (hew-jem)
    to cascade-purge outbound LINK: rows automatically: when a
    memory dies, sidecars from it die too; inbound rows are
    deliberately left as dangling so authors notice and rewire.
    Cascade target list is locked in before the primary forget
    fires, so a step-2 failure doesn't leave orphans.
    hew memories --forget remains the no-cascade escape hatch.
  • hew remember --type=link (hew-uxf). Joins the canonical
    type allowlist (14 → 15 prefixes). Bare body gets the LINK:
    prefix prepended; pre-formatted full rows still go through
    --raw.
  • Interactive "these look related — link any?" prompt at remember
    time
    (hew-3wt). Lexical ranker in hew_core::memories::suggest
    (token overlap + same-prefix bonus, stop-words + short-tokens
    filtered, top-N with deterministic tie-break) drives an
    inquire::MultiSelect. Selections feed back through the
    existing --related write path. New flags --no-suggest and
    --suggest-top=<N> (default 3, 0 = disabled). Silent under
    --non-interactive / CI / non-TTY per
    CONVENTION:cli-non-interactive.
  • LINK: exempted from compaction (hew-54w). LINK joins
    STATUS:scan/convention/plan/decompose in
    HARDCODED_EXEMPT_PREFIXES so compact never destroys the edge
    graph. Matcher's starts_with arm makes bare LINK cover every
    LINK:* row.
  • hew init --stealth flag. Explicit non-interactive opt-in
    to the existing stealth path (skips the "share the task graph
    in git?" prompt). Mutually exclusive with --git-track.

Changed

  • hew init always passes --skip-agents to bd init, and
    also --stealth when git_track=false. Stops bd from writing
    a competing CLAUDE.md ("use bd for ALL task tracking" — direct
    conflict with FEEDBACK:prefer-hew-over-bd), an AGENTS.md, or
    a competing SessionStart hook in .claude/settings.json, and
    stops bd from auto-committing beads files when the project
    isn't tracking .beads/. Reorders init: git is now initialised
    and git_track resolved before bd init runs.
  • hew memories --forget <KEY> is now the documented
    no-cascade path; the new top-level hew forget is the curated
    ergonomic surface that cascades.

Fixed

  • hew-decompose skill body: Step 5 gate table used
    bd create --type=gate --await-type=... syntax that doesn't exist
    in bd. Replaced with the real bd gate create --type=human|timer |gh:pr|gh:run --blocks=<id> --await-id=<x> form; the --blocks
    flag does the dep wiring inline, dropping the standalone
    hew dep add. Step 7 acceptance comment switched from the stale
    bd update --acceptance to the existing hew task update --acceptance wrapper.

Tests

hew-core test count: 251 (v0.5.2) → 303. New e2e suites for
hew forget (7 tests) and hew remember --related/--links/ --no-suggest (17 tests across remember + memories).

Install hew 0.6.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/droidnoob/hew/releases/download/v0.6.0/hew-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/droidnoob/hew/releases/download/v0.6.0/hew-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install droidnoob/hew/hew

Download hew 0.6.0

File Platform Checksum
hew-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
hew-x86_64-apple-darwin.tar.xz Intel macOS checksum
hew-x86_64-pc-windows-msvc.zip x64 Windows checksum
hew-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
hew-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum
Loading
Previous 1
Previous

AltStyle によって変換されたページ (->オリジナル) /