cli.do

Build Production-Grade CLIs in TypeScript

Command-line tools with automatic help generation, type-safe argument parsing, and interactive UI. Ship CLIs with autocomplete, progress bars, and prompts quickly.

Read the docs
index.tscli.do
import { CLI } from 'cli.do' // Deploy with progress trackingcli.command({  name: 'deploy',  args: { path: 'string' },  async run($) {    const progress = $.UI.create.ProgressBar({ total: 2 })    progress.update('Building app')    await $.Build.run({ path: $.args.path })    progress.update('Deploying to edge')    const deploy = await $.Deploy.to.Edge({ env: 'production' })    $.UI.print.Success(`Deployed to ${deploy.url}`)  }})

One of 48 primitives

cli.do sits in Build: ship from code, cli or mcp. Every .do shares one grammar, Business-as-Code, and one SDK.

Business

Goals, plans and the work itself

Workflows

Triggers, steps and functions

Data

Records, vocabulary and search

Insight

Measure, test and trace

Build

Ship from code, CLI or MCP

Frequently asked questions

Build your 1-person unicorn

Write the business. Agents run it around the clock.

Read the docs