Action reference

This file is generated. Do not edit by hand. Regenerate with UPDATE_ACTION_REFERENCE=1 cargo test -p sysknife-daemon --test action_reference_doc; a plain cargo test fails if it drifts from the catalogue.

Every row is derived from the live code: the command from each action's ActionSpec mechanism, the risk from its risk_level, the distro from sysknife-core::action_family, and the description from the brain's KNOWN_ACTIONS list. Distro is All (cross-distro), Ubuntu (Debian-family only), or Fedora (atomic-host only). Rb = requires reboot; Ro = automatic rollback available.

Deployment (atomic host)

ActionCommandRiskDistroRbRoDescription
GetSystemStaterpm-ostree status --jsonLowAllfull rpm-ostree deployment snapshot: layered packages, pinned/staged deployments, booted/pending OSTree refs
CollectDiagnosticsjournalctl -b -n 500 --no-pagerLowAllrecent system journal log (last 500 lines) for error diagnosis and troubleshooting
GetDeploymentHistoryrpm-ostree status --jsonLowFedorarpm-ostree deployment history: past and current OSTree commits with timestamps
ListDeploymentsrpm-ostree status --jsonLowFedoralist all currently staged, pending, and booted deployments
UpdateSystemsudo rpm-ostree upgradeHighAlldownload and stage the latest OSTree update (does not reboot)
PinDeploymentsudo ostree admin pin 0HighFedorapin a deployment so it is not GC'd — param: index (u32, deployment index from ListDeployments)
UnpinDeploymentsudo ostree admin pin --unpin 0HighFedoraunpin a previously pinned deployment — param: index (u32)
RebaseSystemsudo rpm-ostree rebase fedora/41/x86_64/silverblueHighFedoraswitch to a different OSTree ref/remote — param: target_ref (string, e.g. fedora/40/x86_64/silverblue)
CleanupDeploymentssudo rpm-ostree cleanup --rollback --pendingHighFedoraremove old staged deployments to free disk space
RebootSystemsudo systemctl rebootHighAllreboot the machine into the current or staged deployment
RollbackDeploymentsudo rpm-ostree rollbackHighFedoraroll back to the previous booted deployment
GetKernelArgumentsrpm-ostree kargsLowFedoralist current kernel command-line arguments (kargs)
SetKernelArgumentssudo rpm-ostree kargsHighFedoraadd/remove kernel command-line args — params: add (string[]), remove (string[]) — either may be []

Package layering (rpm-ostree)

ActionCommandRiskDistroRbRoDescription
InstallPackagessudo rpm-ostree install --idempotent podmanHighAlllayer multiple RPM packages — param: packages* (string[])
RemovePackagessudo rpm-ostree uninstall podmanHighAllremove layered RPM packages — param: packages* (string[])
GetLayeredPackagesrpm-ostree status --jsonLowFedoralist RPM packages layered on top of the base OS image — no params
AddLayeredPackagesudo rpm-ostree install --idempotent podmanHighFedoralayer a single RPM package (requires reboot) — param: package* (string)
RemoveLayeredPackagesudo rpm-ostree uninstall podmanHighFedoraremove a single layered RPM package (requires reboot) — param: package* (string)
ReplaceLayeredPackagesudo rpm-ostree install neovim --uninstall vimHighFedorareplace one layered package with another — params: old* (string), new* (string)
ResetLayeredPackageOverridesudo rpm-ostree override reset --allHighFedorareset all rpm-ostree override changes — no params
RemoveBasePackagesudo rpm-ostree override remove geditHighFedoraexclude a base OS package from the deployment — param: package* (string)
GetPendingUpdatesrpm-ostree upgrade --checkLowAllcheck for a staged update and show its diff — no params

Filesystem

ActionCommandRiskDistroRbRoDescription
GetDiskUsagedf -h --output=source,fstype,size,used,avail,pcent,target --exclude-type=composefs --exclude-type=tmpfs --exclude-type=devtmpfs --exclude-type=efivarfsLowAllshow disk space usage for all mounted filesystems (df -h) — no params

Flatpak

ActionCommandRiskDistroRbRoDescription
InstallFlatpaksudo runuser -u testuser -- flatpak install --user -y flathub app-idMediumAllinstall a Flatpak app — params: username* (Linux user), app_id* (e.g. org.mozilla.firefox), remote* (e.g. flathub)
RemoveFlatpaksudo runuser -u testuser -- flatpak uninstall --user -y app-idMediumAlluninstall a Flatpak app — params: username*, app_id*
SearchFlatpakAppsflatpak search search-termLowAllsearch Flatpak remotes for apps — param: term* (query string) — no username needed
ListFlatpakRemotessudo runuser -u testuser -- flatpak remotes --user --columns=name,urlLowAlllist configured Flatpak remotes — param: username*
ListInstalledFlatpakssudo runuser -u testuser -- flatpak list --user --app --columns=application,name,version,originLowAlllist installed Flatpak apps for a user — param: username*
AddFlatpakRemotesudo runuser -u testuser -- flatpak remote-add --user --if-not-exists remote https://example.invalidMediumAlladd a Flatpak remote — params: username*, remote* (name), url*
RemoveFlatpakRemotesudo runuser -u testuser -- flatpak remote-delete --user remoteMediumAllremove a Flatpak remote — params: username*, remote* (name)
GetFlatpakAppInfosudo runuser -u testuser -- flatpak info --user app-idLowAllshow metadata for an installed Flatpak — params: username*, app_id*
UpdateFlatpaksudo runuser -u testuser -- flatpak update --user -y com.example.AppMediumAllupdate Flatpak apps — params: username* (required); app_id (optional — omit to update all)
UbuntuInstallFlatpaksudo runuser -u testuser -- flatpak install --user -y flathub app-idMediumUbuntuinstall a Flatpak app on Ubuntu — params: username*, app_id*, remote* (e.g. flathub); Ubuntu only; Medium risk
UbuntuRemoveFlatpaksudo runuser -u testuser -- flatpak uninstall --user -y app-idMediumUbunturemove a Flatpak app on Ubuntu — params: username*, app_id*; Ubuntu only; Medium risk
UbuntuUpdateFlatpaksudo runuser -u testuser -- flatpak update --user -y com.example.AppMediumUbuntuupdate Flatpak app(s) on Ubuntu — param: username*; optional: app_id (omit for all); Ubuntu only; Medium risk
UbuntuListFlatpakssudo runuser -u testuser -- flatpak list --user --app --columns=application,name,version,originLowUbuntulist installed Flatpak apps on Ubuntu — param: username*; Ubuntu only; read-only

Toolbox

ActionCommandRiskDistroRbRoDescription
ListToolboxessudo runuser -l testuser -c XDG_RUNTIME_DIR=/run/user/$(id -u) toolbox listLowAlllist toolbox containers for a user — param: username*
CreateToolboxsudo runuser -l testuser -c XDG_RUNTIME_DIR=/run/user/$(id -u) toolbox create --container 'sysknife-dev' --release '41'MediumAllcreate a toolbox container — params: username*, name*; optional: image, release
RemoveToolboxsudo runuser -l testuser -c XDG_RUNTIME_DIR=/run/user/$(id -u) toolbox rm 'sysknife-dev'MediumAllremove a toolbox container — params: username*, name*

Services

ActionCommandRiskDistroRbRoDescription
ListServicessystemctl list-units --type=service --all --no-legend --no-pagerLowAlllist all systemd units and their active/enabled state — no params
StartServicesudo systemctl start NetworkManager.serviceMediumAllstart a systemd service — param: unit* (e.g. sshd.service)
StopServicesudo systemctl stop NetworkManager.serviceMediumAllstop a systemd service — param: unit*
RestartServicesudo systemctl restart NetworkManager.serviceMediumAllrestart a systemd service — param: unit*
SetServiceEnabledsudo systemctl enable sshd.serviceMediumAllenable or disable a service at boot — params: unit*, enabled* (bool)
MaskServicesudo systemctl mask cups.serviceHighAllmask a unit so it cannot start by any means — param: unit*
UnmaskServicesudo systemctl unmask cups.serviceMediumAllunmask a previously masked unit — param: unit*
GetServiceLogsjournalctl -u NetworkManager.service -n 200 --no-pagerLowAllfetch recent journald log lines for a service — param: unit*
GetServiceStatussystemctl status nginx.service --no-pagerLowAllshow detailed status of a service — param: unit*
ReloadServicesudo systemctl reload nginx.serviceMediumAllreload a service config without restart (SIGHUP) — param: unit*
ListTimerssystemctl list-timers --all --no-legend --no-pagerLowAlllist all systemd timer units with next trigger time — no params
ReloadDaemonsudo systemctl daemon-reloadMediumAllrun systemctl daemon-reload to pick up changed unit files — no params
CreateScheduledJobsudo /usr/lib/sysknife/scheduled-job-edit --name sysknife-example --command /usr/bin/true --schedule *-*-* 02:00:00HighAllschedule a recurring command as a systemd timer — params: name* (unit-safe id), command* (executable line), schedule* (systemd OnCalendar, e.g. "*-*-* 02:00:00" or "daily")
GetServiceResourceLimitssystemctl show nginx.service --property=MemoryMax,MemoryHigh,CPUQuotaPerSecUSec,TasksMaxLowAllshow a service's cgroup limits (MemoryMax/CPUQuota/TasksMax) via systemctl show — param: unit*; read-only
SetServiceResourceLimitssudo systemctl set-property nginx.service MemoryMax=500M CPUQuota=50%MediumAllcap a service's resources via systemctl set-property (applies live + persists) — params: unit*, plus at least one of memory_max (e.g. '500M' or 'infinity'), memory_high, cpu_quota (e.g. '50%'), tasks_max (integer or 'infinity'); Medium risk; undo with systemctl revert

Processes

ActionCommandRiskDistroRbRoDescription
ListProcessesps aux --sort=-%memLowAlllist running processes with CPU and memory usage — no params
SignalProcesssudo kill -s TERM 1234HighAllsend a signal to a process to stop it — params: pid* (integer > 1); signal (TERM|KILL|HUP|INT, default TERM)

Journald

ActionCommandRiskDistroRbRoDescription
GetJournalLogjournalctl --output=json --no-pager --lines=100 --unit=ssh.service --priority=err --bootLowAllread filtered systemd journal entries as JSON (journalctl) — all params optional: unit (e.g. 'ssh.service'), priority (0-7 or name like 'err', or a range '0..3'), boot (bool, current boot only), kernel (bool, kernel messages only), since/until (e.g. '2026-07-22 10:00:00', 'yesterday', '-1h'), grep (regex on MESSAGE), lines (default 100, max 10000); read-only
VacuumJournaljournalctl --vacuum-size=500MHighAllreclaim journal disk space — supply exactly one of size_mb (cap total journal size) or retain_days (delete entries older than N days)

Storage — LVM

ActionCommandRiskDistroRbRoDescription
GetLvmReportlvs --reportformat json --units b -o lv_name,vg_name,lv_size,lv_attr,origin,data_percentLowAlllist logical volumes with VG, size, attributes, and usage as JSON (lvs) — no params; read-only
ExtendLogicalVolumesudo lvextend -L +10G -r ubuntu-vg/ubuntu-lvHighAllgrow a logical volume AND its filesystem in one step (lvextend -r) — params: vg*, lv*, size* (e.g. '+10G' to add, or '50G' absolute); High risk
CreateLogicalVolumesudo lvcreate -L 20G -n data ubuntu-vgMediumAllcreate a new logical volume in a volume group (lvcreate) — params: vg*, name*, size* (e.g. '20G'); Medium risk
CreateLvSnapshotsudo lvcreate -s -L 5G -n ubuntu-lv-snap ubuntu-vg/ubuntu-lvMediumAllsnapshot a logical volume before risky changes (lvcreate -s) — params: vg*, origin* (LV to snapshot), snapshot* (new name), size* (copy-on-write reserve, e.g. '5G'); Medium risk

Kernel parameters — sysctl

ActionCommandRiskDistroRbRoDescription
GetSysctlsysctl -- net.ipv4.ip_forwardLowAllread a kernel parameter (sysctl) — param: key (optional, dotted e.g. 'net.ipv4.ip_forward'; omit to dump all); read-only
SetSysctlsudo /usr/lib/sysknife/sysctl-edit --key net.ipv4.ip_forward --value 1HighAllset AND persist a kernel parameter (runtime + /etc/sysctl.d drop-in) — params: key* (dotted, e.g. 'vm.swappiness'), value* (number or space-separated list); High risk

Mounts & swap

ActionCommandRiskDistroRbRoDescription
GetMountsfindmnt --jsonLowAlllist mounted filesystems as JSON (findmnt) — no params; read-only
AddMountsudo /usr/lib/sysknife/mount-edit --op mount --device /dev/sdb1 --mountpoint /mnt/data --fstype ext4 --options defaultsHighAllmount a device and persist it to /etc/fstab with nofail — params: device* (/dev/.., UUID=.., LABEL=.., //host/share, or host:/export), mountpoint* (absolute; not a system dir), fstype* (ext4/xfs/btrfs/vfat/nfs/cifs/…), options (csv, optional); High risk
RemoveMountsudo /usr/lib/sysknife/mount-edit --op unmount --mountpoint /mnt/dataHighAllunmount and drop the /etc/fstab entry for a mountpoint — param: mountpoint*; High risk
AddSwapsudo /usr/lib/sysknife/mount-edit --op addswap --file /swapfile --size-mb 2048HighAllcreate a swap file, enable it, and persist to /etc/fstab — params: file* (absolute path), size_mb* (integer MB); High risk
RemoveSwapsudo /usr/lib/sysknife/mount-edit --op rmswap --file /swapfileHighAlldisable a swap file, remove it, and drop its /etc/fstab entry — param: file*; High risk

Log management

ActionCommandRiskDistroRbRoDescription
GetLogrotateStatuslogrotate -d /etc/logrotate.confLowAlldry-run logrotate to show what would rotate (logrotate -d) — param: config (optional path); read-only
ConfigureLogRotationsudo /usr/lib/sysknife/log-edit --op logrotate --name nginx --path /var/log/nginx/*.log --frequency daily --rotate 14 --compressMediumAllwrite a logrotate drop-in (validated with logrotate -d) — params: name*, path* (log file/glob under /var/log), frequency* (daily|weekly|monthly), rotate* (count 0-1000), compress (bool); Medium risk
RemoveLogRotationsudo /usr/lib/sysknife/log-edit --op rm-logrotate --name nginxMediumAllremove a SysKnife-managed logrotate drop-in — param: name*; Medium risk
ConfigureRemoteSyslogsudo /usr/lib/sysknife/log-edit --op rsyslog-forward --host logs.example.com --port 514 --protocol tcpHighAllforward all logs to a remote collector via rsyslog (validated with rsyslogd -N1) — params: host*, port* (1-65535), protocol* (tcp|udp); High risk — logs leave the host
RemoveRemoteSyslogsudo /usr/lib/sysknife/log-edit --op rm-forwardHighAllstop remote syslog forwarding (remove the rsyslog drop-in) — no params; High risk

PAM password policy

ActionCommandRiskDistroRbRoDescription
GetPasswordAgingchage -l aliceLowAllshow a user's password-aging fields (chage -l) — param: user*; read-only
SetPasswordAgingsudo chage -M 90 aliceHighAllset a user's password aging (chage) — params: user*, plus at least one of max_days/min_days/warn_days (0-99999); High risk
SetPasswordPolicysudo /usr/lib/sysknife/pam-edit --op pwquality --minlen 12HighAllset password-quality rules via pwquality — params: at least one of minlen (1-128), dcredit/ucredit/lcredit/ocredit (-64..64); High risk — needs libpam-pwquality enabled in the PAM stack to take effect
SetAccountLockoutsudo /usr/lib/sysknife/pam-edit --op faillock --deny 5HighAllconfigure account lockout via faillock — params: at least one of deny (1-1000), unlock_time/fail_interval (seconds, 0-604800); High risk — needs pam_faillock enabled in the PAM stack to take effect

auditd

ActionCommandRiskDistroRbRoDescription
GetAuditRulesauditctl -lLowAlllist loaded audit rules (auditctl -l) — no params; read-only; needs auditd installed
AddAuditRulesudo /usr/lib/sysknife/audit-edit --op add --path /etc/passwd --perms wa --key passwd-watchMediumAlladd a persistent audit file-watch rule — params: path* (absolute file/dir), perms* (subset of r/w/x/a), key* (label); Medium risk; needs auditd installed
RemoveAuditRulesudo /usr/lib/sysknife/audit-edit --op remove --key passwd-watchHighAllremove a SysKnife-managed audit rule by key — param: key*; High risk

certbot / ACME

ActionCommandRiskDistroRbRoDescription
GetCertificatescertbot certificatesLowAlllist certbot-managed certificates — no params; read-only; needs certbot installed
ObtainCertificatesudo certbot certonly --non-interactive --agree-tos --standalone -m admin@example.com -d example.comHighAllobtain a TLS certificate non-interactively (certbot certonly) — params: domains* (array) or domain* (string), email*, challenge (standalone|nginx|apache, default standalone); High risk; needs certbot + network
RenewCertificatessudo certbot renewMediumAllrenew due certbot certificates (certbot renew) — no params; Medium risk; needs certbot + network

Scoped sudoers.d

ActionCommandRiskDistroRbRoDescription
GetSudoGrants/usr/lib/sysknife/sudoers-edit --op listLowAlllist SysKnife-managed sudoers.d drop-ins — no params; read-only
GrantSudoAccesssudo /usr/lib/sysknife/sudoers-edit --op grant --name deploy-restart --user deploy --commands /usr/bin/systemctl --nopasswdHighAllgrant a scoped sudo rule (validated with visudo before install) — params: name* (^[a-z0-9][a-z0-9_-]*$), user*, commands* ('ALL' or comma-separated ABSOLUTE paths), runas (default root, or 'ALL'), nopasswd (bool); High risk — this configures privilege escalation
RevokeSudoAccesssudo /usr/lib/sysknife/sudoers-edit --op revoke --name deploy-restartHighAllremove a SysKnife-managed sudoers.d drop-in — param: name*; High risk

Network

ActionCommandRiskDistroRbRoDescription
ConfigureWifisudo nmcli device wifi connect CafeHotspotHighAllconnect to a Wi-Fi network — params: ssid*, password (optional for open networks)
SetDnsServerssudo resolvectl dns wlp1s0 1.1.1.1 8.8.8.8HighAllset DNS servers for an interface — params: interface* (e.g. wlp1s0), servers* (string[])
ConfigureFirewallsudo sh -c firewall-cmd --permanent --zone='public' --add-service='ssh' && firewall-cmd --reloadHighAlladd/remove a service in a firewalld zone — params: zone*, service*, enabled* (bool)
GetFirewallStatefirewall-cmd --list-allLowAllshow current firewalld zones, open services, and port rules — no params
GetNetworkStatusip -brief addrLowAllshow network interfaces, IP addresses, and connection state — no params
GetListeningPortsss -tulpnHLowAllshow listening TCP/UDP sockets and the process bound to each (ss -tulpn) — no params; read-only; use for "what is listening on port X?"

resolvectl

ActionCommandRiskDistroRbRoDescription
ResolvectlStatusresolvectl statusLowAllshow DNS resolution status for all network interfaces (resolvectl status) — no params; cross-distro (any systemd-resolved host); read-only
ResolvectlSetDnssudo resolvectl dns eth0 1.1.1.1 8.8.8.8HighAllset DNS servers for a network interface — params: interface* (e.g. eth0), servers* (string[]); cross-distro; High risk

Identity / time / locale

ActionCommandRiskDistroRbRoDescription
GetDateTimetimedatectlLowAllcurrent date, time, timezone, and NTP status (timedatectl) — no params
SetHostnamesudo hostnamectl set-hostname sysknife-labMediumAllchange the system hostname — param: hostname* (string)
SetTimezonesudo timedatectl set-timezone America/Mexico_CityMediumAllchange the system timezone — param: timezone* (e.g. America/Chicago)
SetLocalesudo localectl set-locale en_US.UTF-8MediumAllchange the system locale — param: locale* (e.g. en_US.UTF-8)
SetNtpsudo timedatectl set-ntp trueMediumAllenable or disable NTP sync — param: enabled* (bool)

Users & groups

ActionCommandRiskDistroRbRoDescription
ListUsersgetent passwdLowAlllist all local user accounts — no params
ListGroupsgetent groupLowAlllist all local groups — no params
CreateUsersudo useradd --create-home --home-dir /home/alice --shell /bin/bash aliceHighAllcreate a local user account — param: username*; optional: shell, home
DeleteUsersudo userdel aliceHighAlldelete a local user account — param: username*
AddUserToGroupsudo sh -c grep -q '^wheel:' /etc/group || getent group 'wheel' >> /etc/group; usermod --append --groups 'wheel' 'alice'HighAlladd a user to a group — params: username*, group*
RemoveUserFromGroupsudo sh -c grep -q '^wheel:' /etc/group || getent group 'wheel' >> /etc/group; gpasswd --delete 'alice' 'wheel'HighAllremove a user from a group — params: username*, group*
CreateGroupsudo groupadd developersMediumAllcreate a local group — param: group*; optional: system (bool → system GID range)
DeleteGroupsudo groupdel developersHighAlldelete a local group — param: group*; irreversible
LockUserAccountsudo usermod --lock aliceHighAlldisable password login for a user without deleting it — param: username*
UnlockUserAccountsudo usermod --unlock aliceHighAllre-enable password login for a locked user — param: username*

SSH keys

ActionCommandRiskDistroRbRoDescription
GetAuthorizedKeyscat /home/alice/.ssh/authorized_keysLowAlllist SSH authorized_keys for a user — param: username*
AddAuthorizedKeysudo sh -c grep -Fxq 'ssh-ed25519 AAAA...' '/home/alice/.ssh/authorized_keys' 2>/dev/null || echo 'ssh-ed25519 AAAA...' >> '/home/alice/.ssh/authorized_keys'HighAllappend an SSH public key to a user's authorized_keys — params: username*, public_key* (full key string)
RemoveAuthorizedKeysudo sh -c sed -i '\\|^ssh-ed25519 AAAA...$|d' '/home/alice/.ssh/authorized_keys'HighAllremove an SSH public key from a user's authorized_keys — params: username*, public_key* (full key string)
SetSshdOptionsudo /usr/lib/sysknife/sshd-option-edit --option PermitRootLogin --value prohibit-passwordHighAllharden sshd by setting an allowlisted option via a validated drop-in — params: option* (one of PermitRootLogin, PasswordAuthentication, PubkeyAuthentication, X11Forwarding, PermitEmptyPasswords), value* (per-option: yes/no, or prohibit-password/forced-commands-only for PermitRootLogin)

Package repositories

ActionCommandRiskDistroRbRoDescription
ListPackageRepositoriesscan /etc/yum.repos.dLowAlllist configured DNF/rpm-ostree repos and their enabled state — no params
AddPackageRepositorywrite /etc/yum.repos.d/repo-id.repoHighAlladd a DNF repo — params: repo_id*, repo_url*
RemovePackageRepositorydelete /etc/yum.repos.d/repo-id.repoMediumAllremove a DNF repo — param: repo_id*
EnablePackageRepositorypatch /etc/yum.repos.d/repo-id.repoMediumAllenable a disabled DNF repo — param: repo_id*
DisablePackageRepositorypatch /etc/yum.repos.d/repo-id.repoMediumAlldisable a DNF repo without removing it — param: repo_id*

System info

ActionCommandRiskDistroRbRoDescription
GetMemoryInfofree -hLowAllshow RAM and swap usage (free -h) — no params

Containers

ActionCommandRiskDistroRbRoDescription
ListContainerssudo runuser -l testuser -c podman ps --all --format jsonLowAlllist Podman containers for a user — param: username*
CreateContainersudo runuser -l testuser -c podman create --name 'sysknife-dev' 'registry.fedoraproject.org/fedora-toolbox:41'MediumAllcreate a Podman container — params: username*, name*, image* (e.g. ubuntu:22.04)
StartContainersudo runuser -l testuser -c podman start 'sysknife-dev'MediumAllstart a Podman container — params: username*, name*
StopContainersudo runuser -l testuser -c podman stop 'sysknife-dev'MediumAllstop a Podman container — params: username*, name*
RemoveContainersudo runuser -l testuser -c podman rm 'sysknife-dev'MediumAllremove a stopped Podman container — params: username*, name*
GetContainerInfosudo runuser -l testuser -c podman inspect 'sysknife-dev'LowAllinspect a Podman container — params: username*, name*

Reboot

ActionCommandRiskDistroRbRoDescription
CheckPendingRebootbash -c if test -f /var/run/reboot-required; then cat /var/run/reboot-required; cat /var/run/reboot-required-pkgs 2>/dev/null; else echo 'No reboot required.'; fiLowUbuntucheck whether a reboot is pending (/var/run/reboot-required) — no params; Ubuntu/Debian only; read-only

AppArmor

ActionCommandRiskDistroRbRoDescription
AppArmorStatussudo aa-statusLowUbuntushow status of all loaded AppArmor profiles (aa-status) — no params; Ubuntu only; read-only
AppArmorEnforcesudo aa-enforce /etc/apparmor.d/usr.bin.firefoxHighUbuntuput an AppArmor profile into enforce mode (aa-enforce) — param: profile_path* (e.g. /etc/apparmor.d/usr.bin.firefox); Ubuntu only; High risk
AppArmorComplainsudo aa-complain /etc/apparmor.d/usr.bin.firefoxHighUbuntuput an AppArmor profile into complain/learning mode (aa-complain) — param: profile_path*; Ubuntu only; High risk (disables MAC enforcement for the profile)

cloud-init

ActionCommandRiskDistroRbRoDescription
CloudInitStatuscloud-init status --longLowUbuntushow cloud-init provisioning status (cloud-init status --long) — no params; Ubuntu only; read-only

fail2ban

ActionCommandRiskDistroRbRoDescription
Fail2banStatussudo fail2ban-client statusLowUbuntushow fail2ban jail status — optional param: jail (omit for all jails); Ubuntu only; read-only
Fail2banBanIpsudo fail2ban-client set sshd banip 192.0.2.1HighUbuntuban an IP address in a fail2ban jail — params: jail* (string), ip* (IPv4 or IPv6); Ubuntu only; High risk
Fail2banUnbanIpsudo fail2ban-client set sshd unbanip 192.0.2.1MediumUbuntuunban an IP address from a fail2ban jail — params: jail*, ip*; Ubuntu only; Medium risk
ConfigureFail2banJailsudo /usr/lib/sysknife/fail2ban-jail-edit --name sshd --maxretry 3HighUbuntuwrite a fail2ban jail override (/etc/fail2ban/jail.d/) — params: name*, plus at least one of enabled (bool), maxretry (1-100), bantime/findtime (seconds 0-2592000); Ubuntu only; High risk; needs fail2ban installed

apt

ActionCommandRiskDistroRbRoDescription
AptUpdatesudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get updateLowUbunturefresh apt package index (apt-get update) — no params; Ubuntu only
AptUpgradesudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get dist-upgrade -yHighUbuntuupgrade all installed packages via dist-upgrade — no params; Ubuntu only; High risk
AptInstallsudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get install -y curlMediumUbuntuinstall a package — param: package* (string, e.g. nginx); Ubuntu only
AptRemovesudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get remove -y curlMediumUbunturemove a package, keep config files — param: package*; Ubuntu only
AptPurgesudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get purge -y curlMediumUbunturemove a package AND its config files — param: package*; Ubuntu only
AptAutoremovesudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get autoremove -yMediumUbunturemove automatically-installed packages no longer needed — no params; Ubuntu only
AptHoldsudo apt-mark hold curlMediumUbuntupin a package at its current version (apt-mark hold) — param: package*; Ubuntu only
AptUnholdsudo apt-mark unhold curlMediumUbuntuunpin a package to allow upgrades (apt-mark unhold) — param: package*; Ubuntu only
AptSearchapt-cache search curlLowUbuntusearch apt repos for packages — param: term*; Ubuntu only; read-only
AptListInstalleddpkg -lLowUbuntulist all installed packages (dpkg -l) — no params; Ubuntu only; read-only
AptShowapt-cache show curlLowUbuntushow package details (version, deps, description) — param: package*; Ubuntu only; read-only
AptListUpgradablebash -c apt list --upgradable 2>/dev/nullLowUbuntulist packages with available upgrades — no params; Ubuntu only; read-only. Use for 'are there pending updates?' or 'what updates are available?'
AptHistoryListbash -c grep -A 4 '^Start-Date' /var/log/apt/history.log | tail -n 80LowUbuntushow recent apt transaction history — no params; Ubuntu only; read-only
ConfigureUnattendedUpgradessudo /usr/lib/sysknife/unattended-upgrades-edit --enableHighUbuntuenable or disable automatic security updates (unattended-upgrades) — param: enabled* (bool); Ubuntu only; High risk

apt preferences / pinning

ActionCommandRiskDistroRbRoDescription
GetAptPinsapt-cache policyLowUbuntushow apt pin priorities (apt-cache policy) — param: package (optional); Ubuntu only; read-only
SetAptPinsudo /usr/lib/sysknife/apt-pin-edit --op set --name hold-nginx --package nginx --pin version 1.24.* --priority 990MediumUbuntupin a package to a version/release via /etc/apt/preferences.d — params: name*, package* (glob), pin* (e.g. 'version 1.24.*' or 'release a=noble-security'), priority* (int -1..1000); Ubuntu only; Medium risk
RemoveAptPinsudo /usr/lib/sysknife/apt-pin-edit --op remove --name hold-nginxMediumUbunturemove a SysKnife-managed apt pin — param: name*; Ubuntu only; Medium risk

PPA

ActionCommandRiskDistroRbRoDescription
AddPpasudo add-apt-repository -y ppa:deadsnakes/ppaHighUbuntuadd a Launchpad PPA — param: name* in <user>/<ppa> format (e.g. 'deadsnakes/ppa'); Ubuntu only; requires software-properties-common
RemovePpasudo add-apt-repository -y --remove ppa:deadsnakes/ppaMediumUbunturemove a Launchpad PPA — param: name* in <user>/<ppa> format; Ubuntu only

snap

ActionCommandRiskDistroRbRoDescription
SnapInstallsudo sh -c snap install --channel=stable firefox && snap refresh --hold firefoxMediumUbuntuinstall a snap (auto-holds to prevent auto-refresh) — params: name*; optional: channel (default stable), auto_update (bool, default false); Ubuntu only
SnapRemovesudo snap remove firefoxMediumUbunturemove a snap — param: name*; Ubuntu only
SnapRefreshsudo snap refresh firefoxMediumUbuntuupdate a snap or all snaps — param: name (optional, omit for all); Ubuntu only
SnapHoldsudo snap refresh --hold firefoxMediumUbuntupin a snap at its current version (snap refresh --hold) — param: name*; Ubuntu only
SnapUnholdsudo snap refresh --unhold firefoxMediumUbuntuallow a held snap to auto-refresh again — param: name*; Ubuntu only
SnapListsnap listLowUbuntulist installed snaps — no params; Ubuntu only; read-only
SnapInfosnap info firefoxLowUbuntushow snap details (version, channel, description) — param: name*; Ubuntu only; read-only
SnapRevertsudo snap revert firefoxMediumUbunturevert a snap to its previous revision — param: name*; Ubuntu only
SnapClassicInstallsudo snap install --classic codeMediumUbuntuinstall a snap with classic confinement (full system access) — param: name*; Ubuntu only

ufw

ActionCommandRiskDistroRbRoDescription
UfwEnablesudo ufw --force enableHighUbuntuenable the ufw firewall — no params; Ubuntu only; High risk
UfwDisablesudo ufw disableHighUbuntudisable the ufw firewall — no params; Ubuntu only; High risk
UfwAllowsudo ufw allow 22HighUbuntuallow inbound traffic on a port or service — param: port_or_service* (e.g. 22, 22/tcp, OpenSSH); Ubuntu only; High risk
UfwDenysudo ufw deny 23HighUbuntudeny inbound traffic on a port or service — param: port_or_service*; Ubuntu only; High risk
UfwResetsudo ufw --force resetHighUbuntureset ufw to defaults, removing all rules — no params; Ubuntu only; High risk; irreversible
UfwStatussudo ufw status verboseLowUbuntushow current ufw status and rules — no params; Ubuntu only; read-only
UfwDeleteRulesudo ufw --force delete 1HighUbuntudelete a ufw rule by number — param: rule_number* (positive integer from 'ufw status numbered'); Ubuntu only; High risk
UfwLimitsudo ufw limit 22HighUbuntuadd rate-limiting rule on a port/service (>6 connections/30s blocked) — param: target* (e.g. '22' or 'ssh'); Ubuntu only; High risk; use for SSH brute-force mitigation

netplan

ActionCommandRiskDistroRbRoDescription
NetplanGetConfigfind /etc/netplan -maxdepth 1 -name *.yaml -print -exec cat {} +LowUbunturead current netplan YAML config from /etc/netplan/ — no params; Ubuntu only; read-only
NetplanApplysudo netplan applyHighUbuntuapply netplan network configuration immediately — no params; Ubuntu only; High risk; can disconnect SSH
NetplanSetsudo netplan set ethernets.eth0.dhcp4=trueHighUbuntuset a single netplan key to a value — params: key* (e.g. 'ethernets.eth0.dhcp4'), value*; Ubuntu only; High risk; run NetplanApply to activate
NetplanGeneratesudo netplan generateMediumUbunturegenerate netplan backend config without applying — no params; Ubuntu only; Medium risk; dry-run before NetplanApply

distrobox

ActionCommandRiskDistroRbRoDescription
DistroboxListdistrobox listLowUbuntulist distrobox containers — no params; Ubuntu only; read-only
DistroboxCreatedistrobox create --yes --name dev --image ubuntu:24.04MediumUbuntucreate a distrobox container — params: name*, image* (e.g. ubuntu:24.04, fedora:41); Ubuntu only
DistroboxRemovedistrobox rm --force devMediumUbunturemove a distrobox container — param: name*; Ubuntu only

GRUB

ActionCommandRiskDistroRbRoDescription
GrubGetKargsgrep -E ^GRUB_CMDLINE_LINUX /etc/default/grubLowUbunturead current GRUB_CMDLINE_LINUX from /etc/default/grub — no params; Ubuntu only; read-only
GrubSetKargssudo /usr/lib/sysknife/grub-kargs-edit --append quiet --delete splashHighUbuntumodify GRUB kernel arguments and run update-grub — params: append (list), delete (list); Ubuntu only; High risk; requires reboot

Ubuntu release upgrade

ActionCommandRiskDistroRbRoDescription
UbuntuReleaseUpgradesudo do-release-upgrade -f DistUpgradeViewNonInteractiveHighUbuntuupgrade to the next Ubuntu release (do-release-upgrade) — no params; Ubuntu only; High risk; takes 20–45 min; requires reboot; only for explicit distribution upgrade requests

Ubuntu Pro

ActionCommandRiskDistroRbRoDescription
ProStatuspro status --allLowUbuntushow Ubuntu Pro subscription status — no params; Ubuntu only; read-only
ProAttachsudo pro attach <REDACTED>HighUbuntuattach machine to an Ubuntu Pro subscription — param: token* (credential, never log); Ubuntu only; High risk
ProDetachsudo pro detach --assume-yesHighUbuntudetach from Ubuntu Pro subscription — no params; Ubuntu only; High risk
EnableProServicesudo pro enable esm-apps --assume-yesHighUbuntuenable one Ubuntu Pro service (pro enable <service>) — param: service* (one of esm-apps, esm-infra, livepatch, usg, fips, fips-updates, cis, ros, ros-updates, cc-eal, realtime-kernel, landscape, anbox-cloud); Ubuntu only; High risk; needs an attached subscription
DisableProServicesudo pro disable esm-apps --assume-yesHighUbuntudisable one Ubuntu Pro service (pro disable <service>) — param: service* (same allowlist as EnableProService); Ubuntu only; High risk

Livepatch

ActionCommandRiskDistroRbRoDescription
LivepatchStatussudo canonical-livepatch status --verboseLowUbuntushow Canonical Livepatch kernel-patch status — no params; Ubuntu only; read-only; requires canonical-livepatch installed and Ubuntu Pro

Multipass

ActionCommandRiskDistroRbRoDescription
MultipassListmultipass listLowUbuntulist Multipass VMs and their state — no params; Ubuntu only; read-only

188 actions have an ActionSpec and are tabled above. The full catalogue (KNOWN_ACTION_NAMES) also includes ListJobHistory, which the dispatcher handles before the executor, for 189 total.