Variables
In order to allow a deeper customization of the user experience, variables and placeholders can be used within manually specified strings. Those will be replaced during runtime with specified / computed values. Those features can also be used within actions to improve the support workflow.
Variable names are case-sensitive.
Placeholders
| Placeholder | Description |
|---|---|
OCTORY_DIRECTORY | Directory where Octory.app is located. Example: /Users/jdoe/Library /Application Support/Octory |
USER_NAME | User’s login name Example: jdoe |
USER_FULL_NAME | User’s full name Example: John Doe |
USER_FIRST_NAME | User’s first name Example: John |
USER_LAST_NAME | User’s last name Example: Doe |
DEVICE_MODEL_NAME | Name of the device Example: MacBook Pro |
DEVICE_MARKETING_MODEL_NAME | Full name of the device, as presented on media. Localized if possible. Example: 13" MacBook Pro with Thunderbolt 3 and Touch ID (Mid 2017) |
DEVICE_NAME | Friendly name of the device Example: Woody's MacBook Pro |
DEVICE_SERIAL_NUMBER | Device serial number Example: C05T25JRLVGN |
DEVICE_UUID | Device UUID (Unique Identifier) Example: F503KB3U-804E- 5D7G-AC3G-95F34G9F0BEB |
DEVICE_PROCESSOR | Device processor Example: Quad-Core Intel Core i5 |
PROCESSOR_TYPE | Device processor type Example: Intel or Apple |
INSTALLED_MONITORS_COUNT | The count of the installed app monitors Availability: 2.1.0+ |
NOT_INSTALLED_MONITORS_COUNT | The count of the app monitors that are not installed yet Availability: 2.1.0+ |
FAILED_INSTALL_MONITORS_COUNT | The count of the monitors whose installation has failed Availability: 2.1.0+ |
MONITORS_COUNT | The count of the monitors that should be installed (ignore non mandatory monitors and monitors with a condition evaluated as false - see monitoring) Availability: 2.1.0+ |
DEVICE_BATTERY_STATUS | Current % charged of the battery |
DEVICE_BATTERY_IS_CHARGING | A boolean that tells you if the battery is charging |
DEVICE_BATTERY_IS_FULLY_CHARGED | A boolean that tells you if the battery is fully charged |
DEVICE_BATTERY_IS_CRITICAL | A boolean that tells you if the battery is at a critical level |
DEVICE_BATTERY_IS_ON_AC | A boolean that tells you if the Mac is plugged in or not |
OS_VERSION | Displays the full version of the OS (ie. 15.3.2) |
OS_NAME | Displays the OS name (ie. Sequoia, Tahoe, Golden Gate etc...) |
For example:
Hello ${USER_FULL_NAME}, welcome to Octory!
Will be replaced by:
Hello John Doe, welcome to Octory!
Device Telemetry Placeholders
Availability: 3.1.0+
Octory resolves a set of device health placeholders at runtime. They are used exactly like the placeholders above, in any text or in a condition, and their value is refreshed while the application runs.
Device health
| Placeholder | Description |
|---|---|
DEVICE_UPTIME_DAYS | Days since the last boot. Example: 12 |
DEVICE_LAST_REBOOT_DATE | Date of the last boot, localized. Example: 10 Jul 2026 at 09:14 |
DEVICE_DISK_FREE | Free space on the startup disk, localized. Example: 245.1 GB |
DEVICE_DISK_FREE_GB | Free space in GB as a plain number, to be used in conditions. Example: 245.1 |
DEVICE_DISK_TOTAL | Total size of the startup disk, localized. Example: 500.3 GB |
DEVICE_DISK_USED_PERCENT | Percentage of the startup disk in use. Example: 78 |
DEVICE_MEMORY_TOTAL | Total amount of memory, localized. Example: 18 GB |
DEVICE_MEMORY_PRESSURE | Current memory pressure: Normal, Warning or Critical |
DEVICE_THERMAL_STATE | Current thermal state: Nominal, Fair, Serious or Critical |
Security posture
| Placeholder | Description |
|---|---|
SECURITY_FILEVAULT_ENABLED | Whether FileVault is on: true or false |
SECURITY_SIP_ENABLED | System Integrity Protection: true, false, or Custom when only some of its features are enabled |
SECURITY_GATEKEEPER_ENABLED | Whether Gatekeeper is on: true or false |
SECURITY_FIREWALL_ENABLED | Whether the application firewall is on: true or false |
MDM enrollment
| Placeholder | Description |
|---|---|
MDM_ENROLLED | Whether the Mac is enrolled: true or false |
MDM_ENROLLMENT_STATUS | How it was enrolled: None, Automated, User Approved or Manual |
Update status
| Placeholder | Description |
|---|---|
OS_PENDING_UPDATES_COUNT | Number of updates waiting to be installed. Example: 0 |
OS_LAST_UPDATE_CHECK_DATE | Date of the last update check, localized |
Network
| Placeholder | Description |
|---|---|
NETWORK_INTERFACE_TYPE | Active connection: Wi-Fi, Wired, Cellular, Other or Offline |
NETWORK_IP_ADDRESS | Primary IPv4 address, empty when offline. Example: 10.0.1.23 |
NETWORK_WIFI_SSID | Name of the Wi-Fi network currently joined |
Using these values
The boolean placeholders above use lowercase true and false, so they can be used directly in a boolean condition:
SECURITY_FILEVAULT_ENABLED == true
The older DEVICE_BATTERY_IS_ placeholders keep their historical Yes and No values, and so have to be compared as strings:
DEVICE_BATTERY_IS_CHARGING == 'Yes'
The numeric placeholders are plain, non localized numbers, so they are safe to compare: DEVICE_DISK_FREE_GB < 20. The localized ones, like DEVICE_DISK_FREE, are meant to be displayed, not compared.
These values are refreshed periodically: device health and security posture every 60 seconds, update status every 5 minutes, and network values every time the connection changes. Memory pressure and thermal state are also refreshed immediately when the system reports a change.
A placeholder is an empty string until it has been resolved for the first time. A condition using one that is not populated yet logs a warning, evaluates as not satisfied, and is evaluated again as soon as the value arrives.
NETWORK_WIFI_SSID is opportunistic: macOS only discloses the network name to an application that was granted Location Services access. Without that grant the placeholder stays empty, and the grant cannot be given ahead of time by an MDM.
Dynamic Placeholders
Octory offers several dynamic placeholders. Like placeholders, you can use them directly but their value can evolve along the Octory session. Those dynamic placeholders are particularly useful with conditions.
| Placeholder | Description | Possible values |
|---|---|---|
CURRENT_SLIDE_VALID | Indicates whether the current slide is valid or not. | true, false |
CURRENT_SLIDE_INDEX | The index of the current slide in the slides array | - |
INSTALLATION_COMPLETE | Indicate if all the app monitors specified in the monitoring are installed. Note that the monitors with conditions evaluated as false are not taken in account | true, false |
Computed Variables
In addition to the placeholders, Octory offers the capability to insert dynamic content in different places by using computed variables.
In the General → Variable section of the configuration file, you can define custom variables that will be replaced in any string in which they are present.
You define a variable by its name, like myVariable and you use it in strings elsewhere in Octory with a dollar sign and enclosed in brackets like ${myVariable}.
For example:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" >
<plist version="1.0">
<dict>
<!-- ... -->
<key>General</key>
<dict>
<key>Variables</key>
<dict>
<key>company</key>
<string>Acme Inc.</string>
</dict>
</dict>
<!-- ... -->
</dict>
When displaying an informative message to the end user, you can write
Welcome to ${company}!
The result will be
Welcome to Acme Inc.!
User inputs variables
When the user entered some info, you can anticipate to use it elsewhere. To know how the input can be used, you should refer to the input components.
For example, if you ask the user the asset tag of the machine, you may choose to name the input variable user_asset_tag.
When the user entered the asset tag and validated it, you can use it in a string like:
Can you confirm that your asset tag is ${user_asset_tag} ?
About URLs
Octory will populate any URL you write. So, you could use the placeholder ${USER_NAME} to specify a path like /User/${USER_NAME}/Documents.
You can also define define a path for your resources and use it in a URL. For example: ${Resources}/index.html
You can also use placeholder or computed variables to populate other computed variables.
For example, to define an icon folder in in resources directory: ${Resources}/Icons and you use it after as ${IconFolderPath}.