Skip to content

process.exec.v1

Execute process

Runs an unsandboxed local process with the current user's filesystem and network authority. Requires the caller's standing consent; output is bounded.

At a glance

Callable byagent, cli, plugin
Effectwrite — Changes state.
Confirmationpolicy — May require a live confirmation, decided by policy and the caller’s audience.
Idempotencynone
Leaves the machineyes
Provided bydev.tenon.core
Contract classsealed

Input

PropertyRequiredTypeConstraints
argumentsyesstring[]items 0–1024
commandyesstringlength 1–16384
environmentno{name, value}[]items 0–256
standardInputno{kind, text}
timeoutMsnointegerrange 1–60000
workingDirectoryyesstringlength 1–16384

Output

PropertyRequiredTypeConstraints
exitCodeyesintegerrange -2147483648–2147483647
standardErroryes{byteCount, kind, text}
standardOutputyes{byteCount, kind, text}
terminationyes"exited" | "signalled"

Errors it can return

These are this contract’s own failures, on top of the lifecycle errors every intent can settle with. See Errors.

  • dev.tenon.core.process-launch-failed
  • dev.tenon.core.process-output-unavailable
  • dev.tenon.core.process-timed-out

Call it

From a plugin — declare it in intents.uses first:

js
const result = await tenon.intents.send("process.exec.v1", {})
if (!result.ok) throw new Error(result.error.code)

From a shell:

sh
tenon-cli intent send process.exec.v1 --input '{}'

Ask your own build for this same contract with tenon-cli intent describe process.exec.v1.