Repository navigation
Voice in every app, files and screenshots sent to you, and design guidance built in. Upgrade with malac update, then malac daemon restart when no agents are running. Install the new APK over the old one, and the new .vsix in your editor.
New
- Files and screenshots sent to you. Ask "send me a screenshot of the settings page" and malac sends it with its new
send_to_usertool: a screenshot its browser or desktop tools just took, or any file. It shows up in the app you are using: the terminal, the web UI, VS Code, Android or iOS. Sent files are copies, kept for 30 days. - Images open full screen everywhere. Every image in a conversation (tool screenshots, attachments, sent files) opens in a viewer with pinch and wheel zoom, pan, double-tap or double-click zoom, and save or share. VS Code can also open it in an editor tab; the terminal opens it in your system viewer with
/open. - Dictation. A microphone button in every composer types what you say for you to edit and send. Ctrl-X in the terminal, Ctrl+Shift+Space in the web UI, ⌥⇧⌘D in VS Code. It uses a transcription model such as
gpt-4o-mini-transcribeorwhisper-1, or a chat model that takes audio. - Speech. With speech on, malac says when it needs you: every approval request, questions and notable results through a new
saytool, and "Done." with the first sentence of the reply after a long turn. It plays on one device, the one you used last, so your phone and laptop never talk at once. It uses a speech model such asgpt-4o-mini-tts, or your computer's own voice. Off by default. - Talk mode. A spoken conversation through a Realtime model such as
gpt-realtime. You talk; the voice model hands the work to malac, says what it asked, tells you the outcome when malac finishes, and passes on your spoken answers to approvals. The headset button in the apps,/talkin the terminal,malac voice talk, or malac: Talk in VS Code. Phones and browsers cancel the speaker's echo; in the terminal malac pauses the microphone while it speaks. - Voice settings in every app. Turn each feature on or off, and pick its model, voice and language. Every app writes the same
[voice]table;malac voiceshows what your providers offer andmalac voice setchanges it. malac finds suitable models in your providers' model lists by name;[models."p/m"] audio = "…"declares one whose name does not say. See docs/voice.md. - Design guidance built in. A new default plugin,
design@malac, loads before any UI work. An existing product keeps its own design language: its tokens, components and screens. A new product gets the house style (clean, monochrome-first, one green accent) and a design built from its job rather than a template./design-reviewaudits a UI against its own design language and a polish checklist. The browser tools gainbrowser_emulate, which sets a tab's viewport and light or dark mode, so the agent checks its work at desktop, tablet and phone widths in both themes. - VS Code: malac next to Chat, in the title bar and the status bar. A malac tab in the right-hand Chat panel, a button next to the editor tabs (Alt-click opens a chat in a new editor tab), and a status bar item next to Claude Code's.
- Android: Tailscale addresses explain themselves. When the phone cannot reach a
.ts.netor 100.x address, the app says the phone needs Tailscale on the same tailnet (and to check Private DNS) instead of "unable to resolve host".
Fixed
- Responses cut off at the output limit carry on. A model that spent its whole output on thinking used to end the turn with an empty answer. malac now asks it to continue (at most three times) and to start writing. At the step limit the agent now gets a final turn to report instead of stopping silently.
- A tab opened at your home folder no longer reads
~/.malac/config.tomlas a project's settings.
Setting up voice
Voice needs an OpenAI-style provider with audio models: OpenAI itself, or a gateway such as LiteLLM in front of it. Each feature appears once a suitable model is available. Some gateways want a provider-prefixed name for Realtime models (openai/gpt-realtime). A setup that works through LiteLLM:
[voice]
dictation_model = "lora/gpt-4o-mini-transcribe"
speech = true
speech_model = "lora/gpt-4o-mini-tts"
speech_voice = "coral"
talk_model = "lora/openai/gpt-realtime"
talk_voice = "marin"Downloads
| File | For |
|---|---|
malac-1.2.0-macos.pkg |
macOS installer, Apple Silicon and Intel |
malac-1.2.0-aarch64-apple-darwin.tar.gz |
macOS on Apple Silicon |
malac-1.2.0-x86_64-apple-darwin.tar.gz |
macOS on Intel |
malac-1.2.0-x86_64-unknown-linux-gnu.tar.gz |
Linux x86_64 |
malac-vscode-1.2.0.vsix |
VS Code, Cursor, Windsurf, VSCodium |
malac-1.2.0-android.apk |
Android 8 and later, signed; installs over 1.1.x |
SHA256SUMS |
Checksums (shasum -a 256 -c SHA256SUMS) |
Or run curl -fsSL https://raw.githubusercontent.com/lobirus/malac/main/install.sh | sh, or brew install lobirus/malac/malac. The .pkg is not signed yet; if macOS blocks it, right-click it and choose Open.