@tangle-network/sandbox-cli 0.4.1 → 0.5.0
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 +43 -15
- package/SKILL.md +24 -25
- package/dist/index.mjs +19 -19
- package/hub-reference.md +12 -11
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -30,7 +30,9 @@ npx @tangle-network/sandbox-cli sandbox list
|
|
|
30
30
|
npx tangle-sandbox --help
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
Never run bare `npx tangle` (or `npx tangle-cli`)
|
|
33
|
+
Never run bare `npx tangle` (or `npx tangle-cli`).
|
|
34
|
+
Those npm names belong to unrelated third-party packages and would execute someone else's code.
|
|
35
|
+
The official names are `@tangle-network/sandbox-cli` and its forwarding alias `tangle-sandbox`.
|
|
34
36
|
|
|
35
37
|
Install globally to expose the short `tangle` binary on PATH:
|
|
36
38
|
|
|
@@ -56,14 +58,13 @@ Three flows are supported:
|
|
|
56
58
|
|
|
57
59
|
- **Browser login** (default): `tangle auth login` opens a browser to complete OAuth with `github`, `google`, or `microsoft` identity providers.
|
|
58
60
|
- **Device code**: `tangle auth login --no-browser` for headless environments.
|
|
59
|
-
- **API key**: `tangle auth login --api-key sk-tan-...` (or set `TANGLE_API_KEY
|
|
61
|
+
- **API key**: `tangle auth login --api-key sk-tan-...` (or set `TANGLE_API_KEY`).
|
|
60
62
|
|
|
61
63
|
Credential lookup precedence:
|
|
62
64
|
|
|
63
65
|
1. `--api-key` flag
|
|
64
|
-
2. `TANGLE_API_KEY` environment variable
|
|
65
|
-
3. `
|
|
66
|
-
4. `~/.tangle/credentials` (populated by `tangle auth login`)
|
|
66
|
+
2. `TANGLE_API_KEY` environment variable
|
|
67
|
+
3. `~/.tangle/credentials` (populated by `tangle auth login`)
|
|
67
68
|
|
|
68
69
|
Common commands:
|
|
69
70
|
|
|
@@ -91,6 +92,7 @@ Top-level command groups:
|
|
|
91
92
|
- `usage`
|
|
92
93
|
- `permissions`
|
|
93
94
|
- `backend`
|
|
95
|
+
- `batch`
|
|
94
96
|
- `process`
|
|
95
97
|
- `fs`
|
|
96
98
|
|
|
@@ -101,7 +103,7 @@ Examples:
|
|
|
101
103
|
tangle auth login --api-key sk_...
|
|
102
104
|
|
|
103
105
|
# sandbox lifecycle
|
|
104
|
-
tangle sandbox create --name my-box --
|
|
106
|
+
tangle sandbox create --name my-box --environment node:20 --ssh
|
|
105
107
|
tangle sandbox list
|
|
106
108
|
tangle sandbox get sbx_123
|
|
107
109
|
tangle sandbox stop sbx_123
|
|
@@ -112,14 +114,14 @@ tangle sandbox delete sbx_123
|
|
|
112
114
|
tangle exec sbx_123 "npm test"
|
|
113
115
|
tangle ssh sbx_123
|
|
114
116
|
tangle agent prompt sbx_123 "Summarize this repo"
|
|
115
|
-
tangle agent
|
|
117
|
+
tangle agent prompt sbx_123 "Fix the failing tests"
|
|
116
118
|
tangle fleet create --count 4 --coordinator
|
|
117
119
|
|
|
118
120
|
# grant hub connections to the agent (see hub-reference.md for the 3 modes).
|
|
119
121
|
# the connection is an id or a provider name (resolved via `tangle hub connections`).
|
|
120
|
-
tangle agent
|
|
122
|
+
tangle agent prompt sbx_123 "triage issues" \
|
|
121
123
|
--connection github:github.issues.search,github.issues.create
|
|
122
|
-
tangle agent
|
|
124
|
+
tangle agent prompt sbx_123 "file the report" --connection github:* --allow-writes
|
|
123
125
|
|
|
124
126
|
# temporary GPU for an eval; omitted provider picks the cheapest configured cloud
|
|
125
127
|
tangle sandbox gpu run sbx_123 \
|
|
@@ -138,7 +140,7 @@ tangle fs ls sbx_123 /workspace
|
|
|
138
140
|
```
|
|
139
141
|
|
|
140
142
|
Hub commands (`tangle hub …`) and `tangle agent --connection` auto-mint a
|
|
141
|
-
short-lived platform Hub key from your `tangle auth login` session
|
|
143
|
+
short-lived platform Hub key from your `tangle auth login` session, with no separate
|
|
142
144
|
key needed. See [`hub-reference.md`](./hub-reference.md) for the `--connection`
|
|
143
145
|
grant modes, `--allow-writes`, and `permissions revert-writes`.
|
|
144
146
|
|
|
@@ -188,14 +190,40 @@ tangle sandbox create --name gpu-eval \
|
|
|
188
190
|
The final detach output includes billed seconds and customer cost.
|
|
189
191
|
Use `tangle usage` to inspect account-level GPU seconds and GPU spend.
|
|
190
192
|
|
|
193
|
+
## Batch Runs
|
|
194
|
+
|
|
195
|
+
Run each task against one explicitly named backend:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
tangle batch run --tasks tasks.json --backend primary=opencode
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
`tasks.json` is an array of `{ "id": "...", "message": "..." }` objects or an object with a `tasks` array.
|
|
202
|
+
At least one `--backend <id=type>` is required with `--tasks` or `--task`.
|
|
203
|
+
|
|
204
|
+
Repeat `--backend <id=type>` to run every task against multiple backends:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
tangle batch run --tasks tasks.json \
|
|
208
|
+
--backend writer=opencode \
|
|
209
|
+
--backend reviewer=claude-code \
|
|
210
|
+
--stream
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Backend IDs must be unique and use 1 to 128 letters, numbers, dots, underscores, or hyphens.
|
|
214
|
+
Use `--model provider/model` only when one backend is selected.
|
|
215
|
+
Each result is identified by both `taskId` and `backendId`.
|
|
216
|
+
JSON output reports `totalTasks`, `totalBackends`, `totalExecutions`, `totalSuccess`, `totalFailure`, `totalRetries`, and `successRate`.
|
|
217
|
+
|
|
218
|
+
Use `--request <file.json>` when each backend needs its own model, profile, server, or lifecycle configuration.
|
|
219
|
+
The file uses the same complete request shape as the TypeScript SDK and cannot be combined with inline task or backend flags.
|
|
220
|
+
|
|
191
221
|
## Provisioning Coverage
|
|
192
222
|
|
|
193
|
-
`tangle sandbox create`
|
|
223
|
+
`tangle sandbox create` supports environments or container images, resources, temporary GPU leases, lifecycle limits, driver and backend selection, SSH and web terminal, environment variables, secrets, metadata, git clone, BYOS3 storage, and snapshot restore.
|
|
224
|
+
Use the `tools`, `permissions`, `network`, and `expose` commands after creation.
|
|
225
|
+
Run `tangle sandbox create --help` for the current flag list.
|
|
194
226
|
|
|
195
227
|
## Limitations
|
|
196
228
|
|
|
197
229
|
- `snapshot restore` creates a new sandbox from a snapshot; the command signature suggests in-place restore.
|
|
198
|
-
|
|
199
|
-
## Design Follow-Up
|
|
200
|
-
|
|
201
|
-
For the architecture review, parity checklist, and auth flow spec, see [CHECKLIST.md](./CHECKLIST.md).
|
package/SKILL.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tangle-cli
|
|
3
|
-
description: Use
|
|
3
|
+
description: Use Tangle Sandbox CLI for lifecycle, prompts, files, fleets, Hub tools, and integrations.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Tangle CLI
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
`tangle` is the CLI for Tangle Sandbox operations
|
|
10
|
+
`tangle` is the CLI for Tangle Sandbox operations: create sandboxes, run agents, execute hub tools, and manage files, secrets, snapshots, and git.
|
|
11
|
+
All commands support `--help` for inline reference.
|
|
11
12
|
|
|
12
13
|
## Auth
|
|
13
14
|
|
|
@@ -16,7 +17,7 @@ Generic command auth modes, resolved in order:
|
|
|
16
17
|
| Priority | Source | Set via |
|
|
17
18
|
|----------|--------|--------|
|
|
18
19
|
| 1 | CLI flag | `--api-key <key>` |
|
|
19
|
-
| 2 | Env var | `TANGLE_API_KEY`
|
|
20
|
+
| 2 | Env var | `TANGLE_API_KEY` |
|
|
20
21
|
| 3 | Profile store | `tangle auth login` (keychain or file) |
|
|
21
22
|
|
|
22
23
|
Hub commands resolve auth in this order:
|
|
@@ -25,10 +26,11 @@ Hub commands resolve auth in this order:
|
|
|
25
26
|
|----------|--------|--------|
|
|
26
27
|
| 1 | CLI flag | `--api-key <key>` |
|
|
27
28
|
| 2 | Hub capability | `TANGLE_HUB_CAPABILITY_TOKEN` |
|
|
28
|
-
| 3 | Env var | `TANGLE_API_KEY`
|
|
29
|
+
| 3 | Env var | `TANGLE_API_KEY` |
|
|
29
30
|
| 4 | Profile store | `tangle auth login` (keychain or file) |
|
|
30
31
|
|
|
31
|
-
**Inside a sandbox:** `tangle` is automatically authenticated.
|
|
32
|
+
**Inside a sandbox:** `tangle` is automatically authenticated.
|
|
33
|
+
No extra authentication is needed.
|
|
32
34
|
|
|
33
35
|
```bash
|
|
34
36
|
# Browser login (preferred)
|
|
@@ -48,7 +50,7 @@ tangle auth login --profile work
|
|
|
48
50
|
tangle auth profiles use work
|
|
49
51
|
```
|
|
50
52
|
|
|
51
|
-
For hub env auth, set **exactly one** of `TANGLE_API_KEY
|
|
53
|
+
For hub env auth, set **exactly one** of `TANGLE_API_KEY` or `TANGLE_HUB_CAPABILITY_TOKEN`.
|
|
52
54
|
|
|
53
55
|
## Sandbox Lifecycle
|
|
54
56
|
|
|
@@ -105,7 +107,7 @@ tangle fleet create --count 4 \
|
|
|
105
107
|
--gpu-idle-timeout 120
|
|
106
108
|
```
|
|
107
109
|
|
|
108
|
-
## Hub
|
|
110
|
+
## Full Hub Workflow
|
|
109
111
|
|
|
110
112
|
Hub lets agents use connected provider tools (GitHub, etc.) through Tangle without seeing provider OAuth tokens.
|
|
111
113
|
|
|
@@ -141,7 +143,7 @@ tangle hub tools describe github.issues.search --json
|
|
|
141
143
|
|
|
142
144
|
### Tool Execution
|
|
143
145
|
|
|
144
|
-
Two equivalent commands
|
|
146
|
+
Two equivalent commands are available: `call` and `exec`.
|
|
145
147
|
|
|
146
148
|
```bash
|
|
147
149
|
# Basic call: <path tokens...> <json-input>
|
|
@@ -154,7 +156,8 @@ tangle hub call github issues createIssue '{"owner":"foo","repo":"bar","title":"
|
|
|
154
156
|
|
|
155
157
|
### Policy & Approvals
|
|
156
158
|
|
|
157
|
-
Tools default to `ask` policy
|
|
159
|
+
Tools default to the `ask` policy.
|
|
160
|
+
They pause and require approval on first use.
|
|
158
161
|
|
|
159
162
|
```bash
|
|
160
163
|
# List pending approvals
|
|
@@ -210,20 +213,14 @@ tangle secret update DATABASE_URL "new-value"
|
|
|
210
213
|
tangle secret delete DATABASE_URL
|
|
211
214
|
```
|
|
212
215
|
|
|
213
|
-
## Snapshots
|
|
216
|
+
## Snapshots
|
|
214
217
|
|
|
215
218
|
```bash
|
|
216
|
-
# Snapshots (point-in-time for cloning/restoring)
|
|
217
219
|
tangle snapshot create <sandbox-id>
|
|
218
220
|
tangle snapshot list <sandbox-id>
|
|
219
221
|
tangle snapshot restore <sandbox-id> <snapshot-id> # creates new sandbox
|
|
220
222
|
tangle snapshot revert <sandbox-id> <snapshot-id> # reverts in-place
|
|
221
223
|
tangle snapshot delete <sandbox-id> <snapshot-id>
|
|
222
|
-
|
|
223
|
-
# Checkpoints (lightweight, local)
|
|
224
|
-
tangle checkpoint create <id>
|
|
225
|
-
tangle checkpoint list|ls <id>
|
|
226
|
-
tangle checkpoint delete|rm <id> <checkpoint-id>
|
|
227
224
|
```
|
|
228
225
|
|
|
229
226
|
## Templates
|
|
@@ -260,7 +257,7 @@ tangle team invitations [team] # List pending/historical invitations
|
|
|
260
257
|
## Workflows
|
|
261
258
|
|
|
262
259
|
Authenticate with the `sk-tan-*` API key (`TANGLE_API_KEY`), same as the other
|
|
263
|
-
platform commands
|
|
260
|
+
platform commands, not a hub capability token.
|
|
264
261
|
|
|
265
262
|
```bash
|
|
266
263
|
tangle workflows validate workflow.yml
|
|
@@ -308,6 +305,7 @@ tangle tools install <id> python 3.12
|
|
|
308
305
|
|
|
309
306
|
# Batch tasks across sandboxes
|
|
310
307
|
tangle batch run --tasks tasks.json
|
|
308
|
+
tangle batch run --tasks tasks.json --backend writer=opencode --backend reviewer=claude-code --stream
|
|
311
309
|
|
|
312
310
|
# Intelligence reports
|
|
313
311
|
tangle intelligence sandbox <id>
|
|
@@ -337,22 +335,23 @@ tangle permissions add <sandboxId> --userId <userId> --role editor
|
|
|
337
335
|
|
|
338
336
|
| Goal | Commands |
|
|
339
337
|
|------|----------|
|
|
340
|
-
| Spin up sandbox, run agent | `tangle sandbox create --name X` → `tangle agent
|
|
338
|
+
| Spin up sandbox, run agent | `tangle sandbox create --name X` → `tangle agent prompt <id> "..."` |
|
|
341
339
|
| Connect GitHub, read issues | `tangle hub connect github` → `tangle hub tools search "issues" --provider github` → `tangle hub call github issues search '{"q":"repo:X/Y is:issue"}'` |
|
|
342
340
|
| Push code from sandbox to GitHub | `tangle hub connect github` → `tangle git add <id> files` → `tangle git commit <id> -m "msg"` → `tangle git push <id>` |
|
|
343
341
|
| Save and restore state | `tangle snapshot create <id>` → ...work... → `tangle snapshot revert <id> <snap-id>` |
|
|
344
342
|
| Set secret for agent use | `tangle secret create GITHUB_TOKEN "..."` → agent reads via `process.env.GITHUB_TOKEN` |
|
|
345
343
|
| Set hub permissions | `tangle hub permissions set --connection conn_xxx --action github.issues.createIssue --decision allow` |
|
|
346
|
-
| Batch parallel agent
|
|
344
|
+
| Batch parallel agent prompts | `tangle batch run --tasks tasks.json --backend primary=opencode` (array of `{id, message}`) |
|
|
345
|
+
| Compare backends on the same tasks | `tangle batch run --tasks tasks.json --backend writer=opencode --backend reviewer=claude-code --stream` |
|
|
347
346
|
|
|
348
347
|
## Common Mistakes
|
|
349
348
|
|
|
350
|
-
- **Forgetting `--reveal` on `secret show
|
|
351
|
-
- **Using API-key env and `TANGLE_HUB_CAPABILITY_TOKEN` together for hub
|
|
352
|
-
- **Calling hub tools without `--approve` on first use
|
|
353
|
-
- **Missing `--json`
|
|
354
|
-
- **`tangle hub exec` vs `tangle exec
|
|
355
|
-
- **`hub resume`
|
|
349
|
+
- **Forgetting `--reveal` on `secret show`:** values are hidden by default for safety.
|
|
350
|
+
- **Using API-key env and `TANGLE_HUB_CAPABILITY_TOKEN` together for hub:** set exactly one env auth source, or use `--api-key` to override both.
|
|
351
|
+
- **Calling hub tools without `--approve` on first use:** use `--approve` or set policy to `allow` first.
|
|
352
|
+
- **Missing `--json` when piping output:** many commands need explicit `--json` for machine-readable output.
|
|
353
|
+
- **`tangle hub exec` vs `tangle exec`:** `hub exec` runs hub tools; `exec` runs shell commands in a sandbox.
|
|
354
|
+
- **`hub resume` does not replay:** after `hub resume --accept`, rerun the original `hub exec` with `--approve`.
|
|
356
355
|
|
|
357
356
|
## Token Safety
|
|
358
357
|
|