Shira — the visual flow builder for VS Code. Draw an agent's flow as wired boxes on a canvas, connect it to a space, and deploy it.
A visual canvas for building the flow an agent runs.
Shira is the KeenAgents Flow Builder — a VS Code extension whose canvas is where you draw a flow as boxes (nodes) wired together by edges. Instead of writing the whole agent by hand, you drag nodes onto the board, configure each one in a settings panel, and connect them into the step-by-step logic the agent will run.
The extension does four jobs: it scaffolds a project, detects it, connects it to a space, and deploys it — plus it hosts the two debuggers. It holds no agent logic of its own; the behaviour lives in the flows and scripts you author on the canvas and in your project files. Everything you need to build, deploy, and debug a flow lives at this level — you never touch the platform's internals.
Add the extension, and what appears in VS Code.
Install the Shira Flow Builder extension in VS Code. It adds a Shira Flow Builder view to the activity bar (this is where you scaffold, connect, and deploy) and a companion Breakpoints view beside it. A Toggle Theme button in the view's title bar switches the canvas between dark and light.
The panel also shows a Models chip — a count like "22 models". That roster comes from a model list you paste into the extension's settings; it powers the model picker inside the LLM node so you choose from the providers and models your organization allows. An empty setting shows none.
keen.json (next section).The three values that point a project at exactly one space.
A project connects to a space through one small file — .vscode/keen.json — with exactly three string fields. The scaffold writes placeholders; Connect refuses to run until you replace all three with real values.
.vscode/keen.json
{ "server": "https://localhost", "space": "cmsm8rezw0000kr7wmyg4pkwb", "token": "5214f5db-0e45-435d-af4f-377592548a59" }
https://localhost for a local sandbox, or https://your-domain otherwise. It is also the host the debuggers attach to. A self-signed certificate is accepted only for a local https://localhost; any other host needs a valid HTTPS certificate.Connect exchanges the token and space id for a short-lived session held in the extension's memory. Reloading the VS Code window drops that session, so you simply Connect again — nothing is lost. A status-bar item shows Connected / Not connected at all times.
From an empty folder to a running agent.
The panel's three buttons light up in order — that sequence is the whole path from nothing to a live project:
keen.json. Replace the three placeholders with your server, space id, and deployment token.keen.json is filled. It connects to the target and the button becomes Disconnect.The first upload is explicit; after that, auto-sync re-uploads on every save (briefly debounced), so your edits keep flowing to the sandbox as you work. If the scan rejects the project, the reason appears in the extension's output — fix it and re-upload. Deploying is entirely the panel's Connect → Upload over HTTPS; there is no command line or package script to run.
Where you draw a flow, and where you drive the project.
A .flow file opens in the canvas — a pan-and-zoom board. Open the node palette, drag a node onto the board, and it appears as a titled card with connection dots. Drag from a node's out dot to the next node's in dot to wire an edge. Each card carries a drag handle (to move it), a Settings toggle (to open its fields), and a Rotate control (cosmetic — it just moves where a dot renders).
The Shira Flow Builder view holds the read-only settings chips (theme, model count) and the three lifecycle buttons. The Breakpoints view lists the node breakpoints you've set, grouped one row per flow file; clicking a leaf reveals and centres that node on the canvas. You set a node breakpoint by selecting a node and pressing F9. Debugging attaches to a sandbox environment only — see the Debugging page.
Where a flow lives — the platform finds things by convention, so location matters.
Create Project writes this skeleton into an empty folder. Structural separation isn't cosmetic: where a file lives decides what it is.
project skeleton
.vscode/
keen.json ← your deploy target (you fill this)
settings.json ← empty placeholder
src/
flows/
Project.flow ← your first flow (opens in the canvas)
scripts/
init.js ← script bodies for Script nodes
tools/ ← script-backed tools an agent can call
keen-tools.json ← the tool registry
package.json ← name, version, "type": "module".flow files. This folder is flat — only top-level, PascalCase files. Each file is one flow, named the same way you'll name it on the agent. Keeping each flow in its own file is what lets flows call each other by name and be reused.init.js). This folder is scanned recursively, so you may organise scripts into sub-folders."type": "module", which makes your script files ES modules — that's why every script uses export const exec. There are no deploy scripts here; deploying is the extension's job.A folder is a valid project only when all five markers exist — .vscode/keen.json, src/keen-tools.json, package.json, src/flows/, and src/scripts/. You rarely build one giant flow: split logic across several .flow files and connect them by name, exactly as you split code into functions.
Keen Agents 2026
Documentation
Release 15