macOS 需给启动 AUV 的终端授予辅助功能、屏幕录制和自动化权限并重启终端;Windows 的 helper 安装命令必须在提权的 PowerShell 中执行;cargo install 和 Nix 安装不含签名的 AUV Helper,需要 helper 时改用 Homebrew、proto 或直接下载 release。
auv
moeru-aiApache-2.0活跃维护跨平台操作系统自动化编排层,用 TypeScript、Rust、Python、Go 的 SDK 统一驱动桌面和手机 GUI 操作,零 token 成本,替代 computer use 方案。
📱🐭 Are we computer use, I guess not, it's Application Use Via... a unified orchestration layer of OS automation, 0 token cost. Supports Linux, macOS, Windows, offering TypeScript / Rust / Python / Go SDK
brew install moeru-ai/tap/auv
auv --versionREADME 未说明 GPU 或显存要求;Linux glibc 版本需 2.36 以上(如 Debian 12、Ubuntu 24.04),不支持 Linux musl。
把 OS 自动化封装成可复用脚本的编排层,像 Playwright 一样操作桌面应用,零 token 成本
跨平台操作系统自动化编排层,用 TypeScript、Rust、Python、Go 的 SDK 统一驱动桌面和手机 GUI 操作,零 token 成本,替代 computer use 方案。
核心能力
- 用可执行脚本替代截图-点击-验证的模型工具循环
- 提供 TypeScript / Rust / Python / Go 多语言 SDK
- 内置 macOS Helper 与 Windows Helper 服务管理
- 通过本地 daemon 保持窗口状态等跨调用上下文
- 附带 OCR 与截图能力用于视觉检查
容易踩的坑
- v0.0.43最新正式版2026-11-04 · 2026-11-04 12:46 UTC
What's Changed
- fix(auv-media-macos): configure the adapter from an empty CMake build dir by @nekomeowww in https://github.com/moeru-ai/auv/pull/477
Full Changelog: https://github.com/moeru-ai/auv/compare/v0.0.42...v0.0.43
- v0.0.42pre-release2026-11-04 · 2026-11-04 11:40 UTC
查看更新说明
What's Changed
- chore(ci): make the crates.io publish resumable under the rate limit by @nekomeowww in https://github.com/moeru-ai/auv/pull/476
Full Changelog: https://github.com/moeru-ai/auv/compare/v0.0.41...v0.0.42
- v0.0.412026-11-04 · 2026-11-04 10:27 UTC
查看更新说明
Breaking changes
- RPC methods follow AIP verb+noun naming (#463). Clients built against 0.0.40 or older need the 0.0.41 SDK.
- Plain
auv invokeandauv mcp servenow run on the local daemon's Runner, starting one when none runs (#475). Useauv --no-daemon …for the old in-process path. WithAUV_ENDPOINTset, CLI calls now run on that daemon's Runner. - Windows:
auv setup windows-helper statusreportsdegradeduntilauv setup windows-helper installis re-run to register theAUV Daemonlogon task (#474).
What's Changed
- feat(auv-driver-windows): bind semantic focus to input cancellation by @3361559784 in https://github.com/moeru-ai/auv/pull/438
- feat(auv-driver-common): retain failed input delivery progress by @3361559784 in https://github.com/moeru-ai/auv/pull/439
- refactor(auv-cli): move the QQ Music operations out of the CLI by @nekomeowww in https://github.com/moeru-ai/auv/pull/456
- chore(ci): verify crates.io packages on pull requests by @nekomeowww in https://github.com/moeru-ai/auv/pull/457
- test(auv-base-evals): verify post-delivery focus refusal by @3361559784 in https://github.com/moeru-ai/auv/pull/440
- chore(docs): add window management v1 and API naming designs by @nekomeowww in https://github.com/moeru-ai/auv/pull/462
- refactor(auv-api-proto): normalize RPC method names and operation ids by @nekomeowww in https://github.com/moeru-ai/auv/pull/463
- fix(auv-cli): call the renamed media RPCs in Windows Runner tests by @nekomeowww in https://github.com/moeru-ai/auv/pull/464
- fix(auv-driver-linux): stop recording focus preparation as a delivery attempt by @nekomeowww in https://github.com/moeru-ai/auv/pull/466
- chore(ci): cache Rust builds and cancel superseded pull request runs by @nekomeowww in https://github.com/moeru-ai/auv/pull/467
- fix(auv-driver-windows): make the driver per-monitor DPI aware by @nekomeowww in https://github.com/moeru-ai/auv/pull/465
- fix(scheduler): enforce strict operation name matching and add schedule_exact by @3361559784 in https://github.com/moeru-ai/auv/pull/459
- fix(windows): validate target app, backend and step app_id before context resolution by @3361559784 in https://github.com/moeru-ai/auv/pull/461
- feat(auv-driver-common): add window state and window management to the drivers by @nekomeowww in https://github.com/moeru-ai/auv/pull/468
- feat(auv-cli): expose window management through Proto, invoke, MCP and the JS SDK by @nekomeowww in https://github.com/moeru-ai/auv/pull/469
- chore(docs): record the alternatives considered for WatchWindows by @nekomeowww in https://github.com/moeru-ai/auv/pull/470
- chore(ci): free disk space for the cached Rust build on Ubuntu by @nekomeowww in https://github.com/moeru-ai/auv/pull/471
- chore(docs): propose the local Runner as the default for auv invoke by @nekomeowww in https://github.com/moeru-ai/auv/pull/472
- fix(auv-api-server): harden the local daemon socket and recover stale sockets by @nekomeowww in https://github.com/moeru-ai/auv/pull/473
- feat(auv-cli): register a per-user daemon logon task in windows-helper setup by @nekomeowww in https://github.com/moeru-ai/auv/pull/474
- feat(auv-cli): use the local Runner by default for invoke and mcp by @nekomeowww in https://github.com/moeru-ai/auv/pull/475
Full Changelog: https://github.com/moeru-ai/auv/compare/v0.0.40...v0.0.41
- v0.0.402026-11-01 · 2026-11-01 07:49 UTC
查看更新说明
What's Changed
- test(windows): add coordinate projection regression coverage by @3361559784 in https://github.com/moeru-ai/auv/pull/435
- fix(auv-cli-invoke): reject out-of-bounds OCR window clicks by @3361559784 in https://github.com/moeru-ai/auv/pull/436
- fix(windows): validate posted mouse client coordinates by @3361559784 in https://github.com/moeru-ai/auv/pull/450
- feat(auv-cli): support Windows doctor diagnostics by @3361559784 in https://github.com/moeru-ai/auv/pull/442
- fix(auv-cli): list Linux bundle files for napi prepublish by @nekomeowww in https://github.com/moeru-ai/auv/pull/453
- feat(auv-driver-windows): add semantic query focus across frontends by @3361559784 in https://github.com/moeru-ai/auv/pull/437
- chore(ci): run macOS checks on macos-15 by @nekomeowww in https://github.com/moeru-ai/auv/pull/455
Full Changelog: https://github.com/moeru-ai/auv/compare/v0.0.39...v0.0.40
- v0.0.392026-10-29 · 2026-10-29 18:40 UTC
查看更新说明
What's Changed
- feat(auv-cli-invoke): enable Windows screen.clickText by @3361559784 in https://github.com/moeru-ai/auv/pull/386
- feat(auv-cli-invoke): declare runner support per invoke command by @3361559784 in https://github.com/moeru-ai/auv/pull/411
- fix(auv-cli-invoke): classify runner-route failures through the shared typed mapping by @3361559784 in https://github.com/moeru-ai/auv/pull/412
- feat(auv-cli-invoke): refuse runner dispatch on explicitly unsupported platforms by @3361559784 in https://github.com/moeru-ai/auv/pull/413
- test(auv-cli): pin runner support notes and wording across CLI help and MCP by @3361559784 in https://github.com/moeru-ai/auv/pull/415
- fix(auv-cli-invoke): classify a missing selected Run as not found by @3361559784 in https://github.com/moeru-ai/auv/pull/416
- test(auv-core): pin the runner failure roundtrip hermetically by @3361559784 in https://github.com/moeru-ai/auv/pull/417
- feat(auv-driver): report post-activation window observations by @3361559784 in https://github.com/moeru-ai/auv/pull/418
- test(auv-driver-windows): ignore the real-clipboard smoke tests by default by @3361559784 in https://github.com/moeru-ai/auv/pull/419
- fix(auv-api-client): derive the DeviceLocal pipe name from the canonicalized store root by @3361559784 in https://github.com/moeru-ai/auv/pull/420
- docs(driver): close out the Windows osu bench line by @3361559784 in https://github.com/moeru-ai/auv/pull/421
- fix(mcp): reject unknown invoke tool arguments by @3361559784 in https://github.com/moeru-ai/auv/pull/422
- fix(auv-cli): name the auv build in the MCP handshake instead of the transport crate by @Fan-xxy in https://github.com/moeru-ai/auv/pull/359
- fix(api-client): reject malformed paired credentials without panicking by @3361559784 in https://github.com/moeru-ai/auv/pull/424
- feat(docs): add
auvskill by @kwaa in https://github.com/moeru-ai/auv/pull/426 - docs(readme): update badges by @kwaa in https://github.com/moeru-ai/auv/pull/427
- fix(auv-driver-windows): reject unsupported operation steps before execution by @3361559784 in https://github.com/moeru-ai/auv/pull/423
- fix(auv-driver-windows): manage input desktop handle lifetime by @3361559784 in https://github.com/moeru-ai/auv/pull/425
- fix(auv-cli): preserve typed selected Run failures in CLI and MCP by @3361559784 in https://github.com/moeru-ai/auv/pull/428
- test(auv-base-evals): add the Windows GUI workflow regression scenario by @3361559784 in https://github.com/moeru-ai/auv/pull/409
- feat(auv-cli): ship the Linux release as a self-contained glibc bundle by @nekomeowww in https://github.com/moeru-ai/auv/pull/397
- fix(auv-cli): link the MSVC C runtime statically in Windows releases by @nekomeowww in https://github.com/moeru-ai/auv/pull/396
- feat(auv-cli): add bounded MCP image retrieval by @3361559784 in https://github.com/moeru-ai/auv/pull/430
- fix(auv-daemon): prevent concurrent Runner deletion races by @3361559784 in https://github.com/moeru-ai/auv/pull/431
- fix(auv-cli-invoke): preserve typed text-click failures on selected Runners by @3361559784 in https://github.com/moeru-ai/auv/pull/432
- chore(docs): correct support matrix references and retired CLI surface by @3361559784 in https://github.com/moeru-ai/auv/pull/434
- test(auv-cli): pin MCP invoke selection and failure contracts by @3361559784 in https://github.com/moeru-ai/auv/pull/433
- fix(auv-cli): carry --credential-stdin through selected invokes; keep the SDK owner endpoint a URI by @nekomeowww in https://github.com/moeru-ai/auv/pull/406
Full Changelog: https://github.com/moeru-ai/auv/compare/v0.0.38...v0.0.39
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
AUV means Application Use Via ....
- Apple Music Application Use Via
auv-apple-music... - macOS Media Control Use Via
auv-media-macos... - Balatro (yes the game Balatro) Application Use Via
auv-game-balatro... - ... more, waiting for your implementation.
Think of it as a programmable computer use, without agents.
Table of Contents
- Getting Started
- Understand AUV
- Why even build AUV?
- Capability Matrix
- Development
- Related
- Acknowledgements
- Special Thanks
- Star History
- License
Getting Started
Install
Install a prebuilt release:
macOS
brew install moeru-ai/tap/auv
auv --version
Alternatively, without Homebrew:
curl -fsSL https://auv.moeru.ai/install.sh | sh
Linux
curl -fsSL https://auv.moeru.ai/install.sh | sh
auv --version
[!NOTE]
Set
AUV_VERSIONorAUV_INSTALL_DIRto change the release version or the install directory (default:~/.local/bin).The glibc Linux release is a full bundle: it includes AUV's private native libraries, the PipeWire client files they need, and the English Tesseract model. It needs glibc 2.36 or newer (for example Debian 12 or Ubuntu 24.04). Additional OCR languages can be supplied through
TESSDATA_PREFIX. Linux musl is not currently supported.
Windows
Scoop
scoop bucket add auv https://github.com/moeru-ai/auv
scoop install auv/auv
auv --version
Manual installation
Download the archive for your architecture:
Extract the archive to a permanent directory. Add that directory to your user
PATH. The archive contains a single auv.exe; the Windows helper is embedded.
Install with proto
Install and configure proto first. Then add the AUV plugin and install the latest release:
proto plugin add auv "https://raw.githubusercontent.com/moeru-ai/auv/main/toolchain/proto/auv.toml" --to global
proto install auv latest --config-mode global --pin global
auv --version
[!NOTE]
AUV Helper.appfor macOS is included in theprotoinstallation. On Windows,auv-helper.exeis embedded inauv.exeand extracted only by the elevated helper setup command.
[!WARNING]
Linux musl is not supported. (But PRs are welcomed!)
Install with Nix
Install Nix 2.27 or later and enable the
nix-command and flakes experimental features. On macOS, install Apple's
build tools first:
xcode-select --install
Then install the default AUV package from this repository:
nix profile install 'git+https://github.com/moeru-ai/auv#default'
auv --version
The git+https transport is required so Nix fetches AUV's Git submodules. The
flake defines source-built packages for Apple Silicon and Intel macOS and for
x86-64 and ARM64 Linux. The package does not support Windows or Linux musl.
The Nix package does not embed the signed AUV Helper.app. On macOS, use
Homebrew, proto, or a direct release download if you need to run
auv setup macos-helper install with the official helper.
Install with Cargo
Prerequisites: Rust and the platform build tools below. AUV includes the Protobuf sources, so Buf is not required.
[!WARNING]
cargo installdoes not include AUV Helper. Use an install method above if you need it.
macOS
Install the Xcode Command Line Tools:
xcode-select --install
cargo install --git https://github.com/moeru-ai/auv auv-cli --bin auv
auv --version
Linux
On Ubuntu or Debian, install the native build dependencies:
sudo apt-get update
sudo apt-get install -y \
pkg-config libclang-dev libxcb1-dev libxrandr-dev libdbus-1-dev \
libpipewire-0.3-dev libwayland-dev libxkbcommon-dev libegl-dev \
libleptonica-dev libtesseract-dev
cargo install --git https://github.com/moeru-ai/auv auv-cli --bin auv
auv --version
[!NOTE] Other Linux distributions can use different package names.
Windows
Install Rust with the MSVC toolchain, Visual Studio Build Tools, and the Windows SDK.
cargo install --git https://github.com/moeru-ai/auv auv-cli --bin auv
auv --version
Setup
macOS
Official macOS releases include the signed AUV Helper.app. On macOS 13 or
later, install it for the current user:
auv setup macos-helper install
auv setup macos-helper status
[!TIP] The installation does not require
sudoor an administrator password.
If macOS requests approval, open the Background Items and Accessibility settings:
auv setup macos-helper open-background-items-settings
auv setup macos-helper open-accessibility-settings
[!NOTE] Projects that integrate AUV can rebrand
AUV Helper.app. They can change its name, icon, bundle identifier, and Apple Developer signing identity. See Shipped helper identity for packaging options.
Grant these permissions to the application that starts AUV, usually your terminal application:
| Permission | Needed for |
|---|---|
| Accessibility | AX tree reads, focused element control, keyboard/pointer automation. |
| Screen Recording | Screenshots, OCR, visual inspection, and evidence capture. |
| Automation | AppleScript/System Events app activation and foreground fallback paths. |
After you change the permissions, restart the terminal. Then run:
auv doctor
auv invoke permission.probe
Windows
[!IMPORTANT] The Windows setup commands require an elevated PowerShell.
auv setup windows-helper install
auv setup windows-helper status
[!NOTE] The setup command extracts the
auv-helper.exethat is embedded inauv.exeinto%ProgramFiles%\AUV. Then it registers that file as the LocalSystemAuvHelperservice. The Helper does not listen on the network. Lock and unlock work through an ordinaryauv servethat runs as the logged-in user. To accept paired Devices from the network, start that daemon with--remote-bind 0.0.0.0:9847. Setup also registers theAUV Daemonscheduled task for the user who runs it. The task starts a local-onlyauv serveat that user's logon, in the interactive session and with limited privileges. If a 0.0.28 Helper is installed, runauv setup windows-helper uninstallfirst, then install again and pair clients again.Evidence level: one installed lock and unlock gate on one Windows 11 host. This is not a general support claim. See the Windows Helper and daemon split.
Local daemon
auv invoke and auv mcp serve run commands through your local AUV daemon
and its Runner, so state such as a window maximize record stays between calls.
If no daemon runs, the first command starts one. It runs as you, accepts only
local connections, keeps its store and traces in your AUV state directory, and
stops 5 minutes after the last command. The command output names the Run and
the store. To run a command in the calling process instead, use
auv --no-daemon invoke <command-id>. AUV_ENDPOINT selects another daemon;
the CLI never starts one for it. On Windows over SSH (Session 0), the CLI
starts the AUV Daemon task in your interactive session instead, so run
auv setup windows-helper install first.
Uninstall
Use the instructions that match your installation method. If a platform Helper is installed, remove it first.
macOS
auv setup macos-helper uninstall
brew uninstall auv
[!NOTE] Helper removal keeps the enrollment data in the login Keychain. It also keeps other AUV data in the Application Support directory.
Linux
rm "$HOME/.local/bin/auv"
rm -rf "$HOME/.local/bin/.auv"
Windows
Run these commands from an elevated PowerShell:
auv setup windows-helper uninstall
scoop uninstall auv
[!NOTE] Helper removal keeps the enrolled PINs in
%ProgramData%. The daemon's own pairing and policy data stays in its store.
If you installed the ZIP manually, remove its directory from the file system.
Then remove that directory from PATH.
Cargo
cargo uninstall auv-cli
Understand AUV
For Cua, agent-browser, and
similar computer-use projects, it is common to execute screenshot, read image, click, type,
wait, and follow-up verification steps in sequence, then ask LLMs or agents to judge the next move.
flowchart LR
A[Agent] --> B[screenshot]
B --> C[read image]
C --> D[decide next step]
D --> E[click]
E --> F[wait]
F --> G[type]
G --> H[verify]
H --> D
Many of those repeated sequences can be squashed into reusable GUI operations. Opening an app, waiting for readiness, filling a form, and checking the result should be callable as one command instead of spending tokens on the same step-by-step loop every time.
Modern agents often use skills or project instructions to orchestrate tool calls, CLIs, and scripts. But built-in computer-use surfaces, such as OpenAI Computer Use or Claude Computer Use, are still primarily interactive model-tool loops, not scriptable GUI automation libraries.
Similar to Playwright, what if we could organize those actions into executable scripts, reusable?
• Ran screenshot
└ saved screen.png
• Ran read image screen.png
└ form is visible
• Ran click "Email"
└ clicked
• Ran type "[email protected]"
└ typed
• Ran screenshot
└ saved after.png
• Ran verify form state
└ ready
pub fn open_and_fill_form(
app: &mut AppSession,
data: FormData,
) -> AuvResult<OperationResult> {
app.open()?;
app.wait_for_ready()?;
app.fill(data)?;
app.verify_submitted()
}
• Ran screenshot
└ saved page-1.png
• Ran OCR visible rows
└ 12 rows
• Ran scroll
└ scrolled down
• Ran OCR visible rows
└ 10 rows, 4 repeated
• Ran guess when to stop
└ uncertain
pub fn scan_visible_rows(
region: &mut WindowRegion,
) -> AuvResult<ScrollScanArtifact> {
region.scan_rows_until_stop()
}
• Ran click target
└ clicked
• Ran screenshot
└ saved after-click.png
• Ran semantic check
└ mismatch
• Ran retry manually
└ repeated tool loop
pub fn verify_and_retry<F>(
mut operation: F,
) -> AuvResult<OperationResult>
where
F: FnMut() -> AuvResult<OperationResult>,
{
retry_until_verified(&mut operation)
}
AUV expects agents to write, test, and improve reusable GUI automation for E2E tests and rapid application actions.
In fact, AUV is not a computer-use agent. It does not ship an agent or harness. It offers tools, CLIs, drivers, and verifiable observable results so agents can build reusable GUI operations.
AUV is meant to work with coding agents and agent products such as:
That means:
- If your agent can call a CLI, AUV can be used as computer use.
- If your agent can write code, AUV can move repeated GUI work into reusable Rust or JavaScript/TypeScript operations. Once a GUI flow is finalized as an operation, repeated execution can approach zero reasoning-token cost.
- AUV's daemon and extension APIs use versioned Protobuf/gRPC contracts. A language with compatible Protobuf/gRPC generators can generate a client for those contracts without AUV inventing another language-specific protocol. First-party SDK quality, packaging, and documentation are still separate support claims: Rust and JavaScript/TypeScript are available today, while a first-party Python SDK remains planned.
The reusable pieces are split by responsibility, but they use one execution model instead of becoming unrelated wrappers:
flowchart LR
A[CLI / MCP / Rust / JS / generated clients] --> B[typed operation]
B --> C[local or remote Device / Runner]
C --> D[capability Driver]
D --> E[direct result]
D --> F[Run trace and artifacts]
E --> G[separate semantic verification]
Drivers own platform capabilities, operation crates own reusable workflows,
and auv-tracing owns Run evidence and artifacts. The visual overlay remains a
separate trust and debugging surface; drawing a cursor never stands in for
input delivery or semantic verification. This package structure lets another
frontend or generated language client reuse the same operations rather than
reimplementing them around the CLI.
Why even build AUV?
AUV born from the grounding knowledge of building general gaming agents for Project AIRI, since 2024, we tried to build agents to allow LLMs to play the following games, you can find how we implement the agents in the following repos:
There are more games we implemented where you can find in Project AIRI organization, but these four requires YOLO, OCR, screen understanding, and computer-use capabilities.
Now you have the framework to build for any applications, games.
Since Vercel published the agent-browser, we fell in love with it and have it assisted agents to build many web projects, but we found that the loop it requires for agents to call agent-browser CLI to execute the commands is too slow and inefficient, while in computer use world, many operations can be repeated thousands of times, just like how Playwright/Vitest would allow us to write E2E test for applications, why don't we expand this idea of writing code to control application to computer use world?
Capability Matrix
What AUV can do, compared to other computer-use projects.
- ✅: yes.
- ❌: no.
- ⚠️: partial support. The cell states the limit.
- ⏳: planned.
- —: not assessed.
Platform support comes from the Native desktop drivers row. Other rows name a platform only when their support is different.
| Capability | AUV | Cua | @oai/sky1bundled | OpenBridge (KWWK core) | Playwright |
|---|---|---|---|---|---|
| Agent model | 💡 BYOA | 💡 BYOA | 💡 agent-free API | 💡 OpenBridge built-in agentKWWK is agent-free | 💡 BYOA + built-in Test Agents |
| Language-agnostic API | ✅ Protobuf/gRPC | ✅ HTTP/WebSocket | ❌ | ❌ | ❌ |
| Scriptable (Rust) | ✅ | ✅ | ❌ | ❌ | ❌ |
| Scriptable (TypeScript) | ✅ | ✅ | ✅ | ❌ | ✅ |
| Scriptable (Python) | ⏳ first-party SDK | ✅ | ❌ | ❌ | ✅ |
| Native desktop drivers | ✅ macOS/Linux/Windows⏳ Android/iOS | ✅ macOS/Linux/Windows | ✅ macOS/Linux/Windows | ✅ macOS❌ Linux/Windows | ❌ browser only |
| CLI | ✅ | ✅ | ❌ | ❌ | ✅ |
| MCP | ✅ | ✅ | ❌ | ❌ | ✅ browser MCP |
| REPL / Codemode | ⏳ planned | ❌ | ✅ Node REPL | ❌ | ❌ |
| Screen Lock/Unlock | ✅2 | ❌ | ❌ | ❌ | ❌ |
| Trace | ✅ Runs, artifacts, OpenTelemetry | ✅ trajectories | ❌ | ❌ | ✅ test traces |
| Screenshot | ✅ | ✅ | ✅ | ✅ | ✅ |
| OCR | ✅ macOS Vision/Linux Tesseract/Windows OCR | ⚠️ requires an external model key | ❌ | ❌ | ❌ |
| Template Matching | ❌ locator✅ result contract | ❌ | ❌ | ❌ | ❌ |
| Accessibility tree | ✅ | ✅ | ✅ | ✅ | ✅ |
| Accessibility actions | ⚠️ focus and selection | ✅ | ✅ | ✅ | ✅ |
| Mouse Click | ✅ | ✅ | ✅ | ✅ | ✅ |
| Mouse Move | ✅ | ✅ | ✅ Linux❌ macOS/Windows | — | ✅ |
| Background pointer input | ✅ macOS❌ Linux/Windows | ⚠️ some apps require foreground | ✅ Linux window target❌ macOS/Windows | ✅ | ✅ browser context |
| Foreground pointer input | ✅ | ✅ | ✅ | ✅ | ✅ |
| Keyboard Hold | ✅ | ✅ | ✅ Linux timed hold❌ macOS/Windows | — | ✅ |
| Keyboard Input | ✅ | ✅ | ✅ | ✅ | ✅ |
| Scroll | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ghost Cursor | ✅ macOS: multiple named cursors3❌ Linux/Windows | ⚠️ one agent cursor | ❌ | ❌ | ❌ |
| Customizable Cursor | ✅ macOS: colors, SVG, shadow⚠️ Windows: colors only❌ Linux | ❌ | ❌ | ❌ | ❌ |
| Scroll-to-list | ✅ library and app integrations❌ generic CLI | ❌ | ❌ | ❌ | ✅ browser lists❌ desktop lists |
| Feedback | ✅ attempts, fallback, disturbance, verification | ✅ outputs and trajectories | ⚠️ state read after action | ⚠️ metadata only | ⚠️ assertions and traces |
| YOLO / Custom Models | ✅ | ✅ | ❌ | ❌ | ❌ |
- Scroll scan is a major reason AUV exists. Most desktop automation stacks
can scroll and capture a screenshot. They do not make page records, row
candidates, crop artifacts, OCR fragments, or clear stop reasons. The current
scroll-scan implementation is contract work. The old
scan window-regionCLI will return when the reusable API is clear. - Feedback is machine-readable evidence for an action. It records the input path, changes, artifacts, fallbacks, and verification result. This evidence tells an operation when to retry, stop, or fail.
Development
auv
cargo fmt --check
cargo check
cargo test
To update vendored Protobuf dependencies, see the Protobuf source distribution reference.
@auv-js/sdk
Prerequisites
[!NOTE]
If you use proto, then
proto install buf proto install node proto install pnpm, this should help you install necessary tools.
pnpm install
pnpm generate:proto
pnpm exec playwright install chromium
pnpm build
pnpm test:run
pnpm lint
pnpm typecheck
Documentation
After you change headings in the root or package READMEs, run pnpm docs:update.
This command updates all README tables of contents.
Useful entrypoints:
auv doctor
auv invoke <command-id> --help
auv serve --help
auv devices list
auv runner --help
auv run --help
auv mcp serve
auv plugin list
Use docs/TERMS_AND_CONCEPTS.md for shared vocabulary. Durable design and
evidence notes live under docs/ai/references/.
Related
[!NOTE]
This project is part of the Project AIRI ecosystem.
Acknowledgements
Special Thanks
Special thanks to all contributors for their contributions to auv ❤️
Star History
License
Footnotes
-
Evidence level: installed package documentation and TypeScript declarations. The inspected package is
@oai/sky0.7.1 from the ChatGPT app. It is not available from the public npm registry. No native execution or native binary inspection supports this column. See the local Sky API research and the background-delivery comparison. ↩ -
Evidence level: configuration-specific installed-host test. This API locks and unlocks an existing login session. It does not sign in a user from the signed-out screen. After any OS restart, sign in to the Device once and start
auv serveagain; AUV does not install the daemon as a service yet. Then remote lock and unlock work for that session. The 2026-10-01 test ran 300 normal-use lock/unlock cycles. The API passed 298 cycles on the first attempt (99.33%). The requested OS state occurred on the first attempt in 299 cycles (99.67%). All 300 cycles ended in theUSABLEstate. The test used dwell times of 15, 20, 25, and 30 seconds. A separate stress test used delays near zero. It measured OS transition readiness, not normal-use reliability. Read the Device lock contract and platform evidence for the typed contract, native mechanisms, and configuration limits. The raw logs remain local. They are not in a durable evidence pack. ↩ -
AUV does not define a numeric cursor limit. Host memory and WindowServer resources limit the actual count. Ghost cursors are visual overlays. They do not deliver input or prove an action result. ↩