• v0.4.0 d51ecd65c5

    v0.4.0
    Some checks failed
    Check / fmt + clippy + tests (push) Successful in 6m36s
    Publish crates / cargo publish (Forgejo Cargo registry) (push) Failing after 3s
    Build Linux package / Build vervain-agent and publish generic package (push) Successful in 3m39s
    Build Windows agent / Cross-compile, sign, and publish vervain-agent.exe (push) Successful in 6m33s
    Build macOS package / Build vervain-agent (macOS) and publish generic package (push) Successful in 18m38s
    Stable

    David released this 2026-07-15 03:06:05 +02:00 | 38 commits to main since this release

    Changelog

    d51ecd6 Merge pull request 'Release v0.4.0' (#128) from release/v0.4.0 into main
    d3df54d Merge branch 'main' into release/v0.4.0
    d7ffb28 Merge pull request 'fix(install): silence best-effort launchctl stderr on macOS uninstall' (#140) from fix/VA-89-quiet-launchctl into main
    32b918b fix(install): silence best-effort launchctl stderr on macOS uninstall
    7daf40d Merge pull request 'ci(macos): native build+publish workflow and runner/build docs (VA-89, VA-90)' (#139) from feat/VA-89-VA-90-macos-ci into main
    2037b93 Merge pull request 'feat(install): macOS launchd installer + Install/Uninstall routing (VA-89)' (#138) from feat/VA-89-macos-launchd-installer into main
    03bfc24 ci(macos): native build+publish workflow and runner/build docs (VA-89, VA-90)
    42632bf feat(install): macOS launchd installer + Install/Uninstall routing (VA-89)
    44444d1 Merge pull request 'test(lan): end-to-end mTLS + capability-gate integration test (VA-8)' (#137) from test/VA-8-lan-integration into main
    a395bd2 test(lan): end-to-end mTLS + capability-gate integration test (VA-8)
    71ea1e6 Merge pull request 'feat(lan): mTLS LAN control-plane listener, read-only (VA-8)' (#136) from feat/VA-8-lan-listener into main
    5f40883 feat(lan): mTLS LAN control-plane listener, read-only (VA-8)
    2498ad4 Merge pull request 'feat(dispatch): apply server-pushed agentconfig (VA-130)' (#135) from feat/VA-130-agentconfig into main
    b090602 feat(dispatch): apply server-pushed agentconfig (VA-130)
    94d5bed Merge pull request 'feat(host): populate OS name on macOS via sw_vers' (#134) from feat/macos-osinfo into main
    d7c49bf feat(host): populate OS name on macOS via sw_vers
    d810a4c Merge pull request 'feat(host): populate sysinfo and cpuinfo on macOS (VA-133)' (#133) from feat/VA-133-macos-sysinfo-cpuinfo into main
    715f8db feat(host): populate sysinfo and cpuinfo on macOS (VA-133)
    e22c4d2 Merge pull request 'fix(mcp): dial and serve the MCP gateway tunnel (VA-131, agent half)' (#132) from fix/VA-131-mcp-gateway-tunnel into main
    fd9e65f fix(mcp): dial and serve the MCP gateway tunnel (VA-131, agent half)
    c15d2b3 Merge pull request 'fix(dispatch): execute runcommands shell actions (VA-132)' (#131) from fix/VA-132-runcommands-dispatch into main
    e032b28 fix(dispatch): execute runcommands shell actions (VA-132)
    8283f0c Merge pull request 'feat(macos): build the agent binary for x86_64-apple-darwin (VA-88)' (#130) from feat/VA-88-macos-x86_64-build into main
    8fc39bf chore(macos): add just build-macos native build recipe
    ff5fcb8 feat(macos): compile the agent binary for x86_64-apple-darwin
    a23b136 Merge pull request 'docs: add CLAUDE.md for Claude Code' (#129) from docs/add-claude-md into main
    bef1c3c docs: add CLAUDE.md for Claude Code
    2055481 Release v0.4.0
    c85667d Merge pull request 'feat(kvm): layout-aware desktop key protocol' (#127) from feat/VA-126-layout-aware-desktop-keys into main
    16ddb06 feat(kvm): layout-aware desktop key protocol
    c54c125 Merge pull request 'fix(kvm): exclude the BGRX pad byte from tile change-detection' (#126) from fix/VA-127-tile-hash-skip-bgrx-pad-byte into main
    fbd8add fix(kvm): exclude the BGRX pad byte from tile change-detection
    1c80e74 Merge pull request 'feat(ci): sign and publish the Windows agent' (#125) from feat/VA-123-windows-agent-sign-publish into main
    b8808e8 feat(ci): sign and publish the Windows agent
    512ef56 Merge pull request 'feat(ci): cross-compile a 64-bit Windows agent build' (#124) from feat/VA-122-windows-cross-compile-ci into main
    9210d54 feat(ci): cross-compile a 64-bit Windows agent build
    4f29e19 Merge pull request 'fix(kvm): route explicit-Linear scanout reads through gbm' (#123) from fix/VA-121-vram-linear-scanout-through-gbm into main
    edae506 fix(kvm): route explicit-Linear scanout reads through gbm
    dfcb35a Merge pull request 'feat(power): add Sleep action_kind to host_power' (#122) from feat/VA-120-host-power-sleep into main
    9c9bbc5 feat(power): add Sleep action_kind to host_power
    a4af88e Merge pull request 'fix(kvm): treat an absent display as retryable in capture loops' (#121) from fix/VA-119-kvm-capture-retryable-absent-display into main
    0497cfa fix(kvm): treat an absent display as retryable in capture loops
    eabb1fc Merge pull request 'fix(input): route MCP + VNC pointer moves through shared backend selector' (#120) from fix/VA-118-shared-pointer-injection into main
    cbfe4ab fix(input): route MCP + VNC pointer moves through shared backend selector
    38f0e83 Merge pull request 'fix(desktop): scale HiDPI pointer coords into logical space (VA-111)' (#119) from fix/VA-111-hidpi-pointer-scale into main
    cc37e80 fix(desktop): scale HiDPI pointer coords into logical space (VA-111)
    66d4372 Merge pull request 'feat(update): compress agent transport with zstd' (#118) from feat/VA-116-transport-compression into main
    16aef73 feat(update): compress agent transport with zstd
    07357f0 Merge pull request 'fix(desktop): probe KVM backend once, fail closed on headless host' (#117) from fix/VA-115-desktop-probe-once-fail-closed into main
    5fda6aa fix(desktop): probe KVM backend once, fail closed on headless host
    cc365ce Merge pull request 'feat(package): publish semver sidecar alongside each agent binary' (#116) from feat/VA-114-version-sidecar into main
    df2cef6 Merge branch 'main' into feat/VA-114-version-sidecar
    9c0b891 Merge pull request 'docs(agent): drop stale --system from install doc examples' (#115) from fix/VA-113-stale-system-flag-install-doc-comments into main
    20ead95 feat(package): publish semver sidecar alongside each agent binary
    bc7af8b docs(agent): drop stale --system from install doc examples
    d8987d3 Merge pull request 'fix(kvm): fail loudly on stale X11 cookie and re-resolve session (VA-112)' (#114) from fix/VA-112-x11conn-cookie-reresolve into main
    1cdebd3 fix(kvm): fail loudly on stale X11 cookie and re-resolve session (VA-112)
    c946a46 Merge pull request 'fix(kvm): composite DRM cursor plane into scanout capture (VA-110)' (#113) from fix/VA-110-drm-cursor-overlay into main
    ee9a470 fix(kvm): composite DRM cursor plane into scanout capture (VA-110)
    693beba Merge pull request 'fix(kvm): one desktop-tab owner per seat via advisory lock (VA-108)' (#112) from fix/VA-108-single-kvm-owner-per-seat into main
    94b2cba fix(kvm): one desktop-tab owner per seat via advisory lock (VA-108)
    e2b11f9 Merge pull request 'fix(kvm): follow seat0 active session across login/logout (VA-107)' (#111) from fix/VA-107-session-follow into main
    590ea12 fix(kvm): follow seat0 active session across login/logout (VA-107)
    5796ed2 Merge pull request 'fix(kvm): route no-modifier DRM scanout through gbm, not raw mmap (VA-106)' (#110) from fix/VA-106-drm-scanout-modifier-none-tiled into main
    6ad8677 fix(kvm): route no-modifier DRM scanout through gbm, not raw mmap
    16fa2bb Merge pull request 'fix(rtc): pace WebRTC data-channel sends against SCTP buffered_amount (VA-105)' (#109) from fix/VA-105-rtc-datachannel-backpressure into main
    6ceafe2 fix(rtc): pace data-channel sends against SCTP buffered_amount
    a67900d Merge pull request 'feat(kvm): DRM/KMS scanout capture via gbm readback (VA-104 part 2)' (#108) from fix/VA-104-drm-egl-readback into main
    e26fd95 fix(kvm): split uinput into separate pointer and keyboard devices
    92b1f07 feat(kvm): DRM/KMS scanout capture via gbm readback (VA-104)
    2cc0d6b Merge pull request 'feat(kvm): DRM/KMS scanout enumeration + capture probe (VA-104)' (#107) from fix/VA-104-drm-kms-capture into main
    2db3417 feat(kvm): DRM/KMS scanout enumeration + capture probe (VA-104)
    6059f3c Merge pull request 'feat(kvm): unattended Wayland input via uinput (VA-104 part 1)' (#106) from fix/VA-104-drm-kms-uinput-wayland into main
    e43a5d0 feat(kvm): unattended Wayland input via uinput (pointer + keyboard)
    8bba40c Merge pull request 'fix(agent): Desktop tab capture/WebRTC + cross-device self-update (VA-103)' (#105) from fix/VA-103-desktop-tab-session-fixes into main
    b6ec697 fix(update): copy-fallback for cross-device binary swap
    e9c8330 fix(agent): unblock Desktop tab capture and WebRTC data channel
    cf14cb3 Merge pull request 'fix(release): add --build to create-release compose run' (#104) from fix/VA-102-create-release-build-flag into main
    874ae88 fix(release): add --build to create-release compose run
    4920866 Merge pull request 'fix(kvm): stop SIGBUS core dump in PipeWire screencast teardown' (#103) from fix/VA-92-pipewire-teardown-sigbus into main
    d5443dc fix(kvm): stop SIGBUS core dump in PipeWire screencast teardown

    Downloads