vertexproject/synapse/storm
Claude Code and agent skill by vertexproject/synapse
- community
Checking that the SKILL.md file is still in the repository.
Reference for the Storm query language used by the Synapse Cortex: lifting, filtering, pivoting and traversal, editing nodes, tags, variables and types, control flow, functions, commands, and libraries. Use when composing, validating, debugging, or explaining Storm queries.
Install
npx vskill@latest install vertexproject/synapse/stormSKILL.md
Storm Query Language Skill
TRIGGER: When writing, editing, reviewing, validating, debugging, or running Storm (.storm) files, Storm queries, Storm packages, or Synapse query language code. Also triggered when fixing BadSyntax exceptions, troubleshooting Storm parse errors, or running Storm queries against a Cortex.
Language Overview
Storm is an async pipeline-based graph query language for Synapse. Queries are chains of operations and commands that transform streams of (node, path) tuples lazily. Storm files use /* */ and // comments. Inline commands must end with | to return to storm operator syntax.
Validating and Running Storm
IMPORTANT: Claude MUST validate ALL Storm query logic it generates using the MCP tools below. Every Storm query written to a file, embedded in a test, or included in a Storm package MUST be validated before being considered complete. No exceptions.
Validating Storm Syntax (Required)
The storm_validate MCP tool validates Storm syntax without executing the query. Always use it to check a query before running it.
- Argument:
query(the Storm query text). - Returns
{"valid": true}when the syntax is valid, or{"valid": false, "err": <ErrName>, "mesg": <details>}when the query fails to parse.
Workflow for validating generated Storm:
- Call
storm_validatewith the query text. - If
validisfalse, readerr/mesg(which include line/column info), fix the query, and re-validate before proceeding.
Linting Storm (Required)
The storm_lint MCP tool lints a query against the Cortex's own data model (including extended forms and properties) without executing it. Lint every query before running it, and fix or consider each finding.
- Arguments:
query, plus optionalselect/ignore/enablelists of rule codes or code prefixes, and an optionalv3_readyboolean. - Returns
{"findings": [{"rule", "severity", "line", "column", "mesg"}, ...]}; an empty list means the query is clean. - A syntax error is reported as a single
E001finding with its line and column, so a clean lint also implies valid syntax. - Only
stormmode queries are supported;lookupmode text usually returns anE001syntax error. - The default rules report errors (
E), pipeline usage which may not do what was intended (P), Storm which could be written more simply (S), and a baretrue/false/nullwhich is a string rather than a boolean or null (R004). Suppress a deliberate finding with a trailing// noqaor// noqa: <code>comment on that line;E001cannot be suppressed. - Lint with the default rules. Only set
v3_readywhen asked to check or prepare Storm for Synapse 3.x. It adds theRrules, for code which does not run as intended on Synapse 3.x, and theMrules, for data model forms and properties which are renamed or removed in Synapse 3.x. These findings are not errors on this Cortex: do not replace a form such asinet:ipv4with its 3.x name, which does not exist here.
Running Storm Queries
The storm MCP tool runs a Storm query against the Cortex and returns a page of result messages: {"messages": [(<type>, <info>), ...], "cursor": <str-or-null>}. Each message is a (<type>, <info>) tuple as yielded by the Storm runtime (e.g. node, print, warn, err, fini).
Each query must be fully drained or cancelled. If cursor is non-null, the query produced more messages than one page and is still running on the server -- you MUST either call storm_continue(cursor) repeatedly until it returns a null cursor (fully drained), or call storm_cancel(cursor) to discard the rest. Never abandon a query with a non-null cursor: it holds a Storm runtime open on the server until it times out. A null cursor means the query is complete and nothing further is required.
The call_storm MCP tool runs a query and returns only the value from its return() statement (no pagination). Use it when the query is written as a single function-style query that returns one value.
storm and call_storm accept:
query(required): the Storm query text.opts(optional): Storm query opts, e.g.{"vars": {...}},{"view": <iden>}, or{"limit": <n>}. Setting"view"is important -- see Selecting a View.
storm_continue and storm_cancel take a single cursor argument. Queries run as the calling user and respect that user's permissions; the view is whatever opts["view"] specifies, else the user's default view.
Use cases:
- Verify that a query produces the expected nodes and output (
storm). - Retrieve a computed value from a function-style query (
call_storm). - Iteratively build up and query graph data across calls.
- Validate that Storm logic works end-to-end (not just syntax) before deploying it to a package.
Selecting a View
A query always runs in exactly one view. There is no "active session view" -- the view is chosen per call by setting "view" in the opts of storm / call_storm (e.g. opts={"view": "<iden>"}). If "view" is omitted, the query runs in the calling user's default view.
Running a query in the wrong view can be VERY BAD -- it can create, modify, or destroy data in the wrong place. When you are not certain which view the user intends, do NOT guess: call view_list, show the choices, and ask the user to confirm which view to use. Once chosen, reuse that view iden in the opts of every subsequent storm / call_storm call.
View MCP tools:
view_list-- list the views the user can read, as{iden, name, parent}. Take the
iden of the intended view and pass it as opts={"view": "<iden>"} on later calls.
view_get-- return the iden of the user's default view (the one used whenoptsomits a
view).
view_fork-- fork a view (defaults to the user's default view), creating a child view
with its own writable top layer; returns the new fork's iden.
view_del-- delete a view (its layers are not deleted).view_merge-- merge a forked view's changes down into its parent (the fork is not
deleted; the view must be a fork without parent quorum voting).
Developing ingest logic (do this for ANY node-editing work): a view_fork followed by a view_del is the safe way to test logic that edits nodes. view_fork a view to get a fork iden, run the ingest by passing that iden as opts={"view": "<fork-iden>"} to the storm tool, inspect the results, then view_del the fork to discard every change -- the underlying data is never touched. Strongly prefer this workflow whenever developing or iterating on ingest or other node-editing Storm. Use view_merge instead of view_del only once the logic is verified and you want to keep the changes.
Discovering the Data Model
Do not guess form or property names. Use:
- the
model_findMCP tool to search the data model by regex (matched against the names and docs of forms, properties, types, and interfaces), or thesyn://modelMCP resource for the full Synapse data model (forms, properties, types, univs, tagprops, edges, interfaces); - the
syn://model/form/{name}MCP resource for a single form definition; - the
syn://stormdocsMCP resource for Storm library, type, and command documentation.
Reading BadSyntax Errors
A BadSyntax exception (surfaced via storm_validate or an err message) contains:
- `mesg`: Human-readable error (e.g.
"Unexpected token 'and' at line 3, column 5, expecting one of: ...") - `line` / `column`: Location in the query text
- `token`: The unexpected token value
- `at`: Character offset in query text
- `highlight`: Dict with
hash,lines,columns,offsetsfor precise source mapping
The parser converts raw Lark token names into friendly English descriptions in its error messages.
Syntax Quick Reference
Lifting (Select Nodes)
Comparison operators: =, !=, <, >, <=, >=, ~= (regex), ^= (prefix), @= (time/interval)
Filtering
Pivoting (Graph Traversal)
Edit Blocks [ ]
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingsynapse/data/skills/storm/SKILL.md
Popularity
- Repository stars
- 446
- Repository forks
- 91
- 7-day trend score
- 31
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/vertexproject/synapse/storm)