Changelog

Release history for the trx CLI.

0.9.2 2026-08-25

Local transcription on Windows

Added

  • Non-interactive Windows setup with trx init --yes, suitable for IT-managed installs and CI.
  • A real Windows gate powered by cuse that installs the npm package, generates spoken audio with Windows SAPI, runs a local Whisper transcription, verifies trx doctor, and retains JSON, audio, SRT, text, and screenshot evidence.

Fixed

  • Complete Whisper runtime installation into %USERPROFILE%\.trx\bin, including the DLLs required by whisper-cli.exe.
  • Immediate executable resolution for Whisper, ffmpeg, ffprobe, and yt-dlp without restarting PowerShell.
  • Portable dependency fallback when winget or Microsoft App Installer is unavailable. Downloads are pinned and verified with SHA-256 before installation.

Upgrade

bun add --global @crafter/trx@latest --force
trx init --yes --backend local --model small --language es
trx doctor --output json
0.9.0 2026-08-19

ElevenLabs Scribe, with speaker diarization

Added

  • --backend elevenlabs — transcription through ElevenLabs Scribe, the first trx backend that reports who is speaking. Models scribe_v2 (default) and scribe_v1. The upload limit is 5 GB rather than the 25 MB and 100 MB of the other cloud backends, so this one never chunks.
  • --diarize and --speakers <n> — separate speakers. Every SRT cue is prefixed with its speaker ([speaker_0]) and the .txt becomes a conversation, one paragraph per turn. --speakers takes 1 to 32, the range the API accepts, and implies --diarize. Both are rejected on local, openai and vercel instead of being ignored: no other backend returns labels, and dropping the flag quietly would return an undiarized transcript that looks like the request succeeded.
  • Keychain fallback for the API keyELEVENLABS_API_KEY is read from the environment first, and on macOS from the elevenlabs login Keychain entry when the variable is unset, so a key already stored there does not have to be exported into every shell. trx doctor resolves it through the same path a real run uses, so it cannot report a key missing that trx would have used.
  • ISO 639-3 language codes on this backend — Scribe accepts es and spa alike and normalizes both to spa. The other backends still take ISO 639-1 only, which is the set whisper.cpp accepts.

Notes

Scribe timestamps every word, so cues are grouped rather than emitted one word each: a pause of 0.6s or more starts a new cue, a cue is capped at 84 characters, and a change of speaker always cuts. Those first two thresholds are subtitle conventions picked to read well, not measurements. The speaker rule is not subject to them, because a cue holding two voices misattributes the line.

Verified end to end on a 26 minute two-speaker Spanish interview: 488 cues, no cue mixing speakers, monotonic timestamps, transcript covering 25:56 of a 25:59 recording.

Upgrade

bun add -g @crafter/trx@latest --force
trx init --backend elevenlabs
trx interview.m4a -b elevenlabs --speakers 2
0.7.0 2026-08-07

trx serves its own agent skill

Added

  • trx skills (#26) — the agent manual now ships with the CLI and is served from it. trx skills list shows what is bundled, trx skills get trx prints the markdown to stdout for pasting into context, --full appends the reference files, and trx skills path gives the directory. No install step, no second copy to keep in sync. --output json works on every subcommand, and TRX_SKILLS_DIR overrides where trx looks.

Fixed

  • The bundled skill now ships to npm (#25) — skills was missing from package.json files, so the directory never entered the tarball. Nothing consumed it from an install, which is how it sat at 0.5.0 while the CLI shipped 0.6.1 without anyone noticing.
  • The shorthand router no longer swallows new subcommands — it matched against a hardcoded list that had to be updated by hand for every command added. trx skills fell through it and tried to transcribe the skills directory. The list is now derived from the registered commands.

Upgrade

bun add -g @crafter/trx@latest --force
trx --version # -> 0.7.0
trx skills list
trx skills get trx --full
0.6.1 2026-08-07

--output-dir creates the directory

Fixed

  • --output-dir now creates the directory when it does not exist (#23) — pointing --output-dir at a new path used to die on the first ffmpeg step with ffmpeg audio cleaning failed (exit 254), a message that named ffmpeg while the real cause was the missing directory. Chunking already created its own output directory, but that step runs after the pipeline writes the cleaned WAV, so it was never reached. The pipeline now creates the directory up front, covering both the download and the clean paths.

Upgrade

bun add -g @crafter/trx@latest --force
trx --version # -> 0.6.1
trx talk.mp3 --output-dir ./new-folder
0.6.0 2026-07-23

Auto-chunking for big files + model discovery

Added

  • Automatic chunking on cloud backends — files over the provider limit (OpenAI 25 MB, gateway 100 MB) now split with ffmpeg, transcribe chunk by chunk with progress, and stitch back into one continuous transcript and SRT. Timestamps stay monotonic across chunk boundaries. A 2-hour podcast now works on cloud backends out of the box. --no-chunk keeps the old hard error.
  • trx models — list available transcription models per backend. Local and OpenAI lists are static; the vercel backend queries the gateway live, so agents can discover what is actually available instead of guessing model slugs.

Upgrade

bun add -g @crafter/trx@latest --force
trx --version # -> 0.6.0
trx models
trx long-podcast.mp3 -b vercel
0.5.1 2026-07-23

Fix gateway protocol headers

Fixed

  • --backend vercel returned 400 “Unsupported gateway protocol version” — the gateway requires three protocol headers (ai-gateway-protocol-version, ai-transcription-model-specification-version, ai-gateway-auth-method) that the REST docs do not mention. Captured from a real @ai-sdk/gateway request and now sent by trx. Verified end to end against openai/whisper-1 and xai/grok-stt.

Changed

  • Slimmer npm tarball (from 0.5.0 cleanup): tests, fixtures, and tsconfig no longer ship. 26 -> 18 files.

Upgrade

bun add -g @crafter/trx@latest --force
trx --version # -> 0.5.1
trx recording.mp4 -b vercel
0.5.0 2026-07-22

Vercel AI Gateway backend

Added

  • Vercel AI Gateway backendtrx transcribe -b vercel calls the AI Gateway transcription endpoint. One AI_GATEWAY_API_KEY covers every transcription model on the gateway, addressed as creator/model-name (default openai/whisper-1). Named vercel to avoid confusion with Cloudflare’s AI Gateway.
  • trx init --backend vercel — interactive gateway model prompt, validates AI_GATEWAY_API_KEY, skips whisper-cli install.
  • trx doctor gateway checks — reports AI_GATEWAY_API_KEY presence and active gateway model when the backend is vercel.

Upgrade

bun add -g @crafter/trx@latest --force
trx --version # -> 0.5.0
export AI_GATEWAY_API_KEY="..."
trx init --backend vercel
0.4.4 2026-07-10

Fix hardcoded version + brew lock follow-up

Fixed

  • hardcoded version in bin/trx.ts--version always returned 0.4.1 even after 0.4.3 publish because version string was hardcoded. Now reads from package.json dynamically via import pkg with { type: "json" }. Root cause of bun add -g @crafter/trx@latest still showing 0.4.1.
  • brew lock race (from 0.4.3, reforged) — trx init sequential installs + lock retry verification. Included again for completeness.

Upgrade

# clear bun minimumReleaseAge cache if set
# ~/.bunfig.toml -> minimumReleaseAge = 0  (or remove)
bun pm cache rm
bun add -g @crafter/trx@latest --force
trx --version # -> 0.4.4
trx doctor --output json
0.4.3 2026-07-10

Fix brew lock contention in trx init

Fixed

  • brew lock racetrx init on macOS ran brew install for ffmpeg, yt-dlp, whisper-cpp in parallel via Promise.all, causing lockf: 200: already locked and false Missing dependencies: yt-dlp, ffmpeg even though bottles were installed. Sequential install now: whisper-cli -> ffmpeg -> yt-dlp.
  • Retry + verifyinstallViaBrew now verifies which <bin> after a lock failure, cleans *.incomplete cache files, retries install, and treats existing binary as success. No more false negative when bottle installs but brew reports lock error.
  • Cleanup .incomplete markers — removes ~/Library/Caches/Homebrew/downloads/*.incomplete before retry to prevent stuck state.

Changed

  • spawn utility now supports timeout option (for future 5m cap on brew installs) and explicit kill on timeout.

Upgrade

bun add -g @crafter/trx@latest
# if you hit the lock before:
brew cleanup --prune=all
rm -f ~/Library/Caches/Homebrew/downloads/*.incomplete
trx init
trx doctor --output json
0.4.2 2026-07-10

Fix skill docs, accents & full flag coverage

Fixed

  • Broken Spanish accents in skill docs — cmo/est now correctly cómo/está/más//él/qué/cuándo/número/también/información in both SKILL.md and references/whisper-fixes.md
  • Missing opening marks docs¿/¡ were rendered as empty strings (""), now correct UTF-8
  • Install instructions — now includes both bun and npm options and trx doctor step for npm install trx && trx init flow

Added

  • Full flags table — documents -w/--words, --output, --fields srt,metadata,files, --json payload format, config location ~/.trx/config.json, --output-dir with real examples
  • Example JSON response — agents now see expected schema without needing trx schema
  • Troubleshooting — OpenAI backend OPENAI_API_KEY requirement, npm vs bun engines note, yt-dlp upgrade path, GPU/no-GPU guidance, large file tips
  • Agent payload exampletrx transcribe --json '{"input":"...","language":"es"}' --output json preferred pattern
0.4.0 2026-04-06

OpenAI API backend + large-v3-turbo

Added

  • OpenAI API transcription backendtrx transcribe -b openai uses the OpenAI API instead of local Whisper. Supports gpt-4o-transcribe, gpt-4o-mini-transcribe, and whisper-1.
  • large-v3-turbo model — near-large accuracy at ~3x speed for local transcription.
  • --backend flag on trx transcribe and trx init to choose between local and openai.
  • Backend selection in trx init — interactive prompt or --backend openai flag.
  • trx doctor shows backend status — API key detection, active model, backend type.
  • OS-specific open command — uses open on macOS, xdg-open on Linux, start on Windows.
  • Quoted paths with spaces — file paths containing spaces are now quoted in the terminal output for ctrl+click support.

Fixed

  • SRT timestamps for gpt-4o-transcribe models now use real audio duration via ffprobe instead of placeholder values.
0.3.2 2026-04-03

Cross-platform support

Added

  • Cross-platform trx init — Linux support via apt-get + source compilation for whisper-cli, Windows support via winget + pre-built binaries.
  • Platform detection shown during init: trx init (linux).

Fixed

  • Config defaults merge — readConfig() now merges saved config with defaults, preventing crashes when whisperFlags is missing.
  • FFmpeg path collision — when input is a .wav in the current directory, output no longer collides with input path.
0.3.0 2026-03-31

Word timestamps + language auto-detect

Added

  • Word-level timestamps via --words flag — generates SRT with per-word timing.
  • Auto-detect language by default-l flag now only forces a specific language override.

Fixed

  • Vercel deploy issues resolved (bun.lock conflicts, peer dependency warnings).
0.2.0 2026-03-30

Progress bar + agent skill

Added

  • Live progress bar during Whisper transcription with percentage indicator.
  • Word count summary shown after transcription completes.
  • open hint — suggests command to open the output file.
  • Agent skill auto-installtrx init offers to install the Claude Code skill.
  • OG images generated via Sharp for social sharing.
  • 21 e2e tests covering the full CLI surface.
  • Monorepo structure with separate website package at trx.crafter.run.

Fixed

  • Spinner hang after transcription — properly guards callbacks and exits.
0.1.0 2026-03-30

Initial release

Added

  • trx transcribe — transcribe any URL or local file via local Whisper.
  • trx init — one-command setup: installs whisper-cli, yt-dlp, ffmpeg, downloads model.
  • trx doctor — health check for all dependencies and configuration.
  • trx schema — runtime introspection for agent self-service.
  • Agent-first JSON output--output json for piping to other tools.
  • --dry-run — validate input and preview execution plan without running.
  • --fields — select specific output fields to save tokens.
  • Input validation — rejects path traversals, control characters, URL-encoded paths.
  • 99 language support via Whisper’s built-in language detection.
  • 5 model sizes — tiny, base, small, medium, large.