Detached runs
A server job executes inside the threadle process, not the browser tab. Close the tab, quit the browser, walk away — the run continues, logs into the job registry, and persists node statuses and outputs back to the graph under ~/.config/threadle/graphs/.
You already use this path when you press ▶ Run on a graph without interactive gates. ≫ is the explicit control (including approve-all for gates). The CLI can start the same jobs against a running server.
Same executor, different assumptions
Section titled “Same executor, different assumptions”Server jobs use the same engine as an in-tab run: prompts, converters, knots, iterators, tripwires, custom nodes, agents, sessions, frames, mute/bypass, retry and continue-on-error.
What changes when no human is present:
| Thing | In-tab (gates / partial) | Server job |
|---|---|---|
| Approval / live handoff / tripwire park | Interactive, with splice | Needs approve-all; text is forwarded unchanged |
| Context nodes | Can materialize during the run | Must already have a payload |
| Closing the tab | Ends an in-tab run | No effect |
| Reopen the workflow | — | Re-attaches to running jobs; shows finished outputs from disk |
A workflow containing gates refuses to start as a server job without approve-all. That’s deliberate: silently skipping a checkpoint you placed would be worse than failing.
From the UI
Section titled “From the UI”- Keep
threadle(the server) running. - Press ▶ (or ≫).
- Close the browser if you like.
- Open the workflow again — mid-run statuses sync from the server; when the job finishes, outputs appear on the canvas.
- Or watch Runs / Logs without opening the graph.
From the CLI
Section titled “From the CLI”Keep a server up in one terminal, then fire jobs from another:
# terminal Athreadle --no-open
# terminal B — free ~60s demo (no agents)threadle run detached-delay --detachthreadle jobsthreadle attach <jobId>
# or several workflows in parallelthreadle run knot-concat --detachthreadle run hello-wire --detachthreadle jobsthreadle stop <jobId>threadle services| Flag / command | Effect |
|---|---|
threadle run … --detach | POST /api/run/workflow on the running server; print jobId and exit |
threadle run … (no --detach) | Foreground in-process run (streams to stdout; not a long-lived server job unless a server is already up and you use --detach) |
threadle jobs | List recent jobs (all statuses) |
threadle status [--all] | List running jobs (--all = same history as jobs) |
threadle attach <jobId> | Follow a job’s logs until it ends (same as logs -f) |
threadle logs [jobId] [-f] | Tail one job, or recent lines across jobs |
threadle stop <jobId> | Cancel a running job |
threadle services | Health + process + providers (useful before a long unattended run) |
--param k=v | Fill a workflow param (repeatable) |
--approve-all | Auto-pass gates and parked tripwires |
--dir <path> | Project directory for agent runs |
THREADLE_URL overrides the server base (default http://127.0.0.1:<port>).
See the CLI reference for agents, sessions, graphs, models, nodes, and templates.
Parallel workflows
Section titled “Parallel workflows”Starting several server jobs is how you run workflows in parallel. They share one Node process as async tasks; agent steps already spawn provider CLIs as child processes. Ply only caps concurrency inside one graph.
You do not need a worker-process pool for normal agent-bound or prompt/knot graphs.
Preparing a graph to run unattended
Section titled “Preparing a graph to run unattended”- Set a model on every agent node — readiness blocks the run otherwise.
- Materialize context payloads you depend on, or replace them with library items.
- Decide about gates — keep them and pass approve-all / ≫, or replace judgment points with tripwires that
abortorskip. - Set a spend ceiling in ≔ params. Unattended plus unbounded is the one combination worth avoiding.
- Check Loose ends — dangling branches cost tokens and produce nothing.
Watching it
Section titled “Watching it”| Where | What |
|---|---|
| Runs view | Live status, duration, errors, cancel |
| Run log / Logs view | The streamed log |
| The graph (reopened) | Node statuses and output contents while the job runs and after it finishes |
threadle jobs / attach / logs | Same job registry from a terminal |
Related
Section titled “Related”- Running — ▶ vs ≫ vs partial
- CLI — full flag reference
- Portable graphs — running a
.jsonfile - Tripwire — limits for unattended runs