A CLI tool for real-time Q&A between a client and a programmer over WebSocket.
Programmers register themselves in a queue; clients browse the queue and connect to a programmer of their choice.
coding-human/
├── Cargo.toml # workspace root
├── cli/ # native binary (coding-human)
│ ├── Cargo.toml
│ └── src/
│ ├── main.rs
│ ├── ask.rs # client: browse queue, pick a programmer, ask questions
│ └── serve.rs # programmer: join queue, answer questions
└── worker/ # Cloudflare Worker (workers-rs / WASM)
├── Cargo.toml
├── wrangler.jsonc
└── src/
└── lib.rs # QueueDO + RoomSession + fetch handler
cargo install --git https://github.com/ut-code/cli --bin coding-humancoding-human serve <LABEL>Registers you in the queue with the given display name, creates a room, and
waits for a client to connect. Once connected, questions arrive automatically
and you type answers line by line. Press Ctrl+D to finish a response and
wait for the next question.
coding-human serve "Alice (Rust / systems)"coding-human askFetches the list of available programmers, lets you pick one, then opens a
session. Type questions at the prompt; answers stream back in real time.
Type /quit or press Ctrl+D to exit.
The server URL defaults to http://localhost:8787. Override with a
SERVER_URL environment variable or a .env file:
SERVER_URL=https://your-worker.example.com
# install worker-build once
cargo install worker-build
# start the worker locally on http://localhost:8787
cd worker
npx wrangler devThen run the CLI against it (default URL is already http://localhost:8787):
# terminal 1 — programmer
coding-human serve "Alice"
# terminal 2 — client
coding-human askThe Cloudflare Worker is written in Rust using workers-rs and compiled to WASM.
# install worker-build once
cargo install worker-build
# build + deploy
cd worker
npx wrangler deployThe worker exposes:
| Method | Path | Description |
|---|---|---|
GET |
/queue |
List waiting programmers { roomId: label } |
POST |
/queue |
Register a programmer { label } → { roomId } |
DELETE |
/queue/:roomId |
Deregister a programmer |
GET (WS) |
/rooms/:id/programmer |
WebSocket for the programmer |
GET (WS) |
/rooms/:id/client |
WebSocket for the client |
Two Durable Objects back the worker:
QueueDO— singleton, persists the queue of waiting programmers in KV storageRoomSession— one per room, relays messages between programmer and client using hibernatable WebSockets