intentic
Create your workspace
Connected systems

Capabilities

The outside systems this sandbox is wired into, and connecting a new one

On this page(11 sections)

A capability is a system the agent can reach: a forge account, a chat server, a database, one of your own machines. These routes connect and disconnect them, carry the credential each needs, report whether a connection is live, and drive the interactive parts of a sign-in, including a one-time code.

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

GET/capabilitiesEverything this sandbox is connected to

Each connection with its live state, the settings that are safe to show, and the names of the credentials it holds. The values of those credentials are never in the answer, on any route but one.

What you send

Nothing. Call it as it is.

What comes back

FieldType
capabilitiesWhat this sandbox is connected toobject[]
idThe connection's idstring
kindWhat sort of thing it is"devops" | "monorepo" | "mcp" | "service" … (19)
statusWhether it is workingobject
stateWhether it is live, still coming…"active" | "pending" | "error" | "inactive"
detailWhat is wrong, in words a…string
codeA short marker for that reason,…string
configIts settings, minus anything secretobject
secretsWhich credentials it holds, by namestring[]
recommendationsThings worth connecting, worked out from…object[]
cardWhich connection is being suggestedstring
evidenceWhat was seen that prompted it:…string
reasonThe same claim in words, without…string
prefillSettings the scan could read, to…object
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.list();
POST/capabilitiesConnect something, or change a connectionstream

Writes a connection and streams the work of applying it, because some kinds provision real infrastructure and take a while. Sending an id that already exists edits that connection: this is the edit as well as the create. Since a caller is never shown stored credentials, it marks the ones it is leaving alone and the daemon fills them in, which is the only way to change one setting without retyping a key.

What you send

FieldTypeWhere
when kind is "devops"shapebody
idrequiredstringbody
configrequiredobjectbody
when kind is "monorepo"shapebody
idrequiredstringbody
configrequiredobjectbody
when kind is "mcp"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredWhere the tool server answersstringbody
tokenThe credential it needs, if anystringbody
when kind is "service"shapebody
idrequiredstringbody
configrequiredobjectbody
servicerequiredWhich service to provision"signoz" | "outline" | "paperless" | "openproject" … (6)body
domainrequiredThe address it should answer onstringbody
onrequiredWhich machine to put it onstringbody
exposerequiredHow it should be reachablestringbody
when kind is "integration"shapebody
idrequiredstringbody
configrequiredobjectbody
providerrequiredWhich outside service's credential to make…"stripe"body
when kind is "cli"shapebody
idrequiredstringbody
configrequiredobjectbody
providerrequiredWhich tool to give the agentstringbody
when kind is "plugin"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredThe repository to take the plugin…stringbody
refA branch, tag or commit to…stringbody
pathWhere inside the repository the plugin…stringbody
tokenA credential for a private repositorystringbody
when kind is "extension"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredThe repository to take the extension…stringbody
refrequiredThe exact commit to install, in…stringbody
pathWhere inside the repository the extension…stringbody
tokenA credential for a private repositorystringbody
tierWhether installing this donates credits to…"free" | "premium"body
registryWhich registry this install came from,…stringbody
when kind is "ssh"shapebody
idrequiredstringbody
configrequiredobjectbody
when auth is "key"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
privateKeyrequiredThe private key, wholestringbody
when auth is "password"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
passwordrequiredThe passwordstringbody
when kind is "vpn"shapebody
idrequiredstringbody
configrequiredobjectbody
when provider is "wireguard"shapebody
configrequiredstringbody
autoConnect"on" | "off"body
when provider is "fortinet"shapebody
serverrequiredstringbody
portintegerbody
usernamerequiredstringbody
passwordrequiredstringbody
trustedCertstringbody
realmstringbody
autoConnect"on" | "off"body
when provider is "ipsec"shapebody
serverrequiredstringbody
presharedKeyrequiredstringbody
localIdstringbody
remoteIdstringbody
usernamestringbody
passwordstringbody
ikeVersion"1" | "2"body
pfs"on" | "off"body
dhGroup"2" | "5" | "14" | "15" … (7)body
aggressive"on" | "off"body
routedNetworksstringbody
autoConnect"on" | "off"body
when kind is "exit"shapebody
idrequiredstringbody
configrequiredobjectbody
when provider is "tor"shapebody
countrystringbody
autoStart"on" | "off"body
when provider is "vpngate"shapebody
countrystringbody
autoStart"on" | "off"body
when provider is "wireguard"shapebody
configrequiredstringbody
countrystringbody
autoStart"on" | "off"body
when kind is "docker"shapebody
idrequiredstringbody
configrequiredobjectbody
gpu"on" | "off"body
registryMirrorstringbody
insecureRegistriesstringbody
addressPoolstringbody
when kind is "browser"shapebody
idrequiredstringbody
configrequiredobjectbody
platformrequiredstringbody
usernamestringbody
passwordstringbody
identitystringbody
purposestringbody
openedAtstringbody
exitstringbody
when kind is "identity"shapebody
idrequiredstringbody
configrequiredobjectbody
emailrequiredstringbody
passwordstringbody
mailboxstringbody
loginUrlstringbody
openAccounts"on" | "off"body
exitstringbody
when kind is "host"shapebody
idrequiredstringbody
configrequiredobjectbody
shell"on" | "off"body
write"on" | "off"body
screen"on" | "off"body
control"on" | "off"body
sandboxes"on" | "off"body
sandboxRemove"on" | "off"body
rootsstringbody
platformrequiredstringbody
when kind is "agent"shapebody
idrequiredstringbody
configrequiredobjectbody
commandrequiredstringbody
namestringbody
envstringbody
loginCommandstringbody
when kind is "endpoint"shapebody
idrequiredstringbody
configrequiredobjectbody
baseUrlrequiredstringbody
protocol"openai" | "anthropic"body
apiKeystringbody
headersstringbody
when kind is "localmodel"shapebody
idrequiredstringbody
configrequiredobjectbody
modelrequiredstringbody
gpu"on" | "off"body
urlstringbody
context"16384" | "32768" | "65536" | "131072" | "custom"body
contextTokensintegerbody
when kind is "wallet"shapebody
idrequiredstringbody
configrequiredobjectbody
network"eip155:8453" | "eip155:84532"body
addressstringbody
perPaymentMaxUsdstringbody
autoApproveUnderUsdstringbody
dailyCapUsdstringbody
allowstringbody
denystringbody

What comes back

FieldType
when event is "message"shape
dataobject
kindstring
idstring
retrynumber
when event is "done"shape
dataunknown
idstring
retrynumber
when event is "error"shape
dataunknown
idstring
retrynumber
Try itanswered in this tab
curl
curl -N -X POST "$SANDBOX/capabilities" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"id":"a1b2c3d4","kind":"devops","config":{}}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.add({
  "id": "a1b2c3d4",
  "kind": "devops",
  "config": {}
});
DELETE/capabilities/{id}Disconnect something

Tears a connection down. The kinds that own real infrastructure refuse, because deleting those would be losing data rather than losing a connection.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X DELETE "$SANDBOX/capabilities/a1b2c3d4" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.remove({
  "id": "a1b2c3d4"
});
POST/capabilities/{id}/renameRename a connection

Carries everything the old name keyed across with it: a browser profile and its logins, an enrolled machine, an extension's copy of its source. Removing and re-adding would lose exactly the state that made the connection worth keeping. Kinds whose name is part of what they are refuse.

What you send

FieldTypeWhere
idrequiredstringaddress
torequiredstringbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/a1b2c3d4/rename" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"to":"src/server.ts"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.rename({
  "id": "a1b2c3d4",
  "to": "src/server.ts"
});
POST/capabilities/{id}/secretReplace a stored credential

Swaps one connection's key or token for a new one and re-applies it, without touching any of its other settings.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress
valuerequiredThe new credentialstringbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/a1b2c3d4/secret" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"value":"…"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.setSecret({
  "id": "a1b2c3d4",
  "value": ""
});
GET/capabilities/{id}/statusRe-check one connection

Probes a single connection right now, for a screen that wants to refresh one row rather than the whole list.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
stateWhether it is live, still coming…"active" | "pending" | "error" | "inactive"
detailWhat is wrong, in words a…string
codeA short marker for that reason,…string
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities/a1b2c3d4/status" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.status({
  "id": "a1b2c3d4"
});
GET/capabilities/{id}/connectionA connection's settings, credentials included

The one call that hands back stored secrets, so an extension's own backend can dial the service behind a connection. Never answered for a signed-in person: only a machine credential reaches it, and an extension's only if its manifest asked for this route out loud at install time.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
idThe connection's idstring
kindWhat sort of thing it isstring
configIts settings exactly as stored, credentials…object
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities/a1b2c3d4/connection" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.connection({
  "id": "a1b2c3d4"
});
POST/capabilities/marketplaceRead a plugin marketplace

Resolves a plugin marketplace source into the list of connections you could install from it.

What you send

FieldTypeWhere
urlrequiredThe registry to readstringbody
tokenA credential for a private onestringbody

What comes back

FieldType
nameWhat the registry calls itselfstring
pluginsWhat it lists, each with the…object[]
namestring
descriptionstring
versionstring
kind"plugin" | "extension"
trust"verified" | "listed" | "blocked"
trustReasonstring
securityReviewobject
shastring
urlstring
pathstring
policystring
reviewerstring
reviewedAtstring
runIdstring
deterministicobject
policystring
scannerstring
versionstring
runIdstring
admittedboolean
securityFixboolean
tier"free" | "premium"
categorystring
artstring
logostring
iconstring
homepagestring
installobject
urlstring
refstring
pathstring
starsinteger
pushedAtstring
checksobject
shastring
manifeststring
bundlestring
enginesstring
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/marketplace" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"url":"https://sandbox-a1b2c3d4e5f6.intentic.dev","token":"ict_9wQ4rTz8kLmN3pXbV7hJ"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.marketplace({
  "url": "https://sandbox-a1b2c3d4e5f6.intentic.dev",
  "token": "ict_9wQ4rTz8kLmN3pXbV7hJ"
});
DELETE/capabilities/recommendations/{card}Stop suggesting this connection

Not needed, for now. Nothing is torn down. The suggestion comes back if what prompted it in the workspace changes, because what is remembered is the evidence, not the refusal.

What you send

FieldTypeWhere
cardrequiredWhich suggestion to stop makingstringaddress

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X DELETE "$SANDBOX/capabilities/recommendations/%E2%80%A6" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.dismiss({
  "card": ""
});
POST/capabilities/{id}/loginSign in to a connection by hand

Opens the connection's own sign-in in a terminal a person can type into, for the flows that need a code pasted or a device confirmed. The answer names the terminal to attach to.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
sessionThe terminal the sign-in is happening…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/a1b2c3d4/login" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.login({
  "id": "a1b2c3d4"
});
GET/capabilities/{id}/otpMint a one-time code

Generates a single two-factor code from a stored seed. The one credential-adjacent read an agent is allowed, and it is safe because a code expires in seconds and never reveals the seed, so an agent can answer a prompt without ever holding the factor.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
codeThe codestring
secondsRemainingHow long it lastsnumber
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities/a1b2c3d4/otp" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.otp({
  "id": "a1b2c3d4"
});
More in Connected systems

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