cu-dsh
No description
- Stars
- 0
- Language
- Python
- Created
- Aug 29, 2026
- Updated
- Aug 29, 2026
Introduction
cu-dsh
English · 中文
Private dogfood. Pin one window, read the 0-1000 grid map, then act.
One core, two faces:
- CLI:
python -m cu_dsh perceive|windows|act|config - MCP:
python -m cu_dsh mcp-> http://127.0.0.1:8771/mcp (loopback only; do not bind 0.0.0.0)
8766 may still listen as a leftover instance. Testers use 8771.
Contract
- The grid map is the map. Click / type / drag by
norm(0-1000) or windowxy. - OCR and YOLO are optional and off by default.
- Actions default to dry-run.
--go/go=trueonly when Shawn said so this turn.
Paths: zero hardcoded (M1)
All machine paths resolve from env override > config file > derived default —
no C:\Users\... anywhere in the code. Verify on any machine with:
python -m cu_dsh config
Config file: ~/.config/cu-dsh/config.toml (or CU_CONFIG), template in
config.example.toml — machine allowlist, tailscale host, WSL layout.
Env vars always beat the file:
| Env var | Default |
|---|---|
CU_ROOT | this repo (derived from __file__) |
CU_ENIKK_ROOT | <CU_ROOT>/vendor/enikk (vendored OCR engine) |
CU_SHOT_DIR | <CU_ROOT>/shots |
CU_APPS_JSON | <CU_ROOT>/apps.json (+ per-user override ~/.config/cu-dsh/apps.json, merged by name) |
CU_SCREENPARSER_WEIGHT | <CU_ROOT>/weights/screenparser/best.pt |
CU_PYTHON | PATH probe (python.exe) — used by bin/cu-dsh.sh |
CU_WSL_DISTRO | Ubuntu (UNC path mappings) |
CU_WSL_CHECKOUT / CU_WSL_NVM_BIN / CU_WSL_SESSIONS_REL | config [wsl] / original deployment values |
CU_MACHINE_ALLOWLIST | config [machine] allowlist; empty = MCP serves any host |
CU_TAILSCALE_HOST | config [tailscale] host; empty = no tailscale admission |
CU_CONFIG | ~/.config/cu-dsh/config.toml |
Behavior change vs pre-M1: default shots moved from
C:\Users\jawn\agent-bus\archive\shots\perceiveto<CU_ROOT>/shots. ExportCU_SHOT_DIRto the old path to keep old stamps discoverable.
OCR / YOLO
- OCR uses Enikk RapidOCR
UIParser, vendored atvendor/enikk/(was a sibling checkout). SetCU_ENIKK_ROOTto use an external checkout instead. - YOLO is an optional extra (
--yolo/yolo=true) via ScreenParser (ultralyticsYOLO11-L). That extra is AGPL; keep it optional. - Weights are not in git (downloaded separately). See
weights/README.mdandvendor/enikk/weights/README.md.
Run
python -m cu_dsh windows
python -m cu_dsh perceive --hwnd N
python -m cu_dsh act --stamp STAMP
WSL wrapper (self-locating; Windows python from CU_PYTHON or PATH):
CU_PYTHON=/mnt/c/Users/you/miniconda3/python.exe ./bin/cu-dsh.sh windows
See SKILL.md for the operator contract and BINDINGS.md for the
de-hardcoding worklog (M1-M3 done, M4 pending).
New here? Start with QUICKSTART.md — 5-minute setup to shot a window
and have a local multimodal model describe it (cu-dsh describe).