Releases: vaaraio/vaara
Release list
v1.60.0
[1.60.0] - 2026-08-04
Boundary hardening for the MCP proxy. Closes the two gaps between what the
proxy does and what its audit trail says, both found by review rather than by
tests.
Added
- The Streamable HTTP transport takes an API key (
--api-key, or
VAARA_PROXY_API_KEY). When set, every/mcprequest must carry
Authorization: Bearer <key>or it is rejected with 401. The check runs
before any route handler, soX-Vaara-TenantandX-Vaara-Upstreamare
never read from an unauthenticated caller. Keys are compared in constant
time.GET /healthstays open so load balancers keep working. --allow-unauthenticatedfor operators whose bind is protected by other
means, such as mTLS or a private network segment.
Fixed
vaara-mcp-proxy --transport httpnow refuses to bind a non-loopback host
when no API key is configured.X-Vaara-Tenantselects the tenant a call is
attributed to andX-Vaara-Upstreamselects the upstream, and therefore the
policy, that governs it. Read from an unauthenticated caller on a reachable
bind, those headers allow tenant spoofing and weakest-policy shopping. This
mirrors the guardvaara servealready applies. Loopback binds are
unaffected and still need no key.- A credential-gateway denial is now recorded as a blocked outcome against the
sameaction_idas the policy decision. For a constrained tool the policy
decision can beallowwhile the gateway then refuses, most often because
runtime arguments no longer match the digest the grant was minted for. The
trail previously kept theallowand carried nothing showing the call never
executed, so the record and the behaviour disagreed. A failure to write the
outcome is logged and never masks the denial.
Upgrading
Operators running vaara-mcp-proxy --transport http on a non-loopback host
without an API key will see the process refuse to start. Set --api-key or
VAARA_PROXY_API_KEY, or pass --allow-unauthenticated if the port is
protected another way.
v1.59.0
[1.59.0] - 2026-08-03
macOS app consolidation release. Pulls the 1.58.x macOS fixes into one
coherent release and corrects the settings layout regression.
Added
clients/macos/Package.swiftdeclares theVaaraMenuBarexecutable
product, soswift buildactually links a runnable binary.
Fixed
- The menu-bar footer reads the installed engine version via
vaara version
(the CLI rejects--version), so the on-screen version matches the binary
no matter how the app was installed. - The update-check User-Agent is derived from the installed version instead
of a hardcoded value. - Footer bottom padding is 20pt, matching the app-wide standard, so the
footer no longer hugs the window edge. - Settings screen is a plain
Gridwith 20pt padding — the bounded
ScrollView introduced in 1.58.4 (which added an unwanted scrollbar) is
removed; tall enterprise content no longer clips to the window edge. - Bumped
BUILD_STAMPtob57 · 2026-08-03.
v1.58.4
[1.58.4] - 2026-08-03
macOS Settings screen: the Grid was the one screen without the bounded
ScrollView every other tab uses, so tall content (enterprise rows) clipped
against the popover's bottom edge and text hugged the border. It now scrolls
inside a maxHeight: 560 container like Overview and History, and the footer
keeps the app-wide 20pt bottom padding instead of 14pt.
Also fixes the SPM manifest: VaaraMenuBar was declared as an executable
target but never listed under products:, so swift build compiled the code
but never linked a runnable binary.
Fixed
- macOS Settings screen: bounded ScrollView (maxHeight 560) + 20pt footer bottom padding.
clients/macos/Package.swift: added theVaaraMenuBarexecutable product.
v1.58.3
[1.58.3] - 2026-08-03
macOS footer spacing: the footer hugged the window's bottom edge at 12pt
vertical padding while every other element uses 16-22pt. It now uses 14pt
plus a subtle wash so it reads as a footer with breathing room, matching the
"unhurried spacing" of the rest of the popover.
Fixed
- macOS footer vertical padding 12pt -> 14pt, with a hairline background wash.
v1.58.2
[1.58.2] - 2026-08-03
Fixes the macOS version probe: the menu-bar footer ran vaara --version,
which the CLI does not accept (the flag is vaara version), so the version
display silently failed on every install. The footer now calls vaara version
and correctly shows the installed engine version.
Fixed
- macOS footer version probe:
vaara --version->vaara version.
v1.58.1
[1.58.1] - 2026-08-03
Small macOS app release: the menu-bar footer no longer shows a stale,
hand-edited build stamp. It now reads the actually-installed vaara engine
version from vaara --version at runtime, so the on-screen version always
matches the binary regardless of how the app was installed (IDE/XcodeGen,
Homebrew, or a copied /Applications build). The GitHub update-check
User-Agent is derived from the same live version instead of a hardcoded
1.56.0.
Fixed
- macOS app footer shows the live installed engine version (was a frozen
BUILD_STAMPconstant that predated the release). checkForUpdatessendsUser-Agent: VaaraMenuBar/<installed>instead of a
hardcoded1.56.0.- Bumped
BUILD_STAMPtob57 · 2026-08-03.
v1.58.0
[1.58.0] - 2026-08-03
Post-audit hardening release: the evidence core verified production-grade;
this release closes the boundary findings.
Security
- HTTP server authentication (C1):
vaara servenow accepts
--api-key(orVAARA_SERVER_API_KEY). When set, every endpoint except
GET /v1/healthrequiresAuthorization: Bearer <key>(constant-time
compare). Non-loopback binds without a key are REFUSED unless
--allow-unauthenticatedis passed: an unauthenticated reachable server
allowed policy hot-swap to allow-all (POST /v1/policy/reload), forged
audit-event append (POST /v1/audit/events), and calibration poisoning
(POST /v1/score/outcome).docs/openapi.yamlgains abearerAuth
security scheme;docs/adapters.mddocuments the contract. - Prior-approval auto-allow (C2): the argument-shape guard is now real.
ESCALATION_SENTandESCALATION_RESOLVEDrecords carry the
args_digest,find_prior_approvalrequires an exact digest match
(records without one never match a digested query — fail closed), is
tenant-scoped, and reads under the chain lock. Approvingtx.transfer
amount=10 no longer auto-allows amount=999999. - MCP server API-key check is now constant-time (
secrets.compare_digest). vaara keygenwrites private keys withO_CREATmode 0600 from the
start (no umask window before chmod).
Fixed
- Trail/behaviour divergence on auto-allow: the prior-approval check
now runs BEFORE the decision is recorded, so an auto-allowed action's
chain showsdecision=allowwith the auto-allow reason — never a
danglingescalatewith noESCALATION_SENTbehind it. The record and
the behaviour always agree. - Notch approval panel on the MCP path:
vaara-mcp-server's
vaara_interceptnow runs the file-based approvals handshake
(~/.vaara/approvals) on a gated escalate — the same protocol as the
Claude Code hook — so MCP-governed agents get the human-in-the-loop
surface.VAARA_PLUGIN_APPROVALS=0disables; deny/timeout fail closed. - macOS app settings window widened to 760pt on the settings screen
(the two-column Grid's segmented pickers clipped at 520pt). - macOS GATE picker now writes BOTH the Claude Code plugin config and
the unified~/.vaara/config.json; the status read normalises legacy
vocabularies (shadow/enforce). Previously the picker flipped only
the plugin config while non-hook runtimes kept the old mode. dry_run_evaluateapplies the cloud-metadata SSRF content floor, so
vaara_check//v1/scorepreviews cannot say allow where
vaara_interceptdenies.- Policy validation warns when
sequences.*.window_secondsis declared:
matching is count-based lookback, so the seconds value was silently
ignored (potential policy bypass by misconfiguration). /v1/score/outcomewritesOUTCOME_RECORDEDto the hash chain
(outcomes reported over HTTP previously left no evidence record).- Server schema:
_EventTypeacceptsanchor_gap,key_lifecycle,
disclosure_recorded;/v1/audit/eventspayload capped at 64KB;
OutcomeRequest.notescapped. - macOS false "path traversal detected" warning on every tempdir DB
(macOS/var→/private/varsymlink): warning now fires only on real
..segments. - Article 50 auto-disclosure failure in
@governlogs at debug instead
of swallowing silently.
Documentation
docs/formal_specification.mdcorrected to match the code: scorer
defaults 0.4/0.7 (not 0.3/0.7), seeded ±0.19 starting interval, the
sequence signal is an MWU expert (not an additive boost), the hash
chain commitsprevious_hashinside the record payload, and cold start
is calibrated-from-birth (seeded prior) with the strict behaviour
behindpre_seed_calibration=False.bench/latency.py+bench/README.md: the benchmark constructs an
explicit in-memory trail and says so; the library default is the
SQLite-backed trail at~/.vaara/trail/audit.db(persistent I/O grows
with DB size and is out of scope for the hot-path number).- README quick-start: records are hash-chained/tamper-evident (signing
happens at export), and the default persistent trail location is named. CAPABILITIES.mdcurrent-line version refreshed (v1.37.0 → v1.57.4).docs/eu-ai-act-august-2026.md: Omnibus timing sentence updated —
Regulation (EU) 2026/1744 published 24 July 2026, in force 27 July 2026.
v1.57.4
[1.57.4] - 2026-08-02
Fixed
- macOS
AccessibilityObserver: fixpid_ttype annotation inattachToand
detachObserverthat broke Swift compilation.
v1.57.3
[1.57.3] - 2026-08-02
Fixed
- Cross-process outcome reporting: pending outcomes now persist to SQLite
(pending_outcomestable, schema v5) sovaara outcomeworks when called
from a separate process thanvaara check. - macOS
AccessibilityObserverrewrite: proper multi-app focus tracking via
NSWorkspacenotifications, correct Safari URL extraction through toolbar
AX hierarchy, broader AI site detection, and cleanup of stale observers. - Remove accidentally committed temporary release artifacts
(.commit_msg_v1.53.0_release.txt,.pr_body_v1.53.0.md).
v1.57.2
[1.57.2] - 2026-08-02
Fixed
- macOS app: remove invalid
--format jsonflag fromPolicyServiceDelegate
that caused the WebKit governance extension to fail open (every web flow
was allowed by default). - Infer proxy gate: test isolation — use fresh in-memory
AuditTrailto
prevent prior approval records from the default SQLite DB from leaking
between test runs.