Repository navigation
0.5.0 - 2026-10-18
Release Notes
Changed
-
Refreshed the frozen contract to Hamstik Public API v1.0.0: the parity ledger
now classifies all 234 operations (125 newly exposed).hamstik api invoke <operationId>provides contract-aware coverage for method/path resolution,
context-backed path parameters, documented query parameters, JSON and
multipart bodies, operation-specific ETags/idempotency, binary downloads,
dry-run previews, audit records, and structured output. The typed bulk-create
model also accepts the expanded v1.0.0 request fields and template-backed
creates whose title is supplied by the server template. -
hamstik agent skill installnow installs the complete canonical skill,
including its three references. Global installs honorHAMSTIK_SKILL_HOME
as the.agentsdirectory; modified reference files are protected from
replacement without--force. The skill cookbook and installation guides
now match the bundled CLI behavior.
Added
-
Gated design stub for self update with stable/prerelease channels (CLI-79):
design/SELF_UPDATE.mddocuments the intended
hamstik self update [--channel stable|prerelease]surface, channel
semantics, verified package replacement (checksum + provenance before any
write, atomic and recoverable), and the safety constraints — explicit
opt-in/opt-out, off-by-default automatic checks, no telemetry, and no silent
network calls. No command or network behavior ships: the design names the
packaging/release-milestone gate and the activation checklist, and the
existing channel upgrade steps indesign/INSTALL.md
remain the only supported upgrade path. -
Webhook management (CLI-78):
hamstik webhooknow manages the Public API
v1.0.0 Organization webhook surface with list/view/create/edit/delete,
signing-secret rotation, server-owned test delivery, delivery history, and
redelivery. The command validates required bodies, ETags, and idempotency
from the frozen operation contract and never stores returned secrets. -
Server-side workflow automation rules (CLI-77):
hamstik rulenow manages
Public API v1.0.0 Organization automation rules with
list/view/create/edit/delete, run history, server preview, enablement toggle,
and owner acceptance. The former local-rule proposal is superseded; no local
evaluator, daemon, or polling event stream is introduced. -
SqueakQL query-plan passthrough and offline cache management (CLI-76):
work search --explainforwards server-provided query-plan data under the
response'sexplainfield when the Public API returns it and otherwise
degrades with a clear message on stderr (orexplain.available: falsein
--json); the CLI never computes a cost model and never adds an unsupported
field to the search request.squeakql cache sizereports the local
saved-query file's path, entry count, and on-disk byte size, and
squeakql cache clearremoves every locally saved query idempotently — both
work fully offline and require no Organization or credential. -
API cookbook in command help (CLI-75):
hamstik commands --cookbookprints
a copy-pasteable read → search → edit → transition → comment loop with
placeholder identifiers and safe automation defaults (--json --no-input,
explicit--org/--project).--jsonemits the same steps as a versioned
cookbookVersion: 1document. The examples are the marker-delimited section
of the canonical bundled Agent Skill, so the CLI cannot print guidance that
hamstik agent skill checkdoes not also validate. -
Failed-request journal and
replay(CLI-72): when a Public API request
fails, the CLI appends one redacted JSON line to a local
request-journal.logcapturing the method, path, intended header names, HTTP
status, server request id, and timing.hamstik replay [--last N]prints the
most recent entries as a human table or--jsonwithout making any network
request, so a 5xx can be correlated with server-side diagnostics by request
id. The journal never contains tokens,Authorizationvalues,
request/response bodies, or query strings; entries older than 7 days are
dropped and at most 500 are retained, with compaction once the file exceeds
256 KiB or its oldest entry passes 7 days.hamstik doctorreports the
effective journal path. -
Support-bundle comparison (CLI-71):
doctor --diff <bundle-file>diffs a
freshly generated local-only support bundle against a previously saved
doctor --bundleZIP and reports only what changed. Differences are named
by check id or JSON path (host, CLI version, context scopes, config
metadata, and every redacted check), volatile capture noise
(generatedAt,durationMs,requestId) is ignored, and an identical
bundle yields an explicit "no differences" result in both human and
--jsonoutput (noDifferences: true).--diffimplies--local-only, so
the comparison makes no network requests and reads no new sensitive data;
--bundlecan be combined to also write the fresh bundle; a missing or
corrupt baseline fails clearly instead of reporting no differences.
Security
- Updated
rustlsto 0.23.46 andzipto 9.0.5 to resolve the current RustSec
advisories. Linux/BSD credential storage now uses the maintained synchronous
Secret Service backend instead of the unmaintained pre-zbus-6 wire stack;
secrets remain in the operating system credential store.
Fixed
-
The README no longer claims pre-alpha status with packaging "still under
development"; the status banner now reflects the shipped installer/archive
channels, the implemented Public API v1.0.0 surface, and the pre-1.0
breaking-change policy (CLI-80). -
hamstik doctornow omits the proxy check when no proxy environment
variable is configured instead of showing a confusing skipped row. A
configured proxy is still reported by variable name with its value hidden;
NO_PROXYalone does not count as a configured proxy. -
hamstik doctornow reports additive Public API v1 operations as a passing
compatibility check instead of a warning. The additive operation count
remains visible, while missing or moved operations required by this CLI
continue to fail compatibility. -
doctor --bundleno longer prints its "support bundle written to ..."
confirmation in--jsonmode, sodoctor --json --bundle <PATH>output is
a single parseable JSON document again. -
Git worktree context discovery (CLI-69): when the
.hamstik.tomldirectory
walk-up finds nothing and the working directory is inside a git checkout,
the primary checkout behind a linked worktree is searched
(git rev-parse --show-toplevel/--git-common-dir), mapping the current
subtree onto the same relative path in the primary checkout. A linked
worktree and monorepo Project subtree can therefore reuse the primary
checkout's config without copying it; explicit flags, environment variables,
and a worktree-local.hamstik.tomlstill win. -
Scheduled export and report snapshots (CLI-67):
work export --query <SQUEAKQL>(or--query-file/--query-saved) selects a collection of
Organization Work Items and renders it through the same output contract as
work list/work search, so--format csv|jsonl|tsv|json|markdown|table,
--columns, and--jqall apply and--output <PATH>writes exactly the
bytes a stdout run would print.schedule list|save NAME -- <COMMAND…>|delete
store the periodic invocation as a plain TOML file under
<config-dir>/schedules/; the CLI ships no daemon, and an external scheduler
(cron, systemd timers, Task Scheduler) invokesschedule run NAME, which
re-executes the stored command through the same binary, context, and output
mode, so a scheduled run is byte-identical to the equivalent manual
invocation. Definitions contain only thehamstikargument vector — never
credentials. -
work dashboard(CLI-65): a read-only, multi-project overview that
composes the existingwork mineread (GET /my/work, restricted to the
Project set) with onework listread (GET .../projects/{key}/work-items) per configured Project. The Project set
comes from repeated--projectflags, otherwise from a
dashboard_projectsarray in.hamstik.toml, otherwise from the resolved
single Project. Project fetches run with bounded concurrency, and one
Project's failure is reported in-band (per-sectionstatus/errorand
failedSectionsin--json, a stderr warning in human output) without
hiding the other Projects' results; the exit code stays0for a partial
snapshot, matchingwork triage.--mine falseomits the My Work section,
--scopeselects the status scope (defaultopen), and the shared
pagination flags apply to every section. Human output renders one attributed
table per section;--quietprints only item keys. -
Deterministic color and terminal-profile negotiation (CLI-60): the global
--color=auto|always|neverflag (with the existing--no-coloras the
neveralias) makes ANSI output explicit, andHAMSTIK_NO_COLORjoins
NO_COLOR/CLICOLOR_FORCE/CLICOLORunder the documented precedence
flag > environment > auto.HAMSTIK_TERM=auto|unicode|asciipins the
decoration profile:asciiemits ASCII stand-ins instead of Unicode
swatches and separators, suppresses emoji, and fixes theboard viewwidth
so captured CI logs are byte-stable. Default auto-detection is unchanged
when no flag and neither new environment variable is set, and--json,
--jsonl, and--tsvremain ANSI-free in every mode. -
work attachment view(CLI-40): preview an image attachment inline on a
terminal that advertises the Kitty, iTerm2, or SIXEL image protocol,
without writing a file. Detection is capability-based (KITTY_WINDOW_ID,
TERM/TERM_PROGRAMmarkers, and an explicitHAMSTIK_IMAGE_PROTOCOL
override). The image is only rendered on a TTY in human output; under
--json/--jsonl/--tsv,--quiet,--no-input, a non-TTY stdout, a
non-image attachment, an unknown terminal, or an undecodable image, it
falls back to the unchangeddownloadbehavior (--outputsupported) so
no raw image or escape-sequence bytes ever reach a text stream. -
Interactive fuzzy picker for ambiguous references (CLI-38): when an
Organization slug, Project key, or Work Item key supplied tocontext set,
org use,project use,work context, or a single-keywork viewfails
its exact Public API lookup on a real TTY, the CLI now lists the plausible
candidates and asks for an explicit choice instead of failing immediately.
A unique fuzzy match resolves without prompting; cancelling (Esc/Ctrl+C)
aborts with no changes. The picker never appears under--no-input,
--json/--jsonl/--tsv,--quiet, or a non-TTY stdin/stdout: those
paths keep today's exactNOT_FOUNDfail-fast behavior and make no
candidate-list request. -
api rate-limit(CLI-36): one cheap authenticated Public API read that
reports the currentRateLimit-*snapshot so long-running scripts and
agents can see headroom before hitting a 429.--json --no-inputemits a
stable{ "rateLimit": { "limit", "remaining", "resetIn" } | null, "requestId"? }document whose fields mirrorapi request's
meta.rateLimit, sourced from the same transport-level parser. The probe
skips the proactive depleted-window wait that typed reads apply on a
successful response, and the snapshot is a point-in-time observation
rather than a guarantee against future rate limits. -
agent validate(CLI-74, also available asagent doctor): offline
verification of the local agent harness. It lints the installed Agent
Skill's metadata against the running CLI version (and its command
references against the live manifest), scans the resolved config directory
for credential-shaped content — reporting file, line, and kind while never
printing the value — and, when online, compares the bundled OpenAPI
snapshot with the live Public API contract.--offlineskips the network
comparison, and an unreachable host is reported as skipped. An outdated
skill, credential-shaped config content, or a stale snapshot exits1;
a clean harness exits0. It is distinct fromhamstik doctor, which
reports network/diagnostic health. -
work export/work import(CLI-66): Markdown-based handoff and
migration.work export <KEY> [--comments] [--output <PATH>]writes one
canonical document — YAML frontmatter (key,title,type,status,
priority,labels, and optionallylinks/comments) plus the description
as the Markdown body, suitable for pasting into a GitHub/GitLab issue;
--jsonexposes the same fields asdocumentVersion: 1.work import --file <PATH|->reads that document and maps its fields onto the existing
create/edit requests: a resolvable embeddedkeyupdates the item in place,
otherwise a new item is created with an idempotency key derived from the
embedded key (or an explicit--idempotency-key), so re-importing the same
document does not duplicate items. Labels, links, and comments are applied
through the documented endpoints and reconciled against the current item, and
--dry-runpreviews the mapped operations without sending a mutation. -
board view(CLI-64): a read-only, kanban-style board composed entirely
from the existing Work Item list read (GET .../projects/{key}/work-items, optionally filtered by--sprint). It
renders width-aware status columns — honouring$COLUMNS, sizing columns
to their content, and wrapping cards when the board would overflow — with
--quietemitting only keys.--jsonemits a stableboardVersion: 1
document (scope,columns,itemsFetched,truncated). Columns derive
from the statuses the server reports on the returned items; items whose
status is absent or blank render in an explicit missing-status bucket.
There is noboard move: the Public API exposes no board write, and
workflow changes continue throughwork transition. -
work bulk run(CLI-62): resumable bulk execution for operation sets larger
than the single-request 50-operation limit. The runner reads a JSON array or
streamed JSON-lines operations source (--operations-file -), preflights
every operation against the existing bulk schema, and sends batches of at
most 50 through the existing typed bulk envelopes. Each batch's exact request
body and idempotency key are written to a local JSON-lines journal before the
request, so an interrupted run resumes (omit--operations-file) by skipping
completed batches and replaying uncertain ones with the same idempotency key;
failed batches are never retried automatically and require--retry-failed
after review.--restartreplaces an existing journal. Output states
explicitly that separate batches are separate requests and not one atomic
transaction, and the documented journal schema contains no credentials. -
work watch <KEY>(CLI-61): follow a Work Item's activity and comments
live by polling the existing Public API v1 reads. New entries are rendered
incrementally within one--interval(default2s); the first poll starts
at--since(default: now). Network failures and rate limits back off and
reconnect with a stderr report,Retry-Afteris honoured, and
authentication/authorization failures stop the watch cleanly. Ctrl-C stops
without a traceback.--notify <COMMAND>runs a hook per new entry with
HAMSTIK_WATCH_*environment variables, and--json/--jsonlemit one
compact JSON event per line.work awaitremains the one-shot condition
wait; help and docs distinguish the two. -
Output-format ergonomics (CLI-59): the global
--format ndjson|jsonl|tsv|csv|table|human|json|markdownumbrella selects the output
mode by name, andmarkdownrenders a GitHub-flavored table for list-shaped
output whilecsvfollows RFC 4180 quoting.--fields a,b,cselects and
orders table columns on every read command (the comma-separated spelling of
--columns); on the Work Item list commands it remains the server-side
sparse fieldset and an unknown name now fails locally as a usage error
listing the valid fields.--jsonoutput is unaffected.
Breaking
-
The local
--formatflags that selected a non-output-mode value were
renamed to free the global--formatumbrella:work context --formatis
now the global--format(--format json,--format markdown),
user avatar --formatis--image-format,commands --formatis
--manifest-format, andrelease audit get --formatis--audit-format. -
Release Version support through the typed API client and new CLI commands:
hamstik release list|view|create|edit|transitions|transition|archive| restore|scopefor Project release lifecycle (withIf-Matchrevision
protection and idempotency keys on every mutation), Work Item release
membership viarelease item list|add|remove|replaceand
release bulk-membership(JSON envelope, preflighted to the documented
1–50 operation bound), release announcements viarelease announcement current|revision|publishandrelease announcement draft show|generate|edit|discard, and frozen audit packages viarelease audit generate|get|list(JSON packages print verbatim; CSV ZIP packages require
--outputand are written atomically). -
Organization Milestone support:
hamstik milestone list|view|create|edit|transitions|transition|releases|eventswith release
membership viamilestone release add|remove(--confirm-removeis
required to remove a release). Milestone edits and transitions carry the
exact current ETag plus an idempotency key. -
release archive(andrelease transition <ID> archived) and
milestone transition <ID> archivedjoin the destructive-consent gate:
they require--confirm-destructiveor--yesbefore any request is sent. -
The frozen Public API v1 snapshot now covers the 0.4.0 server contract
(109 operations; the previous snapshot tracked 78). All 31 new operations
are classified inopenapi/api-parity.jsonwith typed client methods, CLI
commands, and transport tests, sohamstik doctorno longer reports the
0.4.0 endpoints as additive.
Install hamstik-cli 0.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.5.0/hamstik-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.5.0/hamstik-cli-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install blackboardstudios/hamstik/hamstikDownload hamstik-cli 0.5.0
| File | Platform | Checksum |
|---|---|---|
| hamstik-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| hamstik-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| hamstik-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| hamstik-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| hamstik-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |