# My first ChatGPT / Codex plugin: saymd

> Source: <https://dev.to/kondasviktor/my-first-chatgpt-codex-plugin-saymd-1p9d>
> Published: 2026-09-15 16:32:58+00:00

Speak once, get a Markdown prompt any agent can `@`. Free MIT CLI — now live in the ChatGPT / Codex Plugins directory.

Back on **4 Sep**, in the [AI image prompt commands](https://vibecoderslife.com/post/ai-image-prompt-commands-chatgpt-gemini-grok) newsletter, I teased a VCL project built on [Gemini 3.5 Transcribe](https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-5-transcribe/).

**Here I am.**

This is also **my first product live as a ChatGPT / Codex plugin**. Among roughly a thousand third-party plugins, one of them is mine — and I'm excited for you to try it.

Meet **[saymd](https://saymd.app/?utm_source=devto&utm_medium=article&utm_campaign=saymd-voice-to-markdown-prompts)** — a Free MIT CLI that turns microphone speech (or an audio file) into a **structured Markdown prompt** any agent can `@`. Not a raw dump into chat. A usable spec: **Objective / Context / Instructions / Constraints** (or a `feature` / `bug` / `plan` template).

You bring your own speech-to-text key (**BYOK**). saymd does not host your audio or sell transcription minutes.

**Start-here:** `npx saymd setup` → `npx saymd doctor` → `npx saymd`. Then `@` `.ai/prompt.md` in your agent. Site: [saymd.app](https://saymd.app/?utm_source=devto&utm_medium=article&utm_campaign=saymd-voice-to-markdown-prompts) · Free MIT: [GitHub](https://github.com/kondasviktor/saymd).

I spent years in **VS Code**. Even with Cursor, Codex, Claude Code, and Antigravity desktop apps on the machine, I still prefer the **CLI** when I can. Less UI chrome. Faster loops. Feels like home.

The bottleneck is not the agent. It's **typing**.

Dictation helps. Tools like [Wispr Flow](https://wisprflow.ai/r?VIKTOR944) and native IDE dictate are great for getting words out of your head. The problem: they usually dump **messy unstructured text** straight into the chat box. Agents then guess the objective, invent constraints, and miss the acceptance criteria you meant to say.

I wanted the opposite: **speak once → get a prompt file I can `@`** in Cursor, Codex, Claude Code, Gemini CLI, Grok Build, Copilot, OpenCode — whatever I'm using that day.

That's saymd.

`--file idea.m4a`.`.ai/prompt.md``@` that file in your agent and let it execute.
Default headings (no template): **Objective · Context · Instructions · Constraints**.

| `--template` | Shape | 
|---|---|
| `feature` | Objective, Context, Instructions, Constraints, Acceptance criteria | 
| `bug` | Objective, Context, Steps to reproduce, Expected / Actual | 
| `plan` | Objective, Context, numbered Steps, Constraints, Open questions | 

*Demo from the GitHub repo — mic or `--file` → structured `.ai/prompt.md`.*

```
npx saymd setup
npx saymd doctor
npx saymd
```

Or from an existing clip:

```
npx saymd --file idea.m4a --template feature
```

Useful flags:

`-o .ai/prompt.md` — output path`--template feature|bug|plan``--seconds 30` — shorter first test (Free max is ~60s)`--lang hu` — language hint if auto-detect misses`--provider gemini|openai|deepgram|elevenlabs`
`doctor` checks ffmpeg, mic, provider, and API key before your first real take. Press **Enter** to stop recording early — you don't have to wait for the max.

**Requirements:** Node 20+, ffmpeg, macOS or Linux (Windows: WSL or `--file` only).

All four are available on Free. You create the key with the provider, paste it in `saymd setup`, and pay that provider directly.

| Provider | Exact model | Notes | 
|---|---|---|
| **Gemini (recommended)** | `gemini-3.5-transcribe` | Speech-to-text **and** Markdown structuring | 
| OpenAI | `gpt-4o-transcribe` | Speech-to-text **and** Markdown structuring | 
| Deepgram | `nova-3` | STT only — also needs Gemini or OpenAI to structure | 
| ElevenLabs | `scribe_v2` | STT only — same as Deepgram | 

Keys live in `~/.saymd/config.json` (mode 0600) or env vars (`GEMINI_API_KEY`, `OPENAI_API_KEY`, …). A typical ~60s dictation is usually well under **$0.01** on your own key (provider pricing applies).

**Privacy:** API keys stay on your machine. Audio goes **only** to the STT provider you chose, with your key. saymd.app does **not** receive your audio, transcripts, or prompt files.

**Languages (Free):** 85+ input languages with automatic detection. On Free, every section of the Markdown is written in the **same language you spoke**. Pro unlocks cross-language `--out` (e.g. speak Hungarian → English Markdown).

The Free MIT CLI is the whole product for short recordings. Stay there if that's all you need.

If you start using saymd every day — continue a spec after the first take, ask it to flag missing requirements, speak one language and write the Markdown in another, or record past a minute — that's **Pro**. It's a separate package (`@saymd/pro`), not a hidden switch in the MIT repo. I sell the year first: **€39/year** at [saymd.app](https://saymd.app/?utm_source=devto&utm_medium=article&utm_campaign=saymd-voice-to-markdown-prompts). A monthly option exists if you only want to try; yearly is the one I'd pick.

```
saymd activate <activation-code>
saymd --continue .ai/prompt.md
saymd --review .ai/prompt.md
saymd --out en
```

Pro adds:

`--continue` — add more speech; merge into the same spec`--review` — missing requirements, constraints, acceptance criteria`--out` — speak one language, write the spec in another`.saymd/vocab.txt`
| Surface | Status | 
|---|---|
| **ChatGPT / Codex** | Live in the [OpenAI Plugins Directory](https://chatgpt.com/plugins/plugins_6aa7de5bf4f48191b8eb88fcf33e2f24) — among ~1000 ChatGPT plugins, one of them is mine, and I'm genuinely excited | 
| **Gemini CLI** | `gemini extensions install https://github.com/kondasviktor/saymd` | 
| **Grok Build** | Available via DIY marketplace add from the README; official catalog PR pending | 
| **Claude Code + Cursor** | Currently under review for publishing | 

If you use ChatGPT, search **saymd** under Plugins in your account. Screenshots below of the live listing — Voice to Markdown prompts.

*saymd live in the ChatGPT / Codex Plugins directory.*

*Install screen — starter `@saymd` prompts and the Install plugin button.*

Slash commands in the plugin package include `/saymd`, `/saymd-feature`, `/saymd-bug`, `/saymd-plan`, plus Pro-oriented `/saymd-continue`, `/saymd-review`, `/saymd-out`.

Native loop still works everywhere: run the local CLI → `@` `.ai/prompt.md` → offer to implement.

**Outgrowing the 60-second Free cap?**

Keep the MIT CLI. Add Pro when continue / review / cross-language / longer takes start to matter — **€39/year**.

`npx saymd setup && npx saymd doctor`, then one short recording.
If you only remember one line: **agents execute; saymd delivers the usable spec.**

`npx saymd setup` — pick Gemini (`gemini-3.5-transcribe`) unless you already live on OpenAI keys.` npx saymd doctor``npx saymd --seconds 30 --template feature`` saymd activate <code>`
*Originally published on [Vibe Coder's Life](https://vibecoderslife.com/post/saymd-voice-to-markdown-prompts?utm_source=devto&utm_medium=article&utm_campaign=saymd-voice-to-markdown-prompts). I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — [subscribe](https://vibecoderslife.com/?utm_source=devto&utm_medium=article&utm_campaign=saymd-voice-to-markdown-prompts#subscribe-email).*

*Sources: [saymd.app](https://saymd.app/?utm_source=devto&utm_medium=article&utm_campaign=saymd-voice-to-markdown-prompts) · [GitHub (MIT Free CLI)](https://github.com/kondasviktor/saymd) · [Gemini 3.5 Transcribe](https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-5-transcribe/) · [ChatGPT / Codex plugin](https://chatgpt.com/plugins/plugins_6aa7de5bf4f48191b8eb88fcf33e2f24).*

*Disclosure: [Wispr Flow](https://wisprflow.ai/r?VIKTOR944) link is a referral. saymd is my product (Free MIT CLI + optional Pro). Buy Me a Coffee is optional support — not required to use Free. Drafting/editing used AI assistance; the product, plugin listing, and CLI are my own shipping work.*
