Skip to main content
Use this when a run is live and you need to act on it. Every change to a running execution is a command. People, supervisors, REST, MCP, the CLI and the web UI all send the same commands through the same pipeline: commands for one run are applied in the order sent, the caller’s answer arrives after the command was applied, and each one is recorded in the run log with its actor (key:<name>, a supervisor id or the UI user). Prerequisites: add -H "X-API-Key: $YUKTA_API_KEY" to every curl if your server has keys. Before a command runs, supervisors may refuse it; a refusal answers 403 and is logged.

Steps

1

Create a run that lasts long enough

Save as steer.json. The wait node holds each message for 45 seconds, then go shapes it:
steer.json
2

Pause and resume

Pausing stops the run, or one node, from taking new messages; the message in hand finishes. All time limits freeze while paused.
3

Step, or stop at a breakpoint

Step mode holds a node’s input so you see one message at a time: enable it, call step once per message, disable it to return to normal flow. A breakpoint holds a node before the first message whose payload, a path such as payload.order.id, or a metadata.key equals a given text.
Resume the node to continue past a breakpoint. The call is in the control API.
4

Skip a node

Skipping a processor passes messages through it without calling its plugin, from the next message on; a message already inside finishes. Other node kinds reject it. A second call unskips.
5

Stop the way you mean to

A single node can be stopped too: POST /api/executions/{id}/nodes/{node}/stop.
6

Restart, or retry a node

Recent finished runs stay restartable (the newest 10 by default). A node over the replay caps makes a restart refuse rather than replay half. After a server restart, resume instead (Durability). A restart takes a slot like a new start, so it can queue or answer 429.

Verify it worked

lists the commands you sent with their actor and whether each was applied or rejected. A paused run shows controlState PAUSED in its progress, and its wait node does not finish while paused: the 45 seconds do not elapse until you resume. The CLI has the node commands (yukta-cli workflow node pause|resume|stop|skip|retry|breakpoint|step) and workflow executions stop|restart; MCP has control_workflow and control_node.

Who can do what

A node that waits for a person is answered through an input request rather than a control command (Ask for approval).

Variations

Run the server in the console or in the background

yukta shows itself three ways, picked in this order: --plain, then --mode=console|plain|daemon, then YUKTA_MODE. In the console, q stops the server, l shows full-screen logs, r the longer run list, f cycles the log level filter and ? helps. Set NO_COLOR for plain text.
State is kept in $YUKTA_HOME, else $XDG_STATE_HOME/yukta, else ~/.local/state/yukta (yukta.pid and yukta.log, not rotated). Use systemd or the container image on servers; do not run yukta start inside either (Deploy). The daemon commands are for Linux and macOS.