-
Notifications
You must be signed in to change notification settings - Fork 0
Releases: droidnoob/hew
0.12.0 — 2026年05月31日
142e75b 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.tomllegacy fallback).hew initemits a starter.hew.tomlwith header +version = 1.hew config settakes--global/--projectflags (mutually exclusive)
to pick the target; refuses to silently write user-global when a
project file exists.hew config showrenders 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 viaor, arrays
concat+dedupe, maps extend, tables recurse. Discovery anchors on the
first.beads//.gitancestor (root-only; no ancestor walk in
v1). NewHEW_USER_CONFIGenv var overrides the XDG user path
without bypassing layering (HEW_CONFIGretains single-file bypass
semantics). Seedocs/CONFIG.md.
Fixed
hew loop run --jobs >= 2now actually runs N workers (hew-zt4z).
The parallel dispatcher claimed N tasks at slot-fill time, but the
per-worker loop then re-queriedbd.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 assignedReadyTaskinto the worker
viaWorker.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, realclaude -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=epicsnow honors the scope filter
(hew-s9mb). The serial path'sbd.ready()poll skipped the
scope-descendant check that the parallelDispatcher::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 readyand a P2 in the scoped epic, the loop now picks the P2.hew loop summaryrenders an in-flight view instead of erroring
withNo such file(hew-cn2y). The command crashed with raw
×ばつ read run.json: No such file or directorywhen 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:autoslash 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
- sha256:3cb6b1a021e023d69bdbdac0d9688a3544704acc37139de6a48b0b1387deea4e27.2 KB
2026年05月30日T19:15:18Z - sha256:e933a96e6cdc4c26f95e2612050aa86c9b4e1bd8c53c4837ac11db72eaef45de3.31 MB
2026年05月30日T19:15:18Z - sha256:49fece4840e75ad3dbdda50d3ba204463e587081252e579184c7fc20a21b6d4399 Bytes
2026年05月30日T19:15:18Z - sha256:aa21a9b0ef24ae7bb1161e44edc0e5b6be01b421e7804eb582bcf05052ea9c0b3.29 MB
2026年05月30日T19:15:18Z - sha256:58758cce620e56eabd8ab4d5543ae58e8d08191ec2f906641ba87f3af986d246104 Bytes
2026年05月30日T19:15:18Z - sha256:08bdab4b17b8ca7676df284bbd073c8f0cf249932f1fefca7ddc55f636c7f74e21 KB
2026年05月30日T19:15:18Z - sha256:131360e32437ea27e043d09ec16fb920cc0c82578cb14a54b46cfc5e6e6b509352.5 KB
2026年05月30日T19:15:18Z - sha256:9810568f32ae6474a893816bf758c498c5b0ca83f3851b62e5bb835117a4715c3.67 MB
2026年05月30日T19:15:18Z - sha256:a1dd122deb3aead080b6407ba3684b97eafba320f92794028161fbb77304876098 Bytes
2026年05月30日T19:15:19Z - sha256:0fc192bbb02ed4e3969014992c4fbe47e670b4cc4c3b8bfb9eee597f69176bf75.34 MB
2026年05月30日T19:15:19Z -
2026年05月30日T19:07:35Z -
2026年05月30日T19:07:35Z - Loading
0.11.0 — 2026年05月30日
731d930 Release Notes
Added
hew loop graphDAG renderer (hew-m7lq). Renders the loop's
iter + batch + run + manifest history as a directed graph in
mermaid (default), GraphVizdot, 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 aspossibly hung, backpressure failures draw a↺ rolled backself-edge, and
verify outcomes get a coloured tail node (Verify ✓/Verify ✗/
Verify (skipped)). Parallel runs (--jobs >= 2) render
per-worker swimlanes frommanifest.json. CLI:
hew loop graph [--run-id ID] [--format mermaid|dot|ascii] [--out PATH] [--all];--outending in.mdwraps the mermaid
body in a fenced ```mermaid block.--allaggregates 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 epichew-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 viahew_core::gate::detect) and an explicit
opt-in (--verify-testsorloop.end_of_run.verify_tests = true).
Outcome (Passed/Failed/Skipped/TimedOut) persists as
Run.verify_outcomeinrun.json, shows up as averify: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"). Seedocs/LOOP.md§
End-of-run verification. - Batch planner for
hew loop run --jobs N(epichew-lf40).
Parallel runs now layer two informed signals on top ofbd readyto
choose each iter's dispatch batch: (1) anext_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 byloop.planner.budget_tokens(default10_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.jsonartifact (schema_version: 1) under the run dir; a
futurehew loop graph(hew-m7lq) replays them. The end-of-run
summary gains a single-lineplanner: agent=N, runtime=M, fallback=Krow right afterscope:(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=1skips 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 ofbd readycounts 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--scopefail with
HewError::MissingFlag { flag: "scope" }so an agent-driven loop
never accidentally consumes the rest of the graph.run.jsongains
ascopefield; legacy runs without it load asNoneand
hew loop summaryrenders them asscope: ready (legacy). End-of-
run summary now carries ascope:line betweenoutcomesand
tokens. Seedocs/LOOP.md§ Scope.hew loop --jobs N— parallel worker slots via per-worker git
worktrees. Default1keeps 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 eachloop/<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
perDECISION:loop-parallel-overlap-policy: anybd readytask 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);--applyactually deletes. A
worktree is "orphan" when its<run-id>has no live run-dir under
<project>/.hew/loop/(or that run-dir'srun.jsonalready
records astop_reason). Per-worker branches survive in the
project's git history.hew loop summaryper-worker breakdown. Parallel runs render a
wkr | iters | closed | runtime | tokens | stoptable with a
totals row before the aggregate summary block (hew-h0tu). Serial
runs (nomanifest.json) are unchanged.hew_core::git::reset_hard_in(worktree, sha)— per-worker
rollback helper. Runsgit -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_hardnow delegates here.hew_core::worktree::branch_exists+create()collision guard.
Reusing arun_idafter a crashed run would landgit worktree add -bon a stale branch;create()now pre-checks viarev-parse --verifyand returns a clearGitNonZerorather than silently
overwriting. Branch naming stays the documentedloop/<run-id>/w<n>
(seeworktree::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>, configloop.model.by_priority.<P>,
loop.model.by_type.<type>,loop.model.default. The resolved model
is passed to the spawner per iter as--model/-mand logged in
iter-NNN.json::model.hew loop summaryadds 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 initre-run UX. Re-runninghew initin 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:BEGINin.cursorrules/.windsurfrules,CLAUDE.mdfor 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--reconfiguredefault to Refresh. The summary panel
header reflects the chosen mode (Setup complete/Refreshed/
Reconfigured). Fresh installs are unaffected. (hew-0wa)
Changed
hew-decomposeskill documentsbd create --graphfor batch task
creation. Hand-rollinghew task newin a loop hits
GOTCHA:zsh-cmd-substitutionon 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 newhewcode —bd create --graphis a documented hold-out (alongsidebd orphans/bd lint).
Also fixes two stale references to abd gate createprimitive that
never existed, and dropsgatefrom the task-type table (external
blockers use the dedicatedhew gatesurface, not a task type).
Added
hew gate— external-state gates for/hew:shipand friends.
hew gate new --gh-pr=N --title="..."creates a bd task labelled
hew-gatewith 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 —MERGEDresolves,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 sameGateKindenum.
Changed
-
/hew:shipskill body now useshew 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
workinghew gate new --gh-pr=Nflow plus an explicithew gate pollstep so resolved gates flip closed. -
hew init --runtimeaccepts 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...
Assets 19
0.10.0 — 2026年05月28日
3a9fdf9 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
assumescargo. It reads the commands from signals the project
already wrote — atest/linttarget in aMakefile, a recipe in
ajustfile, or a script inpackage.json— so the loop gates Rust,
Python, Go, Node, or anything with those entry points. Detection lives
in the new pure-logichew_core::gatemodule. 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 persistedrun.json+ iter logs — previously that summary only
printed once, live at the end of arun. Backed by a new
StopReason::from_labelwith a round-trip drift test.
Fixed
hew loopno longer traps non-Rust projects. A Python (or any
non-cargo) repo previously trippedGuardTripafter one iter because
cargo test/cargo clippyerrored on the missingCargo.toml. The
loop now drains the queue regardless of stack.- Homebrew install path in the README corrected to
brew install droidnoob/hew/hew(the olddroidnoob/tap/hewpointed
at a tap repo that never existed).
Docs
- New "The autonomous loop" section framing
hew loopand 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 summaryscreenshot.
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 |
Assets 19
0.9.0 — 2026年05月26日
17365f1 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 freshclaude -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 clippyrun after each
non-error iter. OnVerdict::Failthe loop runsgit reset --hard <pre-iter-sha>to revert the iter's commits, overrides the outcome
toBackpressureFail, and files aSTATUS:loop-iter-failed:<run>: <iter>:<iso>memory. - SIGINT → clean stop. A
ctrlchandler flips the shared
CancelFlagso Ctrl+C producesStopReason::Cancelledin
run.json(the in-flight iter finishes; no orphaned subprocess). --unattendedflag + decision-resolution flow. Walks memory →
code → research and files eitherDECISION:<topic>or
DEFERRED:<topic>depending on provenance. When--unattendedis
on, the loop polls bd for newDEFERRED:memories the agent filed
during an iter and tries to resolve them via prior art
(case-insensitive memory match +git grep -n -i -Ffor code
citations).- Out-of-band closure detection. If an iter's task disappears
frombd.ready()after the spawn, the outcome is promoted to
Closedeven 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_COLORstrips the ANSI. hew blastas a first-class signal in two surfaces.- Loop iter logs gain
symbols_touched: Vec<String>populated
fromblast::compute_blast_with(pre_iter_sha)after each
non-error iter. End-of-run summary aggregates the symbol set
deduped across the run. hew statusgains a "Since last close" section listing the
working-tree symbol delta against the default base (upstream →
main → master). Top-8 +...(+N more)footer.hew-executeskill body Step 6 close-checklist now nudges
the agent to runhew blastpre-close to confirm the symbol
delta matches task scope.
- Loop iter logs gain
/hew:loopslash 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 underexamples/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:autoslash 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.--jsonnow gates the
JSON shape for every skill (previously hard-coded JSON except for
resume). Aligns withFEEDBACK:no-json-piping— text is the
agent-facing contract.--prettystill implies--json.- Prompt cache invariant fixed. The per-iter primer used to live
inside the cacheable prefix passed toprompt::assemble, so
prompt_prefix_hashchanged every iter and the Anthropic prompt
cache missed every spawn. The primer is now captured once at run
start viabd.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-budgetflag +research_gatemodule. The flag
was wired but never consumed — realclaude -pagents 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. RuntimeSpawnertrait +ClaudeSpawner(production) +
MockSpawner(tests).GateRunnertrait +CargoGateRunner
(production) +StaticGateRunner(tests). Both injectable into
run_loop_withso the integration tests under
hew/tests/loop_backpressure.rsexercise 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 jsonfixture 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 |
Assets 19
0.8.1 — 2026年05月26日
419c550 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
treesitterfeature is now on by default inhew-coreand
hew. Shipped binaries (brew, cargo-dist,cargo install hew)
includehew blastout 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-gatingmemory 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 |
Assets 19
0.8.0 — 2026年05月26日
d8a8e3c 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::treesitterlibrary (featuretreesitter, off by
default —cargo build -p hew --features treesitterto enable).
Parses Rust / Python / TypeScript / JavaScript / Go / Java sources
via tree-sitter and extractsSymbol { name, kind, byte_range, line_range }. Hand-trimmedtags.scmqueries per language follow
the tree-sitter org capture convention. Dedupe bybyte_range
prefersMethod>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=0hunk headers. Pure line math, not feature-
gated. Skips zero-count pure-deletion hunks.hew blastsubcommand (featuretreesitter). Walks
git diff --unified=0 <base>...HEADand 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--stdinforgit ls-files | hew blast ...)--path <substr>(repeatable) substring filter--base <ref>override--jsonfor machine-readable output
/hew:blastslash command +hew-blastoptional skill body.
Opt-in viahew config set optional-skills.blast true.craft.symbol_traceconfig flag. When true (and the binary
was built with--features treesitter),hew task closeauto-
appends asymbols changed (blast vs <base>): ...block to the
task's notes viabd update --append-notes. Permanent semantic
trail in the bd graph. Silent best-effort; off under default
builds. Defaultfalse.ReviewBundle.changed_symbolsfield onhew review bundle --json. Per-symbol slices of the diff withsource_sliceso 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=1enforces <5ms warm; off otherwise
prints). - 7 hunk-header parser tests (
diff_hunks). - Statusline
[1m]-context-suffix tests (3 new).
Internal
- Three
GOTCHA:test-counts-driftcounts 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 GitClientso 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 |
Assets 19
0.7.1 — 2026年05月25日
58b384e 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--bareflag emits just
the hew segment.NO_COLORhonored. - Scope label condensed.
condense_titlesplits 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>).
Parsestranscript_pathout of the stdin session JSON, walks the
JSONL backward to the most-recenttype=assistantmessage, and
sumsinput_tokens + cache_creation_input_tokens + cache_read_input_tokensas "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 as847/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 |
Assets 19
0.7.0 — 2026年05月25日
09ba76d 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-fractionFull: 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_phaseinfers
Planning/Executing/VerifyingfromSTATUS:*markers plus
task counts.pick_scope_labelfalls through milestone → epic →
"(no scope)". All types deriveSerialize/Deserialize/
JsonSchema. 17 unit tests cover the documented edge cases.
hew statuslinesubcommand — thin clap wrapper that owns the
side-effects the pure layer can't: stdin drain,prime::resume
query, env-basedUSERlookup, 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'sstatusLinehook degrades gracefully. 7 e2e tests
via a PATH-stubbed bd plus 5 inline tests for the lenient JSON
peek + project-label fallback.hew initupserts a top-levelstatusLineblock in
.claude/settings.jsoncarryinghew_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 resumefor 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 ahew_managed: trueSessionStart
entry (proves it's a hew install), and (3) has nostatusLinekey
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.mdcovering the three
formats, thehew_manageddiscriminator, the graceful-fallback
contract, where the pure module lives, and the self-heal path. README.md"Daily flow" notes the auto-wired statusline.CONTRIBUTING.mdnotes thehew_managed: truepattern for future
contributors wiring install plumbing into.claude/settings.json.docs/COMMANDS.mdCLI-only surfaces table gains ahew 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 |
Assets 19
0.6.1 — 2026年05月25日
00671de 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-prependsCHECKPOINT:<ISO-8601-now> —, auto-generates a
checkpoint-<sanitised-iso>key, and writes through the same path
ashew remember. Supports--keyoverride,--timestamp
override (for back-dating / tests), and--related/--related-task
for emittingLINK:sidecars in the same call. Body shapes already
containing a well-formedCHECKPOINT:<ISO>prefix pass through
verbatim; malformed prefixes are rewritten to the canonical shape.hew_core::checkpoint— purebuild_checkpoint_key/
build_checkpoint_bodyhelpers 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 inhew/src/commands/compact.rs) into a shared module
with alooks_like_iso_daterecogniser used by both the new
checkpoint helper and the prime resume hardening.
Changed
hew_core::prime::latest_checkpointnow 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 inhew prime resume. Regression test pins the
exact bug shape.skills/core/hew-checkpoint.mdrewritten to lead withhew checkpoint "<body>". The previoushew 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.mdmirrors the skill rewrite.
Fixed
- GitHub #40 —
hew prime resumesurfaces stale CHECKPOINT
instead of newest. Closed by the combination of the new
hew checkpointsubcommand (write-side fix), the
latest_checkpointrecogniser 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 |
Assets 19
0.6.0 — 2026年05月22日
63621d5 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::linksexposes a frozen
LINK:<from>->relates_to:(memory|task):<to>grammar with
parse_link_row/format_link_row/build_link_row_body, a
bidirectionalLinkIndex(outbound, inbound, dangling), and a
read_linksbuilder 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 emitLINK:sidecars after the primary
write. Require--keyso 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
--jsonemitting a stable{key, outbound, inbound, dangling_outbound}shape for downstream consumers. Picks up
explicitLINK: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-idreferences into the
sameLinkIndexas 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.capturesbd-99but
subtask dots likehew-a3f8.1survive. hew forget <KEY>top-level subcommand (hew-7zi) — ergonomic
alias forhew 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 --forgetremains the no-cascade escape hatch.hew remember --type=link(hew-uxf). Joins the canonical
type allowlist (14 → 15 prefixes). Bare body gets theLINK:
prefix prepended; pre-formatted full rows still go through
--raw.- Interactive "these look related — link any?" prompt at remember
time (hew-3wt). Lexical ranker inhew_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--relatedwrite path. New flags--no-suggestand
--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).LINKjoins
STATUS:scan/convention/plan/decomposein
HARDCODED_EXEMPT_PREFIXESso compact never destroys the edge
graph. Matcher'sstarts_witharm makes bareLINKcover every
LINK:*row.hew init --stealthflag. 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 initalways passes--skip-agentstobd init, and
also--stealthwhengit_track=false. Stops bd from writing
a competingCLAUDE.md("use bd for ALL task tracking" — direct
conflict withFEEDBACK:prefer-hew-over-bd), anAGENTS.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
andgit_trackresolved beforebd initruns.hew memories --forget <KEY>is now the documented
no-cascade path; the new top-levelhew forgetis the curated
ergonomic surface that cascades.
Fixed
hew-decomposeskill body: Step 5 gate table used
bd create --type=gate --await-type=...syntax that doesn't exist
in bd. Replaced with the realbd 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 --acceptanceto the existinghew task update --acceptancewrapper.
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 |