Execution without a record
is just a black box.

CLIable wraps every agent action in a typed contract, a policy decision, and an immutable run record. The agent calls one CLI; the runtime owns the accountability.

radical transparency

Every parameter, binding, and outcome is rendered as a literal record — not an opaque stream. A run is something you can read.

action governance

Package-local policy defaults decide allow, deny, or gate per capability. Gated actions return no_op plus an interaction task.

immutable traceability

Runs are structural data, not ephemeral logs. A two-level SQLite topology commits every run, task, and verification fact.

step 1 · execution control

Define where the agent moves fast — and where it stops.

Not every action carries the same risk. A read resolves instantly; a refund yields for authorization. Policy defaults live inside the connector package, so the decision travels with the capability.

  • allow — read-only scopes run autonomously
  • gate — mutations return no_op + interaction_task
  • deny — restricted capabilities never execute
policy.toml
# policy defaults ship inside the connector package
[policy.stripe.refund]
default = "gate"            # allow | deny | gate
allow_under = 100           # autonomous below this amount
gate_reason = "requires_authorization"

[policy.stripe.charge]
default = "deny"            # never autonomous
cliable task get it_22b9
{
  "task": "it_22b9",
  "state": "pending",
  "run": "r_8f2a14",
  "capability": "stripe.refund",
  "reason": "requires_authorization",
  "context": { "caller": "writer-agent" }
}
step 2 · task continuity

A gated run is a task you can resume.

When policy gates an action, CLIable returns a typed InteractionTask. Read it with task get, then task resolve or task cancel — the closure run and the updated task snapshot come back together, sealed in the same trail.

pending resolved cancelled

Ready to take control of execution?

Integrate the CLIable runtime into your existing agent stack in under an hour.