Variables
Variables are named, non-secret strings delivered to your process. Put their contract in Manifest V5; manage environment-specific values in the Console. Do not use a variable for a password, token, private key, or connection string that contains credentials.
Declare the contract
{
"configuration": {
"variables": [
{
"name": "API_ENDPOINT",
"required": true,
"default": "https://example.com/api",
"source": "managed"
},
{
"name": "FEATURE_MODE",
"source": "literal",
"value": "safe"
}
]
}
}
source: "literal" delivers the exact authored value. Use
source: "managed" for a value saved in the Application's settings. A managed
variable may declare required and a public default; a missing required value
blocks configuration delivery. Empty strings and the string "0" are values.
Set a managed value
Open the Application's configuration, choose Variables, and set a value for each managed name. The Console shows names and presence to authorized members. Review the change and its target Application before saving.
The CLI offers the same operations beside the Console. Each one works on the managed variables that the Application's active policy declares:
proof liskov application vars list APP_REF
proof liskov application vars set APP_REF API_ENDPOINT https://example.com/api --yes
proof liskov application vars unset APP_REF API_ENDPOINT --yes
vars listshows every declared managed variable with its status (set,default, orunset), its value, and its default. Add--jsonto get the server's response unchanged.vars set APP_REF NAME VALUEshows the current value and the value it would save, then exits without writing. Add--yesto save it. An empty string is a value; to pass a value that starts with a dash, put--before it.vars unset APP_REF NAMEshows what clearing would leave: the declared default, or no value. Add--yesto clear the saved value.
Without --yes, set and unset are dry runs and change nothing. Values are
shown in the clear because a managed variable is not secret. Put credentials
in Secrets.
The commands set and clear values only. Declaring, renaming, or removing a
variable is a manifest change. A write is refused for a name the active policy
does not declare (undeclared_variable), a Liskov built-in name
(reserved_builtin_name), or a value over 4096 bytes
(variable_value_too_large). Key automation on the reason code, not the
message.
The vars commands are in CLI source
497899feccd466ae10a819c4c86f55303d9bfe88, which is not a released package.
Set values in the Console until a later plugin release contains that commit.
Keep environment-specific values out of the repository. Set them as managed values rather than committing them into the manifest as literals.
Precedence
For a managed variable, the effective runtime value is:
- the current Application-managed value, when one is set;
- otherwise the manifest
default, when present; or - missing.
If required is true, the missing case blocks the affected deployment.
Liskov-supplied identity and bootstrap variables are separate built-ins; do not
declare or override them.
A literal uses the value in the job's pinned policy. A managed value is resolved at the authenticated delivery boundary. Signed runtime-env refreshes see the current managed value and a changed configuration revision. Acurast encrypted environment delivery freezes the selected values for that job. Saving a value does not rewrite an already running process or publish a new policy.
For a V5 JavaScript job using the Liskov runtime SDK, signed bootstrap can fetch declared non-secret variables if Acurast's encrypted environment handoff was not ready before the process started. Raw JavaScript bundles still use the Acurast handoff. Customer secrets use their own encrypted grants, not runtime-env. Both variable paths use the job's pinned policy; a signed refresh may pick up a newer managed value during a running SDK job.
Read and verify
Read values after SDK bootstrap:
const endpoint = runtime.env.require("API_ENDPOINT");
const mode = runtime.env.get("FEATURE_MODE") ?? "safe";
Publish only a non-secret confirmation, such as the endpoint hostname or a configuration revision. Then verify that the successor deployment uses the expected configuration revision. Never log a full value until you have classified it as safe.
See Configuration and environment precedence for the exact ordering and Secrets for sensitive values.