macparakeet-cli 1.0: local Parakeet for your Apple Silicon agent
Apple Silicon Mac minis are becoming the default home for personal AI agents. macparakeet-cli 1.0 is the canonical Swift-native CLI for Parakeet TDT on the Neural Engine — for OpenClaw, Hermes, Codex CLI, and any agent that needs local voice.
There’s a quiet shift happening in personal AI: the agent moves out of the chat tab and into a daemon.
OpenClaw — recently acquired by OpenAI — and Hermes Agent from Nous Research are both designed to live as long-running processes on user-controlled compute. They’re growing fast. Their dominant deployment target, increasingly, is an Apple Silicon Mac mini: M4 Pro at $1,399, unified memory, ~8 watts at idle, silent enough to live on a shelf. The personal AI compute box that didn’t exist three years ago.
There’s a gap in that stack: voice. Whisper.cpp is mature but doesn’t use the Neural Engine, so it’s slow. The OpenAI Whisper API is fast but cloud-only, paid, and breaks the local-first posture. parakeet-mlx exists in Python but doesn’t carry persistence, prompts, or speaker diarization.
That gap is the slot macparakeet-cli is built to fill.
What changed today
Today I’m tagging macparakeet-cli 1.0.0. This is a versioning event, not a feature release — the CLI itself has existed since v0.1 of MacParakeet and powered AI-assisted testing through v0.4–v0.6. The 1.0 commitment is to stability: a public semver contract, a written compatibility policy, and AGENTS.md docs so agents can wire it in without guessing at the surface.
What’s stable as of 1.0:
- Every existing command and flag (
transcribe,history,prompts,flow,calendar,models,feedback,health,llm). - Every JSON output schema. Every read-only command supports
--jsonwith ISO-8601 datetimes, sorted keys, top-level array for lists or object for single-record / status responses. - UUID-or-name lookup with prefix matching,
.notFoundand.ambiguouserror classes. - Exit codes: 0 success, non-zero failure, errors to stderr, JSON only to stdout.
The compatibility policy lives in Sources/CLI/CHANGELOG.md. Breaking changes require a major bump and at least one minor release of overlap with the deprecated surface.
How this composes with an agent
Parakeet TDT 0.6B v3 (NeMo, public weights)
│
FluidAudio (CoreML on the Apple Neural Engine)
│
┌────────┴────────┐
│ MacParakeetCore │ Swift library, no UI deps
│ STT · DB · LLM │
└────────┬────────┘
│
┌──────────┴──────────┐
▼ ▼
macparakeet-cli MacParakeet.app
(semver 1.0) (SwiftUI, GUI consumer)
│
┌────────┼─────────────────────────┐
▼ ▼ ▼
AGENTS.md integrations/ brew install
(coding (OpenClaw + Hermes (live as of today)
agents) scaffolds)
The CLI is the load-bearing surface. The Mac app is one well-crafted client of it. Agents — OpenClaw skills, Hermes skills, generic shell automation — are other clients, all reading from the same SQLite + STT pipeline.
What an agent gets
When you wire macparakeet-cli into a Hermes or OpenClaw skill, the agent gains:
- Local file transcription. Drop a path or a YouTube URL, get a transcript with word-level timestamps.
- Persistent memory. Every transcription lands in SQLite at
~/Library/Application Support/MacParakeet/macparakeet.db. The agent can search prior transcripts, dictations, and prompt outputs without re-transcribing anything. - Prompt library. Built-in summary / action-items prompts plus user-defined ones, runnable against any past transcription. Bring your own LLM key (Anthropic, OpenAI, Ollama, LM Studio, or any OpenAI-compatible local provider).
- No cloud STT, ever. Parakeet TDT runs on the Neural Engine. The only network egress paths are YouTube downloads (yt-dlp), optional cloud LLM calls (only when explicitly configured), and Sparkle update checks (the app, not the CLI).
Install
Today, the CLI ships inside the macOS app bundle:
ln -s /Applications/MacParakeet.app/Contents/MacOS/macparakeet-cli \
/usr/local/bin/macparakeet-cli
macparakeet-cli --version # 1.0.0
macparakeet-cli health --json
This week I’m cutting brew install moona3k/tap/macparakeet-cli so the standalone install path no longer requires the .app. The full plan and timing are in the canonical CLI surface plan.
What this is not
This is not a pivot. The macOS app — the dictation overlay, the meeting recording, the file transcription UI — remains the primary product for individual users. None of that changes.
What changes is the framing of the CLI. It went from “internal dev tool” to “versioned public surface, two audiences.” Both audiences are legitimate. One audience installs MacParakeet and dictates into Slack. The other audience runs a Hermes daemon on a Mac mini and lets it transcribe meetings autonomously. The same code serves both, because the architecture happens to be exactly what each needs.
Where to go next
- For agents:
/agents - Calling the CLI from your agent:
integrations/README.md - OpenClaw skill scaffold:
integrations/openclaw/ - Hermes skill scaffold:
integrations/hermes/README.md - CLI compatibility contract:
Sources/CLI/CHANGELOG.md - Strategic plan (the why):
plans/active/cli-as-canonical-parakeet-surface.md
Filing issues, submitting integrations, asking questions: github.com/moona3k/macparakeet.