feat(cli): forkd ls + forkd kill — direct sandbox lifecycle#138
Merged
Conversation
…start The 3 CLI commands shipped 2026-05-21 (#134, #135, #136) collapse the new-user setup from 4 hand-pasted commands to a single \`forkd doctor\` + \`forkd from-image\` flow. Surface this prominently in Quick start so visitors landing from a Twitter / blog link see the modern story. - README.md: new \"Confirm your host is ready\" subsection leads with \`forkd doctor\`. New \"From a Docker image (one command)\" subsection shows \`forkd from-image python:3.12-slim --tag py-numpy\`. New \"Probe your install's latency\" subsection shows \`forkd bench\` with example output. - README-zh.md: parallel sections in Chinese. The original Hub-pull, from-source, and multi-child-fork-out sections are unchanged — those audiences still need them. New subsections come first since they're the most-likely user path. No code changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
c6b9974 to
8785325
Compare
Two small subcommands that wrap GET /v1/sandboxes and DELETE
/v1/sandboxes/:id so users don't have to hand-write curl. Same
ergonomics as \`docker ps\` / \`docker rm\`.
forkd ls
ID SNAPSHOT PID NETNS GUEST_ADDR
sb-6a0e8d4f-0023 coding-agent-fork-prewarm-v1 123456 forkd-child-1 10.42.0.2:8888
sb-6a0e8d50-0024 speculative-1234 123457 forkd-child-2 10.42.0.2:8888
...
2 sandboxes
forkd kill sb-6a0e8d4f-0023
✓ sb-6a0e8d4f-0023
forkd kill --all
forkd kill --tag speculative-1234
Implementation in crates/forkd-cli/src/sandbox.rs (~170 LOC), wired
in main.rs as Cmd::Ls / Cmd::Kill. Reads FORKD_URL / FORKD_TOKEN
from env like the other daemon-talking commands.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8785325 to
c9048fb
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two small subcommands that wrap GET /v1/sandboxes and DELETE /v1/sandboxes/:id so users don't have to hand-write curl. Same ergonomics as `docker ps` / `docker rm`.
E2E test on dev box
```
$ forkd ls
no live sandboxes
spawn 2 sandboxes via curl, then ls/kill
$ forkd ls
ID SNAPSHOT PID NETNS GUEST_ADDR
sb-6a0e9ea4-002d coding-agent-fork-prewarm-v1 76604 forkd-child-1 10.42.0.2:8888
sb-6a0e9ea4-002e coding-agent-fork-prewarm-v1 76614 forkd-child-2 10.42.0.2:8888
2 sandboxes
$ forkd kill --all
✓ sb-6a0e9ea4-002d
✓ sb-6a0e9ea4-002e
$ forkd ls
no live sandboxes
```
Surfaces
Files
Reads `FORKD_URL` / `FORKD_TOKEN` from env like the rest of the daemon-talking commands.
🤖 Generated with Claude Code