| name | doover-cli |
| description | Complete reference for the Doover CLI app management commands Use when this capability is needed. |
| metadata | {"author":"getdoover"} |
Doover CLI Reference
This skill provides a complete reference for the doover app CLI commands used to create, develop, test, and deploy Doover applications.
Overview
The Doover CLI provides commands for the full application lifecycle:
| Command | Purpose |
|---|
doover app create | Create a new app from template |
doover app run | Run app locally with simulators |
doover app build | Build Docker image |
doover app publish | Deploy to Doover platform |
doover app test | Run pytest tests |
doover app lint | Check code with ruff |
doover app format | Format code with ruff |
doover app channels | Debug channel data |
App Creation
doover app create
Create a new application using the interactive wizard.
doover app create --name my-app --description "My application description"
Options
| Option | Required | Description |
|---|
--name TEXT | Yes | Application name (snake_case recommended) |
--description TEXT | Yes | Short description of the app |
--git / --no-git | No | Initialize git repository |
--container-registry | No | Registry: ghcr.io/getdoover, ghcr.io/other, DockerHub (spaneng), DockerHub (other) |
--owner-org-key TEXT | No | Organization key for ownership |
--container-profile TEXT | No | Container registry profile |
Examples
doover app create --name temperature-monitor --description "Monitor temperature sensors"
doover app create --name my-app --description "My app" --git
doover app create \
--name my-app \
--description "My app" \
--container-registry "ghcr.io/getdoover"
doover app create \
--name my-app \
--description "My app" \
--owner-org-key "org-uuid-here"
Generated Structure
The command creates a complete project:
my-app/
├── src/my_app/
│ ├── __init__.py
│ ├── application.py
│ ├── app_config.py
│ ├── app_ui.py
│ └── app_state.py
├── simulators/
│ ├── sample/
│ │ ├── main.py
│ │ ├── Dockerfile
│ │ └── pyproject.toml
│ ├── docker-compose.yml
│ └── app_config.json
├── tests/
│ ├── __init__.py
│ └── test_imports.py
├── doover_config.json
├── pyproject.toml
├── Dockerfile
└── README.md
Local Development
doover app run
Run the application locally using docker-compose from the simulators directory.
doover app run
Options
| Option | Default | Description |
|---|
[REMOTE] | None | Remote host to run on |
--port INTEGER | 2375 | Port for remote connection |
Examples
doover app run
doover app run 192.168.1.100
doover app run 192.168.1.100 --port 2376
doover app run -- --build
doover app run -- -d
How It Works
- Looks for
simulators/docker-compose.yml
- Runs
docker compose up with the specified services
- Services typically include:
device_agent - Doover device agent
- Simulator services - Generate test data
- Application - Your app under development
Stopping
Press Ctrl+C to stop all services, or if running detached:
cd simulators && docker compose down
Build and Publish
doover app build
Build the Docker image for your application.
doover app build
Options
| Option | Default | Description |
|---|
[APP_FP] | . | Path to application directory |
--buildx / --no-buildx | --buildx | Use docker buildx for multi-platform |
Examples
doover app build
doover app build /path/to/my-app
doover app build --no-buildx
doover app build -- --no-cache
Build Arguments
Build arguments are read from doover_config.json:
{
"my_app": {
"build_args": "--platform linux/amd64,linux/arm64"
}
}
doover app publish
Publish your application to the Doover platform and container registry.
doover app publish
Options
| Option | Default | Description |
|---|
[APP_FP] | . | Path to application directory |
--skip-container / --no-skip-container | --no-skip-container | Skip container build/push |
--staging / --no-staging | --no-staging | Force staging mode |
--export-config / --no-export-config | --export-config | Export config before publishing |
--buildx / --no-buildx | --buildx | Use docker buildx |
--profile TEXT | None | Config profile for authentication |
Examples
doover app publish
doover app publish --skip-container
doover app publish --staging
doover app publish --no-export-config
doover app publish --profile production
Publish Process
- Exports configuration (regenerates
doover_config.json)
- Builds Docker image
- Pushes image to configured registry
- Updates application on Doover platform
Testing and Quality
doover app test
Run pytest tests on your application.
doover app test
Options
| Option | Default | Description |
|---|
[APP_FP] | . | Path to application directory |
Additional arguments are passed to pytest.
Examples
doover app test
doover app test -- -v
doover app test -- tests/test_application.py
doover app test -- -k "test_config"
doover app test -- -s
doover app test /path/to/my-app
Test File Structure
def test_import_app():
from my_app.application import MyApplication
assert MyApplication
def test_config():
from my_app.app_config import MyConfig
config = MyConfig()
assert isinstance(config.to_dict(), dict)
def test_ui():
from my_app.app_ui import MyUI
ui = MyUI()
components = ui.fetch()
assert len(components) > 0
def test_state():
from my_app.app_state import MyState
state = MyState()
assert state.state_machine.state == "initial"
doover app lint
Run the ruff linter to check code quality.
doover app lint
Options
| Option | Default | Description |
|---|
[APP_FP] | . | Path to application directory |
--fix / --no-fix | --no-fix | Auto-fix linting issues |
Examples
doover app lint
doover app lint --fix
doover app lint /path/to/my-app
doover app lint /path/to/my-app --fix
Common Issues
| Code | Issue | Fix |
|---|
| F401 | Unused import | Remove or use the import |
| F841 | Unused variable | Remove or prefix with _ |
| E501 | Line too long | Break into multiple lines |
| E302 | Expected 2 blank lines | Add blank lines between functions |
doover app format
Format code using ruff formatter.
doover app format
Options
| Option | Default | Description |
|---|
[APP_FP] | . | Path to application directory |
--fix / --no-fix | --no-fix | Apply formatting fixes |
Examples
doover app format
doover app format --fix
doover app format /path/to/my-app --fix
Debugging
doover app channels
Open the channel viewer in your browser for debugging published data.
doover app channels
Options
| Option | Default | Description |
|---|
--host TEXT | localhost | Host to connect to |
--port INTEGER | 49100 | Port for channel viewer |
Examples
doover app channels
doover app channels --host 192.168.1.100
doover app channels --port 8080
Usage
- Run your app with
doover app run
- Open channel viewer with
doover app channels
- View real-time channel data in your browser
- Debug data format and timing issues
Workflow Examples
New App Development
doover app create --name sensor-monitor --description "Monitor sensors"
cd sensor-monitor
doover app run
doover app channels
doover app test
doover app lint --fix
doover app format --fix
doover app publish
Iterative Development
doover app run -- -d
cd simulators && docker compose up -d --build my_app
docker compose logs -f my_app
docker compose down
CI/CD Pipeline
uv sync
doover app lint
if [ $? -ne 0 ]; then exit 1; fi
doover app test -- -v
if [ $? -ne 0 ]; then exit 1; fi
doover app build
doover app publish --staging
doover app publish --profile production
Remote Development
doover app run 192.168.1.100
ssh device "docker logs -f my_app"
doover app build
docker save my_app | ssh device "docker load"
Configuration Export
Regenerating Config
After modifying app_config.py, regenerate doover_config.json:
uv run export-config
uv run python -c "from my_app.app_config import export; export()"
Verifying Config
python -m json.tool doover_config.json > /dev/null
cat doover_config.json | jq '.my_app.config_schema'
CLI Profiles
Profiles configure which Doover environment to use. The default profile is dv2.
Setting the Default Profile
Set via environment variable (recommended):
export DOOVER_PROFILE=dv2
Per-Command Profile
Override for a single command:
doover app publish --profile dv2
doover app publish --profile staging
doover app publish --profile production
Available Profiles
| Profile | Description |
|---|
dv2 | Default Doover environment |
Troubleshooting
Build Failures
docker builder prune
doover app build -- --no-cache
docker build --check .
Run Failures
cd simulators && docker compose logs
docker compose config
lsof -i :49100
Test Failures
doover app test -- -v --tb=long
doover app test -- tests/test_imports.py::test_config -v
Publish Failures
doover auth status
docker login ghcr.io
doover app build
Converted and distributed by TomeVault — claim your Tome and manage your conversions.