Repository navigation
Releases: blackboardstudios/hamstik-cli
Release list
0.6.0 - 2026-10-18
Release Notes
Added
-
Machine-readable exit-code reference (CLI-73):
hamstik commands --exit-codesprints the stable exit-code table (0–10) with name, meaning,
and remediation as a human table, or the versionedexitCodesVersion: 1
document under--json/--format json— riding the shared--fields,
--jq, and output-mode contract. The same table is embedded in the
commands --jsonmanifest as the additiveexitCodesblock, so one
manifest fetch yields both the command surface and the failure schema.
Every entry is generated from the sameexitconstants the error renderer
maps onto, so the table cannot drift from actual behavior, and contract
tests assert the eleven documented codes stay contiguous and named. -
work diff <KEY>(CLI-56): review-style Work Item comparison with two
server-authoritative modes. Default baseline mode compares against a local
baseline recorded withwork diff KEY --save-baseline— a per-user file
under the config directory (baselines/<org>/<project>/<KEY>.json) that
contains no credentials and is replaced only by another--save-baseline
— and reports every changed field with before/after (title, description,
status, priority, assignee, sprint, parent, labels, Attributes, due date,
and more; identity, volatile, server-computed, and social fields are
excluded and named in the output).--since <revision>reports the
revision delta plus the field changes the server records in the item's
activity feed with explicitcoverage: partialandhistorySupported: false— the Public API v1 exposes no revision snapshots, and the CLI
never fabricates a diff. Unchanged comparisons exit 0 with an explicit
no-changes result;--fail-on-changeexits with the conflict exit code
(6) when differences exist. Human table rendering plus the versioned
diffVersion: 1document under--json. -
Shared saved-query library (CLI-57): SqueakQL queries can now live in a
version-controllable directory, so teams share queries via the repository
instead of only per-user local saves. Resolution precedence is strict and
documented — repository.hamstik/queries/<NAME>.squeakql(discovered by
walking up from the working directory), then config-dir
queries/<NAME>.squeakql, then the existingqueries.tomlentries
written bysqueakql save(unchanged) — and collisions are never silent:
the first source wins whilesqueakql listreports every holding source
(sources) plus the winner (source). Newsqueakql run <NAME>executes
a resolved query through the same pipeline aswork search --saved NAME
(also library-aware now), andsqueakql validate --saved NAMEand
squeakql showresolve through the same precedence. Files hold only
plain query text under the saved-query size cap; files with invalid name
stems are ignored; there is no sync/upload — committing the file is the
sharing mechanism, so a query committed to a repository runs identically
for anyone who checks it out.
Fixed
- The CLI no longer crashes with a stack overflow on Windows when built in
debug mode (thecargo build/cargo testprofile). Windows defaults the
main thread to a 1 MiB stack and some code paths — observed with large
--filerequest bodies in the report/dashboard commands — exceeded it,
aborting withSTATUS_STACK_OVERFLOWbefore any diagnostic.hamstiknow
runs its full command dispatch on an explicitly 32 MiB thread on every
platform, making stack depth uniform across Windows/macOS/Linux and across
debug and release profiles. Release archives were never affected.
Internal
- Windows CI: the external-plugin integration tests now create
platform-appropriate plugin stubs (.cmdbatch files on Windows instead
of extensionless#!/bin/shscripts), so the six plugin invocation tests
run and pass onwindows-latesttoo. Test-only change; the CLI's plugin
discovery and invocation were already correct on every platform.
Install hamstik-cli 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.6.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.6.0/hamstik-cli-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install blackboardstudios/hamstik/hamstikDownload hamstik-cli 0.6.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 |
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 re...
0.1.3 - 2026-09-17
Release Notes
Added
-
hamstik org use <slug>andhamstik project use <key>now auto-create a
config profile on-the-fly whenHAMSTIK_TOKENis set but no stored
credential or config profile exists. The CLI callsGET /api/v1/meto
populate the new profile (host + identity), then validates the requested
organization or project through the API before persisting it as the
default. This matches the existing env-token auth flow used by other
commands and eliminates the previous "no active profile" error for
headless or ephemeral setups (org,project). -
hamstik work await <KEY>polls until a Work Item reaches a server-reported
condition (repeatable--status,--timeoutup to 1h with exponential
backoff, human-readable and--jsonoutput). (CLI-25) -
Global configuration commands (CLI-6):
hamstik config path|list|get|set|unset
manages safe, non-secret defaults in~/.config/hamstik/config.toml
(editor,pager,output,git_branch_template,profile,
organization,project).setrejects credential-like values (use
hamstik credentialor the OS keyring), andget/set/unsetexpose
stable{ key, value }or{ path }JSON envelopes. Unknown keys and
unsupported schema versions fail deterministically with exit code 10. -
Opt-in live Public API v1 acceptance suite (CLI-6):
cargo test --test live_acceptance -- --test-threads=1 --ignoreddrives the
realhamstikbinary against a dedicated test Organization/Project over
documented/api/v1routes. Gated behindHAMSTIK_TOKEN,HAMSTIK_HOST,
HAMSTIK_ACCEPTANCE_ORG, andHAMSTIK_ACCEPTANCE_PROJECT(plus
HAMSTIK_ACCEPTANCE_MUTATIONS=truefor writes) and#[ignore]d, so offline
cargo testonly compiles it. A read-only smoke scenario proves auth, TLS,
context, and the read routes; a mutation scenario exercises the full
lifecycle — idempotent create/replay, edit, a real ETag conflict, status
transitions, labels, comments, links, watchers, byte-for-byte attachment
round-trip, sprints, and bulk create/update/transition — cleaning up every
Work Item it created (delete, archive fallback) without masking the primary
failure. All created resources carry a run-uniqueacc-<unix-ts>-<pid>
marker; labels and sprints (undocumented delete routes) are the only
residue. Runbook:crates/hamstik-cli/tests/live_acceptance/README.md;
a manualworkflow_dispatchjob (.github/workflows/live-acceptance.yml)
runs it against a configured test deployment when repository
variables/secrets opt in. -
Doctor support bundle (CLI-6):
hamstik doctor --bundle <path>produces a
versioned ZIP bundle (bundleVersion: 1) containing a redacted
doctor-report.json,context-explain.json,cli-info.json,
api-compatibility.json,config-metadata.json, and
bundle-manifest.json. The bundle never contains PAT values, Authorization
headers, credential-store contents, token-bearing environment variables, or
credential-bearing proxy URLs. It is compatible with--local-only; remote
checks are safely skipped when the flag is active. Automated redaction unit
tests verify all bundle sections are secret-free. -
Work Item context bundle (CLI-21):
hamstik work context <KEY>returns a
one-invocation, data-only read bundle for a Work Item — metadata,
description, server-reported links, labels, recent comments, recent
activity, and the authenticated user's watcher state — composed entirely
from Public API v1 reads.--jsonemits a stable, deterministic envelope
(bundleVersion: 1);--format markdownrenders the same content
readably;--comments N,--activity N, and--compactbound the
output size, and every clipped or omitted section carries an explicit
marker (nothing is silently truncated). The bundle is data, not
instructions: no workflow meaning is computed client-side, and the
command is strictly read-only. -
Public API v1 passthrough (CLI-20):
hamstik api request /api/v1/...
and the shorthandhamstik api /api/v1/...call any documented Public
API v1 route through the official CLI, in the spirit ofgh api—
including server routes newer than the installed CLI (the OpenAPI
snapshot is never an allowlist). GET is the default;--method
POST/PATCH/PUT/DELETE,--body-file -|<file>,--field key=value,
--query key=value, and allowlisted--headeroverrides
(Accept,Content-Type,If-Match—Authorizationand any
credential-bearing header are rejected) reuse the typed commands'
transport: profile auth, TLS/CA bundle, retries withRetry-After
handling, automatic idempotency keys for POST/DELETE reused across
internal retries, request-ID preservation, redacted diagnostics, and
stable exit codes.--dry-runpreviews the exact request with the
versioned preview envelope;--jsonemits
{ method, path, data, meta? }withmetacarryingrequestId,
etag,idempotencyReplayed,location, and the rate-limit snapshot. -
Canonical Agent Skill installation and validation (CLI-3): the new
hamstik agent skill installwrites the skill bundled into the binary
(skills/hamstik/SKILL.md) into an Agent
Skills discovery location — the current project's portable
.agents/skills/hamstik/directory by default, the user-level portable
location with--global(override withHAMSTIK_SKILL_HOME). Re-running
an install is idempotent when the installed file is identical; a locally
modified installed skill is never silently overwritten —--forceis
required for replacement.hamstik agent skill checkvalidates frontmatter
CLI-version compatibility plus every referenced command path and option
against this binary's livehamstik commands --jsonmanifest, for the
installed skill by default (project location, then global) or an explicit
file path (CI use); failures exit nonzero.
Fixed
- Network diagnostics are now classified from the concrete transport error
source chain (DNS, connection, timeout, TLS) instead of pattern-matching
the rendered error text, so a library rewording can no longer silently
degradedoctorand error output to the genericnetworkstage. hamstik org useandhamstik project usenow make the auto-created profile
the active profile when they create it under an ephemeralHAMSTIK_TOKEN.
Previously the default organization/project was written into a profile that
profile selection never chose, sodoctorand every command reported
"organization not selected" even though the config contained the default.- Auto-created profiles now seed the user's default organization from
GET /api/v1/me(matchingauth login), and configuration write failures
duringorg use/project usereport the configuration error class (exit 10)
instead of a generic internal error.
Install hamstik-cli 0.1.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.1.3/hamstik-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.1.3/hamstik-cli-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install blackboardstudios/hamstik/hamstikDownload hamstik-cli 0.1.3
| 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 |
0.1.2 - 2026-09-15
Release Notes
Added
- Release lifecycle documentation (CLI-30): the maintainer release
procedure is documented end-to-end indesign/RELEASE.md
(version prep → tag → automated build/publish → post-release checks),
broken/yanked-release handling and per-channel rollback in
design/INSTALL.md, and credential-safe troubleshooting guidance
aligned withdoctor --local-only/context explain. Release notes
remain derived verbatim fromCHANGELOG.md(the release pipeline
generates the announcement from the renamed section); every release
section now carries the artifact-verification pointer so it renders in
the release notes. Updates stay channel-based per SPEC §73: no silent
self-update, no telemetry, no background version checks. - Verify downloads per design/SIGNING.md: run
sha256sum -c sha256.sumagainst the release'ssha256.sumand
gh attestation verify <artifact> --repo blackboardstudios/hamstik-cli
(Sigstore build provenance). See also upgrade/uninstall/rollback notes
in design/INSTALL.md.
Install hamstik-cli 0.1.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.1.2/hamstik-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.1.2/hamstik-cli-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install blackboardstudios/hamstik/hamstik-cliDownload hamstik-cli 0.1.2
| 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 |
0.1.1 - 2026-09-15
Release Notes
Added
- Installable release channels (CLI-29): a curl-able shell installer
(hamstik-cli-installer.sh) for Linux/macOS, a PowerShell installer for
Windows, and a Homebrew formula published per stable release to the
blackboardstudios/homebrew-hamstiktap (brew tap blackboardstudios/hamstik https://github.com/blackboardstudios/homebrew-hamstik
thenbrew install blackboardstudios/hamstik/hamstik). Winget manifests
are generated per stable release intowinget/and submitted to
microsoft/winget-pkgsby a maintainer (deliberate manual step). Linux
ships tarball + installer;.deb/.rpmand hosted APT/RPM repositories
are deliberately deferred (design/INSTALL.md decision record). The
Homebrew formula's sha256 lines are injected from the release's
aggregate checksums at publish time, and the tap push requires a
dedicated fine-grained PAT (HOMEBREW_TAP_TOKEN) scoped to the tap
repository only.
Install hamstik-cli 0.1.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.1.1/hamstik-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blackboardstudios/hamstik-cli/releases/download/v0.1.1/hamstik-cli-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install blackboardstudios/hamstik/hamstik-cliDownload hamstik-cli 0.1.1
| 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 |
0.1.1-rc.1 - 2026-09-15
Release Notes
Added
- Release supply-chain verification (CLI-28): every release now publishes
CycloneDX 1.5 SBOMs (hamstik-cli.cdx.json,
hamstik-api-client.cdx.json) generated from the committedCargo.lock,
and Sigstore build-provenance attestations for every downloadable asset.
The release pipeline verifies all checksums and attestations before
anything is published and fails closed on a mismatch. Verify downloads
withsha256sum -c sha256.sumandgh attestation verify <artifact> --repo blackboardstudios/hamstik-cli; seedesign/SIGNING.mdfor the
threat model and the deferred platform-signing decision (Windows
Authenticode and macOS notarization await certificate provisioning).
Fixed
- Updated
rustlsto 0.23.45 for RUSTSEC-2026-0285 (TLS 1.3 handshake
messages incorrectly accepted across encryption level boundaries).
Download hamstik-cli 0.1.1-rc.1
| 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 |
0.1.0 - 2026-09-15
Release Notes
Added
-
Versioned release builds (CLI-27): pushing a version tag (
vX.Y.Z) now
triggers a cargo-dist release pipeline that builds, smoke-tests, and
publishes archives for the supported platform matrix — Linux glibc x64 and
arm64 (.tar.gz), macOS Intel and Apple Silicon (.tar.gz), and Windows
x64 (.zip), each with a sha256 checksum. The pipeline fails closed when
the tag, the workspaceCargo.tomlversion, and the matching
CHANGELOG.mdrelease section disagree, and runs artifact-level smoke
tests (the released binary itself:--help,version, and an offline
doctor --local-only) before anything is published. Pull requests
validate the release configuration in plan mode only. See
design/RELEASE.mdfor the target matrix, exclusions, and maintenance
workflow. -
hamstik versionnow reports build identity: human output adds
commit(short source commit) andtarget(Rust target triple) lines
under the banner, and--jsonoutput adds additivecommit(full
commit sha, or"unknown"when built outside a git checkout) and
targetfields. The existingversionfield and thehamstik --version/-Vterse line are unchanged. -
context explain(CLI-12): an offline precedence report for every resolved
setting — host, Organization, Project, profile, credential source, and
color/input/retry behavior — showing the winning source, every shadowed
source, and context-file discovery. JSON output uses stable source/status
enums; HAMSTIK_TOKEN and stored credentials are represented only as
present/absent, never displayed. Malformed context files degrade the report
rather than aborting it (context). -
SqueakQL query files and saved queries (CLI-8):
squeakql validateand
work searchaccept--file <PATH>(-= stdin) alongside the existing
inline expression, with multi-source conflicts rejected at parse time and
one trailing newline stripped (all other content verbatim). A local
saved-query store (queries.tomlnext to the config; plain expressions
only, never credentials) withsqueakql list|show|save|delete, name
validation, and--saved <NAME>on validate/search. Validation JSON
preserves the full Public API response including error spans; read-only
SqueakQL POSTs carry no Idempotency-Key (squeakql,work). -
Editor authoring and consistent stdin conventions (CLI-7):
--description-editor/--body-editorlaunch$VISUAL(then$EDITOR,
then a platform default) on a secure owner-only temporary file removed on
every exit path; unchanged or empty content cancels the command without
sending. Source conflicts (inline + file + editor) fail at argument-parse
time.--no-inputrejects editor authoring immediately. Text content is
preserved verbatim (Unicode, Markdown#headings, final-newline
semantics) (work,project). -
Work Item watcher commands backed by the newly additive Public API
operations (getWorkItemWatcher,updateWorkItemWatcher):work watcher show|watch|unwatch|mute|unmutereport and change the authenticated user's
own watcher state (never other watchers'). Actions are idempotent
(Idempotency-Key, replay note) and carry no revision guard; the
operations are classified as Complete inopenapi/api-parity.jsonwith
client and CLI wire tests (work). -
Coherent PAT onboarding and troubleshooting journey:
auth status --jsonnow
reports credential type/name, expiry, the credential source (environment vs
credential store), and a structured scope inventory; near-expiry credentials
warn within 14 days on every authenticated run, and client-detected expiry
failsauth statuswith the stable authentication exit code.mesurfaces
the same expiry summary and scope inventory. Structured 401/403 failures
preserve code/status/request ID with CLI-added remediation
(auth,me,doctor). -
README examples verification harness (
scripts/readme_examples.py, guarded by
the Rustreadme_examplescontract test incargo test): every executable
README shell block is classified (parse-only, mock, prose) and verified
against the actual binary; untestable prose blocks are explicitly exempted,
so examples cannot drift from real flags, enums, or output conventions.
Run the harness withpython3 scripts/readme_examples.py --verboseafter
cargo build --release. -
Bulk operations preflight: operation files are validated locally (JSON syntax,
typed envelope, per-operation required fields, unknown fields, enum spellings,
revision constraints, 1–50 count) before any request, with diagnostics naming
the failing operation index and field path. Human bulk output states the
selected concurrency mode, summarizes succeeded/failed counts, and prints
actionable per-failure details with server request ids; JSON preserves all
documented per-operation fields. Stdin and file inputs behave identically
(work). -
doctor --local-onlyverifies configuration, context resolution, profile
selection, credential-store accessibility, terminal behavior, and bundled
compatibility metadata with zero network traffic; remote checks are reported
as skipped, making the output safe for support bundles. Doctor now classifies
network failures by failing stage (DNS, TCP connection, proxy, timeout, TLS)
with stage-specific remediation and per-check latency, reports PAT expiration
(expired / within 14 days / healthy) and scope readiness, and prints a final
pass/warn/fail/skipped summary in human and JSON modes (doctor). -
Deep parsed-OpenAPI schema parity guards: parameters, header parameters
(If-Match,Idempotency-Key), request/response content types (multipart
uploads, binary avatar downloads), response status codes, component schema
drift (required/optional/nullable, enums, formats, property removals), and
bulk envelope bounds are checked structurally against the checked-in
snapshot, with additive changes classified separately from breaking drift
and failures naming the operation or JSON pointer (openapi). -
Global
--dry-runflag for mutation commands (work create/edit/transition/start/close/ archive/unarchive/delete,work label add|remove,work attachment upload|delete,
work comment add|edit|delete,work link add|delete,work bulk create|update|transition,
project create/edit/archive/unarchive,sprint create/transition,label create).
The CLI resolves identifiers and validates local input exactly as a real invocation
would, then emits a versioned preview (previewVersion: 1) with method, path template,
resolved path, sanitized header intent (If-Match,Idempotency-Key— never
Authorization), and the typed request body, without sending any mutation request or
consuming an idempotency key. Read commands reject the flag with a usage error
(work). -
Canonical portable Hamstik Agent Skill at
skills/hamstik/SKILL.md, covering
credential-safe CLI usage, explicit context discovery, deterministic output,
concurrency-aware mutations, Work Item workflows, user/Org member resolution,
bulkupdate/transitionconcurrency modes, and structured failure handling. -
Full support for the current 53-operation Hamstik Public API v1 contract,
includingme, first-classwork mine/work my, SqueakQL search via
work search, independentsqueakql validate, and unauthenticated
api openapicontract retrieval. -
Parsed OpenAPI parity enforcement through
openapi/api-parity.json; adding,
removing, or moving an operation now fails a test until client, CLI, and test
support are deliberately classified. -
scripts/update-openapi.sh --check|--updatefor explicit live-contract drift
checks and validated byte-for-byte snapshot refreshes without making offline
builds network-dependent. -
Typed API client crate (
hamstik-api-client) with bearer injection,
retry policy withRetry-Afterawareness, idempotency-key generation,
ETag capture, cursor pagination helpers, and multipart upload support. -
Frozen Hamstik Public API v1 OpenAPI snapshot (
openapi/hamstik-v1.json)
as the development contract. -
auth login --with-token,auth status,auth list,auth switch,
auth logout, andauth forgetwith PAT storage in the OS credential
store (Windows Credential Manager, macOS Keychain, Linux Secret Service);
headless automation via theHAMSTIK_TOKENenvironment variable (auth). -
Working-context management:
context init,context show,context set,
context clear, backed by a project-local.hamstik.tomlplus global
profile defaults (context). -
Organization and project commands:
org list|view|use,
project list|view|create|use(org,project). -
Work item commands:
work list|view|create|edit, status transitions
(work transitions,work transition,work start,work close),
comments (work comment list|add|delete), labels
(work label add|remove), and attachments
(work attachment list|upload|download|delete) (work). -
Sprint commands:
sprint list|view|create|transitions|transitionwith
completion actions (--move-to-backlog/--move-to-sprint) and Sprint
ETag handling (sprint). -
Project label management:
label list|create(label). -
Work item list filters, including
label,labelName,parent,
topLevel,sprint, andupdatedAfter. -
Machine-facing output:
--json/--quietglobal modes, stable exit
codes (SPEC §52), raw API body echo in--json, and an ANSI-free JSON
failure envelope on stderr. -
Dependency-aware diagnostics:
hamstik doctorreports configuration and
context sources, credential source/store health, proxy presence,
network/TLS reachability, live OpenAPI availability and compatibility,
authentication, selected Organization/Project validity, and terminal
rendering. JSON checks have stable IDs and explicit
pass|warn|fail|skippedstatuses while retaining the origina...