APP_IMAGE
Installs an AppImage binary. AppImages are portable, single-file Linux app bundles. The agent downloads the AppImage, verifies its SHA-256, marks it executable (mode 0755), and places it at install_path. That's it — there is no automatic .desktop file creation, icon extraction, or menu integration today; if you want that, ship the AppImage with a companion FILE action that drops the .desktop entry.
Default install location is /opt/appimages/.
Parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | yes | — | HTTPS URL to fetch the AppImage from. Plain http:// is rejected. |
checksum_sha256 | string | yes | — | 64-char hex digest (the server requires lowercase; the agent compares case-insensitively). Mandatory for installs — the agent refuses an unverified binary. Removal needs no checksum. |
install_path | string | no | /opt/appimages | Directory to install into. Must be absolute. |
Idempotency
The agent extracts the filename from the URL's last path segment and checks whether a file with that name already exists at install_path. If yes, it stream-hashes the file and compares the SHA-256 to detect drift. A matching checksum means changed=false; a mismatch triggers a re-download.
Example
Install Obsidian:
type: APP_IMAGE
url: https://github.com/obsidianmd/obsidian-releases/releases/download/v1.5.3/Obsidian-1.5.3.AppImage
checksum_sha256: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae
desired_state: PRESENT
Gotchas
- Downloads stream straight into the destination directory and are hashed as they go, then atomically renamed into place — large AppImages (GB-scale) don't blow up memory, and a failed or mismatched download never clobbers an existing file.
- URL filenames are derived from the last path segment. AppImages with versioned filenames (
Obsidian-1.5.3.AppImage) create version-specific files; upgrading involves a new action with the new URL. - Old versions aren't cleaned up automatically. If you replace
Obsidian-1.5.3.AppImagewithObsidian-1.5.4.AppImage, both files end up in/opt/appimages/. UseFILEwithdesired_state: ABSENTto clean old ones. install_pathmust be absolute; symlinks in the existing part of the path are resolved before any write so a planted symlink can't redirect the install. There is no allowed-prefix restriction beyond that — pick a sensible system location yourself.