espercli 0.0.16__tar.gz → 0.0.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {espercli-0.0.16 → espercli-0.0.17}/CHANGELOG.md +5 -1
- espercli-0.0.17/PKG-INFO +415 -0
- espercli-0.0.17/README.md +400 -0
- espercli-0.0.17/esper/cli/__init__.py +1 -0
- espercli-0.0.17/esper/cli/app.py +224 -0
- espercli-0.0.17/esper/cli/application.py +328 -0
- espercli-0.0.17/esper/cli/commandsv2.py +530 -0
- espercli-0.0.17/esper/cli/completions.py +174 -0
- espercli-0.0.17/esper/cli/configure.py +92 -0
- espercli-0.0.17/esper/cli/content.py +252 -0
- espercli-0.0.17/esper/cli/device.py +487 -0
- espercli-0.0.17/esper/cli/device_command.py +299 -0
- espercli-0.0.17/esper/cli/enterprise.py +128 -0
- espercli-0.0.17/esper/cli/execute.py +225 -0
- espercli-0.0.17/esper/cli/fleet.py +102 -0
- espercli-0.0.17/esper/cli/group.py +616 -0
- espercli-0.0.17/esper/cli/group_command.py +226 -0
- espercli-0.0.17/esper/cli/heartbeat.py +174 -0
- espercli-0.0.17/esper/cli/installs.py +103 -0
- espercli-0.0.17/esper/cli/location.py +164 -0
- espercli-0.0.17/esper/cli/operation.py +261 -0
- espercli-0.0.17/esper/cli/output.py +246 -0
- espercli-0.0.17/esper/cli/pipeline.py +217 -0
- espercli-0.0.17/esper/cli/policy.py +100 -0
- espercli-0.0.17/esper/cli/report_html.py +595 -0
- espercli-0.0.17/esper/cli/retry.py +73 -0
- espercli-0.0.17/esper/cli/secureadb.py +171 -0
- espercli-0.0.17/esper/cli/stage.py +196 -0
- espercli-0.0.17/esper/cli/state.py +154 -0
- espercli-0.0.17/esper/cli/status.py +107 -0
- espercli-0.0.17/esper/cli/telemetry.py +133 -0
- espercli-0.0.17/esper/cli/token.py +129 -0
- espercli-0.0.17/esper/cli/user.py +118 -0
- espercli-0.0.17/esper/cli/version.py +283 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/secureadb/secureadb.py +9 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/core/version.py +1 -1
- espercli-0.0.17/esper/ext/api_rest.py +55 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/remoteadb_api.py +88 -2
- {espercli-0.0.16 → espercli-0.0.17}/esper/main.py +2 -0
- espercli-0.0.17/espercli.egg-info/PKG-INFO +415 -0
- {espercli-0.0.16 → espercli-0.0.17}/espercli.egg-info/SOURCES.txt +35 -1
- espercli-0.0.17/espercli.egg-info/entry_points.txt +4 -0
- espercli-0.0.17/espercli.egg-info/requires.txt +12 -0
- {espercli-0.0.16 → espercli-0.0.17}/requirements.txt +3 -4
- {espercli-0.0.16 → espercli-0.0.17}/setup.py +8 -10
- espercli-0.0.17/tests/test_configure.py +89 -0
- espercli-0.0.17/tests/test_main.py +16 -0
- espercli-0.0.16/PKG-INFO +0 -2464
- espercli-0.0.16/README.md +0 -2452
- espercli-0.0.16/espercli.egg-info/PKG-INFO +0 -2464
- espercli-0.0.16/espercli.egg-info/entry_points.txt +0 -2
- espercli-0.0.16/espercli.egg-info/requires.txt +0 -14
- {espercli-0.0.16 → espercli-0.0.17}/LICENSE +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/LICENSE.md +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/MANIFEST.in +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/bootstrap.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/application/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/application/application.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/application/version.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/base.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/commandsV2/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/commandsV2/commandsV2.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/configure.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/content/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/content/content.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/device/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/device/command.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/device/device.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/device/group_command.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/device/install.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/device/status.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/enterprise/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/enterprise/enterprise.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/enterprise/group.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/enums.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/pipeline/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/pipeline/execute.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/pipeline/operation.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/pipeline/pipeline.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/pipeline/stage.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/secureadb/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/telemetry/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/telemetry/telemetry.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/token/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/controllers/token/token.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/core/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/core/exc.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/core/output_handler.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/api_client.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/certs.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/db_wrapper.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/forwarder.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/mediator.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/pipeline_api.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/relay.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/telemetry_api.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/ext/utils.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/plugins/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/templates/__init__.py +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/templates/command1.jinja2 +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/esper/templates/creds.jinja2 +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/espercli.egg-info/dependency_links.txt +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/espercli.egg-info/top_level.txt +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/requirements-dev.txt +0 -0
- {espercli-0.0.16 → espercli-0.0.17}/setup.cfg +0 -0
|
@@ -29,4 +29,8 @@ Updated dependencies
|
|
|
29
29
|
|
|
30
30
|
## 0.0.16
|
|
31
31
|
|
|
32
|
-
- Updated requirements.txt (esperclient==0.1.3)
|
|
32
|
+
- Updated requirements.txt (esperclient==0.1.3)
|
|
33
|
+
|
|
34
|
+
## 0.0.17
|
|
35
|
+
|
|
36
|
+
- Added support for forwarding the client's ADB public key (`~/.android/adbkey.pub`) when initiating a Remote ADB session, enabling pre-authorization of the key on the device
|
espercli-0.0.17/PKG-INFO
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: espercli
|
|
3
|
+
Version: 0.0.17
|
|
4
|
+
Summary: Esper CLI is Command line tool for the Esper APIs
|
|
5
|
+
Home-page: https://github.com/esper-io/esper-cli/
|
|
6
|
+
Author: Esper
|
|
7
|
+
Author-email: developer@esper.io
|
|
8
|
+
License: Apache 2.0
|
|
9
|
+
Platform: UNKNOWN
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
License-File: LICENSE.md
|
|
13
|
+
|
|
14
|
+
# espercli
|
|
15
|
+
|
|
16
|
+
A command-line tool for the [Esper](https://esper.io) API — manage devices, applications, groups, pipelines, and more from your terminal.
|
|
17
|
+
|
|
18
|
+
Built with [Typer](https://typer.tiangolo.com) and [Rich](https://github.com/Textualize/rich) for a modern CLI experience: colour-coded output, tab-completion, inline help on errors, and auto-pagination.
|
|
19
|
+
|
|
20
|
+
Also ships a **Claude Code skill** (`/esper`) so you can manage your fleet in plain English directly from your AI coding session — no syntax required.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Requirements
|
|
25
|
+
|
|
26
|
+
- Python 3.8+
|
|
27
|
+
- An Esper account with an API key ([generate one here](https://docs.esper.io/home/module/genapikey.html))
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
**Recommended — pipx** (isolated, no venv management needed):
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
pipx install git+https://github.com/avidan/esper-cli.git
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**From source:**
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
git clone https://github.com/avidan/esper-cli.git
|
|
43
|
+
cd esper-cli
|
|
44
|
+
pipx install -e .
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Plain pip** (inside a virtualenv):
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
pip install git+https://github.com/avidan/esper-cli.git
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Quick start
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
# 1. Configure credentials (run once)
|
|
59
|
+
espercli configure
|
|
60
|
+
|
|
61
|
+
# 2. Check your active context at any time
|
|
62
|
+
espercli context
|
|
63
|
+
|
|
64
|
+
# 3. List your devices
|
|
65
|
+
espercli device list
|
|
66
|
+
|
|
67
|
+
# 4. Set a device as active for subsequent commands
|
|
68
|
+
espercli device show <name> --active
|
|
69
|
+
|
|
70
|
+
# 5. Explore any command with --help
|
|
71
|
+
espercli device --help
|
|
72
|
+
espercli device list --help
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Tab completion
|
|
78
|
+
|
|
79
|
+
Install once and restart your terminal:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
espercli completion zsh # zsh
|
|
83
|
+
espercli completion bash # bash
|
|
84
|
+
espercli completion fish # fish
|
|
85
|
+
espercli completion powershell # PowerShell
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
After installing, pressing `<Tab>` completes:
|
|
89
|
+
|
|
90
|
+
- **Sub-commands** — `espercli dev<TAB>` → `device`
|
|
91
|
+
- **Enum values** — `espercli device list --state <TAB>` → `active`, `inactive`, `disabled`, …
|
|
92
|
+
- **Device names** — `espercli device show <TAB>` → live names from your enterprise
|
|
93
|
+
- **Group names** — `espercli group-command reboot --group <TAB>`
|
|
94
|
+
- **Application IDs** — `espercli version list --app <TAB>` (shows app name as hint)
|
|
95
|
+
- **Command names, schedule types, days, and more**
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Commands
|
|
100
|
+
|
|
101
|
+
### `configure`
|
|
102
|
+
Set credentials (environment name and API key). Run this first.
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
espercli configure
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### `device`
|
|
111
|
+
```sh
|
|
112
|
+
espercli device list # list all devices (paginated)
|
|
113
|
+
espercli device list --state active # filter by state
|
|
114
|
+
espercli device list --group "Warehouse" # filter by group
|
|
115
|
+
espercli device list --all # fetch every device (auto-paginate)
|
|
116
|
+
|
|
117
|
+
espercli device show <name> # show device details
|
|
118
|
+
espercli device show <name> --active # show + set as active device
|
|
119
|
+
|
|
120
|
+
espercli device set-active --name <name> # set active device
|
|
121
|
+
espercli device unset-active # clear active device
|
|
122
|
+
|
|
123
|
+
espercli device report <name> # HTML dashboard (opens in browser)
|
|
124
|
+
espercli device report <name> --output ./report.html # write to specific path
|
|
125
|
+
espercli device report <name> --no-open # write file without opening browser
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### `device-command`
|
|
131
|
+
Fire commands at a single device (uses the active device if `--device` is omitted).
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
espercli device-command ping
|
|
135
|
+
espercli device-command lock --device <name>
|
|
136
|
+
espercli device-command reboot --device <name>
|
|
137
|
+
espercli device-command wipe --device <name> # requires confirmation
|
|
138
|
+
espercli device-command install --device <name> --version <version-id>
|
|
139
|
+
espercli device-command uninstall --device <name> --version <version-id>
|
|
140
|
+
espercli device-command clear-app-data --device <name> --package-name com.example.app
|
|
141
|
+
espercli device-command show <command-id>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
### `group`
|
|
147
|
+
```sh
|
|
148
|
+
espercli group list
|
|
149
|
+
espercli group list --all # auto-paginate
|
|
150
|
+
espercli group show <name>
|
|
151
|
+
espercli group show <name> --active # set as active group
|
|
152
|
+
espercli group create <name>
|
|
153
|
+
espercli group update <name> --name <new-name>
|
|
154
|
+
espercli group delete <name> # requires confirmation
|
|
155
|
+
espercli group devices # list devices in active group
|
|
156
|
+
espercli group add --group <name> --device <device-name>
|
|
157
|
+
espercli group remove --group <name> --device <device-name>
|
|
158
|
+
espercli group move --group <name> --parent <parent-name>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### `group-command`
|
|
164
|
+
Fire commands at every device in a group.
|
|
165
|
+
|
|
166
|
+
```sh
|
|
167
|
+
espercli group-command ping --group <name>
|
|
168
|
+
espercli group-command lock --group <name>
|
|
169
|
+
espercli group-command reboot --group <name>
|
|
170
|
+
espercli group-command install --group <name> --version <version-id>
|
|
171
|
+
espercli group-command show <command-id>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### `app`
|
|
177
|
+
```sh
|
|
178
|
+
espercli app list
|
|
179
|
+
espercli app list --name "MyApp"
|
|
180
|
+
espercli app list --all # auto-paginate
|
|
181
|
+
espercli app show <app-id>
|
|
182
|
+
espercli app show <app-id> --active # set as active application
|
|
183
|
+
espercli app upload <path/to/app.apk>
|
|
184
|
+
espercli app download <version-id> --dest ./app.apk
|
|
185
|
+
espercli app delete <app-id> # requires confirmation
|
|
186
|
+
espercli app set-active --id <app-id>
|
|
187
|
+
espercli app unset-active
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### `version`
|
|
193
|
+
Manage versions of the active (or specified) application.
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
espercli version list
|
|
197
|
+
espercli version list --app <app-id>
|
|
198
|
+
espercli version list --legacy-format false # show version_name instead of build_number
|
|
199
|
+
espercli version show <version-id>
|
|
200
|
+
espercli version delete <version-id> # requires confirmation
|
|
201
|
+
espercli version devices <version-id> # list devices with this version installed
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### `installs`
|
|
207
|
+
```sh
|
|
208
|
+
espercli installs list # installs for active device
|
|
209
|
+
espercli installs list --device <name>
|
|
210
|
+
espercli installs show <install-id>
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
### `status`
|
|
216
|
+
```sh
|
|
217
|
+
espercli status show # status for active device
|
|
218
|
+
espercli status show --device <name>
|
|
219
|
+
espercli status list
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### `commandsV2`
|
|
225
|
+
Multi-device / group command requests (V2 API).
|
|
226
|
+
|
|
227
|
+
```sh
|
|
228
|
+
# List recent requests
|
|
229
|
+
espercli commandsV2 list
|
|
230
|
+
espercli commandsV2 list --command reboot --command-type device
|
|
231
|
+
|
|
232
|
+
# Fire a command
|
|
233
|
+
espercli commandsV2 command \
|
|
234
|
+
--command-type device \
|
|
235
|
+
--devices "device-name-1 device-name-2" \
|
|
236
|
+
--command reboot
|
|
237
|
+
|
|
238
|
+
# Check status / history
|
|
239
|
+
espercli commandsV2 status --request <request-id>
|
|
240
|
+
espercli commandsV2 history --device <name>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### `pipeline`
|
|
246
|
+
```sh
|
|
247
|
+
espercli pipeline list
|
|
248
|
+
espercli pipeline show <pipeline-id>
|
|
249
|
+
espercli pipeline create --name "Nightly Deploy" --no-of-stages 3
|
|
250
|
+
espercli pipeline edit <pipeline-id> --name "New Name"
|
|
251
|
+
espercli pipeline delete <pipeline-id>
|
|
252
|
+
|
|
253
|
+
# Stages
|
|
254
|
+
espercli pipeline stage list --pipeline <id>
|
|
255
|
+
espercli pipeline stage create --pipeline <id> --name "Stage 1"
|
|
256
|
+
|
|
257
|
+
# Operations
|
|
258
|
+
espercli pipeline stage operation create --stage <id> --action APP_INSTALL
|
|
259
|
+
|
|
260
|
+
# Execution
|
|
261
|
+
espercli pipeline execute start --pipeline <id>
|
|
262
|
+
espercli pipeline execute stop --pipeline <id>
|
|
263
|
+
espercli pipeline execute show --pipeline <id>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
### `content`
|
|
269
|
+
```sh
|
|
270
|
+
espercli content list
|
|
271
|
+
espercli content show <content-id>
|
|
272
|
+
espercli content upload <path/to/file>
|
|
273
|
+
espercli content modify <content-id> --tags "tag1 tag2" --description "..."
|
|
274
|
+
espercli content delete <content-id> # requires confirmation
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
### `token`
|
|
280
|
+
```sh
|
|
281
|
+
espercli token show
|
|
282
|
+
espercli token renew
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
### `enterprise`
|
|
288
|
+
```sh
|
|
289
|
+
espercli enterprise show
|
|
290
|
+
espercli enterprise set-active
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
### `telemetry`
|
|
296
|
+
```sh
|
|
297
|
+
espercli telemetry get-data \
|
|
298
|
+
--device <name> \
|
|
299
|
+
--metric battery-level \
|
|
300
|
+
--last 24 \
|
|
301
|
+
--period hour \
|
|
302
|
+
--statistic avg
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
### `secureadb`
|
|
308
|
+
```sh
|
|
309
|
+
espercli secureadb connect --device <name>
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
### Utility commands
|
|
315
|
+
|
|
316
|
+
```sh
|
|
317
|
+
espercli context # show active environment, enterprise, device, app, group
|
|
318
|
+
espercli about # show CLI version
|
|
319
|
+
espercli completion zsh # install tab-completion
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Global flags
|
|
325
|
+
|
|
326
|
+
| Flag | Short | Description |
|
|
327
|
+
|---|---|---|
|
|
328
|
+
| `--verbose` | `-v` | Enable debug logging |
|
|
329
|
+
| `--no-color` | | Disable colour output (useful for piping / CI) |
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Output formats
|
|
334
|
+
|
|
335
|
+
Every listing and detail command supports `--json` / `-j` for machine-readable output:
|
|
336
|
+
|
|
337
|
+
```sh
|
|
338
|
+
espercli device list --json | jq '.[].id'
|
|
339
|
+
espercli app show <id> --json
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Error messages
|
|
345
|
+
|
|
346
|
+
Mistyped a command? The CLI shows the relevant help page inline — no need to re-run with `--help`:
|
|
347
|
+
|
|
348
|
+
```
|
|
349
|
+
$ espercli device lst
|
|
350
|
+
|
|
351
|
+
╭─ Error ────────────────────────────────────╮
|
|
352
|
+
│ ✗ No such command 'lst'. Did you mean 'list'? │
|
|
353
|
+
╰────────────────────────────────────────────╯
|
|
354
|
+
|
|
355
|
+
Usage: espercli device [OPTIONS] COMMAND [ARGS]...
|
|
356
|
+
|
|
357
|
+
╭─ Commands ─────────────────────────╮
|
|
358
|
+
│ list List devices │
|
|
359
|
+
│ show Show device details │
|
|
360
|
+
│ set-active Set active device │
|
|
361
|
+
│ unset-active Clear active device │
|
|
362
|
+
╰────────────────────────────────────╯
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Claude Code skill (`/esper`)
|
|
368
|
+
|
|
369
|
+
The repo includes a [Claude Code](https://claude.ai/code) slash command that gives you a natural-language interface to your Esper fleet. Instead of remembering CLI syntax, just describe what you want.
|
|
370
|
+
|
|
371
|
+
### Setup
|
|
372
|
+
|
|
373
|
+
**Option A — project skill (automatic when you clone):**
|
|
374
|
+
|
|
375
|
+
The skill is already at `.claude/commands/esper.md` in this repo. Open the project in Claude Code and `/esper` is available immediately — no install step.
|
|
376
|
+
|
|
377
|
+
**Option B — user skill (available in every project):**
|
|
378
|
+
|
|
379
|
+
Copy the skill to your global commands directory so it works outside this repo too:
|
|
380
|
+
|
|
381
|
+
```sh
|
|
382
|
+
mkdir -p ~/.claude/commands
|
|
383
|
+
cp .claude/commands/esper.md ~/.claude/commands/esper.md
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Usage
|
|
387
|
+
|
|
388
|
+
Type `/esper` in Claude Code followed by what you want in plain English:
|
|
389
|
+
|
|
390
|
+
```
|
|
391
|
+
/esper show me all inactive devices
|
|
392
|
+
/esper reboot the warehouse group
|
|
393
|
+
/esper what apps are installed on ezra pixel
|
|
394
|
+
/esper upload build/app-release.apk and set it as the active app
|
|
395
|
+
/esper show battery telemetry for ezra pixel over the last 24 hours
|
|
396
|
+
/esper which devices have version abc-123 installed
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Or just `/esper` with no argument — it checks your active context and waits for direction.
|
|
400
|
+
|
|
401
|
+
### What it does
|
|
402
|
+
|
|
403
|
+
- Runs `espercli context` first so it knows your active environment, device, and group
|
|
404
|
+
- Translates natural language into the right `espercli` commands and runs them
|
|
405
|
+
- Presents results as a clean summary, not raw CLI output
|
|
406
|
+
- Asks for confirmation before any destructive action (wipe, delete) regardless of how you phrase the request
|
|
407
|
+
- Asks a clarifying question if the target is ambiguous rather than guessing
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## License
|
|
412
|
+
|
|
413
|
+
Apache 2.0 — see [LICENSE](LICENSE).
|
|
414
|
+
|
|
415
|
+
|