After installation, Serenade will walk you through installing plugins for supported applications, like VS Code, Chrome, and Hyper. Serenade will then guide you through interactive tutorials to practice voice coding.
By default, Serenade uses a cloud-based speech-to-code system. To run Serenade entirely on your device, so no data leaves your computer, check out Serenade Pro.
Serenade floats above all your other windows, so you can keep it side-by-side with other applications, like your code editor. You can toggle Serenade by clicking the Listening switch or pressing Alt+Space. Then, as you speak, you'll see a list of transcripts in the Serenade window.
Sometimes, Serenade isn't sure what you said, so you'll see a few different options. The first one will be used automatically, but to use a different option (and undo the first one), just say the number you want to use instead. For instance, to use the second option, just say two. If none of the options are right, you can just say undo.
As you'll see throughout these docs, most Serenade voice commands have the same form:
The action is something you want to do to your code. Common actions include add to add a new line of code, change to edit code, and delete to remove code.
A selector is a block of code to operate on. Some selectors are text-based, like line or word. Even more powerful selectors are code-based, which enable you to reference parts of your code, including function, class, and return value. For a complete list of selectors, see the Reference section.
Serenade commands simply combine an action and a selector: add function hello, change parameter to number, and copy lines five to ten.
You can also chain commands together without pausing. For instance, you can say save focus terminal to save your current file and then focus your terminal, or start of class add method hello to add a new method at the start of a class.
Finally, you can also specify how many times a command should be executed. For instance indent three times will run the indent command three times.
Serenade has a few different configurable modes to change how your voice commands are interpreted.
Serenade's default mode is Command Mode. In this mode, if you say something that isn't a valid Serenade command, Serenade will show an x next to the command and won't do anything. To enable command mode, just say command mode.
Sometimes, like when dictating a longer block of text, you want Serenade to simply type out everything you're saying, rather than listen for other commands. Serenade's Dictate Mode does just that. To enable Dictate Mode, just say dictate mode, and then Serenade will type out everything you say, rather than listening for valid commands. Some commands, like undo, repeat, andstop listening, will also be presented as alternatives so you don't have to leave Dictate Mode to use them. To get back to normal mode, just say command mode.
Serenade has two different commands for writing code.
insert inserts code right at your cursor, which is helpful for inserting text onto an existing line.
add moves your cursor intelligently based on what you say (e.g., "add parameter"), and is used for writing new statements and larger blocks of code, like functions and classes.
As you'll see, Serenade uses machine learning under the hood to handle many formatting details for you, so you don't have to manually dictate symbols and formatting details like underscores vs. camel case formatting. For instance, if you have a variable foo_bar in scope and you say insert foo bar, Serenade will automatically format your code as foo_bar, so you don't have to specify the underscore.
add is used for writing new lines or blocks of code. This command will intelligently position your cursor and handle boilerplate for you. For instance, add parameter foo will move your cursor to the nearest parameter list, and then create a new parameter.
Below are just some examples of add commands—you can use any selector. All add commands have the same form:
system inserts text wherever your cursor has focus, even if no Serenade plugin is present. For instance, you can use system to type into VS Code's "Find" dialog box rather than the main text editor. system also doesn't do much formatting for you, which can be useful if you want to drop down to a lower-level and manually specify all formatting, spacing, etc.
The go to command moves your cursor around the file. With this command, you can jump to any text in your file (e.g., go to random), or any selector (e.g., go to class). Since the go to command is so common, if you just say a selector, like next function or second parameter, Serenade will implicitly use the go to command.
Below are just some examples of go to commands—you can use any selector. All go to commands have the same form:
go to <selector>
go to line two
def random(low, high):
go to random
def random(low, high):
go to second parameter
def random(low, high):
go to start of function
def random(low, high):
To move your cursor to the literal text matching a selector name, rather than the selector itself, you can say go to phrase. For instance, you might want to move your cursor to the literal word "parameter" rather than a parameter to a function, so you could say go to phrase parameter. This is similar to how escape works in add and insert commands.
Finally, you can move your cursor by speaking a direction: up,down,left, and right.
Serenade doesn't just work for applications that have a native Serenade plugin—you can control any application with voice using Serenade. No matter what application you're using, you can use commands like system to insert text, press to press keys (to trigger shortcuts), and focus to switch apps.
Serenade uses a combination of plugins and OS-level accessibility APIs to manipulate text no matter what application you're using. However, some applications don't properly implement accessibility APIs, and so Serenade can't read their text fields. When you're using one of these applications, Serenade will open a dedicated Dication Box, where all Serenade commands will work properly.
The Dictation Box will open automatically when Serenade can't read the current field. You can also say dictation box to open the dictation box yourself. Or, say edit to copy the current text field into the dictation box.
When Dictation Box is open, you can say close to close and and ts contents into the field you were editing. You can also say enter to also press enter after inserting (e.g., for sending a message) or copy to copy the text to the clipboard rather than inserting it.
Open an empty dictation box
Open a dictation box with the current text field
Close the dictation box and copy its contents to the clipboard
Close the dictation box and paste its contents into the current text field
Instead of worrying about spacing while writing code, use style file once your code is in a reasonable state, and Serenade will automatically format the entire file.
Long insert or add commands can be less accurate than shorter commands. If you're seeing low accuracy, try breaking up longer commands into smaller, separate commands.
The insert and add commands are similar, but have distinct use cases—add works best for writing new lines of code, including larger constructs like functions or classes, while insert works best for inserting or appending text to an existing line.
Make sure your system's microphone volume is set to the right level. We've found that around 80%, to make sure the input isn't too loud or too quiet, works best, but try moving it around if Serenade's results aren't accurate.
When using Serenade, try to speak conversationally, as though you were pair programming with someone seated next to you. Over-enunciating words can actually make Serenade less accurate!
If Serenade doesn't know a word, like numpy, you can spell it in a command, as with add import n u m p y.
Code selectors can be used to describe a block of code you want to reference, like a function, argument, or class. You can use any of these selectors in commands like go to, delete, change, or any command that contains a selector.
The following selectors work for supported languages:
Text selectors can be used to describe a block of text you want to reference, independent of any programming language. You can use any of these selectors in commands like go to, delete, change, or any command that contains a selector.
The following selectors work in any file, regardless of whether or not Serenade supports the language: