Dictation for developers

Dictate prompts to coding agents, PR numbers, Slack mentions and the names in your code. ParrotFlow runs on your Mac and follows rules you write yourself.

Prompts to coding agents

Hold the key, explain what you want, let go. The text lands in the terminal or the editor you are in. In a full-screen terminal program such as Claude Code or vim, the pill sits next to your words.

Some coding agents, Claude Code among them, have voice input of their own. You do not need ParrotFlow to talk to them. Here is what ParrotFlow adds.

  • The same key works in every app you type into, such as a terminal, Slack or a browser.
  • Your own rules and your own vocabulary apply everywhere you dictate.
  • Speech recognition and the built-in steps run on your Mac.

Names from your screen

The agent just wrote CaretAnchor. You say it, and the recogniser hears “carrot anchor”. ParrotFlow reads the window you dictate into, finds the name, and writes CaretAnchor.

Spelling from what is on your screen

Names of libraries and tools

Fix a library name once and ParrotFlow learns it. Next time “upgrade view” becomes “upgrade Vue”, while “re-render the whole view” keeps the word “view”. You can also teach a name from the terminal:

ParrotFlow --learn "super base" Supabase

Teach ParrotFlow your words

PR and issue references

A rule turns a spoken PR number into a link. Put numbers_en first, so the number is in digits when the rule reads it.

transforms:
  - name: github_refs
    replace:
      '[#$1](https://github.com/OWNER/REPO/pull/$1)':
        ['/\bPR\s*#?(\d+)\b/']

transcription:
  pipeline:
    - transform: numbers_en
    - transform: github_refs
You say You get
PR 478 #478, linked to the pull request

Spoken GitHub references

Slack mentions

The shipped slack_mentions script turns a first name into a handle. “Siobhan” becomes “@siobhan”. Fill the roster in transforms/slack_mentions/slack_mentions.py once. The script only looks names up, so it cannot invent a handle.

It runs when you ask: press S on the pill after a dictation, or say “hey parrot, use Slack mentions”. A message that names someone is not always one that should ping them. ParrotFlow never sends the message. The last look is yours.

Check once that a pasted handle works in your Slack. Paste one into a message without sending it. If it does not turn blue, it notifies nobody.

A bug report from what you said

Describe the bug out loud, then press B on the pill. The dictation becomes a bug report.

transforms:
  - name: Bug report
    prompt: Turn this into a bug report.
    offer: true
    key: b

This step rewrites your text with a model, so it only exists if you add it. It runs on the model you choose, local through Ollama or remote.

Priorities and numbers

“P zero” becomes “P0” with a three-line table. Spoken numbers become digits with the shipped numbers_en step: “two hundred forty-three” becomes 243.

transforms:
  - name: priorities
    replace:
      'P0': ['P zero']
      'P1': ['P one']
      'P2': ['P two']

Let your coding agent write the rules

Add the ParrotFlow skill to your coding agent:

npx skills add znat/parrotflow --skill parrotflow

Then describe the rule in your own words:

/parrotflow When I say P zero, P one or P two, I want the number as a digit.

The agent writes the rule into config.yaml and checks it with ParrotFlow --check-config. The app picks up the change when the file is saved.

Read more