build/skills/settings/SKILL.md
Runtime configuration management for the charly CLI. MUST be invoked before any work involving: charly settings commands, runtime configuration, engine selection, bind address, storage paths, or secret backend configuration.
npx skillsauth add overthinkos/overthink-plugins settingsInstall 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.
Manage charly's runtime configuration stored in ~/.config/charly/settings.yml. Controls engine selection, networking, storage paths, secret backend, and agent forwarding.
charly settings is an external COMMAND-class plugin (candy/plugin-settings, command:settings) — one of cutover C15's four remaining welded-command externalizations (after tmux/preempt/feature/vm/doctor). The user-facing command tree is unchanged; only its CLI registration moved out-of-process. The plugin is a THIN forwarder: charly resolves the settings word via the discovered (or /usr/lib/charly/plugins-baked) plugin and syscall.Exec's it in CLI mode, which raw-forwards the args to the hidden in-core charly __settings command. Because settings is a command TREE (get/set/list/path/reset), the plugin raw-forwards every subcommand token through kong passthrough — one forwarder covers the whole tree. The SettingsCmd handlers STAY core (charly/main.go) because they read and write the runtime config file ~/.config/charly/config.yml and resolve the credential-store backend + the runtime engine — config machinery an out-of-process plugin cannot reach.
| Action | Command | Description |
|--------|---------|-------------|
| Get a setting | charly settings get <key> | Show current value |
| Set a setting | charly settings set <key> <value> | Update a setting |
| List all | charly settings list | Show all settings with values |
| Reset to default | charly settings reset <key> | Remove override, use default |
| Config path | charly settings path | Print path to settings.yml |
| Migrate secrets | charly secrets migrate-secrets [--dry-run] | Move plaintext credentials to keyring (externalized to candy/plugin-secrets) |
| Key | Default | Env Var | Description |
|-----|---------|---------|-------------|
| engine.build | docker | CHARLY_ENGINE_BUILD | Build engine (docker/podman) |
| engine.run | docker | CHARLY_ENGINE_RUN | Run engine (docker/podman) |
| run_mode | quadlet | CHARLY_RUN_MODE | Deployment mode (quadlet/direct) |
| bind_address | 127.0.0.1 | CHARLY_BIND_ADDRESS | Default bind address for ports |
| encrypted_storage_path | ~/.local/share/charly/encrypted | CHARLY_ENCRYPTED_STORAGE_PATH | Base path for gocryptfs volumes |
| volumes_path | ~/.local/share/charly/volumes | CHARLY_VOLUMES_PATH | Base path for bind-mounted volumes |
| secret_backend | auto | CHARLY_SECRET_BACKEND | Credential backend (auto/keyring/config) |
| keyring_collection_label | (empty) | CHARLY_KEYRING_COLLECTION_LABEL | Preferred Secret Service collection label. Empty = iterate naturally (default alias → listing order). Set to pin charly to a specific collection in multi-database setups (e.g. KeePassXC with multiple open databases). See /charly-automation:enc for the full iteration order. |
| forward_gpg_agent | true | CHARLY_FORWARD_GPG_AGENT | Forward GPG agent into containers |
| forward_ssh_agent | true | CHARLY_FORWARD_SSH_AGENT | Forward SSH agent into containers |
| hosts.<alias> | (none) | — | SSH target for charly --host <alias> remote execution. Free-form: host, user@host, user@host:port. Consulted by the top-level --host flag to re-exec charly commands on another machine over SSH. See /charly-core:ssh. |
# Switch to podman for both build and run
charly settings set engine.build podman
charly settings set engine.run podman
# Check current engine
charly settings get engine.build
# Change volume storage to NAS
charly settings set volumes_path /mnt/nas/charly-volumes
# Change encrypted storage location
charly settings set encrypted_storage_path /mnt/encrypted/charly
# Force the Secret Service keyring backend (incl. KeePassXC via FdoSecrets)
charly settings set secret_backend keyring
# Force the config-file plaintext fallback (headless hosts)
charly settings set secret_backend config
# Migrate plaintext secrets from config.yml to the keyring (the credential
# store + secrets CLI are externalized into candy/plugin-secrets)
charly secrets migrate-secrets
# Preview migration without changes
charly secrets migrate-secrets --dry-run
Settings resolve in this order: environment variable > settings.yml > default value.
/charly-core:charly-config -- deployment configuration (uses settings)/charly-build:secrets -- credential management/charly-core:charly-doctor -- diagnose settings and secret storage health/charly-automation:enc -- encrypted volume pathstools
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).