A Bun + Turborepo monorepo for running and managing agent-enabled “drone” containers.
dvm(apps/dvm): CLI for managing Docker containers as “VM-like” machines, including tmux-backed persistent sessions and optional agent setup.drone(apps/drone): host CLI + in-container daemon that exposes a local REST API for controlling processes/sessions inside a container (implemented on top ofdvm).drone-hub(apps/drone-hub): web UI for listing/grouping drones and interacting with them (Vite/React).voice-stream(apps/voice-stream): Android voice capture app plus a Node.js WebSocket server for APK download, pairing, monitoring, and optional Groq STT/TTS.looped(apps/looped): scaffolded minimal loop harness wrapper for repeatedly running an agentic CLI prompt.drone-sdk(packages/drone-sdk): TypeScript SDK for creating drones, working with groups and chats, and sending prompts through Drone Hub.
apps/dvm/: DVM CLI and scriptsapps/drone/: Drone CLI + daemonapps/drone-hub/: Drone Hub UIapps/voice-stream/: Android app and voice stream serverapps/looped/: Looped CLI scaffoldpackages/drone-sdk/: Drone SDK package
- Bun (repo is pinned to
bun@1.2.23viapackage.json) - Node.js (>= 18) for the built CLIs
- Docker (local daemon)
From the repo root:
# install workspace dependencies
bun install
# build all apps (outputs to apps/*/dist)
bun run build
# install CLI commands into your shell PATH
npm link ./apps/dvm
npm link ./apps/drone
npm link ./apps/loopedIf the commands are not found, ensure your npm global bin is on PATH:
export PATH="$(npm prefix -g)/bin:$PATH"After installation:
# dvm
dvm --help
# drone
drone --help
# looped
looped --helpTypical flow:
# create a drone container + start its daemon + register it locally
drone create <name>
# start the Hub UI/API and Voice Stream server (detached)
drone hubDrone Hub UI-only development (Vite dev server):
bun run drone-hubCommon monorepo commands:
# run all dev tasks in parallel (no caching)
bun run dev
# lint / format across all workspaces
bun run lint
bun run formatRun a single app in dev mode:
# dvm dev (ts-node)
bun run dvm -- --help
# drone dev (ts-node)
bun run drone -- --help
# voice-stream server
bun run voice-stream
# Voice Stream Next backend + web dashboard
bun run vsn
# Voice Stream Next desktop client
bun run vsn:desktop
# voice-stream Android debug APK
ANDROID_HOME=/path/to/android-sdk bun run voice-stream:apk
# looped dev (ts-node)
bun run looped -- --helpThe drone daemon is effectively remote code execution inside a container. It uses a per-drone Bearer token and is intended to be bound to localhost by default.
For details, see apps/drone/README.md.
- Drone:
apps/drone/README.md - DVM:
apps/dvm/README.md - Drone Hub UI:
apps/drone-hub/README.md - Voice Stream:
apps/voice-stream/README.md - Looped:
apps/looped/README.md