intentic
Create your workspace
Ship and share

Pipelines

Continuous integration runs, and asking an agent to fix a red one

On this page(6 sections)

Read the runs and the jobs inside them, re-run or cancel one, and mark the board read. The interesting one hands a failing run to an agent rather than to you.

GET/ci/runsPipeline runs across the repos

What the forges are reporting for every workspace repo that has a remote, served from a cache and filled in on demand. Repos whose notifications are not wired up say so.

What you send

Nothing. Call it as it is.

What comes back

FieldType
reposWhich workspace repositories are wired to…object[]
repoWhich workspace repositorystring
hostWhich forge it lives on"github" | "gitlab"
projectThe project therestring
urlIts page on the forgestring
hookWarningPresent when the sandbox could not…string
runsRuns across all of them, newest…object[]
repoWhich workspace repository it belongs tostring
hostWhich forge is running it"github" | "gitlab"
projectThe project there, as that forge…string
runIdThe forge's own id for the…number
titleThe run's headline, usually the commit…string
authorNameWho the forge credits for setting…string
authorAvatarUrlTheir picture, hosted by the forgestring
triggerWhat set it off, in the…string
branchWhich branchstring
shaWhich commitstring
statusHow it is going"running" | "success" | "failed" | "canceled" … (5)
urlIts page on the forgestring
createdAtWhen it started, in millisecondsnumber
durationSecondsHow long it tooknumber
failedJobsWhat broke, by namestring[]
seenAtWhen this was last looked at,…number
Try itanswered in this tab
curl
curl "$SANDBOX/ci/runs" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.ci.runs();
POST/ci/runs/rerunRun a pipeline again

Asks the forge to re-run one pipeline. The daemon only passes the request along.

What you send

FieldTypeWhere
reporequiredWhich workspace repositorystringbody
runIdrequiredWhich run, by the forge's own…numberbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/ci/runs/rerun" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"repo":"root","runId":1}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.ci.rerun({
  "repo": "root",
  "runId": 1
});
POST/ci/runs/cancelCancel a pipeline run

Asks the forge to stop a run in progress.

What you send

FieldTypeWhere
reporequiredWhich workspace repositorystringbody
runIdrequiredWhich run, by the forge's own…numberbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/ci/runs/cancel" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"repo":"root","runId":1}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.ci.cancel({
  "repo": "root",
  "runId": 1
});
POST/ci/runs/jobsThe steps inside one pipeline run

Each job in a run with its outcome, which is where you look to find out what actually broke.

What you send

FieldTypeWhere
reporequiredWhich workspace repositorystringbody
runIdrequiredWhich run, by the forge's own…numberbody

What comes back

FieldType
jobsThe steps inside one runobject[]
nameThe job's namestring
statusHow it went"running" | "success" | "failed" | "canceled" … (5)
stageWhich stage it belongs to, where…string
needsWhich jobs in this run it…string[]
startedAtWhen it began, in millisecondsnumber
finishedAtWhen it ended, in millisecondsnumber
durationSecondsHow long it tooknumber
webUrlIts page on the forge, which…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/ci/runs/jobs" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"repo":"root","runId":1}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.ci.jobs({
  "repo": "root",
  "runId": 1
});
POST/ci/fixPut an agent on a broken pipeline

Opens a fresh isolated conversation already holding the failure: which job, which repo, what it said. The answer names the conversation so you can open it.

What you send

FieldTypeWhere
reporequiredWhich workspace repositorystringbody
runIdrequiredWhich run, by the forge's own…numberbody
pickWhich model to open the conversation…objectbody
agentrequiredWhich providerstringbody
modelrequiredWhich of its modelsstringbody

What comes back

FieldType
conversationIdThe conversation that was opened, already…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/ci/fix" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"repo":"root","runId":1,"pick":{"agent":"…","model":"claude-sonnet-4-6"}}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.ci.fix({
  "repo": "root",
  "runId": 1,
  "pick": {
    "agent": "",
    "model": "claude-sonnet-4-6"
  }
});
POST/ci/seenMark the pipelines as read

Silences the badge for breakages already looked at. Takes nothing, because the view is read as a whole, and the daemon stamps its own clock so a browser with the wrong time cannot mark future failures as already seen.

What you send

Nothing. Call it as it is.

What comes back

FieldType
seenAtThe timestamp that was written, handed…number
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/ci/seen" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.ci.seen();
More in Ship and share

Type to search every page, in the docs and the API reference.