langflower 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +96 -70
  2. package/docs/public/README.md +2 -2
  3. package/docs/public/configuration.md +4 -0
  4. package/docs/public/extending.md +18 -2
  5. package/docs/public/getting-started.md +7 -0
  6. package/docs/public/how-it-works.md +18 -11
  7. package/docs/public/product.md +35 -25
  8. package/package.json +1 -1
  9. package/ui-dist/chunk-QI4IYILJ.js +4 -0
  10. package/ui-dist/{chunk-7UMVYN3A.js → chunk-UG3GFV4Y.js} +1 -1
  11. package/ui-dist/index.html +2 -2
  12. package/ui-dist/main-ODIDCCNX.js +315 -0
  13. package/ui-dist/styles-2JMBAQC3.css +1 -0
  14. package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.d.ts +2 -2
  15. package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.js +39 -7
  16. package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.d.ts +11 -0
  17. package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.js +2 -2
  18. package/vendor/common-nodes/dist/ai/features/run-host-services.d.ts +10 -0
  19. package/vendor/common-nodes/dist/ai/nodes/critique/node.js +5 -1
  20. package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.js +7 -1
  21. package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.js +5 -1
  22. package/vendor/common-nodes/dist/ai/nodes/review/node.js +7 -1
  23. package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.js +62 -22
  24. package/vendor/common-nodes/dist/catalog.js +10 -0
  25. package/vendor/common-nodes/dist/crawl/crawl/node.js +11 -3
  26. package/vendor/common-nodes/dist/crawl/crawl-tools/node.js +5 -1
  27. package/vendor/common-nodes/dist/crawl/extract-links/node.js +7 -1
  28. package/vendor/common-nodes/dist/crawl/fetch-url/node.js +13 -4
  29. package/vendor/common-nodes/dist/crawl/save-page/node.js +11 -3
  30. package/vendor/common-nodes/dist/embeddings/create-embedding.d.ts +39 -0
  31. package/vendor/common-nodes/dist/embeddings/create-embedding.js +154 -0
  32. package/vendor/common-nodes/dist/embeddings/embed-provider/node.d.ts +53 -0
  33. package/vendor/common-nodes/dist/embeddings/embed-provider/node.js +126 -0
  34. package/vendor/common-nodes/dist/embeddings/embed-similarity/node.d.ts +20 -0
  35. package/vendor/common-nodes/dist/embeddings/embed-similarity/node.js +81 -0
  36. package/vendor/common-nodes/dist/embeddings/embed-text/node.d.ts +53 -0
  37. package/vendor/common-nodes/dist/embeddings/embed-text/node.js +91 -0
  38. package/vendor/common-nodes/dist/embeddings/from-embedding.d.ts +8 -0
  39. package/vendor/common-nodes/dist/embeddings/from-embedding.js +24 -0
  40. package/vendor/common-nodes/dist/embeddings/resolve-embedding-provider-model.d.ts +11 -0
  41. package/vendor/common-nodes/dist/embeddings/resolve-embedding-provider-model.js +8 -0
  42. package/vendor/common-nodes/dist/flow/checkpoint/node.js +7 -3
  43. package/vendor/common-nodes/dist/flow/delay/node.d.ts +2 -6
  44. package/vendor/common-nodes/dist/flow/delay/node.js +13 -9
  45. package/vendor/common-nodes/dist/flow/loop/node.js +7 -1
  46. package/vendor/common-nodes/dist/flow/merge/node.js +7 -1
  47. package/vendor/common-nodes/dist/flow/repeat/node.js +5 -1
  48. package/vendor/common-nodes/dist/flow/router/node.js +7 -1
  49. package/vendor/common-nodes/dist/hitl/chat-input/node.d.ts +2 -2
  50. package/vendor/common-nodes/dist/hitl/chat-input/node.js +8 -4
  51. package/vendor/common-nodes/dist/hitl/review-gate/node.js +11 -5
  52. package/vendor/common-nodes/dist/langflower-tools/node.js +5 -1
  53. package/vendor/common-nodes/dist/logic/assert/node.js +7 -1
  54. package/vendor/common-nodes/dist/logic/compare/node.js +7 -1
  55. package/vendor/common-nodes/dist/logic/gate/node.js +7 -1
  56. package/vendor/common-nodes/dist/logic/if/node.js +7 -1
  57. package/vendor/common-nodes/dist/logic/switch/node.js +7 -1
  58. package/vendor/common-nodes/dist/mcp/mcp-http/node.js +55 -53
  59. package/vendor/common-nodes/dist/mcp/mcp-stdio/node.js +52 -50
  60. package/vendor/common-nodes/dist/memory/memory-tools/node.js +5 -1
  61. package/vendor/common-nodes/dist/output/finish/node.js +13 -1
  62. package/vendor/common-nodes/dist/output/preview/node.js +9 -2
  63. package/vendor/common-nodes/dist/primitives/boolean/node.js +7 -1
  64. package/vendor/common-nodes/dist/primitives/number/node.js +7 -1
  65. package/vendor/common-nodes/dist/primitives/string/node.js +7 -1
  66. package/vendor/common-nodes/dist/primitives/string-multiline/node.d.ts +17 -0
  67. package/vendor/common-nodes/dist/primitives/string-multiline/node.js +31 -0
  68. package/vendor/common-nodes/dist/text/append-file/node.js +11 -3
  69. package/vendor/common-nodes/dist/text/concat/node.js +5 -1
  70. package/vendor/common-nodes/dist/text/read-file/node.js +9 -3
  71. package/vendor/common-nodes/dist/text/split-paced/node.d.ts +21 -0
  72. package/vendor/common-nodes/dist/text/split-paced/node.js +93 -0
  73. package/vendor/common-nodes/dist/text/write-file/node.js +11 -3
  74. package/vendor/common-nodes/dist/tools/tool-collection/node.js +5 -2
  75. package/vendor/common-nodes/package.json +4 -0
  76. package/vendor/node-sdk/dist/node-factory/define-embed/embed-handle.d.ts +25 -0
  77. package/vendor/node-sdk/dist/node-factory/define-embed/embed-handle.js +25 -0
  78. package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.d.ts +1 -0
  79. package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.js +1 -0
  80. package/vendor/node-sdk/dist/node-factory/define-node/define-node.d.ts +2 -0
  81. package/vendor/node-sdk/dist/node-factory/define-node/define-node.js +4 -1
  82. package/vendor/node-sdk/dist/node-factory/define-reactive-node/define-reactive-node.d.ts +3 -1
  83. package/vendor/node-sdk/dist/node-factory/define-reactive-node/define-reactive-node.js +2 -1
  84. package/vendor/node-sdk/dist/node-factory/define-reactive-node/io-helpers.d.ts +15 -0
  85. package/vendor/node-sdk/dist/node-factory/define-reactive-node/io-helpers.js +17 -1
  86. package/vendor/node-sdk/dist/node-factory/define-reactive-node/port-meta.d.ts +17 -4
  87. package/vendor/node-sdk/dist/node-factory/define-reactive-node/test/samples/delay-node.js +4 -2
  88. package/vendor/node-sdk/dist/node-factory/define-reactive-node/types.d.ts +4 -3
  89. package/vendor/node-sdk/dist/testing/create-node-harness.d.ts +30 -0
  90. package/vendor/node-sdk/dist/testing/create-node-harness.js +68 -0
  91. package/vendor/node-sdk/package.json +4 -4
  92. package/vendor/runtime/dist/types.d.ts +1 -1
  93. package/vendor/server/dist/bootstrap/project-bootstrap.service.d.ts +1 -1
  94. package/vendor/server/dist/bootstrap/seed-skeleton.d.ts +2 -2
  95. package/vendor/server/dist/bootstrap/seed-skeleton.js +17 -2
  96. package/vendor/server/dist/bridge/bind-embed-context.d.ts +7 -0
  97. package/vendor/server/dist/bridge/bind-embed-context.js +16 -0
  98. package/vendor/server/dist/bridge/build-execution-context.d.ts +2 -2
  99. package/vendor/server/dist/bridge/build-execution-context.js +6 -2
  100. package/vendor/server/dist/bridge/emit-bootstrap.js +4 -1
  101. package/vendor/server/dist/bridge/settings-draft-controller.js +7 -3
  102. package/vendor/server/dist/bridge/wire-config-handlers.js +2 -0
  103. package/vendor/server/dist/bridge/wire-editor-handlers.js +14 -0
  104. package/vendor/server/dist/config/langflower-config.service.d.ts +2 -0
  105. package/vendor/server/dist/config/langflower-config.service.js +30 -0
  106. package/vendor/server/dist/session/build-session-bootstrap.js +1 -0
  107. package/vendor/server/dist/session/langflower-session.d.ts +3 -1
  108. package/vendor/server/dist/session/langflower-session.js +3 -1
  109. package/vendor/server/dist/workflow/apply-editor-mutation.js +6 -0
  110. package/vendor/server/dist/workflow/workflow-persisted-inputs.js +8 -6
  111. package/vendor/server/skeleton/instructions.md +15 -3
  112. package/vendor/server/skeleton/nodes/hello-embed/README.md +185 -0
  113. package/vendor/server/skeleton/nodes/hello-embed/hello-embed.nodes.test.ts +181 -0
  114. package/vendor/server/skeleton/nodes/hello-embed/ingest.ts +126 -0
  115. package/vendor/server/skeleton/nodes/hello-embed/lib/chunk-markdown.test.ts +40 -0
  116. package/vendor/server/skeleton/nodes/hello-embed/lib/chunk-markdown.ts +123 -0
  117. package/vendor/server/skeleton/nodes/hello-embed/lib/ingest-search.test.ts +180 -0
  118. package/vendor/server/skeleton/nodes/hello-embed/lib/ingest.ts +128 -0
  119. package/vendor/server/skeleton/nodes/hello-embed/lib/paths.test.ts +20 -0
  120. package/vendor/server/skeleton/nodes/hello-embed/lib/paths.ts +70 -0
  121. package/vendor/server/skeleton/nodes/hello-embed/lib/schema.ts +21 -0
  122. package/vendor/server/skeleton/nodes/hello-embed/lib/search.ts +254 -0
  123. package/vendor/server/skeleton/nodes/hello-embed/lib/text-embedder.ts +14 -0
  124. package/vendor/server/skeleton/nodes/hello-embed/lib/vectors.ts +126 -0
  125. package/vendor/server/skeleton/nodes/hello-embed/lib/walk-markdown.test.ts +62 -0
  126. package/vendor/server/skeleton/nodes/hello-embed/lib/walk-markdown.ts +67 -0
  127. package/vendor/server/skeleton/nodes/hello-embed/package.json +11 -0
  128. package/vendor/server/skeleton/nodes/hello-embed/search-handle.ts +119 -0
  129. package/vendor/server/skeleton/nodes/hello-embed/search.ts +98 -0
  130. package/vendor/server/skeleton/nodes/hello-embed/tsconfig.json +14 -0
  131. package/vendor/server/skeleton/nodes/my-nodes/README.md +13 -3
  132. package/vendor/server/skeleton/schemas/langflower-config.schema.json +4 -0
  133. package/vendor/server/skeleton/skills/langflower-helper/SKILL.md +99 -26
  134. package/vendor/server/skeleton/skills/langflower-helper/architecture.md +11 -6
  135. package/vendor/server/skeleton/skills/langflower-helper/layout.md +24 -18
  136. package/vendor/server/skeleton/skills/langflower-node-writer/SKILL.md +8 -1
  137. package/vendor/server/skeleton/workflows/kb-ingest.json +88 -0
  138. package/vendor/server/skeleton/workflows/kb-manual-search.json +105 -0
  139. package/vendor/server/skeleton/workflows/kb-rag.json +192 -0
  140. package/vendor/server/skeleton/workflows/kb-tool.json +111 -0
  141. package/vendor/shared/dist/langflower-bus-config.d.ts +22 -6
  142. package/vendor/shared/dist/langflower-bus-config.js +23 -7
  143. package/vendor/shared/dist/langflower-config/merge-langflower-config-layers.test.js +8 -0
  144. package/vendor/shared/dist/langflower-config/settings-draft.d.ts +5 -0
  145. package/vendor/shared/dist/langflower-config/settings-draft.js +15 -7
  146. package/vendor/shared/dist/langflower.d.ts +1 -1
  147. package/vendor/shared/dist/langflower.js +1 -1
  148. package/vendor/shared/dist/types/langflower-bootstrap.d.ts +6 -0
  149. package/vendor/shared/dist/types/langflower-config.d.ts +17 -0
  150. package/vendor/shared/dist/types/langflower-palette.d.ts +2 -1
  151. package/vendor/tools/dist/harness-types.d.ts +1 -1
  152. package/vendor/tools/dist/mcp/build-mcp-handle.d.ts +3 -21
  153. package/vendor/tools/dist/mcp/build-mcp-handle.js +2 -11
  154. package/vendor/tools/dist/mcp/create-system-mcp-handles.d.ts +9 -6
  155. package/vendor/tools/dist/mcp/create-system-mcp-handles.js +21 -17
  156. package/vendor/tools/package.json +1 -0
  157. package/ui-dist/chunk-MDGXX73Z.js +0 -4
  158. package/ui-dist/main-Z7CPFXFA.js +0 -313
  159. package/ui-dist/styles-2TMDAUD7.css +0 -1
package/README.md CHANGED
@@ -3,38 +3,63 @@
3
3
  > **Disclaimer:** Langflower is currently in internal testing. Anyone can
4
4
  > download and try it, but some functions may not be stable.
5
5
 
6
- **Turn a local folder into a repeatable AI workflow.**
6
+ ## Key concept: everything is a node
7
7
 
8
- Point Langflower at a workspace, choose or create a visual workflow, and let
9
- it read, create, review, and update files there. You see every stage on the
10
- canvas and decide what must happen before the next stage begins.
8
+ Langflower is not built around the LLM as a first-class citizen. The core
9
+ abstraction is a **reactive node**: several typed inputs, several typed
10
+ outputs. Each port acts independently a node can receive on one input
11
+ and emit on one output at any time, without waiting for the rest. The
12
+ runtime wires those nodes into a workflow.
11
13
 
12
- The workflow decides the process not a model deciding it is “done.”
14
+ That is enough for complex processing chains including loops and
15
+ conditions.
13
16
 
14
- ![Langflower starter workflow](https://raw.githubusercontent.com/earthdmitriy/langflower/master/docs/img/starter.png)
17
+ The trick is the same rule applied to models. Because ports fire on their
18
+ own, an LLM agent is just another reactive node: prompt and tools in;
19
+ response out; streaming tool log, reasoning, and draft as extra outputs
20
+ that can update while the run continues. All LLM-specific logic stays as
21
+ that node's internal state. It does not leak through the rest of the app.
22
+
23
+ ## Open possibilities
24
+
25
+ Because every unit of work is a node, Langflower is not pinned to one
26
+ product shape — coding harness, chat harness, or any other fixed loop.
27
+ Workflows stay flexible. With the right wiring they fit the job.
28
+
29
+ Need a chat? Wire user input, an agent, and HITL feedback. Agent-to-agent
30
+ dialogue is two agents connected together. Coding is the same graph plus
31
+ file-ops tools. Tired of “I’m done” while the code still does not compile?
32
+ Write a custom review-gate node. The agent never gets a path around it.
33
+
34
+ ## Hard harness
15
35
 
16
- ## What can you use it for?
36
+ The sequence is the workflow topology. That is how Langflower orchestrates
37
+ complex work: QA, review, and code checks sit on the graph, so agents
38
+ cannot skip them. A well-configured workflow forces high-quality output —
39
+ the model does not get to declare itself finished.
17
40
 
18
- ### Ship a code change
41
+ **Not another chat harness. A local node graph.**
19
42
 
20
- Turn a task into a visible pipeline: clarify the request, implement the
21
- change, review it, run QA, and accept the result. You can stop or redirect
22
- the work at the stages that matter.
43
+ ### Keep everything local
23
44
 
24
- ### Write and refine files
45
+ Langflower runs on your machine and does not expose your project as a
46
+ hosted product. Files stay where they are. You can reproduce what mature
47
+ cloud tools offer — at home, or on a closed network with internal LLM
48
+ providers.
25
49
 
26
- Create an article or prompt in your workspace, review its tone and facts, then
27
- revise it in place. The useful output is a file you own, not only a chat
28
- transcript.
50
+ ### Scoped to a folder
29
51
 
30
- ### Build a knowledge base
52
+ You start from a folder. Data, custom nodes, and workflows are scoped to
53
+ that workspace. Open the folder, and the graph, files, and run belong
54
+ together.
31
55
 
32
- Ingest project documentation, resolve duplicates or contradictions, review the
33
- proposed changes, and maintain a project wiki or Obsidian vault.
56
+ ### Extensible even now
34
57
 
35
- Langflower also supports research fan-out and synthesis, reusable skills,
36
- prompt refinement, regression gates, and multi-agent review. Browse the
37
- [workflow ideas](https://github.com/earthdmitriy/langflower/blob/master/docs/public/workflows.md).
58
+ This is still an early version, but Langflower already supports custom
59
+ nodes and custom node packs. Share and reuse workflows and nodes the same
60
+ way you share the rest of the project.
61
+
62
+ ![Langflower starter workflow](https://raw.githubusercontent.com/earthdmitriy/langflower/master/docs/img/starter.png)
38
63
 
39
64
  ## How it works
40
65
 
@@ -46,55 +71,61 @@ prompt refinement, regression gates, and multi-agent review. Browse the
46
71
  decision.
47
72
  5. Find the resulting files and data in the same workspace.
48
73
 
49
- The graph is a **hard harness**: it defines the order of work. If review, QA,
50
- or approval is part of the workflow, an agent cannot silently skip it because
51
- it is confident in its own answer. Bring your own review gate — Langflower
52
- enforces it, so LLMs cannot skip or bypass that step.
74
+ ## Under the hood
53
75
 
54
- ## Why Langflower
76
+ The core is a reactive runtime that wires nodes together. The **node SDK**
77
+ is the public contract: any node that follows it can run on that runtime.
78
+ **Common nodes** is the built-in catalog. It uses the same SDK as custom
79
+ node packs.
55
80
 
56
- - **Your folder stays the centre of work.** Read and write files locally,
57
- rather than leaving the result in a provider-hosted chat history.
58
- - **You stay in control.** Workflows can request approval before sensitive
59
- file edits or shell commands run.
60
- - **Human review is built in.** Ask for a plan review, fact check, rewrite, or
61
- approval exactly where it makes sense in the process.
62
- - **Long tasks do not own your browser tab.** Close the tab and return later;
63
- the session continues and the UI catches up when you reconnect.
64
- - **Reuse a process, not just a prompt.** Build a workflow once, then apply it
65
- to similar folders and tasks.
66
- - **Extend it when the defaults are not enough.** Add markdown skills under
67
- `.langflower/skills/` or custom nodes under `.langflower/nodes/`.
68
-
69
- ## Why it stays reliable while you work
70
-
71
- Langflower's runtime treats every workflow step as a live exchange of data.
72
- That means a step can naturally wait for your input and continue when you
73
- reply — human review is part of the workflow, not a special interruption
74
- mode.
75
-
76
- The server owns the active session, while the browser is a view of it. Closing
77
- or reopening a tab does not create a competing workflow state or cancel a
78
- long-running job; the UI reconnects to the current progress.
81
+ The **server** composes those pieces, compiles user-defined nodes, and owns
82
+ the live run. The **UI** is a thin browser client. It listens to WebSocket
83
+ events from the server; it does not own the workflow. Close the tab while a
84
+ long run continues. Reopen it, and the server catches the UI up, so the
85
+ canvas stays in sync.
79
86
 
80
87
  For a short builder-oriented picture, see
81
88
  [How it works](https://github.com/earthdmitriy/langflower/blob/master/docs/public/how-it-works.md).
82
89
 
90
+ ## Why Langflower
91
+
92
+ - **You stay in control.** Workflows can request approval before sensitive
93
+ file edits or shell commands run.
94
+ - **Use the browser you already have.** Other harnesses pack a web UI into
95
+ a built-in browser such as Electron. Langflower uses your existing
96
+ browser, so you can close the tab, free those resources, and let the
97
+ server keep the run; reopen it and the UI catches up.
98
+ - **Extend it when the defaults are not enough.** Langflower uses common
99
+ agent primitives — **MCP** and **skills** — and lets you define **custom
100
+ nodes** on top: processing in the graph, or custom tools for agents via
101
+ the same **ToolHandle** contract as built-ins.
102
+
83
103
  ## How it compares
84
104
 
85
- Langflower gives you graph-based chaining like mature orchestration tools
86
- stages, branches, and review gates but it is aimed at **local daily use**,
87
- not at shipping a backend service or wiring a cloud automation platform.
105
+ Versus chat-style harnesses (often an Electron shell around a model loop):
106
+ Langflower is a local node graph. The LLM is a node, not the product.
107
+ Order comes from topology, not from the model deciding it is done.
108
+ The UI is your existing browser, not a bundled one.
88
109
 
89
- Build a reusable workflow once for coding, documentation, article writing, or
90
- any similar desk work, then run it against the folders and tasks you already
91
- touch every day. The canvas keeps the process visible and repeatable; the
92
- project folder stays where the work happens.
110
+ Versus cloud graph tools: the same idea of wiring nodes, but aimed at a
111
+ folder on your machine home or a closed network with internal
112
+ providers not at hosting a service or cloning ETL in the cloud.
113
+
114
+ ## What it lacks
115
+
116
+ - **Chat sessions.** Node-internal state is the current architecture, so
117
+ serializable chat-session mechanics are hard. Maybe later.
118
+ - **Image and video.** No asset management for multimodal models. Not yet.
119
+ - **No built-in IDE or git UI.** We are not reinventing those wheels. Use
120
+ the editor and git tools you already have.
93
121
 
94
122
  ## Quick start
95
123
 
96
124
  Requires **Node.js ≥ 22**.
97
125
 
126
+ One-shot OS installers (Node LTS if needed + global `langflower`):
127
+ [install/](install/) (`windows.ps1`, `linux.sh`, `macos.sh`).
128
+
98
129
  ```bash
99
130
  npm install -g langflower
100
131
  langflower
@@ -122,17 +153,12 @@ Maintainers (monorepo only): [docs/RELEASE.md](https://github.com/earthdmitriy/l
122
153
 
123
154
  Shipped with the npm package under [`docs/public/`](https://github.com/earthdmitriy/langflower/tree/master/docs/public):
124
155
 
125
- | Want to… | Start here |
126
- | ---------------------------- | ---------------------------------------------------------------------------------------------------------- |
127
- | Install and first run | [Getting started](https://github.com/earthdmitriy/langflower/blob/master/docs/public/getting-started.md) |
128
- | Understand the product | [Product overview](https://github.com/earthdmitriy/langflower/blob/master/docs/public/product.md) |
129
- | Use the canvas and runs | [Using the editor](https://github.com/earthdmitriy/langflower/blob/master/docs/public/using-the-editor.md) |
130
- | Browse workflow ideas | [Workflow ideas](https://github.com/earthdmitriy/langflower/blob/master/docs/public/workflows.md) |
131
- | Configure providers and keys | [Configuration](https://github.com/earthdmitriy/langflower/blob/master/docs/public/configuration.md) |
132
- | Add skills or custom nodes | [Extending](https://github.com/earthdmitriy/langflower/blob/master/docs/public/extending.md) |
133
- | Builder runtime picture | [How it works](https://github.com/earthdmitriy/langflower/blob/master/docs/public/how-it-works.md) |
134
-
135
- ## What Langflower is not
136
-
137
- Langflower is local and project-scoped. It is not a hosted multi-tenant cloud
138
- product or a generic cloud ETL clone.
156
+ | Want to… | Start here |
157
+ | -------------------------------- | ---------------------------------------------------------------------------------------------------------- |
158
+ | Install and first run | [Getting started](https://github.com/earthdmitriy/langflower/blob/master/docs/public/getting-started.md) |
159
+ | Understand the product | [Product overview](https://github.com/earthdmitriy/langflower/blob/master/docs/public/product.md) |
160
+ | Use the canvas and runs | [Using the editor](https://github.com/earthdmitriy/langflower/blob/master/docs/public/using-the-editor.md) |
161
+ | Browse workflow ideas | [Workflow ideas](https://github.com/earthdmitriy/langflower/blob/master/docs/public/workflows.md) |
162
+ | Configure providers and keys | [Configuration](https://github.com/earthdmitriy/langflower/blob/master/docs/public/configuration.md) |
163
+ | Add MCP, skills, or custom nodes | [Extending](https://github.com/earthdmitriy/langflower/blob/master/docs/public/extending.md) |
164
+ | Builder runtime picture | [How it works](https://github.com/earthdmitriy/langflower/blob/master/docs/public/how-it-works.md) |
@@ -7,9 +7,9 @@ package).
7
7
  | Manual | Topic |
8
8
  | ------------------------------------------ | ----------------------------------------- |
9
9
  | [Getting started](getting-started.md) | Install, first run, ports |
10
- | [Product overview](product.md) | What Langflower is (and is not) |
10
+ | [Product overview](product.md) | Local node graph: pitch, compare, lacks |
11
11
  | [Using the editor](using-the-editor.md) | Canvas, runs, human review, reconnect |
12
12
  | [Workflow ideas](workflows.md) | Common scenarios you can build |
13
13
  | [Configuration](configuration.md) | Providers, models, keys, project settings |
14
- | [Extending Langflower](extending.md) | Skills and custom nodes |
14
+ | [Extending Langflower](extending.md) | MCP, skills, custom nodes (ToolHandle) |
15
15
  | [How it works (builders)](how-it-works.md) | Short runtime picture for extenders |
@@ -44,8 +44,12 @@ the workflow.
44
44
 
45
45
  ## Custom nodes and skills
46
46
 
47
+ MCP and skills are the common agent primitives. Custom nodes add graph
48
+ processing or custom tools via **ToolHandle**.
49
+
47
50
  - Skills: markdown under `.langflower/skills/<name>/`
48
51
  - Custom nodes: packs under `.langflower/nodes/<pack>/`
52
+ - MCP: palette nodes plus optional project `mcp` in `langflower.jsonc`
49
53
 
50
54
  See [Extending Langflower](extending.md).
51
55
 
@@ -1,5 +1,18 @@
1
1
  # Extending Langflower
2
2
 
3
+ Langflower uses common agent primitives — **MCP** and **skills** — and
4
+ lets you define **custom nodes** on top: processing in the graph, or
5
+ custom tools for agents via the same **ToolHandle** contract as built-ins.
6
+
7
+ ## MCP and skills
8
+
9
+ Optional `mcp` entries in `.langflower/langflower.jsonc` declare stdio/http
10
+ servers; palette MCP nodes emit **ToolHandle**s. Agents do not spawn MCP
11
+ themselves. Permission floors for harness tools live in project config.
12
+ Skills are markdown playbooks under `.langflower/skills/` (next section).
13
+
14
+ See [Configuration](configuration.md).
15
+
3
16
  ## Skills
4
17
 
5
18
  Skills are markdown playbooks the agent can load. Add a folder:
@@ -15,8 +28,11 @@ do in your project.
15
28
 
16
29
  ## Custom nodes
17
30
 
18
- Built-in catalog nodes and your packs share the same authoring SDK. Default
19
- path for a simple node:
31
+ Custom nodes share the same authoring SDK as the built-in catalog. Use them
32
+ for graph processing, or to expose custom tools to agents as **ToolHandle**s
33
+ on `tools` ports.
34
+
35
+ Default path for a simple node:
20
36
 
21
37
  ```ts
22
38
  import { defineNode } from '@langflower/node-sdk';
@@ -6,6 +6,13 @@
6
6
  - A project folder on your machine (code, docs, or any workspace you want
7
7
  Langflower to work in)
8
8
 
9
+ To install Node (latest LTS when missing or too old) and the global CLI in
10
+ one step, download a single script from
11
+ [install/](../../install/):
12
+ [windows.ps1](../../install/windows.ps1),
13
+ [linux.sh](../../install/linux.sh), or
14
+ [macos.sh](../../install/macos.sh).
15
+
9
16
  ## Install and run
10
17
 
11
18
  ```bash
@@ -5,11 +5,17 @@ architecture spec.
5
5
 
6
6
  ## Pieces you interact with
7
7
 
8
- 1. **CLI** — starts a local server for one project folder and opens the UI.
9
- 2. **Server** owns the session, workflows on disk, and the live run.
10
- 3. **Runtime** — executes the graph: nodes exchange data on typed ports.
11
- 4. **UI** canvas + feed are views of server-owned state over a WebSocket
12
- contract. Reconnecting the browser does not invent a second run.
8
+ 1. **CLI** — starts a local server for one project folder and opens the UI
9
+ in your existing browser (not a bundled Electron shell).
10
+ 2. **Runtime** — wires **reactive nodes**. Ports are independent: a node can
11
+ receive on one input and emit on one output at any time.
12
+ 3. **Node SDK** public contract (`@langflower/node-sdk`). Built-in
13
+ **common nodes** and custom packs use the same SDK.
14
+ 4. **Server** — composes those pieces, compiles user-defined node packs, and
15
+ owns the live run.
16
+ 5. **UI** — thin browser client. Canvas + feed listen to WebSocket events
17
+ from the server. Closing the tab does not stop the run; reopen and the
18
+ server catches the UI up.
13
19
 
14
20
  ## Why review “just works”
15
21
 
@@ -24,12 +30,13 @@ model cannot skip it by claiming it is finished.
24
30
 
25
31
  ## Extensibility surface
26
32
 
27
- | You add… | Where |
28
- | ------------ | ------------------------------ |
29
- | Skills | `.langflower/skills/` |
30
- | Custom nodes | `.langflower/nodes/<pack>/` |
31
- | Workflows | `.langflower/workflows/` |
32
- | Providers | `.langflower/langflower.jsonc` |
33
+ | You add… | Where |
34
+ | ------------ | ------------------------------------------------------------ |
35
+ | MCP | Palette MCP nodes + optional `mcp` in JSONC |
36
+ | Skills | `.langflower/skills/` |
37
+ | Custom nodes | `.langflower/nodes/<pack>/` — processing or ToolHandle tools |
38
+ | Workflows | `.langflower/workflows/` |
39
+ | Providers | `.langflower/langflower.jsonc` |
33
40
 
34
41
  See [Extending](extending.md) and [Configuration](configuration.md).
35
42
 
@@ -1,40 +1,50 @@
1
1
  # Product overview
2
2
 
3
- Langflower turns a **local folder** into a **repeatable AI workflow**.
3
+ Langflower is not built around the LLM as a first-class citizen. The core
4
+ abstraction is a **reactive node**: several typed inputs, several typed
5
+ outputs. Each port acts independently — a node can receive on one input
6
+ and emit on one output at any time, without waiting for the rest. The
7
+ runtime wires those nodes into a workflow.
4
8
 
5
- You point it at a workspace, open or create a visual workflow on a canvas, and
6
- let agents read, create, review, and update files there. You see every stage
7
- and decide what must happen before the next stage begins.
9
+ Because ports fire on their own, an LLM agent is just another node: prompt
10
+ and tools in; response out; streaming tool log, reasoning, and draft as
11
+ extra outputs. LLM-specific logic stays inside that node. It does not leak
12
+ through the rest of the app.
8
13
 
9
- **The workflow decides the process not a model deciding it is “done.”**
14
+ **Not another chat harness. A local node graph.**
10
15
 
11
- ## Who it is for
16
+ Langflower runs on your machine, scoped to a folder you open. Data, custom
17
+ nodes, and workflows live there. You can reproduce what mature cloud tools
18
+ offer at home, or on a closed network with internal LLM providers.
19
+
20
+ The sequence is the workflow topology (a **hard harness**). QA, review, and
21
+ code checks sit on the graph, so agents cannot skip them. Coding, chat,
22
+ agent-to-agent dialogue, and custom gates are the same idea: wire nodes.
12
23
 
13
- - **Near term:** developers running Langflower against an existing code repo
14
- - **Also useful for:** writing and refining files, research-style fan-out, and
15
- maintaining project documentation in the same folder
24
+ ## Who it is for
16
25
 
17
- ## What makes it different
26
+ Anyone with a local folder and a process they want on a graph. Coding in a
27
+ repo is one scenario among others — writing, research fan-out, knowledge
28
+ bases, and custom pipelines. Browse [workflow ideas](workflows.md).
18
29
 
19
- | Chat-style agent harnesses | Cloud / ETL graph tools |
20
- | ---------------------------------------------------- | ---------------------------------------------------- |
21
- | Pipeline order is fixed on the canvas (hard harness) | Aimed at **local daily work**, not hosting a service |
22
- | Review and QA stages cannot be skipped by the model | Bootstrap into a real project folder quickly |
23
- | You stay on your files, not only in chat history | Same idea: reusable process, local folder centre |
30
+ ## How it compares
24
31
 
25
- ### Hard harness
32
+ Versus chat-style harnesses (often an Electron shell around a model loop):
33
+ Langflower is a local node graph. The LLM is a node, not the product.
34
+ Order comes from topology, not from the model deciding it is done.
35
+ The UI is your existing browser, not a bundled one.
26
36
 
27
- 1. The **graph** is the law stages and edges are authored, not chosen by the
28
- model at runtime.
29
- 2. Logic nodes (gates, asserts, branches) can fail closed between agents when
30
- you need a check.
37
+ Versus cloud graph tools: the same idea of wiring nodes, but aimed at a
38
+ folder on your machine — home or a closed network with internal
39
+ providers not at hosting a service or cloning ETL in the cloud.
31
40
 
32
- ## What Langflower is not
41
+ ## What it lacks
33
42
 
34
- - Not a hosted multi-tenant cloud product
35
- - Not a generic cloud ETL clone
36
- - Not a replacement for your editor it works **with** the files in your
37
- project folder
43
+ - **Chat sessions.** Node-internal state is the current architecture, so
44
+ serializable chat-session mechanics are hard. Maybe later.
45
+ - **Image and video.** No asset management for multimodal models. Not yet.
46
+ - **No built-in IDE or git UI.** We are not reinventing those wheels. Use
47
+ the editor and git tools you already have.
38
48
 
39
49
  ## Learn more
40
50
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "langflower",
3
- "version": "0.0.10",
3
+ "version": "0.1.0",
4
4
  "description": "Visual LLM-chain builder",
5
5
  "type": "module",
6
6
  "bin": {