droid-control
Installation
SKILL.md
Droid Control
Automate terminals, browsers, and desktop apps. Route by the user's requested method first, then load only the mechanics and evidence stages needed.
Ground rules
- Real apps, real environments. Non-deterministic behavior (LLM responses, network latency, variable output) is expected. Handle it with
wait/wait-idle. Never substitute fixtures or mocked data. - Recover from evidence. After a failed or uncertain action, observe current state before retrying. Honor method constraints and permission boundaries; a refusal does not authorize another driver or broader target.
- Atoms are files, not skills. Read each routed atom with the Read tool at
${DROID_PLUGIN_ROOT}/skills/droid-control/atoms/<atom>/ATOM.md(index under Atoms); the Skill tool cannot load them. A bold atom name in this plugin's commands and atoms means that file. Atoms link their own references with paths relative to the atom file; read them on demand. Atom files are not expanded, so wherever one writes the DROID_PLUGIN_ROOT variable, substitute this plugin root:${DROID_PLUGIN_ROOT}(quote it in shell commands). Desktop-use does not require a separately installed cua skill. tctlowns recorded terminal sessions. It wrapsasciinema recaround the PTY; browser and desktop drivers own their separate lifecycles. Never calltuistory launchdirectly. ResolveTCTLto an absolute path only for terminal workflows or worker handoffs.- Isolate every run. Multiple droids may be filming simultaneously on the same machine. Session names and output paths share a global namespace (
/tmp/tctl-sessions/). At the start of every workflow, generate a run ID (RUN_ID=$(date +%s)-$$or similar) and use it as a prefix for all session names and a scoped temp directory for all output files:
Never use bare session names likeRUN_ID="$(date +%s)-$$" RUN_DIR="$(mktemp -d /tmp/droid-run-${RUN_ID}-XXXXXX)" # Session names: -s ${RUN_ID}-before, -s ${RUN_ID}-after # Output paths: ${RUN_DIR}/before.cast, ${RUN_DIR}/after.cast-s demo,-s before,-s after— they will collide with concurrent runs. Separate names and paths do not isolate shared desktop focus or keyboard input. Keep one controller for a visible desktop.