Skip to content

charly udev

Served by plugin-udev
Placement runtime (out-of-process over gRPC)
Version 2026.179.0000

udev is a command word served by the plugin-udev plugin candy. This plugin is not listed in charly/charly.yml’s compiled_plugins:. It is not part of the shipped binary: charly builds and loads it out-of-process over gRPC when a plan references one of its words (the coexist path).

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).

Run charly udev --help for the live flag grammar.