{"_id":"@devspeak/cli","_rev":"6-4c75f215f8ab647abafffa395f2b6dcb","name":"@devspeak/cli","dist-tags":{"latest":"1.5.1"},"versions":{"1.0.0":{"name":"@devspeak/cli","version":"1.0.0","keywords":["devspeak","cli","technical-writing","ai","gemini"],"license":"Apache-2.0","_id":"@devspeak/cli@1.0.0","maintainers":[{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"}],"homepage":"https://github.com/devspeak/devspeak#readme","bugs":{"url":"https://github.com/devspeak/devspeak/issues"},"bin":{"devspeak":"bin/devspeak.js"},"dist":{"shasum":"7f6a8c10021ac37eb0b98738dbb788502140f541","tarball":"https://registry.npmjs.org/@devspeak/cli/-/cli-1.0.0.tgz","fileCount":15,"integrity":"sha512-jfaMnNC/osI2lmHUb477fgZJkPojmZ12xpe0PYpJCHm0VT2cjaq+APG16T3XDBHPikpkJSmKPObj08LYgjYU0A==","signatures":[{"sig":"MEUCIQCKDrFgHG8UK9mmE+iWZ+bvU/QVwERjifkiGVAoeSUe1wIga6wB552pnJk61C4roc4MItjjmBGGfddq79uV7gwGN/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14464},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"38e1ceaf97b6ac11ce2a9df3d6c0b71892191921","scripts":{"dev":"tsc --watch","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"},"repository":{"url":"git+https://github.com/devspeak/devspeak.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.11.0","description":"CLI for the DevSpeak technical translation API","directories":{},"_nodeVersion":"25.8.1","dependencies":{"commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.8.2","@types/node":"^22.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.0.0_1774475716199_0.9504292706423696","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@devspeak/cli","version":"1.1.0","keywords":["devspeak","cli","technical-writing","ai","gemini"],"license":"Apache-2.0","_id":"@devspeak/cli@1.1.0","maintainers":[{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"}],"homepage":"https://github.com/juanjaragavi/devspeak#readme","bugs":{"url":"https://github.com/juanjaragavi/devspeak/issues"},"bin":{"devspeak":"bin/devspeak.js"},"dist":{"shasum":"58eeb4eba39cd260759f10c0820bf601980955bc","tarball":"https://registry.npmjs.org/@devspeak/cli/-/cli-1.1.0.tgz","fileCount":17,"integrity":"sha512-T3A0AWIFrQm79Vq5Yp4TPfCbfYHLyks06JyzALDl8eZ8P/5NGcyqmEDnetASwFKHGSqOgz77n1sVfBAxFIEP3Q==","signatures":[{"sig":"MEUCIQC/OtOqG1MMuB3QFdHOZu0LLe5piAav2h+rNZYPez3G7wIgPMN7bWs/HEx2WQY5rQSZvH33ML52NF+JB3BGGv2AFC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19749},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2391dfd2636a6f3e6e38374b950a77b7681eb5fc","scripts":{"dev":"tsc --watch","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"},"repository":{"url":"git+https://github.com/juanjaragavi/devspeak.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.12.1","description":"CLI for the DevSpeak technical translation API","directories":{},"_nodeVersion":"25.8.1","dependencies":{"commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.8.2","@types/node":"^22.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.1.0_1776108626233_0.6366575117834867","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@devspeak/cli","version":"1.3.0","keywords":["devspeak","cli","technical-writing","ai","gemini"],"license":"Apache-2.0","_id":"@devspeak/cli@1.3.0","maintainers":[{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"}],"homepage":"https://github.com/juanjaragavi/devspeak#readme","bugs":{"url":"https://github.com/juanjaragavi/devspeak/issues"},"bin":{"devspeak":"bin/devspeak.js"},"dist":{"shasum":"038a3c5c3f418340be02eb8fb50fd9a2e0096b0c","tarball":"https://registry.npmjs.org/@devspeak/cli/-/cli-1.3.0.tgz","fileCount":17,"integrity":"sha512-c/M8rUZCEOzDlHOSI7c3BucE9qCUHbW48YwLdiiZFtTQQNQyKrSdHNm6yy+1PPRE5ux9E5MIDWiZh0aE8y5BBQ==","signatures":[{"sig":"MEYCIQCAdyGza+R4buw2y7r6qHWKsTrdutuMJ4Kf3cFoXr4CzgIhAMErM8HIudGqfjeZoiZEp2/layY7tiJantRdvBRDbNSX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22964},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5be74ecd4404bb1fea64dc2ecf56bde738e384ef","scripts":{"dev":"tsc --watch","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"},"repository":{"url":"git+https://github.com/juanjaragavi/devspeak.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.12.1","description":"CLI for the DevSpeak technical translation API","directories":{},"_nodeVersion":"25.8.1","dependencies":{"commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.8.2","@types/node":"^22.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.3.0_1787945503601_0.5776414968637329","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@devspeak/cli","version":"1.4.0","keywords":["devspeak","cli","technical-writing","ai","llm","technical-specification"],"license":"Apache-2.0","_id":"@devspeak/cli@1.4.0","maintainers":[{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"}],"homepage":"https://github.com/juanjaragavi/devspeak#readme","bugs":{"url":"https://github.com/juanjaragavi/devspeak/issues"},"bin":{"devspeak":"bin/devspeak.js"},"dist":{"shasum":"fb81c9e460b3c24dee01ee9391c01840219d68c7","tarball":"https://registry.npmjs.org/@devspeak/cli/-/cli-1.4.0.tgz","fileCount":23,"integrity":"sha512-ZC+CZdXREUPgoapLiZCNqE5JcAkrY+f4C4LW5mIZbkInRiZ9I8EIkGZWQJF59EudxKhc/1FapaZtEkb8hL5Fzg==","signatures":[{"sig":"MEUCIA2X9p2VKtTx0EAx/Aeb/Igc4WuWtjueyugKP8dBdwVpAiEAgI5WChK5g4s1UKmVlo40+vqEEMbW/tYLoPgZMXnXWQk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37154},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d63c97aafaf83f4d7d332513fac0793a086aff47","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsc","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"juanjaramilloai","email":"info@juanjaramillo.tech"},"repository":{"url":"git+https://github.com/juanjaragavi/devspeak.git","type":"git","directory":"packages/cli"},"_npmVersion":"10.9.8","description":"CLI for the DevSpeak technical translation API","directories":{},"_nodeVersion":"22.23.2","dependencies":{"commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"~5.8.2","@types/node":"^22.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.4.0_1788701917874_0.20326800197375605","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@devspeak/cli","version":"1.5.0","keywords":["devspeak","cli","technical-writing","ai","llm","technical-specification"],"license":"Apache-2.0","_id":"@devspeak/cli@1.5.0","maintainers":[{"name":"juanjaramilloai","email":"juanamillo@proton.me"}],"homepage":"https://github.com/juanjaragavi/devspeak#readme","bugs":{"url":"https://github.com/juanjaragavi/devspeak/issues"},"bin":{"devspeak":"bin/devspeak.js"},"dist":{"shasum":"d52a7e96376d51f7fe12e51ebb6a9d0317650d55","tarball":"https://registry.npmjs.org/@devspeak/cli/-/cli-1.5.0.tgz","fileCount":37,"integrity":"sha512-2RsYEAnOiVPAl3vxgCab5WUTAKzmYqrEf/j5kZbInoH6vfPx/6b6PBC7IHKyp75B011RcAc3U2DKZ3ZOofVSlQ==","signatures":[{"sig":"MEYCIQCO5h1b3Mju6fWwSRv+4kaICuOdgNg8FE9QAmslh6gRqgIhAPUN12DDyqZ74YlUQ65jVnCHoCE+vIeVXFoL8ncdgzM/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57685},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1183cb73b98f76e6639066911bf5e8cc13ba21bb","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsc","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"juanjaramilloai","email":"juanamillo@proton.me"},"repository":{"url":"git+https://github.com/juanjaragavi/devspeak.git","type":"git","directory":"packages/cli"},"_npmVersion":"10.9.8","description":"CLI for the DevSpeak technical translation API","directories":{},"_nodeVersion":"22.23.2","dependencies":{"commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"~5.8.2","@types/node":"^22.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.5.0_1788709120235_0.6857244795436908","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"_id":"@devspeak/cli@1.5.1","bin":{"devspeak":"bin/devspeak.js"},"bugs":{"url":"https://github.com/juanjaragavi/devspeak/issues"},"dist":{"shasum":"936cb9bfad2906c4be10618a68cede25d89b4e88","tarball":"https://registry.npmjs.org/@devspeak/cli/-/cli-1.5.1.tgz","fileCount":37,"integrity":"sha512-T7XJTjc0sezQ5Qxxn0NgnQWzLicuEtGSBY3i6F23uKRM9El/e+D6PHFW82iz8zM2kNrHNJ82KdkTlhF3rJlMdg==","signatures":[{"sig":"MEUCIQCdB4pjztURbj/fGK3RC0R3vIoo8jbCt9USrjY87FaILAIgG6S+EY/4ZDfjAuJRTOKIBnpO6J8so+P83iPs2qm78Zk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDdMJs3Ev8yD9fXcQx5Hmz8U/qCZUnptke4U31X6cG6CAIgKi1fuu+VUSvAz51wwUO2a+ZNioQEYttEgT7vjmqvcew="}],"unpackedSize":58415},"main":"dist/index.js","name":"@devspeak/cli","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ac5eb89de07068db5f913e2ef424dbc12b5dc362","license":"Apache-2.0","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","test":"vitest run","build":"tsc","prepare":"npm run build","prepublishOnly":"npm run build"},"version":"1.5.1","_npmUser":{"name":"juanjaramilloai","email":"juanamillo@proton.me"},"homepage":"https://github.com/juanjaragavi/devspeak#readme","keywords":["devspeak","cli","technical-writing","ai","llm","technical-specification"],"repository":{"url":"git+https://github.com/juanjaragavi/devspeak.git","type":"git","directory":"packages/cli"},"_npmVersion":"10.9.8","description":"CLI for the DevSpeak technical translation API","directories":{},"maintainers":[{"name":"juanjaramilloai","email":"juanamillo@proton.me"}],"_nodeVersion":"22.23.2","dependencies":{"commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"~5.8.2","@types/node":"^22.14.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_1.5.1_1790166961300_0.7958723574526918"}}},"time":{"created":"2026-03-25T21:55:16.113Z","modified":"2026-09-23T12:36:01.578Z","1.0.0":"2026-03-25T21:55:16.461Z","1.1.0":"2026-04-13T19:30:26.406Z","1.3.0":"2026-08-28T19:31:43.751Z","1.4.0":"2026-09-06T13:38:38.016Z","1.5.0":"2026-09-06T15:38:40.372Z","1.5.1":"2026-09-23T12:36:01.394Z"},"bugs":{"url":"https://github.com/juanjaragavi/devspeak/issues"},"license":"Apache-2.0","homepage":"https://github.com/juanjaragavi/devspeak#readme","keywords":["devspeak","cli","technical-writing","ai","llm","technical-specification"],"repository":{"url":"git+https://github.com/juanjaragavi/devspeak.git","type":"git","directory":"packages/cli"},"description":"CLI for the DevSpeak technical translation API","maintainers":[{"name":"juanjaramilloai","email":"juanamillo@proton.me"}],"readme":"# @devspeak/cli\n\nCommand-line interface for the [DevSpeak](https://www.devspeak.dev) technical translation API.\n\n## Installation\n\n```bash\n# Install globally from npm\nnpm install -g @devspeak/cli\n\n# Or run directly with npx (no install needed)\nnpx @devspeak/cli --help\n```\n\n### Development (from monorepo)\n\n```bash\ncd packages/cli\npnpm install\npnpm link --global\n```\n\n## Setup\n\n1. Generate an API key from the DevSpeak dashboard (Settings → API Keys)\n2. Authenticate the CLI:\n\n```bash\ndevspeak login\n# Enter your API key when prompted\n\n# Or pass it directly\ndevspeak login --key dsk_live_your_api_key_here\n```\n\nThis saves your key to `$XDG_CONFIG_HOME/devspeak/config.json`, defaulting to\n`~/.config/devspeak/config.json`, with permissions restricted to your user (mode `0600`).\nA pre-existing `~/.devspeakrc` is migrated automatically — see [Config File](#config-file).\n\n### Check your identity (`whoami`)\n\n```bash\ndevspeak whoami          # masked key, key source, endpoint, config path\ndevspeak whoami --json   # machine-readable\n```\n\nWhen no key is configured, `whoami` prints guidance to run `devspeak login` and exits 1.\nThe `DEVSPEAK_API_KEY` environment variable takes precedence over the stored key and is\nreported as `environment` in the `Source` field.\n\n### Log out (`logout`)\n\n```bash\ndevspeak logout\n```\n\nRemoves the stored API key while keeping the endpoint and generation defaults. Idempotent —\nrunning it with no stored key succeeds. If `DEVSPEAK_API_KEY` is set, the CLI warns that the\nenvironment variable still grants access and must be unset manually (`unset DEVSPEAK_API_KEY`).\nLogging out does not revoke the key itself; revoke it in DevSpeak under Settings → API Keys.\n\n## Usage\n\n> **Workflow note**: The CLI's `translate` command triggers **Translation Execution** (Stage 2 of the DevSpeak workflow) — it generates a formal technical specification from informal input. The `refine` command triggers **Post-Generation Refinement** (Stage 3) — it iteratively modifies previously generated output. These are distinct lifecycle stages. See [ARCHITECTURE.md](../../ARCHITECTURE.md) for the full three-stage workflow.\n\n### Translate text (`translate`)\n\nThe `translate` command is the primary **Translation Execution** trigger. It transforms informal text into a formal, audience-specific technical specification.\n\n```bash\n# Positional argument\ndevspeak translate \"We need a login page that works with Google and saves user data\"\n\n# Pipe from stdin\necho \"We need a caching layer for our API\" | devspeak translate\n\n# From a file\ncat requirements.txt | devspeak translate --format \"Jira Tickets\"\n```\n\n> `devspeak optimize` remains as a deprecated alias for `translate`.\n\n### Options\n\n| Flag                        | Description                                                     | Default          |\n| --------------------------- | --------------------------------------------------------------- | ---------------- |\n| `-a, --audience <value>`    | Target audience                                                 | `Senior Dev`     |\n| `-c, --context <value>`     | Tech context                                                    | `Backend`        |\n| `-f, --format <value>`      | Output format                                                   | `Technical Spec` |\n| `-t, --tone <number>`       | Tone 0 (concise) to 100 (detailed)                              | `75`             |\n| `-i, --instructions <text>` | Custom instructions                                             | —                |\n| `--file <path>`             | Attach a local file as context (PDF, Markdown, TXT — max 10 MB) | —                |\n| `-o, --output <file>`       | Write output to file                                            | —                |\n| `--json`                    | Output raw JSON response                                        | —                |\n\n### Audience values\n\n`Junior Dev`, `Senior Dev`, `Tech Lead`, `SRE`, `Data Engineer`\n\n### Context values\n\n`Backend`, `Frontend`, `Mobile`, `Data/ML`, `DevOps`\n\n### Format values\n\n`Technical Spec`, `Jira Tickets`, `API Design`, `RFC`, `Data Model`, `Prompt`, `Optimize`\n\n### Examples\n\n```bash\n# Generate Jira tickets for a mobile feature\ndevspeak translate \"Add push notifications for order updates\" \\\n  --audience \"Tech Lead\" \\\n  --context \"Mobile\" \\\n  --format \"Jira Tickets\" \\\n  --tone 80\n\n# Create an API design doc and save to file\ndevspeak translate \"REST API for managing user subscriptions\" \\\n  --format \"API Design\" \\\n  --output api-design.md\n\n# Get concise output (tone < 50 triggers rewrite mode)\ndevspeak translate \"we need to make the app faster\" --tone 30\n\n# Pipe output as JSON for scripting\ndevspeak translate \"Add rate limiting to all endpoints\" --json | jq '.output'\n\n# Attach a PRD as context when generating a technical spec\ndevspeak translate \"Implement the user authentication flow\" \\\n  --file ./docs/product-requirements.pdf \\\n  --audience \"Tech Lead\" \\\n  --format \"Technical Spec\" \\\n  --tone 85\n\n# Attach a Markdown runbook as context for an SRE RFC\ndevspeak translate \"Add Redis caching for API responses\" \\\n  --audience \"SRE\" \\\n  --context \"DevOps\" \\\n  --format \"RFC\" \\\n  --tone 90 \\\n  --instructions \"Include monitoring and alerting requirements\" \\\n  --file ./runbooks/caching-standards.md\n```\n\n### Refine translation (`refine`)\n\nThe `refine` command performs **Post-Generation Refinement** (Stage 3). It takes a previous translation output and user feedback, then produces a complete replacement document incorporating the requested changes.\n\n```bash\n# Refine output read from a file (@ prefix reads the file)\ndevspeak refine --previous @spec.md \\\n  --feedback \"Add a section on rate limiting and include error codes\"\n\n# Refine inline text\ndevspeak refine --previous \"## Spec\\n...\" \\\n  --feedback \"Restructure as a numbered list\" --json\n\n# Chain translate into refine\ndevspeak translate \"Add push notifications\" -o spec.md\ndevspeak refine -p @spec.md -F \"Shorten to three bullet points\" -o spec.md\n```\n\n| Flag                    | Description                                           | Required |\n| ----------------------- | ----------------------------------------------------- | -------- |\n| `-p, --previous <text>` | Previous output to refine (`@path` reads from a file) | Yes      |\n| `-F, --feedback <text>` | Feedback describing the change                        | Yes      |\n| `-r, --original <text>` | Original input text, for additional context           | No       |\n\n`refine` also accepts the same `-a/-c/-f/-t/-o/--json` flags as `translate`.\n\n> **Important**: `refine` operates on **generated output** (post-translation), not on raw user input. To optimize raw input text before translating, use the web app's Optimize button (Lexical Optimization, Stage 1).\n\n### Configuration\n\n```bash\n# View current config\ndevspeak config show\n\n# Change default endpoint\ndevspeak config set endpoint https://www.devspeak.dev\n\n# Change default audience\ndevspeak config set audience \"Tech Lead\"\n```\n\n## Config File\n\nStored at `$XDG_CONFIG_HOME/devspeak/config.json`, defaulting to\n`~/.config/devspeak/config.json` (mode `0600`).\n\nA pre-existing `~/.devspeakrc` is still read, and is migrated automatically to\nthe new location the first time the config is written. The old file is kept as\n`~/.devspeakrc.migrated`.\n\n```json\n{\n  \"apiKey\": \"dsk_live_...\",\n  \"endpoint\": \"https://www.devspeak.dev\",\n  \"defaults\": {\n    \"audience\": \"Senior Dev\",\n    \"context\": \"Backend\",\n    \"format\": \"Technical Spec\",\n    \"tone\": 75\n  }\n}\n```\n\n`config set` validates values against the same allowed sets the API enforces,\nso an invalid audience, context, format, tone, or endpoint fails locally.\n\n## Updates\n\n```bash\ndevspeak update        # check the npm registry and print the upgrade command\ndevspeak update --yes  # install the update via npm install -g\n```\n\nThe CLI also performs a **passive update check**: at most once every 24 hours, a detached\nbackground process refreshes the latest known version from the npm registry, and the next\nrun prints a one-line notice on stderr when an update is available. The check is TTY-only,\nskipped in CI, and never blocks or fails a command. Opt out with:\n\n```bash\nexport DEVSPEAK_DISABLE_UPDATE_CHECK=1\n```\n\n## Diagnostics\n\n```bash\ndevspeak doctor        # one-shot environment audit\ndevspeak doctor --json # machine-readable\n```\n\nChecks: Node version (≥ 18), config file parses, API key present and `dsk_`-prefixed,\nconfig permissions (`0600`), endpoint health (`GET /api/v1/health`), and installed version\nvs the npm registry. Each failed check prints an actionable fix line. Exits 0 only when\nevery check passes.\n\n## Shell Completions\n\n```bash\n# bash\ndevspeak completion bash >> ~/.bashrc\n\n# zsh\ndevspeak completion zsh > \"${fpath[1]}/_devspeak\"\n\n# fish\ndevspeak completion fish > ~/.config/fish/completions/devspeak.fish\n```\n\n## Exit Codes\n\n| Code | Meaning                                                      |\n| ---- | ------------------------------------------------------------ |\n| `0`  | Success                                                      |\n| `1`  | Validation error, API error, network failure, or write error |\n\nThe generated document goes to **stdout**; every diagnostic, warning, and\nmetadata line goes to **stderr**, so `devspeak translate ... > out.md` is safe.\nColor is disabled automatically when stderr is not a TTY, honors `NO_COLOR`, and\ncan be forced off with the global `--no-color` flag.\n\n## Privacy\n\nThe CLI sends no telemetry. It stores your API key in the config file above (`0600`) and sends the text you translate to the DevSpeak API, which processes it as described in the [Privacy Policy](https://www.devspeak.dev/privacy). The once-a-day update check contacts only the npm registry; disable it with `DEVSPEAK_DISABLE_UPDATE_CHECK=1`.\n\n## Environments\n\n| Environment | Endpoint                   |\n| ----------- | -------------------------- |\n| Production  | `https://www.devspeak.dev` |\n\nSwitch environments:\n\n```bash\ndevspeak config set endpoint https://www.devspeak.dev\n```\n","readmeFilename":"README.md"}