Configuration Options
This page documents all available configuration options for Invowk™.
Configuration Schema
The configuration file uses CUE format and follows this schema:
#Config: {
container_engine?: "podman" | "docker"
includes?: [...#IncludeEntry]
default_runtime?: "native" | "virtual" | "container"
virtual_shell?: #VirtualShellConfig
ui?: #UIConfig
container?: #ContainerConfig
}
#IncludeEntry: {
path: string // Must be absolute and end with .invowkmod
alias?: string // Optional, for collision disambiguation
}
#VirtualShellConfig: {
enable_uroot_utils?: bool
}
#UIConfig: {
color_scheme?: "auto" | "dark" | "light"
verbose?: bool
interactive?: bool
}
#ContainerConfig: {
auto_provision?: #AutoProvisionConfig
}
#AutoProvisionConfig: {
enabled?: bool
strict?: bool
binary_path?: string
includes?: [...#IncludeEntry]
inherit_includes?: bool
cache_dir?: string
}
Unknown fields are rejected, so keep config files limited to the schema-defined options.
Options Reference
container_engine
Type: "podman" | "docker"
Default: "podman"
Specifies which container runtime to use for container-based command execution.
container_engine: "docker" // or "podman"
If the preferred engine is not available, Invowk falls back to the other engine when container runtime is needed.
includes
Type: [...#IncludeEntry]
Default: []
Additional modules to include in command discovery. Each entry is an #IncludeEntry with a required path (must end with .invowkmod) and optional alias.
includes: [
{path: "/home/user/.invowk/modules/tools.invowkmod"},
{path: "/opt/company/shared.invowkmod", alias: "company"},
]
Path requirements:
- Must be absolute (e.g.,
/home/user/modules/tools.invowkmod) - On Windows, use an absolute Windows path (e.g.,
C:\Users\alice\modules\tools.invowkmodor a UNC path) - Must end with
.invowkmod - Duplicate paths are rejected
Alias rules:
- Optional, for collision disambiguation
- Must be unique across all includes entries
Discovery Order:
- Current directory invowkfile (always searched first, highest priority)
- Local modules (
*.invowkmodin current directory) - Each entry in
includesin order ~/.invowk/cmds(always included)
When multiple includes define commands with the same name, they become ambiguous. Use @source prefix or --ivk-from flag to disambiguate.
default_runtime
Type: "native" | "virtual" | "container"
Default: "native"
Sets the global default runtime mode for commands that don't specify a runtime.
default_runtime: "native"
Runtime Options:
"native"- Execute using the system's native shell (bash, zsh, PowerShell, etc.)"virtual"- Execute using Invowk's built-in shell interpreter (mvdan/sh)"container"- Execute inside a container (requires Docker or Podman)
Commands can override this default by specifying their own runtime in the implementations field.
virtual_shell
Type: #VirtualShellConfig
Default: {enable_uroot_utils: true}
Configures the virtual shell runtime behavior.
virtual_shell: {
enable_uroot_utils: true
}
virtual_shell.enable_uroot_utils
Type: bool
Default: true
Enables u-root utilities in the virtual shell. When enabled, 28 additional POSIX-compliant commands become available:
File Operations (14): base64, cat, cp, find, gzip, ln, ls, mkdir, mktemp, mv, realpath, rm, tar, touch
Text Processing (10): basename, cut, dirname, grep, head, sort, tail, tr, uniq, wc
Other Utilities (4): seq, shasum, sleep, tee
This makes the virtual shell self-contained, allowing scripts to execute common file, text, and utility operations without requiring external binaries on the host system.
u-root utilities are enabled by default. Set to false only if you need to force scripts to use system binaries or reduce binary size.
ui
Type: #UIConfig
Default: {color_scheme: "auto", verbose: false, interactive: false}
Configures the user interface settings.
ui: {
color_scheme: "dark"
verbose: false
interactive: false
}
ui.color_scheme
Type: "auto" | "dark" | "light"
Default: "auto"
Sets the color scheme for Invowk's output.
ui: {
color_scheme: "auto"
}
Options:
"auto"- Detect from terminal settings (respectsCOLORTERM,TERM, etc.)"dark"- Use colors optimized for dark terminals"light"- Use colors optimized for light terminals
ui.verbose
Type: bool
Default: false
Enables verbose output by default. When enabled, Invowk prints additional information about command discovery, dependency validation, and execution.
ui: {
verbose: true
}
This is equivalent to always passing --ivk-verbose on the command line.
ui.interactive
Type: bool
Default: false
Enables interactive mode by default. When enabled, commands run in an alternate screen buffer with full PTY support, allowing interactive programs like password prompts, confirmations, and other stdin-based interactions to work properly.
ui: {
interactive: true
}
This is equivalent to always passing --ivk-interactive on the command line.
container
Type: #ContainerConfig
Default: {auto_provision: {enabled: true, strict: false, inherit_includes: true}}
Configures container runtime behavior.
container: {
auto_provision: {
enabled: true
binary_path: "/usr/local/bin/invowk"
includes: [
{path: "/opt/company/modules/tools.invowkmod"},
]
inherit_includes: true
cache_dir: "/tmp/invowk/provision"
}
}
container.auto_provision.enabled
Type: bool
Default: true
Enables automatic provisioning of the invowk binary and modules into container images. When enabled, Invowk builds a cached, derived image for every container run by attaching a small provisioned layer on top of your base image. If provisioning fails, Invowk warns and uses the base image.
container.auto_provision.binary_path
Type: string
Default: (empty; uses the running invowk binary)
Overrides the path to the invowk binary to provision into containers.
container.auto_provision.includes
Type: [...#IncludeEntry]
Default: []
Additional modules to provision into containers. Uses the same #IncludeEntry format as root includes (each entry has a path ending with .invowkmod and an optional alias).
container.auto_provision.inherit_includes
Type: bool
Default: true
When true, the root-level includes entries are automatically inherited by auto-provisioning. Set to false to provision only the modules explicitly listed in container.auto_provision.includes.
container.auto_provision.strict
Type: bool
Default: false
When true, auto-provisioning failures are treated as hard errors instead of warnings. By default, if provisioning fails, Invowk warns and runs the base image. With strict: true, the command fails immediately on provisioning failure.
container.auto_provision.cache_dir
Type: string
Default: ~/.cache/invowk/provision
Overrides the cache directory for provisioned image metadata.
Complete Example
Here's a complete configuration file with all options:
// Invowk Configuration File
// Located at: ~/.config/invowk/config.cue
// Use Podman as the container engine
container_engine: "podman"
// Additional modules to include in discovery
includes: [
{path: "/home/user/.invowk/modules/tools.invowkmod"}, // Personal modules
{path: "/home/user/work/shared.invowkmod", alias: "team"}, // Team shared module
]
// Keep the default runtime set to native shell
default_runtime: "native"
// Virtual shell settings
virtual_shell: {
// Enable u-root utilities for more shell commands
enable_uroot_utils: true
}
// UI preferences
ui: {
// Auto-detect color scheme from terminal
color_scheme: "auto"
// Don't be verbose by default
verbose: false
// Enable interactive mode for commands with stdin (e.g., password prompts)
interactive: false
}
// Container provisioning
container: {
auto_provision: {
enabled: true
}
}