What you will get
You dictate a rough note into the issue form. The pill shows a Bug report chip. You press B, and the note is replaced by a report.
| You say | You get, after pressing B |
|---|---|
| so when I click save on the settings page nothing happens it just spins forever I’m on Safari it worked yesterday I think it started after the last deploy | the report below |
# Bug Report
## Summary
Clicking "Save" on the settings page causes the page to spin indefinitely.
## Steps to reproduce
1. Navigate to the settings page.
2. Click "Save".
## Expected
The settings should save successfully.
## Actual
The page spins forever after clicking "Save".
## Environment
* Browser: Safari
* Notes: The issue may have started after the last deploy.
This is real output from gemma4:e4b-mlx through Ollama, with the prompt on this page. Another model, or another run, writes it differently.
Only this step rewrites your words
A prompt: step is the only kind of step that rewrites your text with a language model. It runs only when you add one. The built-in steps never rewrite a sentence.
A new config ships one prompt step, grammar, on the G chip. It runs only when you press G. The bug report step works the same way. It runs when you press B or click its chip, and not on every dictation.
What you need
-
ParrotFlow, with its permissions. See Install and Permissions.
-
A model in the
models:section ofconfig.yaml. A config written by a recent install already has this one:models: gemma: api: ollama model: gemma4:e4b-mlx keep_loaded: true default: trueIt runs on your Mac through Ollama. If Ollama or the model is missing, see Format dictation with a local model.
-
The Input Monitoring permission, for the B key. Without it, the chip still works with a click, and the letter types instead.
Steps
-
Open
~/.config/parrotflow/config.yaml. From the menu bar, use Settings, then Edit Config. -
Add this transform under the
transforms:key that is already in the file:transforms: - name: Bug report description: turn a spoken note into a bug report display: Writing the bug report offer: true key: b model: use: gemma max_tokens: 800 prompt: | Rewrite the dictated note as one bug report in Markdown. Use these headings, in this order: Summary, Steps to reproduce, Expected, Actual, Environment. Use only facts the note states. Where the note says nothing, write "Not stated". Do not offer options, do not add advice, do not ask questions. Return only the report.What each key does:
nameis the label on the chip.descriptionis what “hey parrot, …” matches your words against. Without one,--check-configreports an error for this transform.displayis what the menu bar says while the model works.offer: trueputs a chip on the pill after each dictation.key: bis the letter on it.modelnames an entry inmodels:.max_tokensgives the answer room to grow. Without it, the limit follows the length of what you said, and a long report from a short note can be cut off.promptis the instruction the model gets. Your dictation is sent with it.
The README shows a shorter version, with only
name,prompt: Turn this into a bug report.,offerandkey. It works, with two problems.--check-configreports the missing description as an error. And ongemma4:e4b-mlx, that one-line prompt returned several options for a report, with advice, and was cut off at the length limit. The longer prompt above asks for one report with fixed headings. -
Do not add this transform to the pipeline. In the pipeline it would run on every dictation.
-
Save the file. The app reloads it at once.
Use it
- Click in the issue form, in GitHub, Linear or any app.
- Hold the hotkey and say the note. Release the key.
- The pill shows Vocabulary and your chips. Press B, or click Bug report.
- The menu bar says “Writing the bug report…”. Then the report replaces the note, with no preview.
The chips stay on the pill for a few seconds. For a note you dictated earlier, select it, tap the hotkey, and press B. A tap brings the pill back over the selection.
If the model fails or changes nothing, your note stays as it was. The menu bar says why.
Check that it worked
Ask the app what it loaded:
/Applications/ParrotFlow.app/Contents/MacOS/ParrotFlow --check-config
If you installed with Homebrew, parrotflow runs the same binary.
Look for these lines:
Bug report → gemma (ollama, gemma4:e4b-mlx, reasoning off)
· offer 3 transform(s) on the pill, after Vocabulary
grammar — G
slack_mentions — S
Bug report — B
This is a new config with the transform added at the end of transforms:. The chips follow the order of the file.
Then run the prompt on a sentence, with no microphone:
/Applications/ParrotFlow.app/Contents/MacOS/ParrotFlow --prompt "Bug report" "" "so when I click save on the settings page nothing happens it just spins forever I'm on Safari it worked yesterday I think it started after the last deploy"
The empty "" is the spoken instruction, which a chip does not have. The output has the report on the out: line, then the model and the time it took:
gemma4:e4b-mlx in 5.57s
--prompt runs on your default model and ignores the model: line of the transform. With one model, that is the same model.
Last, dictate a note into a real issue form and press B.
Change the model
The report can run on a remote model instead. Add it to models: and name it in the transform:
models:
gemma:
api: ollama
model: gemma4:e4b-mlx
default: true
gpt:
api: openai
model: gpt-5.6-luna
model:
use: gpt
max_tokens: 800
A remote model gets the text of every note you send to it. --check-config says so on a line that starts with · models: "gpt" sends text off this Mac. The app asks for the key and stores it in the keychain. From a terminal, run --set-key gpt.
Limits
- A model can add facts that are not in your note. Read the report before you submit it.
- The report is Markdown text. An app that does not render Markdown shows the
#and*as typed. - A prompt step takes a second or more. The docs measure about 1.5 s with the model loaded and 6.7 s when Ollama must load it first. A long report takes longer.
- The B key is taken from every app while the pill is up. If you type a word that starts with B right after a dictation, the first keystroke runs the chip.
Related
- Programmable dictation, for rules, scripts and prompts.
- Format dictation with a local model, to set up Ollama.
- Dictate prompts into Claude Code.
- Pipelines: offer and key.
- Configuration: models.