devnomads-cli 0.10.0__tar.gz → 0.11.0__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.
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/PKG-INFO +79 -12
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/README.md +76 -9
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/devnomads_cli.egg-info/PKG-INFO +79 -12
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/devnomads_cli.egg-info/SOURCES.txt +2 -1
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/devnomads_cli.egg-info/requires.txt +2 -2
- devnomads_cli-0.11.0/dncli.py +9196 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/pyproject.toml +3 -3
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/tests/test_cli.py +3 -1
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/tests/test_config.py +53 -0
- devnomads_cli-0.11.0/tests/test_generate.py +356 -0
- devnomads_cli-0.11.0/tests/test_generated_cli.py +609 -0
- devnomads_cli-0.11.0/tests/test_versions.py +157 -0
- devnomads_cli-0.10.0/dncli.py +0 -5006
- devnomads_cli-0.10.0/tests/test_generate.py +0 -172
- devnomads_cli-0.10.0/tests/test_generated_cli.py +0 -295
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/LICENSE +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/devnomads_cli.egg-info/dependency_links.txt +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/devnomads_cli.egg-info/entry_points.txt +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/devnomads_cli.egg-info/top_level.txt +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/setup.cfg +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/tests/test_cert.py +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/tests/test_helpers.py +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/tests/test_hook.py +0 -0
- {devnomads_cli-0.10.0 → devnomads_cli-0.11.0}/tests/test_transfer.py +0 -0
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devnomads-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0
|
|
4
4
|
Summary: Manage your DevNomads services from the command line
|
|
5
5
|
Author-email: DevNomads <support@devnomads.nl>
|
|
6
6
|
License: MIT
|
|
7
7
|
Requires-Python: >=3.10
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
9
|
License-File: LICENSE
|
|
10
|
-
Requires-Dist: typer>=0.
|
|
10
|
+
Requires-Dist: typer>=0.19
|
|
11
11
|
Requires-Dist: httpx>=0.27
|
|
12
12
|
Requires-Dist: rich>=13
|
|
13
13
|
Requires-Dist: cryptography>=42
|
|
14
|
-
Requires-Dist: devnomads[acme]>=0.
|
|
14
|
+
Requires-Dist: devnomads[acme]>=0.6.0
|
|
15
15
|
Dynamic: license-file
|
|
16
16
|
|
|
17
17
|
# dncli
|
|
@@ -26,18 +26,43 @@ as **`devnomads-cli`**.
|
|
|
26
26
|
|
|
27
27
|
## Install
|
|
28
28
|
|
|
29
|
+
Install dncli with [uv](https://docs.astral.sh/uv/). It gives dncli
|
|
30
|
+
its own isolated environment and puts the `dncli` command on your
|
|
31
|
+
PATH:
|
|
32
|
+
|
|
29
33
|
```sh
|
|
30
|
-
|
|
34
|
+
uv tool install devnomads-cli
|
|
31
35
|
```
|
|
32
36
|
|
|
33
|
-
|
|
34
|
-
[uv](https://docs.astral.sh/uv/) or pipx instead - same result, no
|
|
35
|
-
interference with system packages:
|
|
37
|
+
No uv yet? Install it first:
|
|
36
38
|
|
|
37
39
|
```sh
|
|
38
|
-
|
|
40
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS, Linux
|
|
41
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
|
|
39
42
|
```
|
|
40
43
|
|
|
44
|
+
pipx (`pipx install devnomads-cli`) and pip (`pip install
|
|
45
|
+
devnomads-cli`) work as well.
|
|
46
|
+
|
|
47
|
+
### Updates
|
|
48
|
+
|
|
49
|
+
Update with:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
uv tool upgrade devnomads-cli
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
dncli checks PyPI at most once a day and tells you when a new version
|
|
56
|
+
is out, with the command to update the way you installed it. It only
|
|
57
|
+
does so on an interactive terminal, never in pipes, scripts or CI; set
|
|
58
|
+
`DN_NO_UPDATE_CHECK=1` to turn it off.
|
|
59
|
+
|
|
60
|
+
dncli also warns when the DevNomads API reports a major version it was
|
|
61
|
+
not built for, and tells you when the API no longer supports your
|
|
62
|
+
dncli version. Update dncli in both cases.
|
|
63
|
+
|
|
64
|
+
### Shell completion
|
|
65
|
+
|
|
41
66
|
Enable shell completion (bash, zsh, fish, PowerShell):
|
|
42
67
|
|
|
43
68
|
```sh
|
|
@@ -65,7 +90,8 @@ dncli containers show <id>
|
|
|
65
90
|
|
|
66
91
|
Every DevNomads product has its own command group - `apps`,
|
|
67
92
|
`buckets`, `containers`, `databases`, `domains`, `emails`,
|
|
68
|
-
`forwards`, `proxies`, `servers`, `sites` and more
|
|
93
|
+
`forwards`, `proxies`, `servers`, `sites` and more, plus `keys` for
|
|
94
|
+
your SSH keys and `jobs` for background work. Explore with
|
|
69
95
|
`dncli --help` and `dncli <group> --help`.
|
|
70
96
|
|
|
71
97
|
Commands accept any unambiguous prefix: `dncli e l` is `dncli emails
|
|
@@ -120,6 +146,17 @@ dncli services list --profile acme
|
|
|
120
146
|
export DN_PROFILE=acme
|
|
121
147
|
```
|
|
122
148
|
|
|
149
|
+
Manage stored profiles:
|
|
150
|
+
|
|
151
|
+
```sh
|
|
152
|
+
dncli configure list # profiles, with keys masked
|
|
153
|
+
dncli configure set-key acme # replace a profile's API key
|
|
154
|
+
dncli configure delete acme # remove a profile
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
`set-key --stdin` reads the new key from standard input, and
|
|
158
|
+
`delete --yes` skips the question, for use in scripts.
|
|
159
|
+
|
|
123
160
|
## Scripting
|
|
124
161
|
|
|
125
162
|
Output is a human-readable table on a terminal and JSON when piped,
|
|
@@ -143,9 +180,23 @@ fields, and reports an error on an unknown column name.
|
|
|
143
180
|
|
|
144
181
|
Commands that take a service id also accept a unique entity name and
|
|
145
182
|
resolve it for you, so `dncli domains show example.com` works as well
|
|
146
|
-
as `dncli domains show 1234`.
|
|
147
|
-
as an id; an entity that matches more
|
|
148
|
-
pass the id when an entity is not
|
|
183
|
+
as `dncli domains show 1234`. Names match regardless of case. A purely
|
|
184
|
+
numeric value is always treated as an id; an entity that matches more
|
|
185
|
+
than one service is rejected, so pass the id when an entity is not
|
|
186
|
+
unique. Other references, such as cluster, key or user ids, take the
|
|
187
|
+
numeric id only.
|
|
188
|
+
|
|
189
|
+
Some changes run in the background: creating a site, server, proxy or
|
|
190
|
+
domain, for example, queues one or more jobs in a batch. Such a command
|
|
191
|
+
prints the queued jobs and returns right away; add `--wait` to follow
|
|
192
|
+
the batch until every job has finished and see how each one ended.
|
|
193
|
+
With `--wait` the exit status is 0 only when every job completed. You
|
|
194
|
+
can look a batch up later with `dncli jobs batches show <batch_id>`.
|
|
195
|
+
|
|
196
|
+
The exit status is 0 when the API accepted the request and 1 for any
|
|
197
|
+
error response, so `dncli ... && next-step` is safe in scripts. Every
|
|
198
|
+
command takes `--timeout <seconds>` (default 300) for how long to wait
|
|
199
|
+
for the API, including the time spent waiting on `--wait`.
|
|
149
200
|
|
|
150
201
|
In CI and pipelines, skip the credentials file and pass the key via
|
|
151
202
|
the environment:
|
|
@@ -155,6 +206,22 @@ export DN_API_KEY=... # beats any stored profile
|
|
|
155
206
|
dncli services list | jq -r '.[].entity'
|
|
156
207
|
```
|
|
157
208
|
|
|
209
|
+
## AI agents
|
|
210
|
+
|
|
211
|
+
dncli ships with a skill that teaches AI coding agents how to use it
|
|
212
|
+
safely: where ids come from, what costs money or deletes data, and to
|
|
213
|
+
ask before changing anything. It works with Claude Code, Codex, Gemini
|
|
214
|
+
CLI, GitHub Copilot, Cursor and OpenCode:
|
|
215
|
+
|
|
216
|
+
```sh
|
|
217
|
+
dncli skill install # every agent found on this machine
|
|
218
|
+
dncli skill install --agent codex # a specific agent; repeat for more
|
|
219
|
+
dncli skill install --project # into the current project instead
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Run it again after upgrading dncli to update the skill; `dncli skill
|
|
223
|
+
show` prints it.
|
|
224
|
+
|
|
158
225
|
## Certificates
|
|
159
226
|
|
|
160
227
|
`dncli` issues Let's Encrypt certificates using the DNS-01 challenge:
|
|
@@ -10,18 +10,43 @@ as **`devnomads-cli`**.
|
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
13
|
+
Install dncli with [uv](https://docs.astral.sh/uv/). It gives dncli
|
|
14
|
+
its own isolated environment and puts the `dncli` command on your
|
|
15
|
+
PATH:
|
|
16
|
+
|
|
13
17
|
```sh
|
|
14
|
-
|
|
18
|
+
uv tool install devnomads-cli
|
|
15
19
|
```
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
[uv](https://docs.astral.sh/uv/) or pipx instead - same result, no
|
|
19
|
-
interference with system packages:
|
|
21
|
+
No uv yet? Install it first:
|
|
20
22
|
|
|
21
23
|
```sh
|
|
22
|
-
|
|
24
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS, Linux
|
|
25
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
|
|
23
26
|
```
|
|
24
27
|
|
|
28
|
+
pipx (`pipx install devnomads-cli`) and pip (`pip install
|
|
29
|
+
devnomads-cli`) work as well.
|
|
30
|
+
|
|
31
|
+
### Updates
|
|
32
|
+
|
|
33
|
+
Update with:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
uv tool upgrade devnomads-cli
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
dncli checks PyPI at most once a day and tells you when a new version
|
|
40
|
+
is out, with the command to update the way you installed it. It only
|
|
41
|
+
does so on an interactive terminal, never in pipes, scripts or CI; set
|
|
42
|
+
`DN_NO_UPDATE_CHECK=1` to turn it off.
|
|
43
|
+
|
|
44
|
+
dncli also warns when the DevNomads API reports a major version it was
|
|
45
|
+
not built for, and tells you when the API no longer supports your
|
|
46
|
+
dncli version. Update dncli in both cases.
|
|
47
|
+
|
|
48
|
+
### Shell completion
|
|
49
|
+
|
|
25
50
|
Enable shell completion (bash, zsh, fish, PowerShell):
|
|
26
51
|
|
|
27
52
|
```sh
|
|
@@ -49,7 +74,8 @@ dncli containers show <id>
|
|
|
49
74
|
|
|
50
75
|
Every DevNomads product has its own command group - `apps`,
|
|
51
76
|
`buckets`, `containers`, `databases`, `domains`, `emails`,
|
|
52
|
-
`forwards`, `proxies`, `servers`, `sites` and more
|
|
77
|
+
`forwards`, `proxies`, `servers`, `sites` and more, plus `keys` for
|
|
78
|
+
your SSH keys and `jobs` for background work. Explore with
|
|
53
79
|
`dncli --help` and `dncli <group> --help`.
|
|
54
80
|
|
|
55
81
|
Commands accept any unambiguous prefix: `dncli e l` is `dncli emails
|
|
@@ -104,6 +130,17 @@ dncli services list --profile acme
|
|
|
104
130
|
export DN_PROFILE=acme
|
|
105
131
|
```
|
|
106
132
|
|
|
133
|
+
Manage stored profiles:
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
dncli configure list # profiles, with keys masked
|
|
137
|
+
dncli configure set-key acme # replace a profile's API key
|
|
138
|
+
dncli configure delete acme # remove a profile
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`set-key --stdin` reads the new key from standard input, and
|
|
142
|
+
`delete --yes` skips the question, for use in scripts.
|
|
143
|
+
|
|
107
144
|
## Scripting
|
|
108
145
|
|
|
109
146
|
Output is a human-readable table on a terminal and JSON when piped,
|
|
@@ -127,9 +164,23 @@ fields, and reports an error on an unknown column name.
|
|
|
127
164
|
|
|
128
165
|
Commands that take a service id also accept a unique entity name and
|
|
129
166
|
resolve it for you, so `dncli domains show example.com` works as well
|
|
130
|
-
as `dncli domains show 1234`.
|
|
131
|
-
as an id; an entity that matches more
|
|
132
|
-
pass the id when an entity is not
|
|
167
|
+
as `dncli domains show 1234`. Names match regardless of case. A purely
|
|
168
|
+
numeric value is always treated as an id; an entity that matches more
|
|
169
|
+
than one service is rejected, so pass the id when an entity is not
|
|
170
|
+
unique. Other references, such as cluster, key or user ids, take the
|
|
171
|
+
numeric id only.
|
|
172
|
+
|
|
173
|
+
Some changes run in the background: creating a site, server, proxy or
|
|
174
|
+
domain, for example, queues one or more jobs in a batch. Such a command
|
|
175
|
+
prints the queued jobs and returns right away; add `--wait` to follow
|
|
176
|
+
the batch until every job has finished and see how each one ended.
|
|
177
|
+
With `--wait` the exit status is 0 only when every job completed. You
|
|
178
|
+
can look a batch up later with `dncli jobs batches show <batch_id>`.
|
|
179
|
+
|
|
180
|
+
The exit status is 0 when the API accepted the request and 1 for any
|
|
181
|
+
error response, so `dncli ... && next-step` is safe in scripts. Every
|
|
182
|
+
command takes `--timeout <seconds>` (default 300) for how long to wait
|
|
183
|
+
for the API, including the time spent waiting on `--wait`.
|
|
133
184
|
|
|
134
185
|
In CI and pipelines, skip the credentials file and pass the key via
|
|
135
186
|
the environment:
|
|
@@ -139,6 +190,22 @@ export DN_API_KEY=... # beats any stored profile
|
|
|
139
190
|
dncli services list | jq -r '.[].entity'
|
|
140
191
|
```
|
|
141
192
|
|
|
193
|
+
## AI agents
|
|
194
|
+
|
|
195
|
+
dncli ships with a skill that teaches AI coding agents how to use it
|
|
196
|
+
safely: where ids come from, what costs money or deletes data, and to
|
|
197
|
+
ask before changing anything. It works with Claude Code, Codex, Gemini
|
|
198
|
+
CLI, GitHub Copilot, Cursor and OpenCode:
|
|
199
|
+
|
|
200
|
+
```sh
|
|
201
|
+
dncli skill install # every agent found on this machine
|
|
202
|
+
dncli skill install --agent codex # a specific agent; repeat for more
|
|
203
|
+
dncli skill install --project # into the current project instead
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Run it again after upgrading dncli to update the skill; `dncli skill
|
|
207
|
+
show` prints it.
|
|
208
|
+
|
|
142
209
|
## Certificates
|
|
143
210
|
|
|
144
211
|
`dncli` issues Let's Encrypt certificates using the DNS-01 challenge:
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devnomads-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0
|
|
4
4
|
Summary: Manage your DevNomads services from the command line
|
|
5
5
|
Author-email: DevNomads <support@devnomads.nl>
|
|
6
6
|
License: MIT
|
|
7
7
|
Requires-Python: >=3.10
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
9
|
License-File: LICENSE
|
|
10
|
-
Requires-Dist: typer>=0.
|
|
10
|
+
Requires-Dist: typer>=0.19
|
|
11
11
|
Requires-Dist: httpx>=0.27
|
|
12
12
|
Requires-Dist: rich>=13
|
|
13
13
|
Requires-Dist: cryptography>=42
|
|
14
|
-
Requires-Dist: devnomads[acme]>=0.
|
|
14
|
+
Requires-Dist: devnomads[acme]>=0.6.0
|
|
15
15
|
Dynamic: license-file
|
|
16
16
|
|
|
17
17
|
# dncli
|
|
@@ -26,18 +26,43 @@ as **`devnomads-cli`**.
|
|
|
26
26
|
|
|
27
27
|
## Install
|
|
28
28
|
|
|
29
|
+
Install dncli with [uv](https://docs.astral.sh/uv/). It gives dncli
|
|
30
|
+
its own isolated environment and puts the `dncli` command on your
|
|
31
|
+
PATH:
|
|
32
|
+
|
|
29
33
|
```sh
|
|
30
|
-
|
|
34
|
+
uv tool install devnomads-cli
|
|
31
35
|
```
|
|
32
36
|
|
|
33
|
-
|
|
34
|
-
[uv](https://docs.astral.sh/uv/) or pipx instead - same result, no
|
|
35
|
-
interference with system packages:
|
|
37
|
+
No uv yet? Install it first:
|
|
36
38
|
|
|
37
39
|
```sh
|
|
38
|
-
|
|
40
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS, Linux
|
|
41
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
|
|
39
42
|
```
|
|
40
43
|
|
|
44
|
+
pipx (`pipx install devnomads-cli`) and pip (`pip install
|
|
45
|
+
devnomads-cli`) work as well.
|
|
46
|
+
|
|
47
|
+
### Updates
|
|
48
|
+
|
|
49
|
+
Update with:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
uv tool upgrade devnomads-cli
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
dncli checks PyPI at most once a day and tells you when a new version
|
|
56
|
+
is out, with the command to update the way you installed it. It only
|
|
57
|
+
does so on an interactive terminal, never in pipes, scripts or CI; set
|
|
58
|
+
`DN_NO_UPDATE_CHECK=1` to turn it off.
|
|
59
|
+
|
|
60
|
+
dncli also warns when the DevNomads API reports a major version it was
|
|
61
|
+
not built for, and tells you when the API no longer supports your
|
|
62
|
+
dncli version. Update dncli in both cases.
|
|
63
|
+
|
|
64
|
+
### Shell completion
|
|
65
|
+
|
|
41
66
|
Enable shell completion (bash, zsh, fish, PowerShell):
|
|
42
67
|
|
|
43
68
|
```sh
|
|
@@ -65,7 +90,8 @@ dncli containers show <id>
|
|
|
65
90
|
|
|
66
91
|
Every DevNomads product has its own command group - `apps`,
|
|
67
92
|
`buckets`, `containers`, `databases`, `domains`, `emails`,
|
|
68
|
-
`forwards`, `proxies`, `servers`, `sites` and more
|
|
93
|
+
`forwards`, `proxies`, `servers`, `sites` and more, plus `keys` for
|
|
94
|
+
your SSH keys and `jobs` for background work. Explore with
|
|
69
95
|
`dncli --help` and `dncli <group> --help`.
|
|
70
96
|
|
|
71
97
|
Commands accept any unambiguous prefix: `dncli e l` is `dncli emails
|
|
@@ -120,6 +146,17 @@ dncli services list --profile acme
|
|
|
120
146
|
export DN_PROFILE=acme
|
|
121
147
|
```
|
|
122
148
|
|
|
149
|
+
Manage stored profiles:
|
|
150
|
+
|
|
151
|
+
```sh
|
|
152
|
+
dncli configure list # profiles, with keys masked
|
|
153
|
+
dncli configure set-key acme # replace a profile's API key
|
|
154
|
+
dncli configure delete acme # remove a profile
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
`set-key --stdin` reads the new key from standard input, and
|
|
158
|
+
`delete --yes` skips the question, for use in scripts.
|
|
159
|
+
|
|
123
160
|
## Scripting
|
|
124
161
|
|
|
125
162
|
Output is a human-readable table on a terminal and JSON when piped,
|
|
@@ -143,9 +180,23 @@ fields, and reports an error on an unknown column name.
|
|
|
143
180
|
|
|
144
181
|
Commands that take a service id also accept a unique entity name and
|
|
145
182
|
resolve it for you, so `dncli domains show example.com` works as well
|
|
146
|
-
as `dncli domains show 1234`.
|
|
147
|
-
as an id; an entity that matches more
|
|
148
|
-
pass the id when an entity is not
|
|
183
|
+
as `dncli domains show 1234`. Names match regardless of case. A purely
|
|
184
|
+
numeric value is always treated as an id; an entity that matches more
|
|
185
|
+
than one service is rejected, so pass the id when an entity is not
|
|
186
|
+
unique. Other references, such as cluster, key or user ids, take the
|
|
187
|
+
numeric id only.
|
|
188
|
+
|
|
189
|
+
Some changes run in the background: creating a site, server, proxy or
|
|
190
|
+
domain, for example, queues one or more jobs in a batch. Such a command
|
|
191
|
+
prints the queued jobs and returns right away; add `--wait` to follow
|
|
192
|
+
the batch until every job has finished and see how each one ended.
|
|
193
|
+
With `--wait` the exit status is 0 only when every job completed. You
|
|
194
|
+
can look a batch up later with `dncli jobs batches show <batch_id>`.
|
|
195
|
+
|
|
196
|
+
The exit status is 0 when the API accepted the request and 1 for any
|
|
197
|
+
error response, so `dncli ... && next-step` is safe in scripts. Every
|
|
198
|
+
command takes `--timeout <seconds>` (default 300) for how long to wait
|
|
199
|
+
for the API, including the time spent waiting on `--wait`.
|
|
149
200
|
|
|
150
201
|
In CI and pipelines, skip the credentials file and pass the key via
|
|
151
202
|
the environment:
|
|
@@ -155,6 +206,22 @@ export DN_API_KEY=... # beats any stored profile
|
|
|
155
206
|
dncli services list | jq -r '.[].entity'
|
|
156
207
|
```
|
|
157
208
|
|
|
209
|
+
## AI agents
|
|
210
|
+
|
|
211
|
+
dncli ships with a skill that teaches AI coding agents how to use it
|
|
212
|
+
safely: where ids come from, what costs money or deletes data, and to
|
|
213
|
+
ask before changing anything. It works with Claude Code, Codex, Gemini
|
|
214
|
+
CLI, GitHub Copilot, Cursor and OpenCode:
|
|
215
|
+
|
|
216
|
+
```sh
|
|
217
|
+
dncli skill install # every agent found on this machine
|
|
218
|
+
dncli skill install --agent codex # a specific agent; repeat for more
|
|
219
|
+
dncli skill install --project # into the current project instead
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Run it again after upgrading dncli to update the skill; `dncli skill
|
|
223
|
+
show` prints it.
|
|
224
|
+
|
|
158
225
|
## Certificates
|
|
159
226
|
|
|
160
227
|
`dncli` issues Let's Encrypt certificates using the DNS-01 challenge:
|