Agent skill

Flow Builder

by marketcalls in marketcalls/openalgo

Build, edit or debug an OpenAlgo Flow workflow - the no-code node graph at /flow.

AGPL-3.0Auto-check passedBackend & APIs

Install Flow Builder

skills CLI
$ npx skills add marketcalls/openalgo --skill flow-builder -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install marketcalls/openalgo flow-builder --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/marketcalls/openalgo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/flow-builder .claude/skills/flow-builder && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
flow-builder
GitHub stars
2.8k
Token cost
~2.1k tokens
SKILL.md length
1,040 words
Files
5
Skills in repo
8
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Build, edit or debug an OpenAlgo Flow workflow - the no-code node graph at /flow.

  • Works in 5 steps: Read reference/nodes.md. All 61 node… → Pick the trigger. Exactly one, and it is… → Wire the graph. Every edge names source… → …
  • Asked to create a workflow
  • SKILL.md covers The one rule, Workflow, The shape and Values from outside:…, plus 3 more sections
  • Runs Python scripts from its folder; calls uv and curl

What it does

Flow Builder is an agent skill from marketcalls/openalgo. Build, edit or debug an OpenAlgo Flow workflow - the no-code node graph at /flow. Use when asked to create a workflow, wire a webhook or TradingView alert to an order, add a node, port a strategy into Flow, or work out why a workflow imported but did nothing. Produces a workflow JSON that is validated against the real importer before it is handed over.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `coverage.py`, `generate_reference.py` and `reference/nodes.md`).

It sits in Backend & APIs, covering Webhooks and Trading and backtesting. The repository describes itself as: Open Source Algo Trading Platform for Everyone. The licence is AGPL-3.0.

When your agent uses it

  • Asked to create a workflow
  • TradingView alert to an order
  • Port a strategy into Flow
  • Work out why a workflow imported but did nothing

Example prompts

  • “/flow-builder”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Read reference/nodes.md. All 61 node types, their required fields, and
  2. Pick the trigger. Exactly one, and it is the execution root
  3. Wire the graph. Every edge names source and target node ids. An edge
  4. Validate. Fix. Re-validate.
  5. Import at /flow, or POST /flow/api/workflows/import.

What it can do on your machine

Read from SKILL.md and the folder at commit 1dcfff5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • uv
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv and curl, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Flow Builder loads about 2.1k tokens when it runs. Until then it costs about 92 tokens; SKILL.md has 1,040 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~92
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from marketcalls/openalgo at commit 1dcfff5, republished under its AGPL-3.0 licence (© marketcalls). 1,040 words, ~2,111 tokens.

Download SKILL.mdSave it as .claude/skills/flow-builder/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
flow-builder
description
Build, edit or debug an OpenAlgo Flow workflow - the no-code node graph at /flow. Use when asked to create a workflow, wire a webhook or TradingView alert to an order, add a node, port a strategy into Flow, or work out why a workflow imported but did nothing. Produces a workflow JSON that is validated against the real importer before it is handed over.

Building an OpenAlgo Flow workflow

A workflow is a JSON graph: nodes (what happens) plus edges (in what order). It is imported at /flow, or written straight into flow_workflows.

The one rule

Validate before you hand anything over.

bash
uv run python .claude/skills/flow-builder/validate.py <workflow.json>

It calls the importer's own validate_workflow, so it cannot disagree with what the server accepts, and then adds the checks the importer deliberately skips. Those matter more than they sound: Flow ignores a data key nothing reads. Write strikeOffset when the field is offset and the workflow imports cleanly, runs successfully, and silently uses ATM. Nothing in the run says so.

Exit 0 means it imports. Warnings mean it imports and then misbehaves - treat them as errors unless you know why.

Workflow

  1. Read reference/nodes.md. All 61 node types, their required fields, and every data key each one actually reads. Generated from the validator and the executor, so it cannot drift.
  2. Pick the trigger. Exactly one, and it is the execution root: start (schedule), webhookTrigger (external POST), priceAlert, orderUpdateTrigger. A second trigger is rejected at import.
  3. Wire the graph. Every edge names source and target node ids. An edge leaving a condition node must also set sourceHandle to pick the TRUE or FALSE branch.
  4. Validate. Fix. Re-validate.
  5. Import at /flow, or POST /flow/api/workflows/import.

For the full field-by-field contract, docs/prompt/flow-import-format.md is the long form. This skill is the short path plus the check.

The shape

json
{
  "name": "Webhook long entry",
  "nodes": [
    { "id": "node_1", "type": "webhookTrigger",
      "position": { "x": 0, "y": 0 }, "data": { "label": "TV alert" } },
    { "id": "node_2", "type": "placeOrder",
      "position": { "x": 0, "y": 120 },
      "data": { "symbol": "{{webhook.symbol}}", "exchange": "NSE",
                "action": "{{webhook.action}}", "quantity": "{{webhook.quantity}}",
                "product": "MIS", "priceType": "MARKET",
                "outputVariable": "orderResult" } }
  ],
  "edges": [
    { "id": "e1", "source": "node_1", "target": "node_2", "type": "default" }
  ]
}

Values from outside: {{webhook.*}}

The webhook body is exposed as {{webhook.<key>}}. Nested paths and array indexing both work: {{webhook.legs[0].qty}}.

Every field on an order node takes a reference - not only symbol. The editor shows a dropdown for exchange and a BUY/SELL pair for action, but the stored value is a string either way, so "exchange": "{{webhook.exchange}}" is valid. The same is true of quantity, product, priceType, price, triggerPrice, offset, optionType and expiryType.

A field holding exactly one whole token keeps its type, so "quantity": "{{webhook.quantity}}" against {"quantity": 10} arrives as the number 10.

Enumerated fields are case-insensitive, which matters because TradingView sends whatever the chart carries: "action": "buy" is accepted. symbol is upper-cased on order nodes for the same reason.

An unresolved reference on an order field fails the node. It does not fall back to a default. That is deliberate: a webhook omitting quantity used to place a real order for 1 unit. If a value is genuinely optional, use a literal or branch on a condition node first.

Traps

A key nothing reads is ignored, not rejected. The single most common way a workflow "works" and does the wrong thing. validate.py catches it.

source is not the price field. On indicator, barOffset and priorPeriodOhlc, source selects the data source (api or db). The price field is sourceField. Passing close to source fails with a history error naming neither.

Options expiry has two forms. expiryType takes a relative type (current_week, next_week, current_month, next_month) or a DDMMMYY date such as 28OCT25, used as given. expiryDate is the same explicit date under its own key and wins when both are set.

The webhookTrigger carries no instrument. It has only a label. Symbol and exchange come from the request.

A failed read is not a False. priceCondition, positionCheck and fundCheck error rather than answering when the broker call fails, so they take neither branch. Do not write a graph that relies on the FALSE branch firing when data is unavailable - it will not.

A gate waits for inputCount, not for the wires. Configure three inputs and wire two and the gate errors rather than evaluating on part of the condition.

timeWindow may cross midnight. 22:00 to 02:00 spans midnight rather than being empty, so an overnight MCX or crypto guard works as written.

unsubscribe needs a symbol unless streamType is all, because the underlying call clears every subscription on the instance - including the ones the Sandbox engine uses to trigger pending SL and LIMIT orders.

Show full SKILL.md (391 more words)Show less

Subscriptions end with the workflow. Deactivating or deleting it releases everything its subscribe nodes opened, so no cleanup node is needed for that.

A condition evaluates once per run, like a gate. A diamond that reaches one condition by two paths fires its branch once, not twice.

waitUntil is capped at 30 minutes. It sleeps inside the triggering request, so anything longer belongs on a start schedule trigger.

A schedule is clock-aligned and market-hours gated. interval fires on the clock (HH:MM:02, not activation time + 60s), and the start node carries marketHoursOnly (the editor writes true, but an imported JSON that omits the key defaults to false and runs around the clock, so set it explicitly), marketHoursStart (09:15), marketHoursEnd (15:15) and marketHoursExchange (NSE). The window narrows the exchange's session; it never reopens a holiday.

A 1-minute strategy needs a shorter history cache. The indicator node reuses a fetch for FLOW_HISTORY_CACHE_TTL seconds, 30 by default, which is half a one-minute candle. Set it to 2-3 for 1m work.

Read a closed bar, not a forming one. {{ind.latest.*}} is the bar still being built and repaints within the period. {{ind.previous.*}} is the last closed bar. With offsetBars: 2, {{ind.at_offset.*}} is the bar before that, so one node gives both bars a flip test needs.

A tuple indicator returns out0, out1, ... not value. Supertrend gives out0 (the line) and out1 (direction), and its direction is inverted from the usual convention: -1 is the uptrend, +1 the downtrend. Verify an indicator's encoding before trading it.

Conditions need sourceHandle. An edge leaving priceCondition, timeCondition, timeWindow, positionCheck, fundCheck or varCondition must say which branch it is.

Gates wait for every input. andGate and orGate fire once, after all wired inputs have been evaluated.

Testing a workflow without the editor

Trigger it over HTTP, exactly as an alert would, and read the run back:

bash
curl -X POST http://127.0.0.1:5000/flow/webhook/<token> \
  -H "Content-Type: application/json" \
  -d '{"secret":"<secret>","symbol":"RELIANCE","action":"BUY","quantity":1}'
sql
SELECT id, status, logs FROM flow_workflow_executions ORDER BY id DESC LIMIT 1;

The log lines are the evidence: they name the values each node actually used, so a field that silently kept its default shows up as a mismatch against the payload you sent. Check settings.analyze_mode first - 1 routes orders to the Sandbox engine, 0 sends them to a live broker.

Files

Path
validate.pythe gate; wraps the importer's own validator
reference/nodes.mdall 61 node types, generated
generate_reference.pyregenerate it after a node's fields change
coverage.pyfails if a node type is undocumented
docs/prompt/flow-import-format.mdthe long-form contract

© marketcalls, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files in .claude/skills/flow-builder of marketcalls/openalgo.

  • SKILL.md
  • coverage.py
  • generate_reference.py
  • reference/nodes.md
  • validate.py

Open the folder on GitHubat commit 1dcfff5

Compare with similar skills

Flow Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Flow Builder compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Flow Builder this skillmarketcalls/openalgo2.8k—~2.1kAutomated safety check: PassAGPL-3.0
Signalsalsk1992/CloddsBot2.9k—~720Automated safety check: PassMIT
Novu Design Workflownovuhq/novu40k—~2.6kAutomated safety check: PassCustom licence
Golivemikehasa/golive-skill1.2k—~13kAutomated safety check: NotesMIT
Stripe Appsfossasia/eventyay1.7k1 repos~3.6kAutomated safety check: PassApache-2.0
Agentic Walletcoinbase/agentic-wallet-skills1272 repos~1kAutomated safety check: PassMIT

Similar skills

  • Signals

    alsk1992/CloddsBot

    Signal trading - RSS, Twitter, Telegram triggers to trades. An agent skill from alsk1992/CloddsBot.

    2.9k GitHub stars~720 tokensUpdated 6 days ago
    Backend & APIsAuto-check passed
  • Design notification workflows the Novu way — choose channels, set severity, decide when a workflow is critical, configure digests, and route based on subscriber state.

    40k GitHub stars~2.6k tokensUpdated today
    Backend & APIsAuto-check passed
  • Golive

    mikehasa/golive-skill

    Take an agent-written app from repo to live production on the user's OWN accounts, with providers they choose (hosting, database, auth, payments, email, domain/DNS).

    1.2k GitHub stars~13k tokensUpdated 5 days ago
    Backend & APIsAuto-check: notes
  • Stripe Apps

    fossasia/eventyay

    A skill your agent uses when building, modifying, or reviewing a Stripe App — or when the user describes something that implies one (e.g.

    1.7k GitHub starsUsed in 1 repo~3.6k tokens
    Backend & APIsAuto-check passed
  • Agentic Wallet

    coinbase/agentic-wallet-skills

    Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol to discover paid services, pay for API…

    127 GitHub starsUsed in 2 repos~1k tokens
    Backend & APIsAuto-check passed
  • Dingtalk Message

    agentscope-ai/ReMe

    钉钉消息发送技能。支持企业内部机器人(批量单聊/群聊)和 Webhook 自定义机器人两种接入方式,支持多机器人管理,支持文本、Markdown、链接、ActionCard、FeedCard等多种消息类型。

    3.6k GitHub stars~1.6k tokensUpdated 3 days ago
    Backend & APIsAuto-check passed

More from marketcalls/openalgo

All 8 skills in this repo
  • Broker Integration

    marketcalls/openalgo

    Integrate a new Indian broker into OpenAlgo, or modify an existing broker plugin.

    2.8k GitHub stars~4.7k tokensUpdated today
    Auto-check: notes
  • Fd Audit

    marketcalls/openalgo

    Audit a change for resource leaks in OpenAlgo — file descriptors AND unbounded memory growth.

    2.8k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Openscript

    marketcalls/openalgo

    Write an OpenScript study or strategy for OpenAlgo, and install it into strategies/openscript/ only after it compiles.

    2.8k GitHub stars~2.3k tokensUpdated today
    Auto-check: notes
  • Security Audit

    marketcalls/openalgo

    Run OpenAlgo's periodic security audit across backend, frontend, database, cache, routes and dependencies, producing a dated xlsx report.

    2.8k GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Verify

    marketcalls/openalgo

    Verify a claim before stating it, and verify a test before trusting it.

    2.8k GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Version Bump

    marketcalls/openalgo

    Bump a version in the OpenAlgo repo. An agent skill from marketcalls/openalgo.

    2.8k GitHub stars~1.8k tokensUpdated today
    Auto-check passed

Categories

Questions about Flow Builder

What does Flow Builder do?

Build, edit or debug an OpenAlgo Flow workflow - the no-code node graph at /flow. Flow Builder is an agent skill from marketcalls/openalgo. Build, edit or debug an OpenAlgo Flow workflow - the no-code node graph at /flow.

When should I use Flow Builder?

Flow Builder fits situations like: asked to create a workflow; tradingView alert to an order; port a strategy into Flow; work out why a workflow imported but did nothing.

How do I install Flow Builder in Claude Code?

Run `npx skills add marketcalls/openalgo --skill flow-builder -a claude-code`. Or copy the skill folder (.claude/skills/flow-builder in marketcalls/openalgo) into .claude/skills/flow-builder in your project. Claude Code loads it when a task matches its description.

How do I install Flow Builder in Codex?

Run `npx skills add marketcalls/openalgo --skill flow-builder -a codex`. Or copy the skill folder (.claude/skills/flow-builder in marketcalls/openalgo) into .agents/skills/flow-builder in your project. Codex loads it when a task matches its description.

Can I use Flow Builder in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add marketcalls/openalgo --skill flow-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/flow-builder, .gemini/skills/flow-builder, .github/skills/flow-builder and .opencode/skills/flow-builder in your project.

What does Flow Builder need to run?

Going by SKILL.md and its folder, Flow Builder needs Python for the scripts in its folder and the command-line tools its instructions call (uv and curl). Our summary lists: Python 3.

Does Flow Builder access the network?

SKILL.md contains no URLs. Its commands use uv and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Flow Builder safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Flow Builder use?

Flow Builder is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Flow Builder use?

About 2.1k tokens (SKILL.md is roughly 8.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Flow Builder?

Skills that share tags, products or a category with Flow Builder: Signals (alsk1992/CloddsBot, 2.9k stars), Novu Design Workflow (novuhq/novu, 40k stars), Golive (mikehasa/golive-skill, 1.2k stars) and Stripe Apps (fossasia/eventyay, 1.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Flow Builder?

marketcalls (a GitHub user) maintains it in marketcalls/openalgo, which has 2,808 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.

Source: marketcalls/openalgo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.