Skip to content

Releases: clawnify/clawflow

v0.9.7

25 Apr 17:03
a2cc096

Choose a tag to compare

Skip webhook server on EADDRINUSE instead of crashing.

When clawflow's plugin register() is called in an environment where the gateway daemon already owns the webhook port (e.g. openclaw <anything> on a live VPS), the webhook listener now logs and returns instead of throwing. Avoids needing CLAWFLOW_NO_SERVE=1 for human CLI invocations.

PR #31

v0.9.6

13 Apr 07:31
0caf686

Choose a tag to compare

What's new

  • Compile-time key guards: NODE_KEYS is now derived from interfaces with CheckKeys<T, K> type guards. Adding a field to a node interface without updating the key tuple is a compile error — no more manual sync between types and validation.

v0.9.5

12 Apr 21:26
5546c09

Choose a tag to compare

What's new

  • Unknown field validation: Flow validation now rejects unrecognized keys on any node type, catching misplaced fields like branch paths placed as siblings of paths instead of inside it.

v0.9.2

05 Apr 21:45

Choose a tag to compare

Fix

  • Workspace fallback — defaults to $HOME/.openclaw/workspace when OPENCLAW_WORKSPACE env var and api.config.workspace are not set. Fixes EACCES errors on OpenClaw server where process.cwd() may not be writable.

v0.9.1

05 Apr 21:02

Choose a tag to compare

Fixes

  • Workspace resolution — resolved once at plugin registration from OPENCLAW_WORKSPACEapi.config.workspaceprocess.cwd(), fixing EACCES errors when env var wasn't set
  • History dir path — derived from the flow file's location instead of workspace root, fixing permission errors with absolute file paths
  • History is best-effortsaveSnapshot failures no longer block flow_edit operations
  • Better error messagesflow_create now reports the resolved workspace root on directory creation failures
  • SKILL.md — clarified that code nodes are sandboxed (no require, no fs, no network)

v0.9.0

05 Apr 19:29

Choose a tag to compare

What's new

  • flow_list — discover all saved flows with metadata, expected inputs, and published version info
  • flow_read — inspect a flow definition (draft or specific version), zoom into individual nodes, see expected trigger.* inputs
  • flow_publish — promote a draft flow to an immutable numbered version
  • Draft/version modelflow_run uses the latest published version by default; drafts are safe to edit without affecting production. Fully backwards-compatible (no versions dir = runs draft as before)
  • Renamed flow_revert_from_binflow_restore_from_bin
  • Removed flow_transpile (Cloudflare Workers transpiler remains in source for future use)
  • SKILL.md updated with versioning guide, new tools, trigger docs, and agent node fix

Versioning model

flows/my-flow.json                    ← draft (working copy)
.clawflow/history/my-flow/            ← undo stack (every edit)
.clawflow/versions/my-flow/1.json     ← published versions (immutable)
  • flow_edit modifies the draft, snapshots to history for undo
  • flow_publish validates and saves as next integer version
  • flow_run defaults to latest published version, draft: true to test working copy
  • No migration needed — existing flows work unchanged

v0.8.3

05 Apr 09:55

Choose a tag to compare

What's new

  • flow_list tool — discover all saved flow definitions in the workspace. Scans the flows directory and returns metadata (name, description, version, trigger, node count) for each flow.

v0.8.2

02 Apr 10:59

Choose a tag to compare

Diagnostic hints for code node input errors

  • Proxy-based diagnostics: code nodes now show exactly which keys are available in input, trigger, and state when accessing a missing property — no more guessing where data lives
  • Enhanced error context: runtime errors include available keys hint when "Cannot read property" occurs
  • Improved flow_run description: documents the state model (trigger, env, node outputs) and how code nodes receive input vs state

Example error (before)

Cannot read properties of undefined (reading 'email_to')

Example error (after)

'email_to' is not a key in input. Input keys: [client, order_number].
Did you mean state.trigger.email_to? It exists in trigger.

v0.8.1

01 Apr 22:38

Choose a tag to compare

What's changed

  • Fix file path resolution in flow_run and flow_edit — bare flow names like article-writer now resolve to flows/article-writer.json, matching flow_create and flow_delete. Fixes File not found and EACCES errors when agents pass just the flow name.
  • Add deep node edit tests — 15 new tests covering update, remove, add, and move operations on nodes nested inside branch, condition, loop, and parallel containers.

v0.8.0

01 Apr 21:14

Choose a tag to compare

Features

  • Deep node targeting in flow_edit: All actions (update, remove, move, add) now search recursively through nested structures — branch paths, condition then/else, loop nodes, and parallel blocks. No more "node not found" for nested nodes.

  • parent parameter: Target a nested node list using slash-separated paths:

    • "myBranch/true" → branch path
    • "myCond/then" → condition then block
    • "myLoop" → loop child nodes
    • "outer/true/inner" → chained nesting

    Works with add and move actions to insert nodes directly into nested containers.

  • wrap action: Wrap one or more contiguous nodes into a new container node (loop, condition, branch, or parallel). The container is created automatically with the wrapped nodes as children. Example:

    { "action": "wrap", "nodes": ["step1", "step2"], "wrapper": { "name": "myLoop", "do": "loop", "over": "items", "as": "item" } }
  • Cross-level move: move can now relocate a node from any nesting depth into a different parent. Specify the destination with the parent parameter.

Fixes (from v0.7.2)

  • branch.on and condition.if now accept {{ }} template syntax in addition to bare dotted paths.