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).
About the plugin that serves it
Section titled “About the plugin that serves it”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.