luvus
Control Luvus through its local CLI and UHP. Use only for a line beginning with `=target message`, an explicit request naming…
Write a luvus module (an extension for luvus, mission control for your AI coding agents). Use when the user is building or debugging a luvus module: authoring luvus-module.toml, adding a sidebar dock, Luvus Bar widget, right-click action, event hook, module pane, module
$ npx -y skills add rizriyz/luvus --skill luvus-module --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/luvus-moduleContext preview
The summary Claude sees to decide when to auto-load this skill.
Write a luvus module (an extension for luvus, mission control for your AI coding agents). Use when the user is building or debugging a luvus module: authoring luvus-module.toml, adding a sidebar dock, Luvus Bar widget, right-click action, event hook, module pane, module
name: luvus-module description: >- Write a luvus module (an extension for luvus, mission control for your AI coding agents). Use when the user is building or debugging a luvus module: authoring luvus-module.toml, adding a sidebar dock, Luvus Bar widget, right-click action, event hook, module pane, module settings, or calling luvus back over its UHP.
A **luvus module** is a plugin for luvus, mission control for your AI coding agents. There is **no SDK and no scripting engine**: a module is a directory with a `luvus-module.toml` manifest that declares **argv commands** (any executable: `sh`, `python`, `node`, a compiled binary). luvus runs those commands as subprocesses with `LUVUS_*` context in the environment, and the command calls luvus back through the same UHP the `luvus` CLI uses. So a module in bash/python/node can do what a built-in feature does.
Reference material in this repo (read for depth): `MODULE-GUIDE.md`, `docs/13-modules.md`, and the worked modules in `examples/modules/` (`branch-dock` = a sidebar dock, `agent-ping` = an event hook, `scratch-pane` = a pane).
Top-level keys (all required unless noted):
id = "yourname.my-module" # unique, reverse-dns style name = "My Module" version = "0.1.0" min_luvus_version = "0.8.3" # oldest luvus this needs description = "One line." # optional platforms = ["macos", "linux"] # optional; omit = all. Also per-item.
Then any of these tables, each declaring an argv `command` (a list, run as-is, cwd = the module dir):
A worktree provider reads one versioned JSON request from stdin. Creation gets `version`, `operation`, `repository`, `branch`, and `branch_exists`, and must print only `{"path":"/absolute/worktree/path"}` on stdout. Removal gets `version`, `operation`, `repository`, `path`, `branch`, and `force`; it must print nothing, exit successfully, and unregister and remove the target. If a provider violates its exit or stdout contract after deletion already completed, Luvus reconciles the proven Git/filesystem state instead of retaining a stale workspace; stdout remains unsupported. Human logs go to stderr. This command is synchronous and must not call back into the Luvus CLI/API while the server waits. Luvus verifies the returned path is a registered worktree of the source repository on the exact requested branch before opening a workspace; explicit removal is verified before and after the command. Internal rollback and task merge remain Git-backed.
luvus puts context in the environment, flat, so a bash module never parses JSON:
Run the `luvus` CLI from inside the command; it talks to the running server over `$LUVUS_SOCKET_PATH`. Use `"$LUVUS_BIN_PATH"` to guarantee the same binary as the session. Module-facing meth