/tmp/bin/ and taught to agents via a preamble injected before SKILL.md.
Environment Commands
setenv
Persist an environment variable across bash commands. Each bash command the agent runs starts in a fresh shell, so variables set with export are lost between commands. setenv makes them stick.
How it works
setenv writes each variable to /tmp/env.sh, which is automatically sourced at the start of every bash command. The variable is also exported immediately in the current shell, so it’s available right away in the same command.
Signal Commands
Signal commands write signal files that the scheduler reads after the session ends.al-rerun
Request an immediate rerun to drain remaining backlog. Without this, the scheduler treats the run as complete and waits for the next scheduled tick.
- Only applies to scheduled runs. Webhook-triggered and agent-called runs do not re-run.
- Reruns continue until the agent completes without calling
al-rerun, hits an error, or reaches themaxRerunslimit (default: 10).
al-status "<text>"
Update the status text shown in the TUI and web dashboard.
al-return "<value>"
Return a value to the calling agent. Used when this agent was invoked via al-subagent.
al-subagent-wait.
al-exit [code]
Terminate the agent with an exit code indicating an unrecoverable error. Defaults to exit code 15.
Call Commands
Agent-to-agent calls allow agents to delegate work and collect results. These commands require the gateway (GATEWAY_URL must be set).
al-subagent <agent>
Call another agent. Pass context via stdin. Returns a JSON response with a callId.
al-subagent-check <callId>
Non-blocking status check on a call. Never blocks.
al-subagent-wait <callId> [...] [--timeout N]
Wait for one or more calls to complete. Polls every 5 seconds. Default timeout: 900 seconds.
Complete call example
Call rules
- An agent cannot call itself (self-calls are rejected)
- If all runners for the target agent are busy, the call is queued (up to
workQueueSize, default: 100) - Call chains are allowed (A calls B, B calls C) up to
maxCallDepth(default: 3) - Called runs do not re-run — they respond to the single call
- The called agent receives a
<skill-subagent>block with the caller name and context - To return a value, the called agent uses
al-return
Lock Commands
Resource locks prevent multiple agent instances from working on the same resource. Lock keys use URI format (e.g.github://acme/app/issues/42).
rlock
Acquire an exclusive lock on a resource.
runlock
Release a lock. Only the holder can release.
rlock-heartbeat
Reset the TTL on a held lock. Use during long-running work to prevent the lock from expiring.
Example in SKILL.md
Reference lock commands directly in yourSKILL.md workflow: