Repository navigation
Releases: risadams/Janus
Release list
v0.9.0
v0.9.0: the first stable release of Janus. Install it with Homebrew (brew install risadams/tap/janus), Scoop (scoop bucket add risadams https://github.com/risadams/scoop-bucket, then scoop install risadams/janus), or winget (winget install RisAdams.Janus, once Microsoft has reviewed the package); janus update leaves copies from all three to their own tools. The macOS binaries are signed and notarized, every archive's checksums are signed and its build attested, and a release rebuilds byte for byte from its tag. Since rc.17: the three package channels, and a baseline report on where a week of Claude Code's cost actually went.
What's Changed
- Read the notary issuer from NOTARY_ISSUER_ID, its name in the release environment by @risadams in #326
- Create FUNDING.yml by @risadams in #327
- Show the latest release, the Go version, and the licence as badges by @risadams in #329
- Link to GitHub Sponsors from the docs site's navbar and footer by @risadams in #331
- Give the docs site its own 404 page and a home-screen icon by @risadams in #333
- Publish Janus to a Homebrew tap on each stable release by @risadams in #337
- Publish Janus to a Scoop bucket on each stable release by @risadams in #340
- Report where the cost goes after a week, and restate G1 from it by @risadams in #336
- Submit Janus to winget on each stable release by @risadams in #341
Full Changelog: v0.9.0-rc.17...v0.9.0
v0.9.0-rc.17
v0.9.0-rc.17: the macOS binaries are signed with a Developer ID and notarized by Apple, so a copy downloaded in a browser runs without clearing the quarantine. Also new: janus completion for bash, zsh, fish, and PowerShell; -json for janus doctor and janus audit; a doctor warning when Claude Code is newer than any tested; and fixes found by gosec, including a bound on gzip decompression, reports of captures and digests that could not be pruned, and a clearer Windows update rollback.
What's Changed
- Name the exact release when janus update sends a go install to go install by @risadams in #288
- Write down how releases are versioned and withdrawn by @risadams in #289
- Run OpenSSF Scorecard on the repository by @risadams in #290
- Publish the provenance bundle with each release, and record what Scorecard found by @risadams in #292
- Add the Best Practices badge, and open each release's notes with its tag message by @risadams in #293
- Add -json to janus doctor and janus audit by @risadams in #294
- Keep old configs and ledgers working across a jump of several versions by @risadams in #295
- Add janus completion for bash, zsh, fish, and PowerShell by @risadams in #296
- Warn in janus doctor when Claude Code is newer than any janus was tested with by @risadams in #297
- Run gosec in CI and show its findings under the Security tab by @risadams in #308
- Say where the old janus is when a Windows update cannot put it back by @risadams in #309
- Report captures that pruning could not delete by @risadams in #310
- Bound the gzip a response decompresses to on the side by @risadams in #311
- Mark gosec's findings in the worker tools and MCP server safe by @risadams in #314
- Report originals the digest store could not delete by @risadams in #313
- Mark gosec's findings in the local backend safe by @risadams in #316
- Say why a schema type that does not parse checks no type by @risadams in #315
- Mark gosec's findings in the guard safe, with the reasons by @risadams in #312
- Fail the build on any gosec finding by @risadams in #317
- Bump ossf/scorecard-action from 2.4.4 to 2.5.0 by @dependabot[bot] in #320
- Date the capture in the failed-prune test now, not on a fixed day by @risadams in #323
- Sign and notarize the macOS binaries in the release workflow by @risadams in #321
- Bump github/codeql-action/upload-sarif from 4.38.2 to 4.39.0 by @dependabot[bot] in #319
- Bump the docusaurus group in /docs-site with 2 updates by @dependabot[bot] in #318
- Give the signing job the Apple secrets only through a tag-only environment by @risadams in #325
Full Changelog: v0.9.0-rc.16...v0.9.0-rc.17
v0.9.0-rc.16
v0.9.0-rc.16: reproducible builds, an SBOM per platform with its attestation, and a check that every build can be installed by janus update. (rc.14 and rc.15 stopped before publishing; see #284.)
What's Changed
- Decide to keep release.sh rather than adopt GoReleaser, and hold the release layout by @risadams in #281
- Make release builds reproducible, and check it in CI by @risadams in #282
- Publish an SBOM with each release by @risadams in #283
- Find each archive by its platform's extension when attesting its SBOM by @risadams in #285
- Give each SBOM a serial number the attestation accepts, and check for it on pull requests by @risadams in #286
Full Changelog: v0.9.0-rc.13...v0.9.0-rc.16
v0.9.0-rc.13
v0.9.0-rc.13: signed checksums and janus update; colour in every command; an update check and an optional once-a-day notice.
What's Changed
- Add M9 Distribution to the roadmap by @risadams in #271
- Check for a newer release when asked, with an option to include pre-releases by @risadams in #272
- Colour the output of every janus command, not only the console by @risadams in #273
- Let agents stack PRs and set them to auto-merge by @risadams in #275
- Offer a once-a-day update notice at startup, off by default by @risadams in #276
- Sign each release's checksums so a download can be checked without trusting the release page by @risadams in #277
- Add the first release key by @risadams in #279
- Add janus update, which replaces the binary with a verified newer release by @risadams in #280
Full Changelog: v0.9.0-rc.12...v0.9.0-rc.13
v0.9.0-rc.12
Janus reads the subscription's usage limits on every answer: the console says where they stand as they fill, janus stats says which kinds of request use them, and a rule's ifUsageAbove sends work local before a limit is reached; Claude taking a conversation back after a stand-in is marked; janus stats gains -daily, -watch, outages with their cause and reset, the saving from local answers, and several ledgers read as one; janus doctor says whether Claude Code is using Janus; janus claude and janus service; the ledger defaults to one folder per user; a config pointing at janus itself is refused; docs for what Janus needs before you start.
What's Changed
- Rebuild the docs site when a release tag is pushed by @risadams in #213
- Make a hanging test fail fast and say which it is by @risadams in #214
- Refuse a config whose upstream is Janus itself by @risadams in #217
- Hold the slow model in the leak test for 400 ms, not 2 s by @risadams in #220
- Run test loops on CI by hand, not from a PR by @risadams in #222
- Say what Janus needs before you start, and show it in use by @risadams in #224
- Redraw the console picture with a script in the repo by @risadams in #226
- Fix the large-body test's receive buffers, so loopback stalls stop by @risadams in #218
- Say in janus stats what local answers would have cost upstream by @risadams in #228
- Break janus stats down by day with -daily by @risadams in #233
- Say in janus stats when and why Claude could not answer by @risadams in #234
- Have janus doctor say whether Claude Code is using Janus by @risadams in #235
- Add janus claude, which starts Claude Code through Janus by @risadams in #236
- Add M8 Pace and three M7 items to the roadmap by @risadams in #245
- Record the subscription's limit utilization on every response by @risadams in #246
- Show the usage limits' headroom in the console and janus stats by @risadams in #248
- Add janus stats -watch, today's figures redrawn while you work by @risadams in #252
- Let a rule wait for a usage limit to fill before sending work local by @risadams in #249
- Mark Claude taking a conversation back after the local model stood in by @risadams in #250
- Keep the ledger in one folder per user, however Janus is started by @risadams in #247
- Add janus service, which installs Janus to start at log in by @risadams in #251
Full Changelog: v0.9.0-rc.11...v0.9.0-rc.12
v0.9.0-rc.9
When Claude cannot answer, the local stand-in keeps the session going: Janus loads the model itself at a 65,536-token context, cuts a conversation too long for it down to its start and latest turns, queues stand-ins for a busy model, and passes tool-search results as text; the console says to leave auto mode when its safety checks cannot reach Claude. Releases are cut with scripts/tag-release.sh.
What's Changed
- Cut releases with one script that pushes a signed tag by @risadams in #167
- Send tool_reference blocks to the local model as text by @risadams in #174
- Queue a stand-in for a busy local model instead of failing it by @risadams in #175
- Load the local model for a stand-in at a context that fits the request by @risadams in #176
- Fit a conversation too large for the local model by leaving out older turns by @risadams in #177
- Say what to do when auto mode's safety checks cannot reach Claude by @risadams in #179
Full Changelog: v0.9.0-rc.8...v0.9.0-rc.9
v0.9.0-rc.8
One Janus per log folder, with logging.dir resolved against the config file; a readable console log in color that notes the guard's and local-only policy's work once per conversation; redaction placeholders stable across restarts; no request sent to an unloaded local model without checking it fits; digest originals pruned while Janus runs; auto-mode safety checks get their own class; Claude's retry advice is kept and the console says why a local stand-in did not answer
What's Changed
- Verify the attestation before leaving the download folder by @risadams in #145
- Resolve logging.dir against the config file, not the current folder by @risadams in #148
- Run one Janus per log folder by @risadams in #154
- Make the console log readable at a glance, with color by @risadams in #155
- Don't send a request to an unloaded local model without checking it fits by @risadams in #157
- Prune digest originals while Janus runs, not only at start by @risadams in #158
- Keep what Claude says about retrying when it cannot answer by @risadams in #159
- Keep redaction placeholders stable across restarts by @risadams in #160
- Say why the local stand-in did not answer by @risadams in #161
- Give Claude Code's auto-mode safety checks their own class by @risadams in #164
- Note the guard's and local-only policy's work once per conversation by @risadams in #165
Full Changelog: v0.9.0-rc.7...v0.9.0-rc.8
v0.9.0-rc.11
The local stand-in answers for a usage limit at once and for an outage after three failures, leaving brief errors for Claude Code to retry; every local non-answer says why, with a next step, in the ledger, janus stats, the console, and janus audit; the local-only policy withholds what a tool read, not a call that mentions a pattern; the auto-mode hint shows only while the local model is standing in; a docs site, a user guide, and the Janus logo.
What's Changed
- Let the release script run without a terminal by @risadams in #182
- Edit the README for plain writing and current behaviour by @risadams in #184
- Write an end-user guide: install, configure, use, troubleshoot by @risadams in #186
- Add a code of conduct by @risadams in #190
- Add the Janus logo to the repository and README by @risadams in #192
- Publish the docs as a website with Docusaurus by @risadams in #194
- Say in the docs that studio.local is a placeholder for the developer's machine by @risadams in #196
- Bump the docusaurus group in /docs-site with 2 updates by @dependabot[bot] in #197
- Move the docs site's build tools off vulnerable versions by @risadams in #200
- Give the test workflow read-only token permissions by @risadams in #201
- Withhold only what a tool read, not a call that mentions a local-only pattern by @risadams in #203
- Say plainly in janus audit when a request had no guard findings by @risadams in #204
- Say why the local model did not answer, with the next step for each cause by @risadams in #205
- List staticcheck and govulncheck among the checks to run before pushing by @risadams in #207
- Land the auto-mode hint fixes that missed the #179 merge by @risadams in #209
- Stand in for Claude only when it is down, not on a brief failure by @risadams in #210
New Contributors
- @dependabot[bot] made their first contribution in #197
Full Changelog: v0.9.0-rc.10...v0.9.0-rc.11
v0.9.0-rc.10
Records a request's final status rather than an interim 100 Continue.
What's Changed
Full Changelog: v0.9.0-rc.9...v0.9.0-rc.10
v0.9.0-rc.7
Release archives carry signed build-provenance attestations; fuzz tests for every parser of untrusted input, and a fix for the crash they found in stream assembly; security checks in CI; SECURITY.md, CONTRIBUTING.md, and a README that names no version
What's Changed
- Point the README at v0.9.0-rc.6 by @risadams in #133
- Keep the README's install steps free of a version by @risadams in #135
- Add security checks to CI by @risadams in #140
- Add SECURITY.md, CONTRIBUTING.md, and issue and PR templates by @risadams in #141
- Fuzz the parsers that read untrusted input, and fix the crash it found by @risadams in #142
- Attest the provenance of release binaries by @risadams in #143
Full Changelog: v0.9.0-rc.6...v0.9.0-rc.7