dci is the command-line interface for the DoiT Cloud Intelligence API. Manage budgets, reports, alerts, and run analytics queries directly from your terminal.
# macOS (Homebrew)
brew install doitintl/dci-cli/dci
# Windows (WinGet)
winget install DoiT.dci
# Windows (Scoop)
scoop bucket add doitintl https://github.com/doitintl/dci-cli
scoop install dci
# Linux (.deb)
sudo dpkg -i dci_*_linux_amd64.deb
# Linux (.rpm)
sudo rpm -i dci_*_linux_amd64.rpmPrebuilt binaries for all platforms are available on the Releases page.
On first run, dci automatically configures itself and opens a browser window for authentication via the DoiT Console. You can also sign in explicitly:
# Sign in to the DoiT Console
dci login
# Check your CLI configuration
dci status
# List your budgets
dci list-budgets
# List reports as a table
dci list-reports
# Run an analytics query
dci query body.query:"SELECT * FROM aws_cur_2_0 LIMIT 10"# See all available commands
dci --help
# Get help for a specific command
dci list-budgets --help
# Get the machine-readable command catalog
dci commands --jsonThe default output format is table. Override it with the --output flag:
dci list-budgets --output json
dci list-budgets --output yaml
dci list-budgets --output table
dci list-budgets --output toontoon emits Token-Oriented Object Notation — a
compact, lossless format that uses ~40% fewer tokens than JSON for list-shaped
data. It is opt-in and most useful when driving the CLI from an LLM agent.
# Wrap long cell values instead of truncating
dci list-budgets --table-mode wrap
# Show only specific columns
dci list-budgets --table-columns id,name,amountdci adapts its output depending on whether a human or an AI agent is driving it.
In human mode (the default in an interactive terminal) you get tables, color,
and contextual hints. In agent mode the CLI emits clean, deterministic output
that is cheap to parse and free of decoration:
- Default
--outputbecomestoon(compact, token-efficient) instead oftable - No color, spinners, or other terminal decoration
- Banners, tips, and status chatter go to stderr, leaving stdout for data only
- Explicit agent sessions emit machine-readable JSON errors with stable error codes, retry guidance, and distinct process exit codes
--fieldsselects response fields and--excluderemoves fields before output- The request
User-Agentcarries amode=token —agent(explicit flag/env or a known AI-agent environment),noninteractive(piped/redirected output or CI/CD), orinteractive(human at a terminal) — so API traffic can be segmented by interface
Detection runs in priority order — the first match wins:
DCI_AGENT_MODEenvironment variable —DCI_AGENT_MODE=1forces agent mode,DCI_AGENT_MODE=0forces human mode. Always wins.--agent/--no-agentflags — explicit, per-invocation override.- Known agent environment variables — if any of these are set, agent mode is
assumed:
CLAUDECODE,CLAUDE_CODE,CURSOR_AGENT,KIRO_AGENT,AIDER_SESSION,GEMINI_CLI,REPLIT_AGENT,WINDSURF_AGENT,OPENHANDS_AGENT,DEVIN_AGENT. (Open a PR to extend this list.) - Non-TTY stdout — a soft signal: when output is piped or redirected and no setting above applies, agent mode is assumed.
# Force agent mode
DCI_AGENT_MODE=1 dci list-budgets
dci --agent list-budgets
# Force human mode (tables, color) even when piping or running under an agent
dci --no-agent list-budgets | less -SRun dci status to see whether agent mode is active and why.
Pass --dry-run to preview any API command. Most commands use a local preview and send no request; operations with an API-native dryRun parameter send a simulation request and return an action marked "dry_run": true. The CLI supplies an idempotency key when that simulation requires one. Commands classified as destructive require --yes or DCI_CONFIRM_DESTRUCTIVE=1 before real execution.
Run dci upgrade to check for a new version — it prints the upgrade command for your install method (it never installs anything itself). The CLI also checks for new releases in the background at most once every few hours and prints a short notice when one is available; set DCI_NO_UPDATE_CHECK=1 to turn that off.
# macOS (Homebrew)
brew update && brew upgrade dci
# Windows (WinGet)
winget upgrade DoiT.dci
# Windows (Scoop)
scoop update dciNote (Homebrew 6):
brew installauto-trusts the formula, so upgrades normally just work. Butbrew upgrade/brew reinstallnever trust the tap on their own — ifdciupgrades fail or are silently skipped with an untrusted-tap message, runbrew trust doitintl/dci-clionce to restore it.
By default, dci authenticates interactively via the DoiT Console (OAuth). For CI pipelines and non-interactive environments, set the DCI_API_KEY environment variable:
export DCI_API_KEY=<your-api-key>
dci list-budgets --output jsonWhen DCI_API_KEY is set, the CLI skips the browser-based login and authenticates using the API key directly. Run dci status to verify the active auth method.
Configuration is stored in your OS user config directory:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/dci/apis.json |
| Linux | ~/.config/dci/apis.json |
| Windows | %APPDATA%\dci\apis.json |
The config file is created automatically on first run. Delete it to reset to defaults.
This repo ships a reusable agent skill at skills/dci-cli that teaches AI coding agents how to operate the dci CLI safely and effectively.
Install it with the built-in subcommand:
dci skill claude # installs to ~/.claude/skills/dci-cli/
dci skill codex # installs to ~/.codex/skills/dci-cli/
dci skill kiro # installs to ~/.kiro/skills/dci-cli/
dci skill gemini # installs to ~/.gemini/skills/dci-cli/Inspect or refresh installed skill files with:
dci skill list
dci skill update codex
dci skill update # updates every detected installationInstalls and updates preserve locally edited managed files unless --force is passed. Forced overwrites save edited files in a uniquely named sibling backup directory first. Unmanaged files in the skill directory are left in place and do not block an update.
Run dci skill --help for the full list of supported agents.
Alternatively, for Codex you can use the skill-installer helper:
python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
--repo doitintl/dci-cli \
--path skills/dci-cliSee LICENSE for details.