OpenFlow can take what you say and clean it up into text that coding tools understand. The Vibe coding section in Settings has two toggles that shape dictation for AI coding assistants and editors like VS Code, Cursor, and Windsurf.
Both features run locally, after the normal cleanup step, and work offline with the rule-based cleanup engine. They also apply to text refined by the local LLM cleanup model.
Variable recognition
Better understands variables in code. When this is on, OpenFlow listens for case directives while you dictate and converts the words that follow into a single, correctly cased identifier.
Open Settings > Vibe coding and turn on Variable recognition (VS Code, Cursor, Windsurf). It is off by default.
Supported case directives
| Spoken directive | Resulting case | Example speech | Inserted text |
|---|---|---|---|
| camel case | camelCase | "create a camel case get user name function" | getUserName |
| pascal case | PascalCase | "define a pascal case user profile model" | UserProfile |
| snake case | snake_case | "use snake case user id for the database" | user_id |
| kebab case | kebab-case | "use kebab case border radius in CSS" | border-radius |
| screaming snake case | SCREAMING_SNAKE_CASE | "define a screaming snake case max retries constant" | MAX_RETRIES |
"upper camel case" is also accepted as an alias for pascal case.
OpenFlow collects the words after the directive until it hits a common stop word (and, or, the, in, for, with, and so on), joins them, and applies the case transform. The rest of your sentence is left intact.
File Tagging in Chat
Automatically tags files in your IDE. When this is on, OpenFlow finds file references in your dictation and wraps them in the @file mention format that Cursor and Windsurf chat recognize, so the assistant can pull that file into context automatically.
Open Settings > Vibe coding and turn on File Tagging in Chat (Cursor & Windsurf). It is on by default.
Recognized patterns
OpenFlow detects files three ways:
- Named code files with an extension — words like
app,main,index,config,utils,routes,api,store,model,test,mod,lib, and more when followed by an extension.
"look at file main.rs for the entry point" becomes @main.rs.
- A
filekeyword plus a name with extension —file,filename,module,class,component, orpagedirectly before a file.
"open the file app.tsx and check the component" becomes @app.tsx.
- Spoken dot notation — "config dot ts" is understood as
config.ts.
"check config dot ts for settings" becomes @config.ts.
A wide range of extensions is recognized, including ts, tsx, js, jsx, py, rs, go, java, rb, php, css, scss, html, json, yaml, yml, toml, xml, md, txt, sh, sql, graphql, vue, svelte, swift, kt, c, cpp, h, hpp, cs, dart, lua, proto, and tf.
Tips
- Turn variable recognition on only when coding. It rewrites words after a case directive, which you usually don't want in ordinary prose. File tagging is safer to leave on because it only triggers on clear file references.
- Speak the directive, then the name. "snake case user id" works; "user id snake case" does not.
- Both features are local. They run as the final cleanup step on your machine — no network access is required.
- They combine with other cleanup. Variable recognition and file tagging apply after filler-word removal, punctuation expansion, and dictionary corrections, so the surrounding text is still cleaned up.
Related
- Model Setup — the transcription and cleanup engines these features sit on top of.
- Getting Started — from install to your first dictation.
- Architecture — how the cleanup pipeline (including these post-processing steps) fits together.