Review of "Command Hold" version 0.2 (1)

Details Page Preview

Hold a key and say what to do. Offline voice commands for GNOME. Hold the shortcut (Super+C by default), speak, release: "open Firefox", "volume 50", "dark mode", "next workspace", "lock the screen", "screenshot", "Wi-Fi off"… run at once. Anything else ("clone the repo owner slash name", "update the system", "what is using my memory") becomes a shell command that you see and confirm before it runs in a visible terminal; the pill then reports done or failed. Everything runs on your computer: speech recognition by the Voice Hold engine (French, English and 23 other languages), GNOME actions by rules, open requests by a small local LLM through Ollama (optional). No account, no cloud. Requires the separate command-hold-engine helper (Python, GPL, one command to install) and the Voice Hold engine; nothing works without them. The settings page shows the install commands, with a button that copies them to the clipboard, and the engine status. Wayland only.

Extension Homepage
https://github.com/d101c/command-hold

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental)

Shexli did not find any issues.

All Versions

Version Status
0.2 (1) Unreviewed

Previous Reviews on this Version

jg__ posted a review
Author note (first submission). Command Hold is the third of the "Hold" family (Accent Hold #10265, Voice Hold #11610): hold Super+C, say what to do, release. Architecture, for the reviewer: - Speech recognition comes from the Voice Hold engine over the session bus (org.griffit.VoiceHold); command interpretation from a second helper, command-hold-engine (Python, GPL-2.0-or-later, same repository), over org.griffit.CommandHold (D-Bus activation). The extension never spawns a process: no Gio.Subprocess / GLib.spawn anywhere in the extension zip (grep-able). Shell commands are run by the helper in a visible terminal, and only after the user confirmed them in a ModalDialog (confirmDialog.js: Enter runs, Escape cancels; the exact command is shown). - GNOME actions are done in-process with public APIs: Gio.DesktopAppInfo (launch apps), Gvc.MixerControl (volume), org.gnome.SettingsDaemon.Power brightness, org.gnome.desktop.interface color-scheme and notifications show-banners via Gio.Settings, NM and GnomeBluetooth, workspace manager, Shell.Screenshot, Main.screenShield.lock and SystemActions. Nothing is written outside GSettings. - Preferences: an "Installation" page (setup.js / setupPage.js) downloads the two helpers, the speech models and optionally an Ollama bundle with libsoup 3, verifies each file against a SHA-256 published in a manifest (https://github.com/d101c/hold-setup/blob/master/manifest.json), extracts with libgnome-autoar into ~/.local/share/hold, and writes the user D-Bus service files. This runs in the prefs (GTK) process only. The Copy buttons write install commands to the clipboard, as declared in the description. - Same keyHook.js / hud.js as Voice Hold: IBus.InputContext.prototype.process_key_event_async is wrapped only while a hands-free session runs and restored only if the wrapper is still its own; hud.js reads Main.inputMethod._cursorRect with a pointer fallback. Tests: gjs cases for dispatch/holdMachine/keyHook, 150 pytest cases for the engine. I used AI assistance to write and review this code and can explain every line.