check/skills/dbus/SKILL.md
D-Bus interaction inside containers via the declarative `dbus:` check verb, served out-of-process by `candy/plugin-dbus` (EXEC-based, `gdbus` over the executor reverse channel). MUST be invoked before any work involving: the `dbus:` check verb, desktop notifications, D-Bus method calls, service introspection, or session bus interaction.
npx skillsauth add overthinkos/overthink-plugins dbusInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The dbus: check verb sends desktop notifications, calls D-Bus methods, lists
services, and introspects objects on the venue's D-Bus session bus. It is
NOT a host charly check subcommand — it is a declarative check verb served
out-of-process by its plugin (candy/plugin-dbus), parallel to the
cdp:/vnc:/mcp:/record: plugin verbs. Author a dbus: step in a candy/box
plan and run it against a live deployment with
charly check live <image> --filter dbus.
Served out-of-process — no host CLI subcommand. dbus is EXEC-based: the host
dispatches the dbus: verb through the provider registry exactly like a built-in
(ResolveVerb("dbus") → the out-of-process gRPC provider → Provider.Invoke with
the full Op), and the plugin drives the venue's session bus with gdbus (from
glib2) over charly's live DeployExecutor reverse channel — there is no
pre-resolved endpoint and no in-container charly binary involved. Authoring is
unchanged from a built-in verb: you write dbus: notify, never plugin: dbus.
dbus: stepEach method is the declarative dbus: step you author: the method name
(list/call/introspect/notify) is the verb's YAML value, and method-specific fields
(dest:, path:, method:, args:, text:, description:) are siblings of the
verb line. Shared matchers (stdout:, stderr:, exit_status:) work like every
other verb. All dbus: steps are deploy-context only (they need a running
session bus), so author them with context: [deploy]. See /charly-check:check
for the full YAML shape. Example:
notifications-registered:
check: the notifications service is on the session bus
dbus: list
context: [deploy]
stdout:
contains: org.freedesktop.Notifications
| Action | Declarative step | Description |
|--------|------------------|-------------|
| Send notification | dbus: notify + text: (+ optional description:) | Desktop notification via the Notifications interface |
| Call method | dbus: call + dest: + path: + method: (+ optional args:) | Generic D-Bus method call |
| List services | dbus: list | List all registered session bus services |
| Introspect | dbus: introspect + dest: + path: | Introspect a service's interfaces and methods |
Run a candy's baked dbus: steps against a live deployment with
charly check live <image> --filter dbus.
Each method below is the declarative dbus: step you author; queries produce
assertable output (run them as check: steps), side-effect actions pass when they
exit 0 (run them as run: steps). All steps are deploy-context only.
notify-build-done:
check: a desktop notification is delivered
dbus: notify
context: [deploy]
text: Build Complete # notification summary
description: Image built successfully # notification body
Calls org.freedesktop.Notifications.Notify on the session bus; the notification
appears via the running notification daemon (swaync or mako).
notifications-capabilities:
check: the notifications service reports its capabilities
dbus: call
context: [deploy]
dest: org.freedesktop.Notifications
path: /org/freedesktop/Notifications
method: org.freedesktop.Notifications.GetCapabilities
# args: [...] # optional method arguments
Calls an arbitrary D-Bus method on the session bus and returns its reply.
list-services:
check: the session bus has the expected services registered
dbus: list
context: [deploy]
stdout:
contains: org.freedesktop.Notifications
Lists all registered services on the venue's session bus.
introspect-notifications:
check: the notifications object exposes the Notify method
dbus: introspect
context: [deploy]
dest: org.freedesktop.Notifications
path: /org/freedesktop/Notifications
stdout:
contains: Notify
Introspects a service object's interfaces, methods, signals, and properties.
dbus layer)gdbus must be present in the venue (from glib2 — the plugin drives it over
the reverse channel)swaync)charly start <image>)/charly-check:check -- parent router; the dbus: verb dispatches out-of-process via candy/plugin-dbus, and charly check live <image> --filter dbus runs a candy's baked steps./charly-internals:plugin -- the out-of-process provider model that serves dbus (the EXEC-based gdbus-over-reverse-channel plugin)./charly-check:cdp -- Chrome DevTools Protocol automation (sibling out-of-process verb served by candy/plugin-cdp)./charly-check:vnc -- VNC desktop automation (sibling out-of-process verb served by candy/plugin-vnc)./charly-check:wl -- Wayland desktop automation (sibling in-core host verb under charly check)./charly-core:cmd -- single command execution in running containers (its best-effort completion notification drives the session bus via gdbus from the host)./charly-core:shell -- interactive shell access/charly-infrastructure:dbus-layer -- D-Bus session bus layer configuration/charly-selkies:swaync -- notification daemon layertools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).