Give your agent the docs
- /llms.txt is a short summary and map of the site, in the llms.txt format.
- /llms-full.txt is the v2 specification, guides and comparisons in one markdown file. Paste it, or point the agent at it.
- Every page has a markdown copy at its URL with
.mdappended (index.html.mdfor a URL ending in/). For example, runs.html.md. - Machine-readable contracts: the REST API (OpenAPI) and event stream (AsyncAPI), and JSON schemas at their canonical
$id.
Let your agent act on a host
An agent talks to a host over REST and Server-Sent Events, or through the CLI:
npm install -g @openwop/cli
export OPENWOP_BASE_URL=https://app.openwop.dev/api
openwop capabilities # what the host advertises
openwop doctor # connectivity and advertised-capability check
Every v2 request sends OpenWOP-Version: 2. Calls other than discovery need an API key in the Authorization header; see the CLI for keys and scopes. Give an agent the narrowest key that does the job: a read-only key cannot start a run.
Skills
Each skill is written for an agent to follow. Copy the ones you need into your agent's instructions, or point it at this page's markdown copy.
Skill: discover a host before acting
Use when you are about to call an OpenWOP host you have not inspected in this session.
GET /.well-known/openwop(no credentials). ReadprotocolVersions,preferredVersionand the advertised capabilities.- If the host does not list
2.0, stop and report: v2 calls will fail. - Before using an optional feature (replay, approvals routing, triggers, extensions), confirm the host advertises it. If it does not, tell the user instead of trying the call.
Never guess a capability from a host's name or from another host. Each host advertises its own.
Skill: start a run and stream its events
Use when the user asks to run a registered workflow.
- Discover the host (skill above).
POST /runswith{"workflowId": "…", "inputs": {…}}, theOpenWOP-Version: 2header and anIdempotency-Keyyou generate once. A retry with the same key never starts a second run.- Read
runIdfrom the response, then streamGET /runs/{runId}/events(Server-Sent Events) or pollGET /runs/{runId}/events/poll. - Report progress from the events (
run.started,node.started,agent.decided,interrupt.requested,run.completed,run.failed), not from guesses. - Done when a terminal event arrives. Report the outcome and the
runId.
Never put secret values in inputs. Hosts reference credentials by name (bring your own key); the values stay on the host.
Skill: handle a human approval
Use when a run emits interrupt.requested with an approval kind.
- Show the person what is being asked: the payload's question, context and the allowed
actions(a subset ofaccept,reject,refine,edit-accept,ask). - Wait for the person's decision. Do not choose an action yourself unless the person has explicitly told you to, for this run.
- Resolve with
POST /runs/{runId}/interrupts/{nodeId}(orPOST /interrupts/{token}when you were given a token), body{"resumeValue": {…}}carrying the chosenaction, its required field (refineFeedbackfor refine,editedArtifactDatafor edit-accept) anddecidedAt. Send anIdempotency-Key. - A
409 interrupt_already_resolvedmeans someone else decided first, or the run ended. Read the run's events and report; do not retry. - Done when the stream shows
interrupt.resolvedand thenrun.resumed.
Skill: fork or replay a run
Use when the user wants to see a past run play out again, or try a different path from an earlier step.
- Confirm the host advertises
replayand whichmodesit supports (replay,branch). POST /runs/{runId}:forkwith{"mode": "replay" | "branch", "fromSeq": n}. Events beforefromSeqare fixed history; events fromfromSeqon run again.- In
replaymode the host MUST suppress side effects that were already performed, so a replay never pays an invoice twice. Inbranchmode the new run is independent and may act for real: confirm with the person before starting a branch that could take external actions. 422 fork_point_invalidor400meansfromSeqis out of range. Read the source run's events to pick a valid step.- Done when the fork's own run completes. Report both
runIds.
Skill: check a host with the conformance suite
Use when the user is building or evaluating a host and asks whether it complies.
- Install the suite and its contract package at the same version, as the quickstart shows.
- Run
npx openwop-conformance --base-url "$OPENWOP_BASE_URL" --target-major 2. - Report the counts as the suite prints them: pass, fail, blocked, inapplicable and skipped.
inapplicablemeans the host does not advertise that optional surface; it is not a failure. - Never describe a host as conformant to a profile unless the bundle shows every floor requirement of that profile witnessed with nothing blocked. See conformance.
Rules for any agent working with OpenWOP
- Inspect before you change: discovery and reads first, then writes.
- Send an
Idempotency-Keyon every mutating call. - Leave approvals to people unless told otherwise, for that run.
- Never send, log or echo secret values; refer to credentials by name.
- Report what the event log says happened. Route on error codes, never on error messages (errors).
- Prefer
replaytobranchwhen the goal is to look, not to act.
When OpenWOP is not the right tool
If you are building a single agent application, a framework such as LangGraph or CrewAI is less overhead. For production durable execution today, Temporal is more mature. For visual automation with many integrations, n8n fits better. OpenWOP is new, has one steward, and no independent organisation has implemented a host yet. See the comparisons.