deepctl (Deepgram CLI) — plugin-based CLI for Deepgram speech recognition. Aliases: deepctl, deepgram, dg.
See AGENTS.md for comprehensive documentation covering:
- Command creation, group commands, external plugins
- Core APIs (Config, Auth, Output, Client)
- Argument specification format
- Testing patterns and CI
- Release process and version management
- All existing commands
# Development
make dev # format + lint-fix + test
make check # format-check + lint-check + typecheck (no tests)
make readmes # Regenerate READMEs (REQUIRED after package changes)
# Testing
uv run pytest # All tests
uv run pytest packages/deepctl-cmd-<name>/tests/ -v # Single package
# Running
uv run dg --help # CLI help
uv run dg <command> --help # Command help- Never manually edit README sections between
<!-- BEGIN:* -->and<!-- END:* -->markers — runmake readmes - Always run
make checkafter code changes to catch ruff/mypy issues - Always run
make readmesafter adding or modifying packages - Run
dg skills updateafter adding new commands to regenerate AI skill files - Version markers — every
version =line in pyproject.toml must have# x-release-please-version(NOT on dependency lines) - New packages require updates to: root
pyproject.toml,.github/release-please-config.json,.github/.release-please-manifest.json,.github/workflows/test.yml(test paths)
All packages live under packages/. The UV workspace (members = ["packages/*"]) auto-discovers them. Each command registers via Python entry points — no hardcoded imports.
- Linter/formatter:
ruff(line-length 88, target py310) - Type checker:
mypy(strict) - Use
from __future__ import annotationsfor forward references - Move type-only imports into
TYPE_CHECKINGblocks - Positional args:
{"name": "source"}— Options:{"names": ["--flag"], "is_option": True}