Skip to content

Glossary

Weaving vocabulary where threadle invented a concept; plain words everywhere else.


TermMeaning
Agent definitionA droppable node representing one agent a provider offers — a Claude Code or Cursor builtin, an opencode agent, or a markdown agent file in .claude/agents/. It carries a provider, a name, a source, and a model you pick in the inspector. Running one starts a real session through that provider’s CLI. See Agents & sessions.
BlueprintAn auto-assembled structural view of a single session: every tool it called, every skill and slash command it invoked, the files it touched, turn counts, and its subagent runs. Assembled from the whole transcript including abandoned branches, not just the surviving thread.
Bottom dockPanel under the workflow canvas with Run log, Issues, and Loose ends, plus gate prompts when an in-tab run parks. See Bottom dock.
BypassNode state that makes the node pass its inbound text straight through without executing. The wire stays live; the work does not happen. Mutually exclusive with mute. See Graph & wires.
Context payloadAn immutable, content-addressed blob of extracted context — a distilled summary, a transcript excerpt, or a files list. Identified by the SHA-256 of its kind, source session, and content, so re-extracting the same thing produces one file. Stored under payloads/; see Files & config.
Detached runA server job — the workflow runs inside the threadle process, not the browser tab. Started by (when there are no interactive gates), , or threadle run --detach. Survives a closed tab; reopen the graph to watch progress, or use threadle jobs / logs. Try the agent-free Detached delay example (~60s). Gates need approve-all; context nodes need a payload already materialized. See Detached runs.
DelayA ◷ node that pauses the text lane for a wall-clock duration (capped at 5 minutes). No agent. 1 in · 1 out. Useful for practicing detached jobs.
FrameA ▦ Group node drawn around others. A plain frame is visual grouping plus drag-together membership; a linked frame points at another graph and behaves as an embedded sub-workflow, with inbound wires broadcast to its entry members and outbound wires fanned in from its exits.
IssuesBottom-dock tab listing hard readiness problems that block ▶ / ≫ — missing model, unwired required ports, unusable context, and so on. Same check as the pre-run gate. See Bottom dock.
KnotA node that merges several inbound wires with an explicit strategy — concat, first, majority, or synthesize. Multi-in · 1-out by design. See Knot.
LaneWhat a wire is carrying. Three exist: text (the common case), session (an agent’s run handed to a session node, or a session used as a continuation), and context (anything touching a context node). Lanes are colour-coded on the canvas. See Lanes & value types.
LibraryThe ❝ Library view — every context payload you have ever extracted, newest first, searchable and taggable. Tags live in a sidecar file so the payloads themselves stay immutable.
LineageThe ⇄ Lineage view — the record of which payload was injected into which session, and what came out. Backed by an append-only runs/injects.jsonl; clearing it loses the history, not the payloads.
Loose endsAlways-on soft graph hygiene in the bottom dock: dangling outputs, unwired required ports, unreachable nodes, unused params, muted nodes. Advisory — it does not block a run by itself. See Loose ends. Hard blockers are under Issues.

TermMeaning
MuteNode state that removes the node from the run entirely. Downstream nodes starve. Muting is also the escape hatch for a node that would otherwise block a detached run.
NodeOne block on the canvas. Some represent things that already exist (a session, an agent definition, a context payload); others do work (prompt, agent, knot, custom); others are pure structure (frame, note). See Nodes overview.
ParamA named value declared on a workflow and substituted into prompts and converter templates as {{param:name}}. Filled at run time from the dialog, or from --param name=value on the CLI. Params have a declared type and are validated before the run starts.
Port capacityMax wires allowed on a handle. Built-ins have fixed limits (e.g. Delay 1/1); custom named ports default to 1 and can raise it with maxConnections in node.json. A new wire on a full single-capacity slot replaces the oldest.
PlyThe maximum number of independent ready nodes allowed to execute at once. Default 4. A ceiling, not a target — it never reorders dependencies. See Ply.
Portable graphA workflow exported as threadle/graph@1 JSON. Machine-local details are stripped — payload hashes, session ids, absolute artifact paths, run statuses and output contents — so the file travels; skills and rules re-resolve by name on import. threadle run ./file.json imports and executes one.
ProviderAn adapter for one agent tool: a read-only parser over whatever that tool already wrote to disk, plus a run surface that shells out to its official CLI. Claude Code, opencode, and Cursor. Missing providers contribute nothing and break nothing. See Providers.
SessionOne conversation belonging to a provider, discovered from that provider’s own storage. Sessions are first-class nodes: sources for context extraction, targets for injection, and continuation links for agents. threadle reads them and never rewrites them.
Skill nodeA node that injects a SKILL.md into the text lane at run time. It resolves by absolute path when known, falling back to a name lookup so a portable graph still works on another machine. Its sibling § Rules does the same for CLAUDE.md, AGENTS.md, and Cursor rules files.
SpliceEditing the inbound text at an approval gate — or at a tripwire set to park — before letting the run continue. The reason gates are worth having rather than just log lines. See Splice.
Sub-workflowA graph whose kind is subgraph rather than workflow: extracted from a selection, and reusable by dragging it onto another canvas as a linked frame. Editing it in one place updates every graph that links to it.
Tracked cost / actual spendTwo numbers, never blended. Tracked cost is the list price of the tokens a run consumed, from the models.dev price table — what an API would have billed. Actual spend is what you were really billed: $0 for subscription-billed Claude Code and Cursor sessions, real money for opencode (which pays your own API keys), and equal to tracked cost when you set Claude billing to api in Settings. See Costs & billing.
TripwireA circuit breaker on one wire, watching spend, tokens, duration, content, or retry count, and reacting with abort, skip, or park. Distinct from the whole-run spend tripwire in graph settings. Reactive, not predictive. See Tripwire.
Value typeThe declared shape of what a wire carries: text, int, float, bool, or json. text accepts anything and int widens to float; everything else must parse or the node fails loudly rather than poisoning what comes next.
WireOne edge between two node handles. Invalid pairs are refused at connect time. Wires have no context menu — select one and press Backspace or Delete. See Keyboard & canvas.

These twoDiffer because
Mute vs bypassMute removes the node and starves downstream. Bypass keeps the wire flowing and skips only the work.
Lane vs value typeThe lane is what kind of thing travels (text, session, context). The value type is how the text parses (int, json, …).
Knot vs frameA knot merges values. A frame groups nodes.
Tracked cost vs actual spendList price versus money. threadle shows both and never averages them.
Loose ends vs readinessLoose ends are advisory lint. Readiness is the hard preflight that refuses a detached run.
Frame vs sub-workflowA frame is a node on a canvas. A sub-workflow is a graph on disk. A linked frame is a frame pointing at one.
Portable graph vs saved graphA portable graph is a file you can send. A saved graph is an id in ~/.config/threadle/graphs/.

A treadle is the pedal that drives a loom. The metaphor is load-bearing rather than decorative, and it is consistent:

WordIn weavingIn threadle
WarpThreads already strung on the frameYour existing sessions
WeftThe thread crossing themThe wires you draw
PlyHow many strands are twisted togetherHow many branches run at once
KnotWhere strands are tied into oneWhere wires merge under a strategy
SpliceJoining two ends by handEditing the text at a gate
Loose endsThe bits left hangingDangling outputs and unwired ports
LaneWhich kind of value a wire carries

Everything else — node, wire, param, provider, session — is deliberately the boring word.