Everything Mandara’s interface can do is also a documented command, for scripts, keybinds and AI agents. The catalog is generated from the running code, so it is always complete:
mandara commands # every command, its arguments and examples
mandara commands --json # the same, machine-readable
mandara msg <command> [args] # run one against the running shell
mandara msg --json <command> [args] # reply as JSON ({"ok": …, "data": …})
The lists below are a guided tour, grouped by area. Words after # are the
command’s siblings and arguments.
mandara update # check: "Mandara 0.2.0 is available … smart update: 7.2 MB instead of 42 MB", then what's in it
mandara update apply # binary patch first, full download as the fallback; restarts the shell
mandara update apply --full # skip the patch
mandara update apply --dry-run # what would be downloaded
mandara update rollback # put the previous binary (mandara.old) back
mandara update check --json # machine-readable
mandara update plugins # marketplace plugins with a newer release
mandara update plugins apply [ID] [--full] [--dry-run] [--force] # --force: a release that fails the compliance check
mandara update plugins rollback ID
Studio → About → Update now does the same with one button. Either way, only
releases signed by Mandara’s release key are installed: a release whose
SHA256SUMS.sig is missing or wrong is refused.
Every release comes with notes in plain words (CHANGELOG.md, compiled into
the binary). Studio → About → What’s new shows the same.
mandara changelog # this version's notes
mandara changelog 0.1.1 # one release
mandara changelog --since 0.1.0 # everything newer than 0.1.0, up to this version
mandara changelog --all # every release, newest first
mandara changelog --markdown # as written in CHANGELOG.md
mandara changelog --json # machine-readable
Only installs Mandara made itself are replaced (mandara install’s
~/.local/bin/mandara or a --prefix you can write to). A package-managed
binary reports “Installed with pacman — update through your package
manager”; a cargo build (target/…/mandara) needs --force-dev. Offline
mode blocks every update request.
mandara msg launcher toggle
mandara msg shell state # what is open (panel, sidebar, launcher, menus) and whether the launcher opens on hover
mandara msg hotcorners status # each corner's action and state per display, recent fires; hotcorners trigger top-left
mandara msg panel open media
mandara msg panel capture media # copy a visible docked or floating panel as PNG
mandara msg theme set mandara-corniche # theme list, current, next, mode toggle, wallpaper, seeds, export
mandara msg theme mode toggle
mandara msg look apply corniche-dusk # look list; look restore brings back your own setup
mandara msg bar position left # top|bottom|left|right (left/right = the side bar)
mandara msg bar layout hairline # edge-frame|glass-pills|island|hairline|micro|notch|next
mandara msg bar style expressive # expressive|tile-dock|rail|segmented|system-monitor|stanley-bridge|pharos-beam|raml-tram: a style preset's look (your items stay); none puts back the plain bar
mandara msg bar hide # put the bar away and free its space until bar show (bar toggle flips it; not saved)
mandara msg side-bars on # the left and right side bars of plugin chips: on|off|toggle; side-bars status
mandara msg side-bars join off # one frame with the top bar, or floating apart: on|off|toggle
mandara msg side-bar pin right off # pinned (reserves space) or sliding away until the pointer touches the edge
mandara msg side-bar show left off # show or hide one side: on|off|toggle
mandara msg side-bar style right tile-dock # one side bar's own item look: expressive|tile-dock|rail|segmented|none
mandara msg desktop edit # move, resize, add and remove desktop widgets on the desktop (off|toggle)
mandara msg desktop widgets hide # show|hide|toggle every desktop widget at once
mandara msg desktop widgets press todo-1 todo:3 # what a click on a widget does: todo:<id>, toggle:<wifi|dnd|…>, pomodoro, media:<play-pause|next|previous>, level:volume:0.4, step:brightness:1, copy:<text>, open:<path|url>, launch:<app>, next, refresh, panel:<id>, search, studio:<page>, read:<jannah|quran|hadith>:<ref>
mandara msg desktop widgets press todo-1 todo-edit:3 # edit task 3 at this visible widget; todo-add starts a new task
mandara msg desktop widgets press note-1 note # edit the note directly on its visible desktop widget
mandara msg diagnostics frames # frame build times, plus what the desktop widgets cost (desktop_ms, desktop_live_ms)
mandara msg desktop menu DP-1 800 500 # the desktop's right-click menu at a point (logical px)
mandara msg wallpaper picker toggle # wallpaper set|next|random|list|current
mandara msg wallpaper slideshow on # off|toggle|<interval: 45, 30m, 2h, 1d>
mandara msg wallpaper slideshow status # settings, wallpapers in rotation, next_in_seconds, paused (fullscreen|battery|locked|hours)
mandara msg wallpaper slideshow next # previous; interval 2h; order shuffle|random|alphabetical|newest
mandara msg wallpaper slideshow source folder ~/Pictures/Favourites # source wallpapers|folder <dir>|playlist
mandara msg wallpaper slideshow playlist add ~/Pictures/Wallpapers/dunes.jpg # playlist list|add|remove|clear
mandara msg wallpaper slideshow folder dark ~/Pictures/Night # a folder for the light or dark theme (clear to remove)
mandara msg wallpaper slideshow hours 08:00-22:00 # only change between two times (off: always)
mandara msg wallpaper slideshow transition grow 1500 # desktop|fade|wipe|grow|none [ms]
mandara msg wallpaper slideshow option per-display on # on-start|pause-fullscreen|pause-battery|pause-locked|subfolders|per-display on|off|toggle
mandara msg wallpaper output DP-1 ~/Pictures/side.jpg # per-display wallpaper (clear to remove)
mandara msg wallpaper set ~/Pictures/Wallpapers/tide.webm # AV1 video wallpapers (.webm, .mkv, .ivf) loop on the desktop
mandara msg wallpaper render-preview /tmp/desktop.png 3840x2160@1.5 # the desktop canvas offscreen (same painters as the live one)
mandara msg depth status # depth effect: mode (hand-tuned | model), current mask, model install, last model run
mandara msg depth download # the depth model (27 MB, checksum-verified) for the model mode
mandara msg depth regenerate # find the current wallpaper's subject again with the chosen mode
mandara msg depth place-clock # move the clock to where the subject rises into it
mandara msg language set ar # language list
mandara msg plugins reload # plugins list|enable|disable|remove|restore <id>
mandara msg plugins remove prayer-times # built-ins: off + out of bar/sidebar until `plugins restore` (core plugins refuse)
mandara msg plugins enable wallhaven # opt-in built-ins: wallhaven, cursors, dock, notes, todo, pomodoro, … ([plugins](/mandara/docs/plugins.html): "ship switched off")
mandara msg config set /integrations/gtk4 true # theme an app (all off by default); false takes Mandara's changes back
mandara msg plugins vet ./my-plugin # the marketplace's compliance check: {"ok":true} or {"ok":false,"class":"broken|malicious|placeholder","reason":…}
mandara msg config get /bar/height # config set /bar/height 30, show, reload, export, import, reset
mandara msg studio displays # open Studio on a page (docs/studio.md)
mandara msg studio bars/sidebar # Bars → Sidebar tab and widget editor
mandara msg studio bars/side-bars # Bars → Side bars layout and settings
The Bars page also accepts bars/bar, bars/panels and bars/edges.
mandara studio bars --tab sidebar opens the same tab from the CLI.
The former bar and sidebar Studio targets remain aliases. Config
commands still use their original paths, such as /bar/height and
/sidebar/width; config reset bar continues to reset only [bar].
shell state reports desktop_editor_ready: null when no desktop text
editor is open, false while it awaits keyboard focus, and true when it can
receive keys. Automation should wait for true before typing into an editor.
Tabs are named by their name (one word), id or 1-based position; the
built-in Notifications tab is notifications.
mandara msg sidebar tab list # tabs, their widgets, notifications_tab, always_first_tab
mandara msg sidebar tab add Focus --icon timer # rest of the line is the name
mandara msg sidebar tab rename 2 Deep work
mandara msg sidebar tab icon Focus leaf # a Mandara or icon-theme icon name
mandara msg sidebar tab move Focus 1 # 1 = first
mandara msg sidebar tab remove Focus # the last tab stays
mandara msg sidebar tab widget add Focus pomodoro 1 # any plugin with a sidebar card; turns it on
mandara msg sidebar tab widget remove Overview weather
mandara msg sidebar tab widget move media Overview Focus 1 # <plugin> <from> <to> [position]
mandara msg sidebar tab open notifications # opens the sidebar on that tab
Every task belongs to a list; the Inbox (id 0) can be renamed but not
deleted. A leading #List files a task there and creates the list when
no list matches (matching ignores case, spaces and dashes, so #side-project
finds “Side project”). The launcher’s /todo #Work send the report and
/note #Recipes koshary use the same rule.
mandara msg todo list [Work] # tasks (every list, or one) with list ids and names
mandara msg todo add #Work send the report # without #List: the shown list, else the default list
mandara msg todo done 12 # undo, remove, clear-done [list]
mandara msg todo move 12 Inbox
mandara msg todo lists # lists with open / done counts and what the card shows
mandara msg todo lists add Side project --color hue:160 --icon folder
mandara msg todo lists rename 0 Later # color <list> <tone|hue:deg>, move <list> <position>
mandara msg todo lists remove Work # tasks move to the Inbox; `… Work delete` deletes them
mandara msg todo lists show Work # the card and panel show one list (or `all`)
mandara msg notes list [Recipes] # notes with topic, file path and edit time
mandara msg notes add #Recipes Koshary for six # Markdown; without #Topic: the shown topic, else the default
mandara msg notes show 7 # full Markdown text; append <id> <line>, delete <id>
mandara msg notes search koshary # fuzzy over every title and text
mandara msg notes move 7 Work
mandara msg notes topics # topics with folders and counts, the notes root
mandara msg notes topics add Recipes --color warning # rename (renames the folder), color, move, show
mandara msg notes topics remove Old [delete] # notes move to the default topic unless `delete`
mandara msg notes export Recipes ~/Documents/recipes # or `all`; writes .md files
Task and notes commands wait for their disk writes before reporting success. Notes operations run in order, so an append sees earlier pending changes and a failed save is reported to the caller. Rapid task changes share the latest JSON save; a failed write can be retried without dropping the in-memory edits.
mandara msg launcher pin firefox # unpin|hide|unhide|rename|icon <app>; launcher usage list|reset; launcher emoji <words>
mandara msg launcher placement top-left # center|top-*|bottom-* (left/center/right); no argument reports it; re-places an open launcher live
mandara msg launcher look grid # classic|grid|beacon: a ready-made look (no argument reports it); launcher looks lists them (JSON)
mandara msg dock on # off|show (reveals a hidden dock for 3 s); dock status (works while off)
mandara msg dock pin firefox # unpin|toggle-pin <app> (desktop id or name; pin also fuzzy-matches)
mandara msg dock move firefox 0 # reorder a pinned app (0 = first)
mandara msg dock add # the searchable app picker over the dock
mandara msg dock stack add ~/Documents # stack list|remove <folder|index>
mandara msg dock stack open Downloads # open a stack's fan / grid by name, path or index; dock stack close
mandara msg dock applications open # the Applications folder's app grid; close|toggle
mandara msg dock trash # item count; dock trash empty --yes (deletes for good)
mandara msg switcher next # prev|open|commit|cancel|demo|status|bind (Alt+Tab)
mandara msg window list # window focus|close|minimize|maximize|fullscreen <id>, window active
mandara msg screentime today # week, app <id>, reset today|all, track on|off
mandara msg clipboard pin <id> # unpin, list, copy, delete, clear [all], record on|off, edit <id>
mandara msg clipboard kinds # entries per kind; clipboard kind <text|link|markdown|code|css|color|image|files> [words]
mandara msg clipboard search rust # entries matching every word (text, kind, language, site, app, collection)
mandara msg clipboard collections # your collections with counts; collection show <name|id> [words]
mandara msg clipboard collection create Palette # collection rename <name|id> <new name>, delete <name|id>
mandara msg clipboard collection add Palette <id> # collection remove <name|id> <id>
mandara msg clipboard view color # the panel's filter: all, pinned, a kind or a collection, plus optional search words
In the clipboard panel, Tab moves from search to the filtered results. Use ↑/↓ to select and Enter to copy or paste according to the panel’s click action. Search editing and collection-name entry keep their own keyboard input.
mandara msg notifications dnd on 45m # status, list, send [--low|--critical], reply <id> <text>, rules list|add|remove
mandara msg osd volume # osd show <title> [--icon x] [--level 0-100] [--on|--off] [text], osd kinds
mandara msg sounds preview screenshot # play <event>, status, themes, enable on|off
mandara msg audio output next # audio devices, volume up|down|set, mute, mic mute, streams, stream volume
mandara msg audio mute-all toggle # on|off|toggle|status: every output and app; off restores your own mutes
mandara msg privacy status # who uses the microphone, camera or screen
mandara msg tray menu "Input Method" # tray status|activate|secondary|scroll
mandara msg soundscapes preset corniche-night # play|pause|toggle|status, volume <layer|master> <0-100>, sleep <min|off>
mandara msg radio play fip-jazz # play [station], pause|toggle|stop|next|previous|status, volume <0-100>, mute, sleep <min|off>
mandara msg radio stations jazz # list (a shelf); favourite <station>, add <url> [name], remove <station>
mandara msg display list # set <output> mode|scale|transform|position|vrr|enabled <value>, confirm, revert
mandara msg display profile save Desk # profile list|apply|delete <name>; persist / unpersist to the compositor drop-in
mandara msg display brightness all 60 # DDC/CI external monitors; display brightness status
mandara msg brightness up 10 # down, set, status (laptop backlight through logind)
mandara msg nightlight toggle # on|off|auto, status, temperature <K>, schedule sun|fixed|always, preview <K> [s]
nightlight status lists the screens it warms (outputs), the ones that
refused (held_by_another_app), the night-light apps it found running
(held_by) and, if its connection dropped, error.
mandara msg power profile balanced # power status, cycle, battery, history, charge-limit on|off
mandara msg power alerts # power alert-test low|critical
mandara msg idle status # idle enable on|off, keep-awake [minutes|0], fade-preview
mandara msg session entries # boot-entries, reboot-to <entry|firmware> confirm, do <action> [confirm], menu
mandara msg hooks list # hooks status, test <event>
mandara msg lock # lock now (--demo previews, --stop-demo closes it)
mandara msg polkit status # is the polkit agent registered? (polkit demo previews the dialog)
mandara msg keyring-prompt status # does Mandara answer gnome-keyring's unlock prompts? (close cancels one)
mandara msg keyring-prompt demo # preview the unlock dialog: demo unlock|create|confirm (no D-Bus; "wrong" is rejected once)
mandara msg keepassxc unlock # Mandara's KeePassXC unlock dialog (picks the last active / a locked database)
mandara msg keepassxc unlock Passwords # …for one database: its name, file name or path
mandara msg keepassxc lock # lock every open KeePassXC database
mandara msg keepassxc status # installed / running / databases and whether they're locked (JSON)
mandara greeter keyring-unlock # GNOME Keyring + KWallet at login: status and plan (sudo … --apply / --remove)
The KeePassXC dialog (also in quick settings and the launcher when KeePassXC
is installed) lists the databases KeePassXC remembers (keepassxc.ini:
LastOpenedDatabases, LastDatabases, the remembered key files), takes the
password and an optional key file (portal file chooser), and calls KeePassXC’s
org.keepassxc.KeePassXC.MainWindow.openDatabase on the session bus. KeePassXC
reports no failure there, so Mandara re-checks: with KeePassXC’s Secret Service
integration on it reads its collections’ Locked property and says when the
database is still locked; without it the result can’t be confirmed (KeePassXC
shows its own unlock screen if it failed). Databases opened with a hardware key
(YubiKey challenge-response) can’t be unlocked this way: the dialog offers
KeePassXC’s own window. Security: the password travels to KeePassXC in
clear text on the session bus — only programs running as you can read it, but
unlike gnome-keyring’s prompts it isn’t encrypted. Mandara wipes its own copy
right after the call. Studio → General → Keyrings & passwords turns the dialog
off (general.keepassxc_prompt) or has it ask once after login when KeePassXC
runs with a locked database (general.keepassxc_ask_at_login).
These run directly (not through msg); see login-manager.md.
mandara greeter list # the active login screen and every choice (Mandara Login is the default)
mandara greeter use tuigreet --dry-run # use <name> [--apply] [--install] [--compositor cage|niri|hyprland]; needs sudo to switch; --install first adds what it lacks (greeter, greetd, cage) with your package manager
sudo mandara greeter restore latest # undo a switch from its backup (--apply: the display manager too)
sudo mandara greeter keyring-unlock --apply # unlock GNOME Keyring / KWallet at a password login (--remove undoes it)
sudo mandara greeter power-rule --apply # FreeBSD: the login screen's power buttons through ConsoleKit2, a polkit rule for greetd's user alone (--remove undoes it)
mandara greeter --demo # preview Mandara Login; install, apply-config, uninstall
mandara msg network vpn up Office # vpn list|down|import <file> [name]|remove; hotspot start|stop|status|share
mandara msg network saved list # saved forget|autoconnect|priority
mandara msg network ipv4 set Home manual 192.168.1.20/24 192.168.1.1 1.1.1.1 # ipv4 show <name>; network devices
mandara msg network wifi scan # wifi list|connect|disconnect|power|hidden <ssid>
mandara msg bluetooth pair "WH-1000XM5" # trust on|off, rename, forget, adapter hci1, auto-connect on, pairing-demo confirm
mandara msg net-speed status # addresses, public-ip, test [MB]
mandara msg processes kill 4242 # processes list
mandara msg drives list # mount|unmount|eject|unlock|lock|open <device>
mandara msg containers list # start|stop|restart|pause|unpause|logs <name>, stats
mandara msg services failed # list|status|logs|start|stop|restart|enable|disable <unit> [--user]
mandara msg updates check # list, sources, news, run [source]
mandara msg uptime status # check: run every check now
mandara msg tailscale status # up, down, exit-node <peer|none>
mandara msg crashes list # info <pid>, seen
Scripts, builds and AI agents can show their progress in the bar with the Task progress plugin:
mandara msg progress start build Building the release
mandara msg progress set build 40% # or 3/10; an optional new label after it
mandara msg progress done build "All green" # fail build "3 tests failed"; remove <id>; list; clear
mandara msg ports list # kill <port>
mandara msg git list # fetch <repo>, refresh
mandara msg ci status # refresh
mandara msg ai loaded # models, load <model>, unload <model|all>
mandara msg keybinds toggle # show, hide, list (every shortcut as JSON)
mandara msg breaks status # now [short|long], skip, snooze [minutes], pause [minutes], resume
mandara msg presentation toggle # on, off, status
mandara msg share clipboard # text <text>, file <path>, screenshot, stop, status
mandara msg jannah today # the reminder on screen; next (a fresh one), prev (the one before), peek [n], show <ref>, search <query>, paths, step [done|peek [days]], saved, language [code|follow]
mandara msg quran open # open the panel without a verse reference
mandara msg jannah open # open the panel without a hadith reference
mandara msg quran read 2:255 # surahs, today, peek [days], search <q>, play <ref|surah>, pause, resume, stop, bookmark add|remove <ref>, download, status, remove, language [code|follow]
mandara msg hadith show bukhari 1 # collections, download|remove <collection|all>, today, peek [n], search <q> [--collection c] [--grade g], bookmarks, language [code|follow]
mandara msg quran copy-image 2:255 # full ayah design; meaning follows Study mode
mandara msg hadith copy-image bukhari 1 # full hadith design; shown chain/meaning follow settings
mandara msg jannah copy-image 89:30 # full reminder design with reference
mandara msg prayer peek 1 # today, next, peek [days], language [code|follow], adhan [stop|play|download|remove]
mandara msg compositor status # detected compositor, drop-in, include line
mandara msg compositor sync # regenerate the drop-in (checked, rolled back if the compositor rejects it) and reload
mandara msg compositor install-include [mango|niri|hyprland|umbriel|sway] # river: prints the line to add to init
mandara msg --json compositor check # Config doctor: the compositor's own checker on your config; each problem with id, file, line, kind, owner, explanation and fixes
mandara msg compositor fix 1a2b3c4d comment # comment | remove (your files) | regenerate (Mandara's drop-in); backed up, re-checked, rolled back if worse
mandara msg compositor snooze # no reminders about the current problems until the config or the compositor changes
mandara msg compositor reload # clients, monitors, dispatch <command> [args]
Without a running shell (a session that won’t start, a TTY), the same check and fixes work from the terminal:
mandara setup --check # the Config doctor's report and conflicts, nothing changed; exit 10 = conflicts, 11 = errors
mandara setup --fix 1a2b3c4d=comment # ID=comment|remove|regenerate, repeatable
mandara setup --restore ~/.local/share/mandara/doctor-backups/<backup> # undo a fix
mandara msg screenshot region
mandara msg screenshot region --delay 3 # count down first (Esc cancels); --delay alone uses the Countdown setting
mandara msg screenshot screen --delay=5 # window / screen capture directly after the countdown
mandara msg screenshot all # every display in one image, in monitor-layout order
mandara msg record start # the default source (Studio → Plugins → Screenshot); the countdown setting applies
mandara msg record start window # start screen|region|window; record screen DP-2 picks a display
mandara msg record toggle # stop a recording (or a countdown), else start one: bind it to a key
mandara msg record pause-toggle # pause | resume | pause-toggle (GPU Screen Recorder and the built-in encoder)
mandara msg record mic off # mute the recorded microphone (on | off | toggle); unmuted again at the end
mandara msg record stop # replies once the file is saved
mandara msg --json record status # recording, paused, countdown, elapsed, path, backend, settings in use
mandara msg --json record backends # installed recorders and what each supports
mandara msg --json record recent # the last recordings: path, length, size
mandara msg ocr ~/Pictures/shot.png arabic
mandara msg color-picker pick # replies with the picked color; show|select <#hex>, history, clear
The wallpaper-generator plugin (opt-in: plugins enable wallpaper-generator).
Replies are JSON with paths, sizes in bytes and times in seconds. A
generate that takes longer than about 12 s answers {"status":
"running", "id": …} and keeps going; wallgen status has the result.
mandara msg wallgen generate # the current recipe at the configured size and format
mandara msg wallgen generate random --apply # random|variation|reseed|recipe|<style>; --apply / --no-apply
mandara msg wallgen generate aurora --size 8k --format png --palette nord --seed 0x2a --light # lossless (default: the smaller of WebP and PNG)|webp|png|jpeg
mandara msg wallgen generate --size 3440x1440 --palette '#101820,#2aa3a8,#e9c98b' # WxH or display|1080p|1440p|4k|5k|8k|uw1440|portrait4k; theme = live colors
mandara msg wallgen generate --video --seconds 8 --fps 24 --detach # a seamless AV1 loop; --detach replies at once with the job id
mandara msg wallgen status # running job (progress, seconds), the last result, the schedule and its next run
mandara msg wallgen cancel
mandara msg wallgen list 20 # generated files in the output folder, newest first (style, seed, palette, bytes)
mandara msg wallgen remix ~/Pictures/Wallpapers/Generated/aurora-1a2b3c-3840x2160.webp # its recipe becomes the current one
mandara msg wallgen recipe show # recipe set style=dunes palette=desert vignette=40 | set '<TOML recipe>', random [style], variation [0–1]
mandara msg wallgen styles # every style with its parameters (key, range, step, default, unit); wallgen palettes
mandara msg wallgen schedule on --every 6h --mode variation --keep 30 # off, status; --video|--still, --apply|--no-apply
mandara msg apps default set browser firefox # apps defaults, autostart list|enable|disable|add|remove, preferred
mandara msg apps installed # every app with its source (pacman, apt, dnf, flatpak, snap, appimage, nix, mandara, local…)
mandara msg apps installed --by-mandara # what the app installer installed, with every file it wrote (registry.toml)
mandara msg apps install ~/Downloads/Obsidian-1.6.7.AppImage # [--yes] skip the on-screen card, [--no-path-shim], [--dry-run] print the plan
mandara msg apps jobs # installer jobs: phase (inspect/confirm/install/integrate/done/failed/cancelled), progress 0..1, outcome
mandara msg apps jobs cancel 3 # stop a job (rootless installs roll back)
mandara msg apps owner firefox # who installed it, the exact removal command, what else goes, leftovers (changes nothing)
mandara msg apps uninstall org.gimp.GIMP --dry-run # [--purge-data] leftovers to the Trash, [--confirm-default] for a default app
mandara msg profile save look Night # profile list|apply|delete; config export <file> [changes] [redact], import, reset <section>
mandara msg profile save bar Desk # only bar and side-bar settings; keep the theme and desktop widgets
mandara msg cursor list # the cursor catalog: variants, licence, stars, installed / by Mandara / active, other installed themes
mandara msg cursor install bibata/ice # download the pinned GitHub release, verify SHA-256, install to ~/.local/share/icons
mandara msg cursor apply bibata/ice 32 # theme (catalog id[/variant] or XCursor name) and optional size, live; `none` = your compositor's
mandara msg cursor remove bibata # every variant Mandara installed (or one: bibata/ice); never a package's or your own
mandara msg calendar add webcal://example.com/holidays.ics Holidays # calendar [days], sources, remove <n>, refresh
mandara msg calendar open # open the shell calendar without a calendar source
mandara msg calendar goto 2026-12 # open the clock panel's calendar there: today, next, prev, +N / -N days, YYYY-MM, YYYY-MM-DD
mandara msg calendar day 2026-12-25 # one day as JSON: its events, ISO week, day of the year and Hijri date
mandara msg location locate # geoclue|ip; location search <city>, geocode, set <lat> <lon> [name]
mandara msg time # time zone, network time, and your location's time zone (suggested_timezone when they differ)
mandara msg time zone Africa/Cairo # set the system time zone (asks for your password); time zones [word] lists them
mandara msg time auto on # set the clock from internet time servers (on / off / toggle; asks for your password)
mandara msg world-clock add Mecca # list, remove, search <query>, at <HH:MM>
mandara msg authenticator code github # list, copy, add <otpauth://…>, remove <id>, scan, demo on|off
The cursor commands belong to the opt-in Cursor themes plugin
(mandara msg plugins enable cursors); while it is off they answer that the
plugin is off and change nothing, and Mandara writes no cursor setting at
all. cursor install fetches only from the theme’s own GitHub repository, keeps
the file only when its size and SHA-256 match the catalog, unpacks it with
pure-Rust readers that refuse paths leaving the folder, and installs just the
theme folder; it never runs anything from the archive. cursor apply checks
the theme is installed, then writes the compositor drop-in and reloads it
(Hyprland also gets setcursor) and points ~/.icons/default at it when
that file is Mandara’s. Removing the active theme returns to your
compositor’s cursor.
apps uninstall uses the app’s own package manager, detected at runtime:
system packages run pkexec <manager> … (polkit asks for your password;
protected packages such as the shell, compositor and portals are refused),
Flatpak / Nix user installs need no password, AppImages and local entries
move to the Trash. Leftovers in your home folder are only touched with
--purge-data, and only ever moved to the Trash. MANDARA_UNINSTALL_DRY_RUN=1
in the shell’s environment forces a dry run.
apps install (the App installer plugin) detects each file’s format by
its magic bytes and never runs it: AppImage (read through its embedded
squashfs) and portable archives (.tar.gz/.tar.xz/.tar.zst/.zip,
unpacked with path-traversal, link and size checks) install rootless into
~/.local/share/mandara/apps/<id>/ with a desktop entry
(~/.local/share/applications/mandara-<id>.desktop), an icon in
~/.local/share/icons/hicolor and an optional ~/.local/bin/<name> command
(never replacing an existing file); Flatpak bundles / .flatpakref run
flatpak install --user --noninteractive; native packages (.deb,
.rpm, .pkg.tar.zst, .apk, .xbps) go only through the system’s own
package manager via pkexec, after its simulation, and a package for another
distribution is refused with an explanation (no conversion, no containers).
Without --yes the confirmation card appears on screen and the command
returns the queued job ids at once (follow them with apps jobs). A
duplicate (same app id) offers Update / Keep both. Relative paths are made
absolute by mandara msg. MANDARA_INSTALL_DRY_RUN=1 in the shell’s
environment forces dry runs.
Enable these in Studio → Plugins and configure each plugin’s Settings first. Requests wait for service work to finish, then return one result or error. The UI stays responsive while the request runs.
mandara msg translate languages
mandara msg translate text ar Good morning
mandara msg feeds list
mandara msg feeds subscribe blog.rust-lang.org News
mandara msg feeds discover example.org
mandara msg feeds refresh
mandara msg feeds refresh https://example.org/feed.xml
mandara msg feeds items https://example.org/feed.xml
mandara msg feeds read https://example.org/feed.xml https://example.org/post
mandara msg feeds save https://example.org/feed.xml https://example.org/post
mandara msg feeds read-all
mandara msg feeds import ~/Downloads/subscriptions.opml
mandara msg feeds export ~/feeds.opml
mandara msg reddit open r/linux
mandara msg reddit posts linux top week
mandara msg reddit thread https://www.reddit.com/r/linux/comments/abc123/
mandara msg reddit subscribe r/rust
mandara msg reddit status
mandara msg phone devices
mandara msg phone action DEVICE_ID ring
mandara msg phone send DEVICE_ID Hello from my desktop
mandara msg home states
mandara msg home action light.desk toggle
mandara msg home action scene.evening activate
The translation provider and home server keys are saved through Studio in your desktop keyring. Setup and behaviour.
agent status reports active inference requests and installed model artifacts.
After installing the models, agent prepare builds the semantic command index.
agent preview <request> returns retrieved candidates and a compiled JSON
preview without running its actions. agent purge cancels the shell’s active
requests. See Local shell commands.