---
title: "The fleet · intentic sandbox API"
description: "Every registered conversation, its accumulated diff, and landing or discarding its work. Every route in the the fleet group of the intentic sandbox API."
url: "https://intentic.dev/api/agents/"
---

Agents

# The fleet

Every registered conversation, its accumulated diff, and landing or discarding its work

**On this page (32 sections)**

- [Every live conversation](#agents-list)
- [Conversations put away](#agents-archived)
- [Find a conversation](#agents-search)
- [One conversation's card](#agents-get)
- [One page of a conversation](#agents-transcript)
- [What this conversation is told before it is asked anything](#agents-systemPrompt)
- [One delegation's own calls](#agents-toolChildren)
- [One in-process subagent's own record](#agents-subagentTranscript)
- [Put words in the agent's mouth](#agents-place)
- [Retitle a conversation](#agents-rename)
- [Whether this conversation merges its work automatically](#agents-autoLand)
- [What this conversation does when a turn stops before it finished](#agents-breakPolicy)
- [Keep this conversation's prompt cache warm while it sits idle](#agents-keepWarm)
- [Mark a conversation read](#agents-seen)
- [Report that a composer holds an unsent message for a conversation](#agents-unsent)
- [Stop a conversation's condition watches](#agents-stopWatching)
- [Stop one of a conversation's background jobs](#agents-stopJob)
- [Mark every conversation read](#agents-seenAll)
- [Everything a conversation has changed](#agents-diff)
- [Why a conversation's last merge refused](#agents-conflicts)
- [Where a conversation's committed work lives](#agents-history)
- [One file's before and after in a conversation's work](#agents-fileDiff)
- [Carry files set aside as scratch with a conversation's work](#agents-includeScratch)
- [Delete a conversation's scratch](#agents-deleteScratch)
- [Merge a conversation's work into the workspace](#agents-land)
- [Ask a maintainer to merge this work](#agents-requestLand)
- [Make a member answerable for this conversation](#agents-assign)
- [Mark a conversation with an emoji](#agents-react)
- [Throw a conversation's work away](#agents-discard)
- [Put conversations away](#agents-archive)
- [Bring conversations back](#agents-unarchive)
- [Empty the archive for good](#agents-purge)

The roster rather than the turn. Each conversation works in its own private copy of the repos, so it has a cumulative set of changes you can read and two ways for it to end: merge that work into the shared tree, or throw it away. The rest is the bookkeeping a board needs — renaming, marking read, archiving, purging.

32 calls. Pick one to open it, or use the list on the right.

**GET`/agents` Every live conversation**

The fleet as the board draws it: each conversation with its title, what it is doing, when it last moved and whether anybody has read it since. Archived conversations are not in here.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `agents` The conversations | object[] |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `kind` | "agent" |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |
| `rev` Which version of the fleet this… | number |
| `held` Automations waiting at the door for… | object[] |
| `id` This waiting item's own id, which… | string |
| `automationId` Which automation it came from | string |
| `payload` What set it off, kept whole… | string |
| `origin` Where the message came from, kept… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `title` What the conversation would be called | string |
| `conversationId` The thread this belongs to, when… | string |
| `sessionId` The provider session that thread last… | string |
| `thread` Which inbound thread this belongs to,… | string |
| `actsAs` Which persona the approved run speaks… | string |
| `createdAt` When it started waiting, in milliseconds | number |
| `autoRunAt` When it goes ahead on its… | number |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.list();
```

**GET`/agents/archived` Conversations put away**

The same shape as the live fleet, for the conversations somebody has decided are finished. Their work is kept, and any one of them can be brought back.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `agents` The conversations | object[] |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `kind` | "agent" |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |
| `rev` Which version of the fleet this… | number |
| `held` Automations waiting at the door for… | object[] |
| `id` This waiting item's own id, which… | string |
| `automationId` Which automation it came from | string |
| `payload` What set it off, kept whole… | string |
| `origin` Where the message came from, kept… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `title` What the conversation would be called | string |
| `conversationId` The thread this belongs to, when… | string |
| `sessionId` The provider session that thread last… | string |
| `thread` Which inbound thread this belongs to,… | string |
| `actsAs` Which persona the approved run speaks… | string |
| `createdAt` When it started waiting, in milliseconds | number |
| `autoRunAt` When it goes ahead on its… | number |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/archived" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.archived();
```

**GET`/agents/search` Find a conversation**

Searches the live fleet and the archive together. Both halves on purpose: the board hides finished work by design, and a filter that says it found nothing while the answer sits one click away is simply wrong.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `query` required What to look for | string | query |
| `caseSensitive` Whether capitals matter | string | query |

### What comes back

| Field | Type |
| --- | --- |
| `matches` What matched, from the live fleet… | object[] |
| `id` Which conversation matched | string |
| `snippet` Why, in its own words | object |
| `text` The matching line, with a little… | string |
| `speaker` Who said it | "user" | "agent" |
| `scanned` How many conversations were actually read,… | number |
| `indexing` Whether what was said is still… | boolean |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/search?query=%E2%80%A6" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.search({
 "query": "…"
});
```

**GET`/agents/{id}` One conversation's card**

Everything the board shows for a single conversation: its title, state, working branch, unread marker and timestamps.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.get({
 "id": "a1b2c3d4"
});
```

**GET`/agents/{id}/transcript` One page of a conversation**

The most recent turns of one conversation, in order, including the tool calls and their results: what the chat replays and the next turn is seeded from. A page, not the whole record — pass the answer's `from` back as `before` to walk further back, until `more` reads false.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `before` Return the messages before this position… | integer | query |
| `turns` How many of the user's turns… | integer | query |

### What comes back

| Field | Type |
| --- | --- |
| `messages` The conversation, in order | object[] |
| `role` Who said it | "user" | "assistant" | "notice" |
| `text` The words | string |
| `run` The run that produced this row | string |
| `sentAt` When it was sent, in milliseconds | number |
| `messageId` The message's own id, on the… | string |
| `attachments` Files attached to this message, as… | string[] |
| `checkpointId` The saved point this message can… | string |
| `rewindIndex` This message's position in the conversation's… | integer |
| `thinking` What the agent was reasoning about | string |
| `tools` The tool calls this part of… | object[] |
| `id` The call's id | string |
| `name` Which tool | string |
| `category` What kind of thing it does:… | "read" | "edit" | "delete" | "move" … (9) |
| `status` How it went | "pending" | "in_progress" | "completed" | "failed" |
| `target` What it acted on, in one… | string |
| `locations` The files it touched | object[] |
| `path` The file, as a workspace path,… | string |
| `line` Which line, counting from one | number |
| `content` What it produced: text, a change… | object[] |
| `type` Plain output | "text" |
| `text` What the tool said | string |
| `children` Calls a delegated subagent made, nested… | object[] |
| `id` The call's id | string |
| `name` Which tool | string |
| `category` What kind of thing it does:… | "read" | "edit" | "delete" | "move" … (9) |
| `status` How it went | "pending" | "in_progress" | "completed" | "failed" |
| `target` What it acted on, in one… | string |
| `locations` The files it touched | object[] |
| `content` What it produced: text, a change… | object[] |
| `children` Calls a delegated subagent made, nested… | object[] |
| `nested` How many calls sit under this… | integer |
| `thinking` What the agent was reasoning about… | string |
| `subagent` The helper this call started, as… | object |
| `nested` How many calls sit under this… | integer |
| `thinking` What the agent was reasoning about… | string |
| `subagent` The helper this call started, as… | object |
| `id` Its own id, where that is… | string |
| `kind` | "subagent" | "spawned" |
| `agentType` | string |
| `description` | string |
| `model` | string |
| `provider` | string |
| `background` | boolean |
| `status` | "pending" | "running" | "blocked" | "completed" … (7) |
| `tokens` | number |
| `toolUses` | number |
| `lastTool` | string |
| `summary` | string |
| `error` | string |
| `verification` | object |
| `todos` The agent's task checklist, as of… | object[] |
| `content` The item, as the agent wrote… | string |
| `status` Where it is | "pending" | "in_progress" | "completed" |
| `activeForm` How to phrase it while it… | string |
| `usage` What the turn cost, on the… | object |
| `costUsd` | number |
| `inputTokens` | number |
| `outputTokens` | number |
| `durationMs` | number |
| `numTurns` | number |
| `notes` What the sandbox added to this… | object[] |
| `title` The one line a reader sees,… | string |
| `text` The note itself, which is also… | string |
| `speaker` Who sent this message, as the… | object |
| `when kind is "person"` | shape |
| `email` The signed-in member, as the sandbox… | string |
| `name` Their display name, where the sign-in… | string |
| `when kind is "program"` | shape |
| `token` The label of the control token… | string |
| `when kind is "agent"` | shape |
| `conversationId` The conversation whose agent is speaking:… | string |
| `when kind is "sandbox"` | shape |
| `source` What in the sandbox spoke: an… | string |
| `errand` What this message is for, when… | "land-conflict" | "verify-nudge" | "land-breakage" | "land-fix" … (10) |
| `placed` A person wrote this in the… | boolean |
| `noticeAction` A one-press follow-up this notice offers,… | "landHold" | "depsInstall" | "watchStop" | "sandboxMemory" … (6) |
| `sandboxHeld` The sandbox kept this refused turn… | boolean |
| `noticeWait` The wait this notice describes, by… | "credentialRenewal" | "chatRoute" | "watch" |
| `noticeWaitId` Which instance of the wait this… | string |
| `noticeCode` Which of the sandbox's own notices… | object |
| `code` Which of the sandbox's notices this… | string |
| `params` The facts the notice was worded… | object |
| `agentNotice` This notice was said by the… | object |
| `level` How loud it was said: a… | "info" | "warning" | "error" |
| `source` Who said it, when the runtime… | string |
| `plan` The plan this row asked approval… | object |
| `requestId` What to send back when you… | string |
| `text` The plan itself | string |
| `document` The write-up this plan refers to,… | object |
| `path` Where it lives, as a workspace… | string |
| `title` What it is called: its opening… | string |
| `markdown` The document itself | string |
| `truncated` It was clipped at the wire… | boolean |
| `plan` It is one of the CLI's… | boolean |
| `status` Where the decision stands | "pending" | "approved" | "rejected" | "cancelled" |
| `question` The questions this row asked, and… | object |
| `requestId` What to send back when you… | string |
| `questions` What it wants to know | object[] |
| `question` What the agent is asking | string |
| `header` A short label for the question | string |
| `multiSelect` Whether more than one answer can… | boolean |
| `options` The choices offered | object[] |
| `document` The document this turn wrote and… | object |
| `path` Where it lives, as a workspace… | string |
| `title` What it is called: its opening… | string |
| `markdown` The document itself | string |
| `truncated` It was clipped at the wire… | boolean |
| `plan` It is one of the CLI's… | boolean |
| `status` Where the answer stands | "pending" | "answered" | "cancelled" |
| `answers` What was chosen, keyed by the… | object |
| `attachments` Files the user attached to their… | object |
| `permission` The tool this row asked permission… | object |
| `toolName` Which tool it wants to use | string |
| `title` The whole question, as a sentence,… | string |
| `displayName` A short phrase for the button,… | string |
| `description` More about what it is asking… | string |
| `reason` Why it is asking at all:… | string |
| `path` Which file it concerns, when it… | string |
| `alwaysLabel` The wording for an always-allow answer | string |
| `alwaysAsks` This request asks every time: an… | true |
| `program` The program this request is holding,… | object |
| `text` What would run | string |
| `language` Which of the two backends it… | "bash" | "javascript" |
| `truncated` Whether this is an excerpt of… | boolean |
| `spans` Which fragments of the text the… | object[] |
| `child` The subagent this request would start… | object |
| `provider` Which provider serves it | string |
| `model` Which of that provider's models | string |
| `harness` Which agentic loop runs it | "native" | "claude-code" |
| `account` Which of that provider's connected accounts… | string |
| `effort` How hard it thinks, where the… | string |
| `thinking` Whether it reasons before it answers,… | boolean |
| `fast` Whether it asks for the faster… | boolean |
| `move` What the parent asks to do:… | "spawn" | "send" | "answer" |
| `child` The child's id, for one that… | string |
| `task` What the child is for, in… | string |
| `message` What the parent would say to… | string |
| `on` Which machine it runs on, when… | string |
| `proposed` What the agent asked to start… | object |
| `explain` One plain sentence saying what the… | string |
| `requestId` What to send back when you… | string |
| `status` Where the decision stands | "pending" | "allowed" | "always" | "everything" … (6) |
| `browserHelp` The browser hand-over this row asked… | object |
| `requestId` | string |
| `session` | string |
| `account` | string |
| `message` | string |
| `status` How the hand-over ended | "pending" | "helped" | "declined" | "cancelled" |
| `terminalHelp` The terminal hand-over this row asked… | object |
| `requestId` | string |
| `session` | string |
| `message` | string |
| `status` How the hand-over ended | "pending" | "helped" | "declined" | "cancelled" |
| `capabilityOffer` The capability setup this row asked… | object |
| `requestId` | string |
| `offer` | object |
| `entry` Which catalog entry is being asked… | string |
| `name` What it is called, as the… | string |
| `why` The agent's case for connecting it,… | string |
| `status` Where the decision stands | "pending" | "connecting" | "skipped" | "cancelled" |
| `outcome` How an accepted ask's setup ended… | object |
| `outcome` | "connected" | "unfinished" |
| `id` | string |
| `paymentOffer` The payment this row asked for,… | object |
| `requestId` | string |
| `offer` | object |
| `url` What is being paid for | string |
| `description` What the endpoint says it is | string |
| `payTo` Where the money goes, taken verbatim… | string |
| `network` On which network | string |
| `asset` In which token | string |
| `assetName` That token's name | string |
| `amountUsd` The exact price | string |
| `spentTodayUsd` What has already gone out today | string |
| `dailyCapUsd` What may go out in a… | string |
| `why` The agent's case for paying, and… | string |
| `status` Where the decision stands | "pending" | "approved" | "skipped" | "cancelled" |
| `receipt` How the approved payment ended (the… | object |
| `outcome` | "paid" | "failed" |
| `amountUsd` | string |
| `transaction` | string |
| `network` | string |
| `watchWake` The condition watch that woke this… | object |
| `outcome` How the watch ended: the condition… | "met" | "timeout" | "restart-expired" | "broken" |
| `note` The agent's own line on what… | string |
| `elapsed` How long the watch stood, already… | string |
| `sent` The whole prompt the model was… | string |
| `need` Something the agent asked a person… | object |
| `id` The need's handle, the one `needs… | string |
| `conversationId` The conversation that asked, and the… | string |
| `subject` What exactly is asked for | object |
| `kind` | "capability" |
| `entry` The catalog entry, as the catalog… | string |
| `name` What the catalog calls it, never… | string |
| `mode` Connect something new, give a connected… | "connect" | "reconnect" | "change" |
| `instance` The connection a reconnect or a… | string |
| `target` The site, host or address the… | string |
| `prefill` Settings the agent could fill in… | object |
| `changes` For a change: each setting and… | object |
| `reason` The daemon's own sentence on why… | string |
| `reported` The agent reported the credential refused… | boolean |
| `title` The one line it leads with,… | string |
| `why` The agent's case for it, and… | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `createdAt` When it was raised, in milliseconds | number |
| `updatedAt` When it last moved, in milliseconds | number |
| `answeredBy` Who answered it, as the sandbox… | string |
| `outcome` How it ended, in the daemon's… | string |
| `told` How the agent heard the outcome,… | "call" | "turn" | "queued" |
| `unattended` Raised by a turn nobody was… | boolean |
| `needWake` The answered need that reached this… | object |
| `outcome` How the need ended: a person… | "met" | "declined" |
| `title` The need, as its card leads… | string |
| `id` The need's handle, which its live… | string |
| `sent` The whole prompt the model received,… | string |
| `agentWords` Another agent's words that reached this… | object |
| `kind` Who sent it: another conversation in… | "peer" | "child" |
| `from` The sending conversation's id | string |
| `title` The sender's title, when it had… | string |
| `failed` A child's report on a turn… | boolean |
| `sent` The whole prompt the model received,… | string |
| `backgroundJob` The background job this row marks… | object |
| `id` The daemon's handle for the job,… | string |
| `label` What the job is, in the… | string |
| `command` The command as the agent wrote… | string |
| `startedAt` When it started, in milliseconds | number |
| `credentialOffer` The gated credential this row asked… | object |
| `requestId` | string |
| `offer` | object |
| `subject` Which credential is being asked for | string |
| `kind` Whether this gate covers one stored… | "secret" | "capability" |
| `lane` What the credential was about to… | "shell" | "code" | "browser" | "session" … (5) |
| `detail` Where it would go: the start… | string |
| `why` The agent's case for using it,… | string |
| `approvers` Who may release it | string[] |
| `scope` How far one release goes: `use`… | "use" | "conversation" |
| `status` Where the decision stands | "pending" | "approved" | "skipped" | "cancelled" |
| `receipt` Who released it, or that somebody… | object |
| `outcome` | "released" | "refused" |
| `approvedBy` | string |
| `sessionId` The provider session behind the last… | string |
| `provider` Which provider minted that session | string |
| `harness` Which runtime minted it: a session… | "native" | "claude-code" |
| `account` Which stored account it belongs to,… | string |
| `ending` How the last turn ended, when… | object |
| `reason` Which ending left the work here:… | "limit" | "outage" | "stopped" | "flagged" |
| `resetsAt` When the spent allowance reopens, in… | number |
| `held` Present when the daemon still holds… | object |
| `ran` Whether the held turn got anywhere… | boolean |
| `contextTokens` How much context a press that… | number |
| `handoffTokens` What a press that opens a… | number |
| `moving` The account the owner's policy is… | string |
| `scheduled` Whether something other than the user… | boolean |
| `nextAt` When the booked send actually fires,… | number |
| `retries` How many automatic re-runs a stopped… | object |
| `made` Automatic re-runs already sent for this… | integer |
| `max` How many the ladder may send… | integer |
| `from` Where the first message sits in… | integer |
| `more` Whether older messages precede this page | boolean |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/transcript" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.transcript({
 "id": "a1b2c3d4"
});
```

**GET`/agents/{id}/system-prompt` What this conversation is told before it is asked anything**

The system prompt the most recent turn of this conversation actually ran on: which base it was, and every piece the sandbox added to it — this product's guidance, the persona, the field notes, the workspace's own standing rules — each with the exact words the model received. None of this appears in the transcript, so this is the only way to read it.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `prompt` What the most recent turn of… | object |
| `at` When the turn that was told… | number |
| `runtime` Which runtime served that turn | string |
| `mode` Which base the turn was configured… | "intentic" | "claude" | "custom" |
| `base` | object |
| `kind` Which prompt the additions ride on | "intentic" | "claude" | "custom" | "runtime" … (5) |
| `text` The base's own words, when they… | string |
| `model` The model the turn ran on,… | string |
| `sections` What the daemon added to that… | object[] |
| `source` Which mechanism added this | "guidance" | "persona" | "field-notes" | "memory" |
| `title` The one line a reader sees… | string |
| `text` The section's exact words, as the… | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/system-prompt" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.systemPrompt({
 "id": "a1b2c3d4"
});
```

**GET`/agents/{id}/transcript/tools/{toolId}` One delegation's own calls**

The calls a delegated agent made under one tool card. A transcript page leaves them behind and reports their count as `nested`, since a settled delegation draws collapsed; this is what fills the card in when it is opened. Empty when the record no longer holds that call.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `toolId` required Which tool call, by the id… | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `children` The calls the delegated agent made,… | object[] |
| `id` The call's id | string |
| `name` Which tool | string |
| `category` What kind of thing it does:… | "read" | "edit" | "delete" | "move" … (9) |
| `status` How it went | "pending" | "in_progress" | "completed" | "failed" |
| `target` What it acted on, in one… | string |
| `locations` The files it touched | object[] |
| `path` The file, as a workspace path,… | string |
| `line` Which line, counting from one | number |
| `content` What it produced: text, a change… | object[] |
| `when type is "text"` | shape |
| `text` What the tool said | string |
| `when type is "diff"` | shape |
| `path` Which file, as a workspace path | string |
| `oldText` What was there | string |
| `newText` What is there now | string |
| `truncated` One of the two sides was… | boolean |
| `when type is "image"` | shape |
| `path` Where it is, as a workspace… | string |
| `children` Calls a delegated subagent made, nested… | object[] |
| `id` The call's id | string |
| `name` Which tool | string |
| `category` What kind of thing it does:… | "read" | "edit" | "delete" | "move" … (9) |
| `status` How it went | "pending" | "in_progress" | "completed" | "failed" |
| `target` What it acted on, in one… | string |
| `locations` The files it touched | object[] |
| `path` The file, as a workspace path,… | string |
| `line` Which line, counting from one | number |
| `content` What it produced: text, a change… | object[] |
| `type` Plain output | "text" |
| `text` What the tool said | string |
| `children` Calls a delegated subagent made, nested… | object[] |
| `id` The call's id | string |
| `name` Which tool | string |
| `category` What kind of thing it does:… | "read" | "edit" | "delete" | "move" … (9) |
| `status` How it went | "pending" | "in_progress" | "completed" | "failed" |
| `target` What it acted on, in one… | string |
| `locations` The files it touched | object[] |
| `content` What it produced: text, a change… | object[] |
| `children` Calls a delegated subagent made, nested… | object[] |
| `nested` How many calls sit under this… | integer |
| `thinking` What the agent was reasoning about… | string |
| `subagent` The helper this call started, as… | object |
| `nested` How many calls sit under this… | integer |
| `thinking` What the agent was reasoning about… | string |
| `subagent` The helper this call started, as… | object |
| `id` Its own id, where that is… | string |
| `kind` | "subagent" | "spawned" |
| `agentType` | string |
| `description` | string |
| `model` | string |
| `provider` | string |
| `background` | boolean |
| `status` | "pending" | "running" | "blocked" | "completed" … (7) |
| `tokens` | number |
| `toolUses` | number |
| `lastTool` | string |
| `summary` | string |
| `error` | string |
| `verification` | object |
| `nested` How many calls sit under this… | integer |
| `thinking` What the agent was reasoning about… | string |
| `subagent` The helper this call started, as… | object |
| `id` Its own id, where that is… | string |
| `kind` | "subagent" | "spawned" |
| `agentType` | string |
| `description` | string |
| `model` | string |
| `provider` | string |
| `background` | boolean |
| `status` | "pending" | "running" | "blocked" | "completed" … (7) |
| `tokens` | number |
| `toolUses` | number |
| `lastTool` | string |
| `summary` | string |
| `error` | string |
| `verification` | object |
| `state` Whether anything proved its work: a… | "verified" | "unproven" | "failing" | "no-code" |
| `paths` The code files it changed, most… | string[] |
| `check` The command that spoke: the one… | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/transcript/tools/a1b2c3d4" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.toolChildren({
 "id": "a1b2c3d4",
 "toolId": "a1b2c3d4"
});
```

**GET`/agents/{id}/subagents/{subagentId}/transcript` One in-process subagent's own record**

What a subagent this conversation's runtime ran in-process said and did, as a transcript of its own: its ask, its thinking, its calls and its words. Read from the runtime's own record of the subagent where it keeps one, which it writes as the subagent works, else from the calls the delegation's card holds in this conversation's record. A subagent spawned as a conversation of its own is read through `transcript` instead.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `subagentId` required Which subagent this conversation's runtime ran… | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `messages` The conversation, in order | object[] |
| `role` Who said it | "user" | "assistant" | "notice" |
| `text` The words | string |
| `run` The run that produced this row | string |
| `sentAt` When it was sent, in milliseconds | number |
| `messageId` The message's own id, on the… | string |
| `attachments` Files attached to this message, as… | string[] |
| `checkpointId` The saved point this message can… | string |
| `rewindIndex` This message's position in the conversation's… | integer |
| `thinking` What the agent was reasoning about | string |
| `tools` The tool calls this part of… | object[] |
| `id` The call's id | string |
| `name` Which tool | string |
| `category` What kind of thing it does:… | "read" | "edit" | "delete" | "move" … (9) |
| `status` How it went | "pending" | "in_progress" | "completed" | "failed" |
| `target` What it acted on, in one… | string |
| `locations` The files it touched | object[] |
| `path` The file, as a workspace path,… | string |
| `line` Which line, counting from one | number |
| `content` What it produced: text, a change… | object[] |
| `type` Plain output | "text" |
| `text` What the tool said | string |
| `children` Calls a delegated subagent made, nested… | object[] |
| `id` The call's id | string |
| `name` Which tool | string |
| `category` What kind of thing it does:… | "read" | "edit" | "delete" | "move" … (9) |
| `status` How it went | "pending" | "in_progress" | "completed" | "failed" |
| `target` What it acted on, in one… | string |
| `locations` The files it touched | object[] |
| `content` What it produced: text, a change… | object[] |
| `children` Calls a delegated subagent made, nested… | object[] |
| `nested` How many calls sit under this… | integer |
| `thinking` What the agent was reasoning about… | string |
| `subagent` The helper this call started, as… | object |
| `nested` How many calls sit under this… | integer |
| `thinking` What the agent was reasoning about… | string |
| `subagent` The helper this call started, as… | object |
| `id` Its own id, where that is… | string |
| `kind` | "subagent" | "spawned" |
| `agentType` | string |
| `description` | string |
| `model` | string |
| `provider` | string |
| `background` | boolean |
| `status` | "pending" | "running" | "blocked" | "completed" … (7) |
| `tokens` | number |
| `toolUses` | number |
| `lastTool` | string |
| `summary` | string |
| `error` | string |
| `verification` | object |
| `todos` The agent's task checklist, as of… | object[] |
| `content` The item, as the agent wrote… | string |
| `status` Where it is | "pending" | "in_progress" | "completed" |
| `activeForm` How to phrase it while it… | string |
| `usage` What the turn cost, on the… | object |
| `costUsd` | number |
| `inputTokens` | number |
| `outputTokens` | number |
| `durationMs` | number |
| `numTurns` | number |
| `notes` What the sandbox added to this… | object[] |
| `title` The one line a reader sees,… | string |
| `text` The note itself, which is also… | string |
| `speaker` Who sent this message, as the… | object |
| `when kind is "person"` | shape |
| `email` The signed-in member, as the sandbox… | string |
| `name` Their display name, where the sign-in… | string |
| `when kind is "program"` | shape |
| `token` The label of the control token… | string |
| `when kind is "agent"` | shape |
| `conversationId` The conversation whose agent is speaking:… | string |
| `when kind is "sandbox"` | shape |
| `source` What in the sandbox spoke: an… | string |
| `errand` What this message is for, when… | "land-conflict" | "verify-nudge" | "land-breakage" | "land-fix" … (10) |
| `placed` A person wrote this in the… | boolean |
| `noticeAction` A one-press follow-up this notice offers,… | "landHold" | "depsInstall" | "watchStop" | "sandboxMemory" … (6) |
| `sandboxHeld` The sandbox kept this refused turn… | boolean |
| `noticeWait` The wait this notice describes, by… | "credentialRenewal" | "chatRoute" | "watch" |
| `noticeWaitId` Which instance of the wait this… | string |
| `noticeCode` Which of the sandbox's own notices… | object |
| `code` Which of the sandbox's notices this… | string |
| `params` The facts the notice was worded… | object |
| `agentNotice` This notice was said by the… | object |
| `level` How loud it was said: a… | "info" | "warning" | "error" |
| `source` Who said it, when the runtime… | string |
| `plan` The plan this row asked approval… | object |
| `requestId` What to send back when you… | string |
| `text` The plan itself | string |
| `document` The write-up this plan refers to,… | object |
| `path` Where it lives, as a workspace… | string |
| `title` What it is called: its opening… | string |
| `markdown` The document itself | string |
| `truncated` It was clipped at the wire… | boolean |
| `plan` It is one of the CLI's… | boolean |
| `status` Where the decision stands | "pending" | "approved" | "rejected" | "cancelled" |
| `question` The questions this row asked, and… | object |
| `requestId` What to send back when you… | string |
| `questions` What it wants to know | object[] |
| `question` What the agent is asking | string |
| `header` A short label for the question | string |
| `multiSelect` Whether more than one answer can… | boolean |
| `options` The choices offered | object[] |
| `document` The document this turn wrote and… | object |
| `path` Where it lives, as a workspace… | string |
| `title` What it is called: its opening… | string |
| `markdown` The document itself | string |
| `truncated` It was clipped at the wire… | boolean |
| `plan` It is one of the CLI's… | boolean |
| `status` Where the answer stands | "pending" | "answered" | "cancelled" |
| `answers` What was chosen, keyed by the… | object |
| `attachments` Files the user attached to their… | object |
| `permission` The tool this row asked permission… | object |
| `toolName` Which tool it wants to use | string |
| `title` The whole question, as a sentence,… | string |
| `displayName` A short phrase for the button,… | string |
| `description` More about what it is asking… | string |
| `reason` Why it is asking at all:… | string |
| `path` Which file it concerns, when it… | string |
| `alwaysLabel` The wording for an always-allow answer | string |
| `alwaysAsks` This request asks every time: an… | true |
| `program` The program this request is holding,… | object |
| `text` What would run | string |
| `language` Which of the two backends it… | "bash" | "javascript" |
| `truncated` Whether this is an excerpt of… | boolean |
| `spans` Which fragments of the text the… | object[] |
| `child` The subagent this request would start… | object |
| `provider` Which provider serves it | string |
| `model` Which of that provider's models | string |
| `harness` Which agentic loop runs it | "native" | "claude-code" |
| `account` Which of that provider's connected accounts… | string |
| `effort` How hard it thinks, where the… | string |
| `thinking` Whether it reasons before it answers,… | boolean |
| `fast` Whether it asks for the faster… | boolean |
| `move` What the parent asks to do:… | "spawn" | "send" | "answer" |
| `child` The child's id, for one that… | string |
| `task` What the child is for, in… | string |
| `message` What the parent would say to… | string |
| `on` Which machine it runs on, when… | string |
| `proposed` What the agent asked to start… | object |
| `explain` One plain sentence saying what the… | string |
| `requestId` What to send back when you… | string |
| `status` Where the decision stands | "pending" | "allowed" | "always" | "everything" … (6) |
| `browserHelp` The browser hand-over this row asked… | object |
| `requestId` | string |
| `session` | string |
| `account` | string |
| `message` | string |
| `status` How the hand-over ended | "pending" | "helped" | "declined" | "cancelled" |
| `terminalHelp` The terminal hand-over this row asked… | object |
| `requestId` | string |
| `session` | string |
| `message` | string |
| `status` How the hand-over ended | "pending" | "helped" | "declined" | "cancelled" |
| `capabilityOffer` The capability setup this row asked… | object |
| `requestId` | string |
| `offer` | object |
| `entry` Which catalog entry is being asked… | string |
| `name` What it is called, as the… | string |
| `why` The agent's case for connecting it,… | string |
| `status` Where the decision stands | "pending" | "connecting" | "skipped" | "cancelled" |
| `outcome` How an accepted ask's setup ended… | object |
| `outcome` | "connected" | "unfinished" |
| `id` | string |
| `paymentOffer` The payment this row asked for,… | object |
| `requestId` | string |
| `offer` | object |
| `url` What is being paid for | string |
| `description` What the endpoint says it is | string |
| `payTo` Where the money goes, taken verbatim… | string |
| `network` On which network | string |
| `asset` In which token | string |
| `assetName` That token's name | string |
| `amountUsd` The exact price | string |
| `spentTodayUsd` What has already gone out today | string |
| `dailyCapUsd` What may go out in a… | string |
| `why` The agent's case for paying, and… | string |
| `status` Where the decision stands | "pending" | "approved" | "skipped" | "cancelled" |
| `receipt` How the approved payment ended (the… | object |
| `outcome` | "paid" | "failed" |
| `amountUsd` | string |
| `transaction` | string |
| `network` | string |
| `watchWake` The condition watch that woke this… | object |
| `outcome` How the watch ended: the condition… | "met" | "timeout" | "restart-expired" | "broken" |
| `note` The agent's own line on what… | string |
| `elapsed` How long the watch stood, already… | string |
| `sent` The whole prompt the model was… | string |
| `need` Something the agent asked a person… | object |
| `id` The need's handle, the one `needs… | string |
| `conversationId` The conversation that asked, and the… | string |
| `subject` What exactly is asked for | object |
| `kind` | "capability" |
| `entry` The catalog entry, as the catalog… | string |
| `name` What the catalog calls it, never… | string |
| `mode` Connect something new, give a connected… | "connect" | "reconnect" | "change" |
| `instance` The connection a reconnect or a… | string |
| `target` The site, host or address the… | string |
| `prefill` Settings the agent could fill in… | object |
| `changes` For a change: each setting and… | object |
| `reason` The daemon's own sentence on why… | string |
| `reported` The agent reported the credential refused… | boolean |
| `title` The one line it leads with,… | string |
| `why` The agent's case for it, and… | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `createdAt` When it was raised, in milliseconds | number |
| `updatedAt` When it last moved, in milliseconds | number |
| `answeredBy` Who answered it, as the sandbox… | string |
| `outcome` How it ended, in the daemon's… | string |
| `told` How the agent heard the outcome,… | "call" | "turn" | "queued" |
| `unattended` Raised by a turn nobody was… | boolean |
| `needWake` The answered need that reached this… | object |
| `outcome` How the need ended: a person… | "met" | "declined" |
| `title` The need, as its card leads… | string |
| `id` The need's handle, which its live… | string |
| `sent` The whole prompt the model received,… | string |
| `agentWords` Another agent's words that reached this… | object |
| `kind` Who sent it: another conversation in… | "peer" | "child" |
| `from` The sending conversation's id | string |
| `title` The sender's title, when it had… | string |
| `failed` A child's report on a turn… | boolean |
| `sent` The whole prompt the model received,… | string |
| `backgroundJob` The background job this row marks… | object |
| `id` The daemon's handle for the job,… | string |
| `label` What the job is, in the… | string |
| `command` The command as the agent wrote… | string |
| `startedAt` When it started, in milliseconds | number |
| `credentialOffer` The gated credential this row asked… | object |
| `requestId` | string |
| `offer` | object |
| `subject` Which credential is being asked for | string |
| `kind` Whether this gate covers one stored… | "secret" | "capability" |
| `lane` What the credential was about to… | "shell" | "code" | "browser" | "session" … (5) |
| `detail` Where it would go: the start… | string |
| `why` The agent's case for using it,… | string |
| `approvers` Who may release it | string[] |
| `scope` How far one release goes: `use`… | "use" | "conversation" |
| `status` Where the decision stands | "pending" | "approved" | "skipped" | "cancelled" |
| `receipt` Who released it, or that somebody… | object |
| `outcome` | "released" | "refused" |
| `approvedBy` | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/subagents/a1b2c3d4/transcript" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.subagentTranscript({
 "id": "a1b2c3d4",
 "subagentId": "a1b2c3d4"
});
```

**POST`/agents/{id}/place` Put words in the agent's mouth**

Writes a line into the record as though the agent had said it, with no turn behind it and no reply. Human readers see it marked as placed. The next real turn starts fresh from the record, where the line reads as the agent's own. Refused while a turn is running.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `text` required The words to put in the… | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/place" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"text":"export const start = () => listen(PORT);\n"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.place({
 "id": "a1b2c3d4",
 "text": "export const start = () => listen(PORT);\n"
});
```

**POST`/agents/{id}/rename` Retitle a conversation**

Sets the title a person chose, replacing the one that was generated. Allowed while the conversation is working, and it does not count as activity.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `title` required What to call it from now… | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/rename" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"title":"Update the changelog"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.rename({
 "id": "a1b2c3d4",
 "title": "Update the changelog"
});
```

**POST`/agents/{id}/auto-land` Whether this conversation merges its work automatically**

Overrides the sandbox-wide setting for one conversation; clear it to go back to following the default. Deliberately allowed mid-turn, because the setting is read when the turn finishes, so flipping it while the agent works means exactly hold this piece of work for review.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `autoLand` required Whether its work merges automatically when… | boolean | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/auto-land" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"autoLand":true}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.autoLand({
 "id": "a1b2c3d4",
 "autoLand": true
});
```

**POST`/agents/{id}/break-policy` What this conversation does when a turn stops before it finished**

One answer per ending — a spent usage limit, a provider outage, a turn that stopped short — overriding the sandbox-wide policy for one conversation; clear it to follow the default again. The answers are mutually exclusive by construction, so nothing here can arm two automations over the same wall. Every ending starts at `wait` unless asked otherwise, because a re-run spends the user's own allowance on a turn they sent once.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `ending` required Which wall this answers for: a… | "limit" | "outage" | "stopped" | body |
| `policy` required What happens next for that ending | "wait" | "resend" | "move" | "retry" | null | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/break-policy" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"ending":"limit","policy":"wait"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.breakPolicy({
 "id": "a1b2c3d4",
 "ending": "limit",
 "policy": "wait"
});
```

**POST`/agents/{id}/keep-warm` Keep this conversation's prompt cache warm while it sits idle**

Re-reads the conversation's cached context shortly before the provider would drop it, until the time asked for, so picking it back up costs a cache read instead of re-sending everything. Each refresh is a forked, unsaved request that adds nothing to the conversation. Stops by itself when the time runs out, when a turn starts, when the account nears its limit, or when the prompt the next turn would send has changed. Refused for a conversation whose cache is already cold or that this sandbox cannot replay. Null stops it.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `until` required Keep its prompt cache warm until… | number | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/keep-warm" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"until":1}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.keepWarm({
 "id": "a1b2c3d4",
 "until": 1
});
```

**POST`/agents/{id}/seen` Mark a conversation read**

Stamps the read marker behind the unread badge on one card. Allowed while the conversation is working, and reading never counts as activity.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/seen" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.seen({
 "id": "a1b2c3d4"
});
```

**POST`/agents/{id}/unsent` Report that a composer holds an unsent message for a conversation**

The words stay in the browser; the sandbox only records since when some composer has held them, so a conversation waiting on a message nobody has sent yet is never archived for being idle. Null clears it once the message is sent or deleted. Does not count as activity.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `at` required When the composer started holding the… | number | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/unsent" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"at":1}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.unsent({
 "id": "a1b2c3d4",
 "at": 1
});
```

**POST`/agents/{id}/stop-watching` Stop a conversation's condition watches**

Disarms this conversation's outside-condition watches, so they will not wake it. Named without a watch id it disarms all of them, because that is what the press means when it is made about a card; a press made about one watch's own row names that watch and leaves the rest armed. Nothing else about the conversation changes.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `watchId` Which watch to disarm | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/stop-watching" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"watchId":"a1b2c3d4"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.stopWatching({
 "id": "a1b2c3d4",
 "watchId": "a1b2c3d4"
});
```

**POST`/agents/{id}/stop-job` Stop one of a conversation's background jobs**

Ends a command this conversation left running: the server it handed over, or the build it is waiting on. The watch that would have woken the conversation on its exit is disarmed first, so stopping it wakes nothing. Stopping a job that already ended is not an error.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `jobId` required Which of its background jobs, by… | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/stop-job" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"jobId":"a1b2c3d4"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.stopJob({
 "id": "a1b2c3d4",
 "jobId": "a1b2c3d4"
});
```

**POST`/agents/seen` Mark every conversation read**

Clears the unread badge across the whole fleet at once, and hands the refreshed list back.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `agents` The conversations | object[] |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `kind` | "agent" |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |
| `rev` Which version of the fleet this… | number |
| `held` Automations waiting at the door for… | object[] |
| `id` This waiting item's own id, which… | string |
| `automationId` Which automation it came from | string |
| `payload` What set it off, kept whole… | string |
| `origin` Where the message came from, kept… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `title` What the conversation would be called | string |
| `conversationId` The thread this belongs to, when… | string |
| `sessionId` The provider session that thread last… | string |
| `thread` Which inbound thread this belongs to,… | string |
| `actsAs` Which persona the approved run speaks… | string |
| `createdAt` When it started waiting, in milliseconds | number |
| `autoRunAt` When it goes ahead on its… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/seen" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.seenAll();
```

**GET`/agents/{id}/diff` Everything a conversation has changed**

One flat set of changed files per repo, measured against where each repo stood when the conversation started, with every file flagged as already merged or not. Not the staged-and-unstaged shape a working copy has, because nobody ever checks this branch out to stage into it.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `repos` One entry per repository the conversation… | object[] |
| `repo` Which repository | string |
| `branch` The branch this conversation's work sits… | string |
| `changes` What it changed there | object[] |
| `path` The path, relative to the repository… | string |
| `status` What happened to it | "added" | "modified" | "deleted" | "renamed" … (6) |
| `from` Where a renamed file came from | string |
| `additions` Lines added | number |
| `deletions` Lines removed | number |
| `code` The same +/− with every comment… | object |
| `additions` | number |
| `deletions` | number |
| `landed` Whether your workspace already holds this… | boolean |
| `modules` The packages of the tree these… | object[] |
| `dir` Where the package lives, relative to… | string |
| `name` The name the package declares for… | string |
| `addedDependencies` Dependencies the changed manifests here declare… | object[] |
| `path` The manifest, relative to the repository… | string |
| `added` The names it declares now and… | string[] |
| `absorbed` How many of this conversation's files… | number |
| `conflicts` Why the last merge refused, when… | object[] |
| `repo` Which repository | string |
| `paths` The files that genuinely would not… | object[] |
| `path` Which file | string |
| `reason` Why it would not merge, and… | "workspace" | "diverged" | "binary" |
| `clean` How many files in this repository… | number |
| `mainBranch` The branch your own checkout is… | string |
| `elsewhere` Repositories whose copy the conversation left… | object[] |
| `repo` Which repository | string |
| `branch` The branch its copy is standing… | string |
| `carried` Whether everything the conversation committed there… | boolean |
| `uncommitted` Whether its copy there holds uncommitted… | boolean |
| `scratch` Untracked files the conversation left in… | object[] |
| `repo` Which repository | string |
| `paths` What it keeps out there | object[] |
| `path` Relative to its repository | string |
| `reason` Why it looks like scratch | "hidden" | "byproduct" | "checkout" | "oversized" … (5) |
| `files` How many files it holds | number |
| `bytes` Their total size in bytes | number |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/diff" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.diff({
 "id": "a1b2c3d4"
});
```

**GET`/agents/{id}/conflicts` Why a conversation's last merge refused**

What still blocks the conversation's last refused merge, checked again against your workspace as it stands now. Returns the same `conflicts` the full change list carries, without the change list itself. Empty when nothing refused, or when what refused before has since stopped being in the way.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `conflicts` Why the last merge refused, when… | object[] |
| `repo` Which repository | string |
| `paths` The files that genuinely would not… | object[] |
| `path` Which file | string |
| `reason` Why it would not merge, and… | "workspace" | "diverged" | "binary" |
| `clean` How many files in this repository… | number |
| `mainBranch` The branch your own checkout is… | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/conflicts" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.conflicts({
 "id": "a1b2c3d4"
});
```

**GET`/agents/{id}/history` Where a conversation's committed work lives**

The commits in your own history that carry this conversation's work, with the files each one brought. Use it when the change list is empty or short because you already committed what it wrote: those files are not differences against the main line any more, so they are not in the review, and this is where they went.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `repos` One entry per repository holding committed… | object[] |
| `repo` Which repository | string |
| `commits` The commits carrying this conversation's work… | object[] |
| `sha` The commit | string |
| `short` Its abbreviated hash, which is what… | string |
| `subject` Its first line | string |
| `author` Who committed it | string |
| `at` When it was authored, in milliseconds | number |
| `changes` The conversation's files that this commit… | object[] |
| `path` The path, relative to the repository… | string |
| `status` What happened to it | "added" | "modified" | "deleted" | "renamed" … (6) |
| `from` Where a renamed file came from | string |
| `additions` Lines added | number |
| `deletions` Lines removed | number |
| `code` The same +/− with every comment… | object |
| `modules` The packages of the tree these… | object[] |
| `dir` Where the package lives, relative to… | string |
| `name` The name the package declares for… | string |
| `unaccounted` How many of the conversation's absorbed… | number |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/history" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.history({
 "id": "a1b2c3d4"
});
```

**GET`/agents/{id}/{repo}/file-diff` One file's before and after in a conversation's work**

Both sides of a single file: what it held when the conversation started and what it holds on its branch now.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `repo` required Which repository | string | address |
| `path` required Which file, relative to that repository | string | query |

### What comes back

| Field | Type |
| --- | --- |
| `before` The whole file as it was | string |
| `after` The whole file as it is… | string |
| `binary` The file is not text, so… | boolean |
| `partial` Set when the file was too… | object |
| `beforeBytes` How big the before side is,… | integer |
| `afterBytes` How big the after side is,… | integer |
| `patch` The changed regions as unified-diff hunks… | string |
| `more` There were more changed regions than… | boolean |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/agents/a1b2c3d4/root/file-diff?path=src%2Fapp.ts" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.fileDiff({
 "id": "a1b2c3d4",
 "repo": "root",
 "path": "src/app.ts"
});
```

**POST`/agents/{id}/scratch/include` Carry files set aside as scratch with a conversation's work**

Takes files the review lists as scratch and adds them to the conversation's work, so the next merge carries them like any other file. For the file that only looked like scratch. Refused for a checkout of its own, which no merge can carry, while a turn is running, and for a path that is not scratch right now.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `repo` required Which repository of its composition | string | body |
| `paths` required Paths exactly as the review lists… | string[] | body |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/scratch/include" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"repo":"root","paths":["src/app.ts","README.md"]}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.includeScratch({
 "id": "a1b2c3d4",
 "repo": "root",
 "paths": [
 "src/app.ts",
 "README.md"
 ]
});
```

**POST`/agents/{id}/scratch/delete` Delete a conversation's scratch**

Removes files the review lists as scratch from the conversation's copy. Nothing else is touched, and nothing of it was ever merged. Refused while a turn is running, and for a path that is not scratch right now.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `repo` required Which repository of its composition | string | body |
| `paths` required Paths exactly as the review lists… | string[] | body |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/scratch/delete" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"repo":"root","paths":["src/app.ts","README.md"]}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.deleteScratch({
 "id": "a1b2c3d4",
 "repo": "root",
 "paths": [
 "src/app.ts",
 "README.md"
 ]
});
```

**POST`/agents/{id}/land` Merge a conversation's work into the workspace**

Brings the conversation's branches into the main tree, one repo at a time. A conflict is reported rather than raised and nothing is lost when it fails. Refused while a turn is running, and refused for a conversation that works directly in the shared tree, which has nothing to merge.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation's work to merge | string | address |
| `mode` How to apply it | "check" | "merge" | "measure" | body |
| `span` How much of the work to… | "cumulative" | "outstanding" | body |
| `force` Go ahead despite a check that… | boolean | body |

### What comes back

| Field | Type |
| --- | --- |
| `landed` Whether the entire composed change was… | boolean |
| `changed` Whether anything actually moved | boolean |
| `conflicts` What stopped the whole composed change,… | object[] |
| `repo` Which repository | string |
| `paths` The files that genuinely would not… | object[] |
| `path` Which file | string |
| `reason` Why it would not merge, and… | "workspace" | "diverged" | "binary" |
| `clean` How many files in this repository… | number |
| `mainBranch` The branch your own checkout is… | string |
| `resolving` Files left half-merged when you asked… | object[] |
| `repo` Which repository | string |
| `paths` Which files now hold conflict markers… | string[] |
| `held` Nothing was applied and nothing failed:… | boolean |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/land" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"mode":"check","span":"cumulative","force":false}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.land({
 "id": "a1b2c3d4",
 "mode": "check",
 "span": "cumulative",
 "force": false
});
```

**POST`/agents/{id}/request-land` Ask a maintainer to merge this work**

For a collaborator who is not allowed to merge: marks the conversation as waiting for review, with who asked. The request shows on every maintainer's board and clears when somebody merges or discards it.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/request-land" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.requestLand({
 "id": "a1b2c3d4"
});
```

**POST`/agents/{id}/assign` Make a member answerable for this conversation**

Hands a conversation to a member: its owner is who answers its questions and who a reviewer asks about its work. Its owner may hand it to anyone; a maintainer may reassign any conversation; one nobody owns may be claimed by anyone allowed to drive agents. Refused for an address that is not a member's. Nothing about the conversation's own work changes.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `to` required Who should answer for it from… | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/assign" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"to":"src/server.ts"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.assign({
 "id": "a1b2c3d4",
 "to": "src/server.ts"
});
```

**POST`/agents/{id}/react` Mark a conversation with an emoji**

Puts your mark on a conversation, or takes it back. Everyone sharing the sandbox sees it, with who left it, which is what makes it worth more than a private bookmark. One mark per person per emoji; nothing about the conversation's own work changes.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |
| `emoji` required The mark to leave, as the… | string | body |
| `on` required Whether to add your mark or… | boolean | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `when kind is "agent"` | shape |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `when kind is "person"` | shape |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/react" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"emoji":"…","on":true}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.react({
 "id": "a1b2c3d4",
 "emoji": "…",
 "on": true
});
```

**POST`/agents/{id}/discard` Throw a conversation's work away**

Deletes the conversation's working copies, its branches and its entry. Nothing is kept. Refused while a turn is running, and refused for a conversation working in the shared tree.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which conversation | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/a1b2c3d4/discard" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.discard({
 "id": "a1b2c3d4"
});
```

**POST`/agents/archive` Put conversations away**

The gentle counterpart to discarding. Commits whatever the conversation still has in progress onto its own branch, releases its working copy, and keeps the entry and the record. Its scratch is not committed and goes with the copy. It leaves the live fleet and joins the archive. Refused for a conversation that is running.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `ids` required Which conversations | string[] | body |

### What comes back

| Field | Type |
| --- | --- |
| `moved` What actually moved, whole, rather than… | object[] |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `kind` | "agent" |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |
| `rev` The version of the fleet that… | number |
| `failed` The conversations this press could not… | object[] |
| `id` Which conversation stayed on the board | string |
| `reason` Why its working copy could not… | string |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/archive" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"ids":["a1b2c3d4","e5f6a7b8"]}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.archive({
 "ids": [
 "a1b2c3d4",
 "e5f6a7b8"
 ]
});
```

**POST`/agents/unarchive` Bring conversations back**

Returns archived conversations to the live fleet. The next turn picks up a fresh working copy from the branch that was kept.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `ids` required Which conversations | string[] | body |

### What comes back

| Field | Type |
| --- | --- |
| `moved` What actually moved, whole, rather than… | object[] |
| `id` The conversation id, which is how… | string |
| `sessionId` The provider session behind the last… | string |
| `title` What to call it: the first… | string |
| `titleAction` One word for the kind of… | string |
| `status` What it is doing | "idle" | "running" | "awaiting" | "stopping" … (13) |
| `failure` Why the last turn failed, in… | string |
| `failureCode` Which kind of failure it was,… | string |
| `limitResetsAt` When the spent allowance reopens, in… | number |
| `limitHeld` Whether the refused turn is held… | boolean |
| `limitScheduled` Whether the held turn is already… | boolean |
| `limitMoving` The account the held turn is… | string |
| `provider` Which model provider it runs on | string |
| `harness` Which agentic loop it runs on | "native" | "claude-code" |
| `runner` The runner this conversation runs on | string |
| `startIn` Which folder it opened in, relative… | string |
| `actsAs` Which persona its first turn acted… | string |
| `lastActsAs` Which persona its last turn acted… | string |
| `model` What its last turn ran with | string |
| `effort` How hard that turn was told… | string |
| `thinking` Whether that turn showed its reasoning | boolean |
| `fast` Whether that turn asked for higher… | boolean |
| `account` Which connected account paid for it | string |
| `branch` The branch its private copy works… | string |
| `autoLand` This conversation's own answer to whether… | boolean |
| `limitPolicy` | "wait" | "resend" | "move" |
| `outagePolicy` | "wait" | "retry" |
| `stopPolicy` | "wait" | "retry" |
| `landRequested` A collaborator has asked a maintainer… | object |
| `email` Who asked | string |
| `name` Their display name | string |
| `at` When they asked, in milliseconds | number |
| `reactions` What people have marked this conversation… | object[] |
| `emoji` The mark itself, one emoji, carried… | string |
| `by` Everyone wearing this mark, oldest first,… | object[] |
| `email` Who it was, as the sandbox… | string |
| `name` What to call them, when their… | string |
| `at` When they marked it, in milliseconds | number |
| `origin` Where the conversation came from when… | object |
| `automationId` | string |
| `provider` | string |
| `channelId` | string |
| `author` | string |
| `startedBy` Who asked for the first turn,… | string |
| `areas` Which named areas of the workspace… | string[] |
| `owner` The member answerable for this conversation:… | object |
| `email` Who answers for this conversation, as… | string |
| `name` What to call them, when the… | string |
| `since` When they became its owner, in… | number |
| `forkedFrom` The conversation this one was cut… | object |
| `conversationId` | string |
| `index` | integer |
| `files` | "then" | "now" |
| `base` The commit its private copy started… | string |
| `costUsd` What it has cost so far,… | number |
| `inputTokens` Uncached input tokens, excluding cache reads… | number |
| `outputTokens` Tokens received | number |
| `contextTokens` How much of the window the… | number |
| `contextWindow` How large that window is | number |
| `promptCache` When this conversation's prompt cache was… | object |
| `at` When its last request touched the… | number |
| `ttlMs` How long that entry lives from… | number |
| `rollsAt` When the date written into the… | number |
| `keepableUntil` Present when this sandbox can keep… | number |
| `keepWarm` Whether the sandbox is keeping this… | object |
| `since` When keeping it warm started, in… | number |
| `until` When it stops by itself, in… | number |
| `refreshes` Refreshes sent so far | integer |
| `readTokens` How much the last refresh read… | number |
| `ended` Why keeping it warm stopped before… | object |
| `at` When it stopped, in milliseconds | number |
| `reason` Why: `elapsed` the time asked for… | "elapsed" | "allowance" | "changed" | "cold" … (5) |
| `detail` The specifics, when there are any:… | string |
| `activity` What it is doing at this… | object |
| `tool` The last tool it reached for | string |
| `target` What it reached for that tool… | string |
| `todo` The item on its own list… | string |
| `checklist` How far it is through its… | object |
| `done` Items it has completed | number |
| `total` Items on the list | number |
| `landedMessageDraft` The whole story of this merge's… | object |
| `startedAt` When the drafting began, in milliseconds | number |
| `steps` Each model that was asked, in… | object[] |
| `provider` Which provider was asked | string |
| `model` Which of its models | string |
| `status` How this one went | "asking" | "answered" | "refused" | "skipped" |
| `at` When it started being asked, in… | number |
| `ms` How long it took | number |
| `reason` Why it refused, in its own… | string |
| `outcome` How it ended | "written" | "failed" |
| `reason` The one-line account of a failure,… | string |
| `finishedAt` When it ended, in milliseconds | number |
| `landedMessage` What this conversation's merged work is… | object |
| `subject` One line saying what the merged… | string |
| `note` The same change said to somebody… | string |
| `breaking` What this change takes away, for… | string |
| `testNote` Why a test this change weakened… | string |
| `allows` Exceptions the conversation declared for this… | string[] |
| `startedAt` When the running turn started, in… | number |
| `run` The run under way right now:… | string |
| `queue` Messages waiting for its next turn,… | object |
| `items` What waits, in the order it… | object[] |
| `id` The message's id: what its sender… | string |
| `text` The words, as they will go… | string |
| `attachments` Files that go with it, as… | string[] |
| `voice` Who it is from: a person,… | "person" | "sandbox" | "agent" |
| `queuedAt` When it joined the queue, in… | number |
| `revision` The queue's revision when this message… | integer |
| `revision` Moves with every change to the… | integer |
| `paused` Why nothing goes out by itself:… | "stopped" | "refused" | "scheduled" |
| `until` When scheduled messages go out by… | number |
| `after` The conversation whose finished work must… | string |
| `updatedAt` When it last did something, in… | number |
| `seenAt` When somebody last opened it, in… | number |
| `unsentAt` Since when somebody's composer has held… | number |
| `attention` Which kinds of waiting-for-you it is… | object |
| `plan` It has proposed a plan and… | boolean |
| `question` It has asked you something | boolean |
| `permission` It wants to use a tool… | boolean |
| `capability` It needs something connected that is… | boolean |
| `credential` It is waiting for a named… | boolean |
| `conflict` Its work cannot be merged without… | boolean |
| `need` It asked a person for something… | boolean |
| `permissionAsk` The oldest permission its running turn… | object |
| `requestId` Which request this is: the id… | string |
| `ask` What it asks to do, on… | string |
| `landFailure` The last attempt to bring its… | object |
| `reason` Why it failed, in the words… | string |
| `code` Which kind of failure it was,… | string |
| `at` When it failed, in milliseconds | number |
| `delivery` What became of its last land… | object |
| `state` | "delivered" | "partial" | "waiting" | "failed" … (5) |
| `at` When this state was reached, in… | number |
| `project` | string |
| `folder` The folder on the owner's computer,… | string |
| `applied` Files written, merged ones included | integer |
| `conflicts` | object[] |
| `path` | string |
| `reason` | "edited" | "link" | "outside" | "missing-git" |
| `point` The machine's restore point taken before… | string |
| `reason` Why it failed or waits, in… | string |
| `conflictCauses` Why its work will not merge,… | "workspace" | "diverged" | "binary"[] |
| `unfinished` What its last turn left open:… | object |
| `at` When the turn that left this… | number |
| `steps` The agent's own checklist where that… | object |
| `open` Items on it that were never… | number |
| `total` Items on the whole list | number |
| `next` The one it would have done… | string |
| `check` The end-of-turn check that was still… | string |
| `proof` What its last turn showed of… | object |
| `at` When the turn that left this… | number |
| `verification` Verified: a check it ran passed… | "verified" | "unproven" | "failing" | "no-code" |
| `check` The command that spoke, when one… | string |
| `unviewed` How many rendered files it changed… | number |
| `reach` Where its last turn's work went… | object |
| `at` When the turn that left this… | number |
| `live` Files it changed in place where… | object[] |
| `path` What it wrote, as it named… | string |
| `extension` The extension, by its manifest id,… | string |
| `liveMore` How many more such files there… | number |
| `stranded` Repositories it cloned inside its own… | object[] |
| `dir` The clone, as a folder relative… | string |
| `uncommitted` Files changed in it and never… | number |
| `unpushed` Commits in it its upstream does… | number |
| `strandedMore` How many more such clones there… | number |
| `published` Pushes it made with git that… | object[] |
| `dir` The folder it pushed from, as… | string |
| `remote` The remote it pushed to, as… | string |
| `branch` The branch it pushed to, as… | string |
| `command` The push itself, trimmed to one… | string |
| `publishedMore` How many more such pushes there… | number |
| `turns` Turns it has finished | number |
| `toolUses` Tools it has used, over its… | number |
| `subagents` Subagents this one started, in-process and… | object |
| `running` Subagents working right now | number |
| `total` Subagents it has started over its… | number |
| `diff` Everything it has written, measured from… | object |
| `files` Files touched | number |
| `insertions` Lines added | number |
| `deletions` Lines removed | number |
| `landedPresence` Present only when some of what… | object |
| `landed` Paths this conversation merged in | number |
| `present` How many of them are still… | number |
| `removedBy` Who took them out, when the… | object |
| `kind` | "agent" |
| `id` The conversation that took them out | string |
| `title` What that conversation is called | string |
| `loop` The loop driving this conversation, if… | object |
| `state` How the loop is going | "running" | "done" | "exhausted" | "stalled" … (8) |
| `iteration` Which round it is on | integer |
| `maxIterations` How many rounds it will attempt… | integer |
| `goal` What it is looping towards | string |
| `workflow` The workflow run this conversation is… | object |
| `runId` The run this belongs to, which… | string |
| `name` The workflow's name | string |
| `step` Which step this conversation is on… | string |
| `index` This step's place in the workflow,… | integer |
| `total` How many steps the workflow has | integer |
| `awaitingWake` Whether this conversation runs again by… | boolean |
| `watches` Outside conditions this conversation is parked… | object[] |
| `id` The daemon's handle for this watch,… | string |
| `note` The agent's own line on what… | string |
| `intervalSeconds` How often the check runs | integer |
| `deadlineAt` When it gives up and wakes… | number |
| `needs` What it is waiting on people… | object[] |
| `id` | string |
| `kind` What is being asked for: a… | "capability" | "secret" | "grant" | "release" … (5) |
| `title` | string |
| `status` Where it stands: open (waiting on… | "open" | "working" | "met" | "declined" … (5) |
| `jobs` Commands this conversation left running in… | object[] |
| `id` The daemon's handle for this job,… | string |
| `label` What the job is, in the… | string |
| `session` The terminal session its pane runs… | string |
| `startedAt` When it started, in milliseconds | number |
| `endedAt` When the command exited, in milliseconds | number |
| `exitCode` The code it exited with | integer |
| `watch` The watch its exit wakes this… | string |
| `handed` Left running for the person: the… | boolean |
| `ports` The ports it was listening on… | integer[] |
| `stoppedBy` Who stopped it: the sandbox, when… | "turn" | "person" | "agent" |
| `inputWait` Present while it sits blocked reading… | object |
| `since` When it went still, in milliseconds | number |
| `program` The process blocked reading the terminal,… | string |
| `archivedAt` When it was put away, in… | number |
| `rev` The version of the fleet that… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/unarchive" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"ids":["a1b2c3d4","e5f6a7b8"]}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.unarchive({
 "ids": [
 "a1b2c3d4",
 "e5f6a7b8"
 ]
});
```

**POST`/agents/purge` Empty the archive for good**

Discards every conversation already in the archive: working copies, branches and entries. The whole archive rather than a chosen few, because the archive is the pile somebody has already decided is over. A teardown that fails on one conversation leaves that one behind instead of taking the rest down with it.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `removed` Which conversations were deleted, as ids | string[] |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/agents/purge" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.agents.purge();
```

More in Agents

[Previous ← One agent](https://intentic.dev/api/agent/)[Next Past sessions →](https://intentic.dev/api/sessions/)
