RPC and API

OpenClaw App-SDK

De OpenClaw App SDK is de openbare client-API voor apps buiten het OpenClaw-proces. Gebruik @openclaw/sdk wanneer een script, dashboard, CI-taak, IDE-extensie of andere externe app verbinding wil maken met de Gateway, agentruns wil starten, events wil streamen, op resultaten wil wachten, werk wil annuleren of Gateway-resources wil inspecteren.

Wat vandaag wordt meegeleverd

@openclaw/sdk wordt meegeleverd met:

Oppervlak Status Wat het doet
OpenClaw Gereed Hoofdentrypoint voor de client. Beheert transport, verbinding, requests en events.
GatewayClientTransport Gereed WebSocket-transport ondersteund door de Gateway-client.
oc.agents Gereed Toont, maakt, werkt bij, verwijdert en haalt agenthandles op.
Agent.run() Gereed Start een Gateway-agent-run en retourneert een Run.
oc.runs Gereed Maakt, haalt op, wacht op, annuleert en streamt runs.
Run.events() Gereed Streamt genormaliseerde events per run met replay voor snelle runs.
Run.wait() Gereed Roept agent.wait aan en retourneert een stabiele RunResult.
Run.cancel() Gereed Roept sessions.abort aan op run-id, met sessiesleutel wanneer beschikbaar.
oc.sessions Gereed Maakt, lost op, verzendt naar, patcht, compacteert en haalt sessiehandles op.
Session.send() Gereed Roept sessions.send aan en retourneert een Run.
oc.models Gereed Roept models.list en de huidige status-RPC models.authStatus aan.
oc.tools Gereed Toont, scoped en roept Gateway-tools aan via de beleids-pipeline.
oc.artifacts Gereed Toont, haalt op en downloadt Gateway-transcriptartefacten.
oc.approvals Gereed Toont en lost uitvoeringsgoedkeuringen op via Gateway-goedkeurings-RPC’s.
oc.environments Gedeeltelijk Toont Gateway-lokale en node-omgevingskandidaten; aanmaken/verwijderen is niet aangesloten.
oc.rawEvents() Gereed Stelt ruwe Gateway-events beschikbaar voor geavanceerde consumers.
normalizeGatewayEvent() Gereed Zet ruwe Gateway-events om naar de stabiele SDK-eventvorm.

De SDK exporteert ook de kerntypen die door die oppervlakken worden gebruikt: AgentRunParams, RunResult, RunStatus, OpenClawEvent, OpenClawEventType, GatewayEvent, OpenClawTransport, GatewayRequestOptions, SessionCreateParams, SessionSendParams, ArtifactSummary, ArtifactQuery, ArtifactsListResult, ArtifactsGetResult, ArtifactsDownloadResult, RuntimeSelection, EnvironmentSelection, WorkspaceSelection, ApprovalMode en gerelateerde resultaattypen.

Verbinden met een Gateway

Maak een client met een expliciete Gateway-URL, of injecteer een aangepast transport voor tests en ingebedde app-runtimes.


const oc = new OpenClaw({
  url: "ws://127.0.0.1:18789",
  token: process.env.OPENCLAW_GATEWAY_TOKEN,
  requestTimeoutMs: 30_000,
});

await oc.connect();

new OpenClaw({ gateway: "ws://..." }) is gelijkwaardig aan url. De optie gateway: "auto" wordt door de constructor geaccepteerd, maar automatische Gateway- detectie is nog geen afzonderlijke SDK-functie; geef url door wanneer de app niet al weet hoe de Gateway moet worden ontdekt.

Geef voor tests een object door dat OpenClawTransport implementeert:

const oc = new OpenClaw({
  transport: {
    async request(method, params) {
      return { method, params };
    },
    async *events() {},
  },
});

Een agent uitvoeren

Gebruik oc.agents.get(id) wanneer de app een agenthandle wil, en roep daarna agent.run() aan.

const agent = await oc.agents.get("main");

const run = await agent.run({
  input: "Review this pull request and suggest the smallest safe fix.",
  model: "openai/gpt-5.5",
  sessionKey: "main",
  timeoutMs: 30_000,
});

for await (const event of run.events()) {
  const data = event.data as { delta?: unknown };
  if (event.type === "assistant.delta" && typeof data.delta === "string") {
    process.stdout.write(data.delta);
  }
}

const result = await run.wait({ timeoutMs: 120_000 });
console.log(result.status);

Providergekwalificeerde modelreferenties zoals openai/gpt-5.5 worden opgesplitst in Gateway- overschrijvingen voor provider en model. timeoutMs blijft in de SDK milliseconden en wordt voor de agent-RPC omgezet naar Gateway-time-outseconden.

run.wait() gebruikt de Gateway-agent.wait-RPC. Een wachtdeadline die verloopt terwijl de run nog actief is, retourneert status: "accepted" in plaats van te doen alsof de run zelf een time-out heeft gehad. Runtime-time-outs, afgebroken runs en geannuleerde runs worden genormaliseerd naar timed_out of cancelled.

Sessies maken en hergebruiken

Gebruik sessies wanneer de app duurzame transcriptstatus wil.

const session = await oc.sessions.create({
  agentId: "main",
  label: "release-review",
});

const run = await session.send("Prepare release notes from the current diff.");
await run.wait();

Session.send() roept sessions.send aan en retourneert een Run. Sessiehandles ondersteunen ook:

await session.abort(run.id);
await session.patch({ label: "renamed-session" });
await session.compact({ maxLines: 200 });

Events streamen

De SDK normaliseert ruwe Gateway-events naar een stabiele OpenClawEvent-envelop:

type OpenClawEvent = {
  version: 1;
  id: string;
  ts: number;
  type: OpenClawEventType;
  runId?: string;
  sessionId?: string;
  sessionKey?: string;
  taskId?: string;
  agentId?: string;
  data: unknown;
  raw?: GatewayEvent;
};

Veelvoorkomende eventtypen zijn:

Eventtype Bron-Gateway-event
run.started Start van agent-levenscyclus
run.completed Einde van agent-levenscyclus
run.failed Fout in agent-levenscyclus
run.cancelled Einde van afgebroken/geannuleerde levenscyclus
run.timed_out Einde van time-outlevenscyclus
assistant.delta Streamingdelta van assistant
assistant.message Assistantbericht
thinking.delta Denk- of planstream
tool.call.started Start van tool/item/command
tool.call.delta Update van tool/item/command
tool.call.completed Voltooiing van tool/item/command
tool.call.failed Mislukking of geblokkeerde status van tool/item/command
approval.requested Aanvraag voor uitvoerings- of plugingoedkeuring
approval.resolved Oplossing van uitvoerings- of plugingoedkeuring
session.created sessions.changed aanmaken
session.updated sessions.changed update
session.compacted sessions.changed compactie
task.updated Taakupdate-events
artifact.updated Patchstream-events
raw Elk event zonder stabiele SDK-mapping tot nu toe

Run.events() filtert events op één run-id en speelt al geziene events opnieuw af voor snelle runs. Dat betekent dat de gedocumenteerde flow veilig is:

const run = await agent.run("Summarize the latest session.");

for await (const event of run.events()) {
  if (event.type === "run.completed") {
    break;
  }
}

Gebruik oc.events() voor app-brede streams. Gebruik oc.rawEvents() voor ruwe Gateway-frames.

Modellen, tools, artefacten en goedkeuringen

Modelhelpers mappen naar huidige Gateway-methoden:

await oc.models.list();
await oc.models.status({ probe: false }); // calls models.authStatus

Toolhelpers stellen de Gateway-catalogus, effectieve toolweergave en directe Gateway-toolaanroep beschikbaar. oc.tools.invoke() retourneert een getypte envelop in plaats van te throwen bij weigeringen door beleid of goedkeuring.

await oc.tools.list();
await oc.tools.effective({ sessionKey: "main" });
await oc.tools.invoke("tool-name", {
  args: { input: "value" },
  sessionKey: "main",
  confirm: false,
  idempotencyKey: "tool-call-1",
});

Artefacthelpers stellen de Gateway-artefactprojectie beschikbaar voor sessie-, run- of taakcontext. Elke call vereist één expliciete scope met sessionKey, runId of taskId:

const { artifacts } = await oc.artifacts.list({ sessionKey: "main" });
const first = artifacts[0];

if (first) {
  const { artifact } = await oc.artifacts.get(first.id, { sessionKey: "main" });
  const download = await oc.artifacts.download(artifact.id, { sessionKey: "main" });
  console.log(download.encoding, download.url);
}

Goedkeuringshelpers gebruiken de uitvoeringsgoedkeurings-RPC’s:

const approvals = await oc.approvals.list();
await oc.approvals.respond("approval-id", { decision: "approve" });

Omgevingshelpers stellen alleen-lezen Gateway-lokale en node-detectie beschikbaar:

const { environments } = await oc.environments.list();
await oc.environments.status(environments[0].id);

Vandaag expliciet niet ondersteund

De SDK bevat namen voor het productmodel dat we willen, maar doet niet stilzwijgend alsof Gateway-RPC’s bestaan. Deze calls throwen momenteel expliciete niet-ondersteund- fouten:

await oc.tasks.list();
await oc.tasks.get("task-id");
await oc.tasks.cancel("task-id");

await oc.environments.create({});
await oc.environments.delete("environment-id");

Per-runvelden workspace, runtime, environment en approvals zijn getypt als toekomstige vorm, maar de huidige Gateway ondersteunt die overschrijvingen niet op de agent-RPC. Als callers ze doorgeven, throwt de SDK voordat de run wordt ingediend, zodat werk niet per ongeluk wordt uitgevoerd met standaardgedrag voor workspace, runtime, omgeving of goedkeuring.

App SDK versus Plugin SDK

Gebruik de App SDK wanneer code buiten OpenClaw leeft:

  • Node-scripts die agentruns starten of observeren
  • CI-taken die een Gateway aanroepen
  • dashboards en beheerderspanelen
  • IDE-extensies
  • externe bridges die geen kanaalplugins hoeven te worden
  • integratietests met neppe of echte Gateway-transports

Gebruik de Plugin SDK wanneer code binnen OpenClaw draait:

  • providerplugins
  • kanaalplugins
  • tool- of levenscyclus-hooks
  • agentharnas-plugins
  • vertrouwde runtimehelpers

App SDK-code moet importeren uit @openclaw/sdk. Plugincode moet importeren uit gedocumenteerde subpaden onder openclaw/plugin-sdk/*. Meng de twee contracten niet.

Gerelateerd