@openape/apes 0.14.3 → 0.15.1

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.
package/README.md CHANGED
@@ -149,9 +149,18 @@ Goodbye.
149
149
  | `apes login` | PKCE browser login or ed25519 key-based agent login |
150
150
  | `apes logout` | Clear stored auth |
151
151
  | `apes whoami` | Show current identity |
152
- | `apes enroll` | Enroll an agent at the IdP |
152
+ | `apes enroll` | Enroll an agent at the IdP (interactive, browser approval) |
153
153
  | `apes register-user` | Register a new human user |
154
154
 
155
+ ### Agents
156
+
157
+ | Command | Description |
158
+ |---|---|
159
+ | `apes agents register --name <n> --public-key <line>` | Register an agent at the IdP using a public key supplied by the agent. Returns the assigned email so the agent can `apes login` from its own machine. |
160
+ | `apes agents spawn <n>` | macOS-only. Provision a local agent end-to-end: macOS user, ed25519 keypair, IdP registration, agent token, ape-shell as login shell, Claude Code Bash hook. Privileged setup runs through `apes run --as root` (DDISA-approved). |
161
+ | `apes agents list [--json] [--include-inactive]` | List agents owned by the current user, with local OS-user cross-reference. |
162
+ | `apes agents destroy <n> [--force] [--soft] [--keep-os-user]` | Tear down an agent. Idempotent; safe for CI with `--force`. |
163
+
155
164
  ### Grants
156
165
 
157
166
  | Command | Description |
@@ -185,6 +194,54 @@ apes config get defaults.idp
185
194
  apes config set defaults.idp https://id.example.com
186
195
  ```
187
196
 
197
+ ## Spawning ephemeral agents (macOS)
198
+
199
+ `apes agents spawn <name>` provisions a complete local agent in one shot:
200
+
201
+ ```bash
202
+ apes login patrick@hofmann.eco
203
+ apes agents spawn agent-a
204
+ # → DDISA approval prompt for the as=root grant (one-time per spawn)
205
+ # → "Agent agent-a spawned. Run: apes run --as agent-a -- claude --session-name agent-a --dangerously-skip-permissions"
206
+
207
+ apes agents list
208
+ # NAME EMAIL ACTIVE OS-USER HOME
209
+ # agent-a agent-a+patrick+hofmann_eco@id.openape.ai ✓ ✓ /Users/agent-a
210
+
211
+ apes run --as agent-a -- claude --session-name agent-a --dangerously-skip-permissions
212
+ # Claude Code runs as agent-a; every Bash tool call is rewritten to
213
+ # `ape-shell -c <cmd>` by ~/.claude/hooks/bash-via-ape-shell.sh, so the
214
+ # agent cannot run a shell command without an apes grant.
215
+
216
+ apes agents destroy agent-a --force
217
+ # → DDISA approval for the as=root teardown grant; agent and OS user are gone
218
+ ```
219
+
220
+ Pre-flight requirements (one-time):
221
+
222
+ ```bash
223
+ echo "$(which ape-shell)" | sudo tee -a /etc/shells
224
+ # `escapes` (Rust setuid binary) installed on PATH for `apes run --as root`
225
+ ```
226
+
227
+ For remote agents that run on another machine, register without provisioning:
228
+
229
+ ```bash
230
+ # On the agent's machine:
231
+ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
232
+
233
+ # On your machine (logged in as the parent):
234
+ apes agents register --name agent-x --public-key "$(ssh agent-host cat ~/.ssh/id_ed25519.pub)" --json
235
+ # → {"email":"agent-x+patrick+hofmann_eco@id.openape.ai","name":"agent-x","owner":"patrick@hofmann.eco","approver":"patrick@hofmann.eco","idp":"https://id.openape.ai"}
236
+
237
+ # Tell the agent to log in:
238
+ # apes login --idp https://id.openape.ai --email agent-x+patrick+hofmann_eco@id.openape.ai --key ~/.ssh/id_ed25519
239
+ ```
240
+
241
+ `destroy --keep-os-user --force` reverses just the IdP side without invoking
242
+ `apes run --as root`, so it's safe for CI loops where no DDISA approver is
243
+ available.
244
+
188
245
  ## MCP Server
189
246
 
190
247
  ```bash