Download zWork for your platform:
| Platform | File |
|---|---|
| Linux | zWork-linux-x86_64.AppImage |
| macOS | zWork-macos-universal.dmg |
| Windows | zWork-windows-x86_64-setup.exe |
Install
Linux (recommended):
curl -fsSL https://raw.githubusercontent.com/Ryz3nPlayZ/zWork/main/scripts/install.sh | bashOr download the .AppImage and run:
chmod +x zWork-linux-x86_64.AppImage
./zWork-linux-x86_64.AppImagemacOS:
Unsigned build — if macOS blocks the install, right-click → Open, or use the cURL installer below.
curl -fsSL https://raw.githubusercontent.com/Ryz3nPlayZ/zWork/main/scripts/install-macos.sh | bashOr download zWork-macos-universal.dmg, open it, then drag zWork to Applications.
Windows:
Unsigned build — if SmartScreen appears, click "More info" then "Run anyway".
irm https://raw.githubusercontent.com/Ryz3nPlayZ/zWork/main/scripts/install-windows.ps1 | iexWhat's new
Ship-readiness pass: stability, security, Ollama, and permission UX.
New
- Ollama integration works end-to-end. Model discovery was broken in three independent ways (SSRF guard rejected the default empty URL, double-
/v1path, response-shape mismatch) — clicking "Load models" always errored or showed an empty list. Rewritten to use Ollama's native/api/tagsendpoint with a correct response mapping. Models now auto-load the moment you pick the Ollama credential. Embedding-only models are filtered out. - Pull Ollama models in-app. New
POST /api/ollama/pullendpoint streams download progress from Ollama's/api/pullas SSE. The Settings panel has a pull input with live progress (downloading — 42%,success) and auto-refreshes the model list on completion. Zero-config: empty base URL defaults tohttp://localhost:11434. - Crash reporting foundation. Panic hooks in both the sidecar backend (
~/.zwork/logs/crashes.jsonl) and the Tauri host (host-crashes.jsonl) capture payload, location, thread, and backtrace. Previously, native crashes vanished silently. - macOS Keychain for secrets. BYOK API keys now store in the system Keychain (encrypted at rest) with transparent migration from the legacy plaintext file and full fallback on Linux/Windows.
- Legal docs. Privacy Policy and Terms of Service added (
legal/), with in-app links in Settings.
Fixes (permissions — the "granted but shows Required" bug)
- Permission status now updates after you grant. The
LAST_PERMScache was write-once and never invalidated, so granting in System Settings and returning to zWork kept showing the old "not granted" state until restart. Now has an 8s TTL with live re-read when the driver is up. - Warm-up no longer poisons on slow driver start. A transient failure on first contact permanently returned "CuaDriver isn't running" until manual re-click. The guard now resets on failure so later polls retry.
- Accessibility grant deep-links to System Settings. Previously the AX grant button relied on macOS re-raising the driver's prompt, which it won't after first launch — so it could silently do nothing. Now opens the Accessibility pane directly.
- Stale-cache fix on driver restart.
teardown_drivernow invalidates the permission cache so a fresh read happens on the next poll.
Fixes (stability)
- Mutex poison immunity. 22
std::sync::Mutexlock sites across the agent loop, watchdog, and CUA cache converted to poison-tolerant access. A single panicked thread no longer cascades into permanent process-wide deadlock. - Agent no longer crashes on transient chatstore read failure.
chatstore::get().unwrap()→ graceful fallback with a warning. - Context-overflow recovery wired in.
is_context_overflow_errorandforce_compact_conversation_historywere written to recover fromcontext_length_exceeded400s but never called. A long conversation no longer dead-ends when it crosses a model's real window — it force-compacts and retries once.
Fixes (overlay)
- Custom shortcut now works on every launch. Previously reverted to
Ctrl+Alt+Spaceuntil you opened Settings, because Rust can't read localStorage. Now re-registered on main-window boot. - Keybindings cheatsheet shows your actual shortcut instead of the hardcoded default.
Fixes (Composio / Gmail)
- Gmail pagination. "Check my email" no longer drowns the model on a busy inbox. Default page is 25 (metadata-only, no HTML bodies),
nextPageTokenis surfaced, and the prompt teaches the model to keep paging until exhausted — so nothing gets missed. Paging is scope-aware (doesn't restart at page 1).
Fixes (Share Window)
- "Share window" button hidden on Windows/Linux where it returned "No windows found" (capture is macOS-only via CoreGraphics).
Infrastructure
- Code-signing + notarization CI scaffolding. The release workflow now wires
APPLE_SIGNING_IDENTITY/APPLE_ID/APPLE_PASSWORD/APPLE_TEAM_IDfor macOS (notarytool submit + staple) andWINDOWS_CERTIFICATE_THUMBPRINTfor Windows Authenticode. Entitlements plist added. All optional — unsigned builds still work; reviewers see warnings when secrets are missing. - Version bumped to 0.5.2 across
package.json,tauri.conf.json,Cargo.toml,Casks/zwork.rb. - 4 cargo warnings eliminated (dead code, needless mut).