Portal
Documentation: all sections

Sable Agents

Sable Agents is an agent host where the agent cannot lie about what it did. You deploy a piece of code once; Sable runs it on a schedule or when you trigger it. Every run executes under the agent's own bounded API key, is metered, receipted, action-attested, and chained, and the receipt's content fingerprint equals the deploy-time code_fp, proving the deployed code is exactly what ran.

The agent gets SABLE_API_KEY (its own bounded key) and SABLE_API_BASE injected into its environment, so it can call Sable inference and sandboxes as itself, within its budget, policy, and circuit breaker. Its spend, its receipts, and its run chain are all attributable to that one key.

Deploy an agent

POST /v1/agents (session-authed) stores the code and schedules it.

curl https://api.buildsable.com/v1/agents \
-H "Authorization: Bearer $SABLE_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
  "name": "price-watcher",
  "language": "python",
  "code": "import os, httpx\nprint(os.environ[\"SABLE_API_BASE\"])",
  "interval_secs": 3600,
  "spend_limit_usd": 5,
  "spend_window": "day",
  "circuit_breaker_usd": 2
}'
{
  "id": "agt_9b41…",
  "name": "price-watcher",
  "language": "python",
  "interval_secs": 3600,
  "enabled": true,
  "code_fp": "f2a91c04…",
  "api_key_id": "key_5d…",
  "run_chain": "agent:agt_9b41…",
  "note": "Code and env are stored sealed and destroyed on deletion. Scheduled-run output is discarded; receipts are the durable record."
}

code_fp is the fingerprint that ties everything together: every run receipt carries the content fingerprint of the code that ran, and for a hosted agent that fingerprint equals code_fp. Anyone holding a receipt can check that the deployed code, not something swapped in later, produced it.

Trigger a run

POST /v1/agents/{id}/trigger runs the agent now and returns the full sandbox response, including output:

curl -X POST https://api.buildsable.com/v1/agents/$AGENT_ID/trigger \
-H "Authorization: Bearer $SABLE_SESSION_TOKEN"
{
  "status": "succeeded",
  "exit_code": 0,
  "stdout": "https://api.buildsable.com/v1\n",
  "stderr": "",
  "cost_micro_usd": 231,
  "receipt": {
    "receipt": "eyJ2Ijoz…",
    "signature": "0x4f8c…",
    "signer": "0xA1b2…9F"
  }
}

The output comes back exactly once and is never stored. Scheduled runs discard their output entirely (see the §3 amendment below): if you need to see what an agent prints, trigger it manually; if you need durable evidence of what it did, that is what the receipts are for.

Endpoints

All session-authed (Authorization: Bearer sess_…).

MethodPathWhat it does
POST/v1/agentsDeploy an agent: seal the code, mint its bounded key, schedule it.
GET/v1/agentsList your agents with schedule, last run, and run count.
POST/v1/agents/{id}/triggerRun now; returns the full sandbox response once.
POST/v1/agents/{id}/gateEnable or disable. Body {"enabled": bool}.
DELETE/v1/agents/{id}Revoke the agent's key and destroy its sealed code.

The bounds

A hosted agent never spends on your root key. Deploying it mints a dedicated key with exactly the bounds you set, enforced on every call the agent makes:

Disable an agent (gate) and its schedule stops; delete it and its key is revoked and its sealed code destroyed.

The proof story

Three artifacts make an agent's history checkable by someone who does not trust you, or Sable:

  1. Receipts. Every run mints a signed, metadata-only receipt, verifiable through the public POST /v1/receipts/verify.
  2. The code fingerprint. Each run receipt's content fingerprint equals the deploy-time code_fp, so a receipt proves which code produced it.
  3. The run chain. Every run chains into the agent's own run chain at agent:{id}: a per-agent hash chain you can list at GET /v1/runs/agent:{id}, mint a signed run proof from, anchor, and export as a compliance audit pack.

Together: this code, under this key, ran these times, cost this much, and nothing was inserted or removed from the record.

The §3 amendment

Sable's privacy contract says submitted code is never persisted. Hosted agents are the one deliberate, disclosed exception: a scheduler cannot re-run what it does not hold. Plainly stated:

Nothing else about §3 changes: prompts, completions, and one-off sandbox code remain never-persisted, and no receipt or usage row ever contains content.

Scope and limits

Honest v1 scope: Sable Agents runs scheduled and manually triggered agents. It is not an always-on host; an agent is not a persistent process, it is a bounded run that starts, executes, and exits.