Skip to content

plugin-udev

Version 2026.179.0000
Repo superproject
Plugin yes — see the plugin reference

OUT-OF-TREE charly COMMAND-class plugin serving the externalized charly udev … CLI — the GPU-device udev-rule manager (generate / install / remove / status), a standalone Go module (go.mod + main.go) ported OUT of charly’s core (the deleted charly/udev.go + plugin_command_udev.go), so the GPU-detection + udev-rule-writing code no longer compiles into the core binary. The FIRST externalizable-command precedent in the core-externalization program: a PURE command-only plugin (no gRPC verb), so it mirrors candy/plugin-example-command, not the verb+command candy/plugin-mcp / candy/plugin-secrets.

charly’s loader fetches this candy’s repo, go-builds the provider binary on the HOST, and on charly udev <args…> syscall.Exec’s it in CLI mode (sdk.Main → cliMain) — or runs the host-installed /usr/lib/charly/plugins binary on a project-less host (the pkg/arch bake). The plugin owns real terminal stdio, so charly udev install / remove shell out to sudo tee / sudo udevadm and reach the real terminal natively.

command:udev is dispatched via the CLI syscall.Exec path, NOT the gRPC provider registry — so it is declared in plugin.providers (for the CLI-grammar prescan + baked .providers manifest) but advertises NO Describe capability. The R10 witness is the disposable check-udev-local bed: charly udev generate asserting the exact rule-file content + charly udev status exit 0, run host-side (GPU-less).

This candy’s plan: — the runnable spec charly check executes against a live deployment. check: steps are idempotent probes; run: steps change state.

Intent Step
check the out-of-tree command plugin ships a buildable Go module (go.mod + the provider main) the host can build + fork/exec; the full charly udev end-to-end is exercised by the Go e2e + the live R10 (check-udev-local)