OBSERVE. DECIDE. ACT.
agent-desktop 은 Rust 로 구축된 AI 에이전트를 위한 네이티브 데스크톱 자동화 CLI 입니다. OS 접근성 트리를 통해 모든 애플리케이션에 구조화된 접근을 제공하며, 스크린샷이나 픽셀 매칭 없이 브라우저도 필요 없습니다.
네이티브 Rust CLI
- 빠르고 단일 바이너리이며 런타임 의존성이 없음
- C-ABI cdylib (
libagent_desktop_ffi): 호출마다 CLI 를 포크하는 대신 Python / Swift / Go / Ruby / Node / C 에서 한 번 로드
- 53 개 명령어: 관찰, 상호작용, 키보드, 마우스, 알림, 클립보드, 윈도우 관리
- 진행적 스켈레톤 탐색: 밀집된 애플리케이션에서 얕은 개요 + 표적화된 디릴다운을 통해 78–96% 토큰 감소
- 스냅샷 및 refs: 결정론적 요소 참조 (
@e1, @e2) 를 사용한 AI 최적화 워크플로우
- AX-first 상호작용: 모든 동작이 마우스 이벤트로 되돌아가기 전에 순수 접근성 API 전략을 고갈시킴
- 구조화된 JSON 출력: 오류 코드와 복구 힌트가 포함된 기계 가독성 응답
- 모든 애플리케이션과 호환: Finder, Safari, System Settings, Xcode, Slack — 접근성 트리가 있는 모든 것
설치
npm install -g agent-desktop # 사전 구축 바이너리를 자동으로 다운로드
또는 설치 없이:
npx agent-desktop snapshot --app Finder -i
git clone https://github.com/lahfir/agent-desktop
cd agent-desktop
cargo build --release
cp target/release/agent-desktop /usr/local/bin/
Rust 1.78+ 와 macOS 13.0+ 가 필요합니다.
macOS 는 접근성 권한이 필요합니다. 터미널 앱을 추가하여 System Settings > Privacy & Security > Accessibility 에서 권한을 부여하거나:
agent-desktop permissions --request # 시스템 대화상자 트리거
각 GitHub 릴리스는 CLI 타르볼과 함께 사전 구축된 C-ABI cdylib 을 제공합니다. 프로세스 내 호출이 필요한 호스트 (Python 에이전트, Swift 앱, Go 서비스, Node 도구, Ruby 스크립트, C/C++ 코드) 는 dylib 을 dlopen 하고 agent_desktop.h 에 선언된 함수를 호출하며, 명령어당 포크-실행을 수행하지 않습니다.
플랫폼 아티팩트
| Platform | Artifact |
|---|
| macOS arm64 | agent-desktop-ffi-v<ver>-aarch64-apple-darwin.tar.gz |
| macOS x86_64 | agent-desktop-ffi-v<ver>-x86_64-apple-darwin.tar.gz |
| Linux x86_64 (glibc) | agent-desktop-ffi-v<ver>-x86_64-unknown-linux-gnu.tar.gz |
| Linux arm64 (glibc) | agent-desktop-ffi-v<ver>-aarch64-unknown-linux-gnu.tar.gz |
| Windows x86_64 (MSVC) | agent-desktop-ffi-v<ver>-x86_64-pc-windows-msvc.zip |
각 아카이브에는 lib/libagent_desktop_ffi.{dylib,so,dll}, include/agent_desktop.h, LICENSE, 그리고 짧은 README 가 포함되어 있습니다. 릴리스의 checksums.txt 로 다운로드를 확인하세요:
shasum -a 256 -c checksums.txt
ggh attestation verify agent-desktop-ffi-v*.tar.gz --repo lahfir/agent-desktop
Python 통합
최소한의 Python 라운드트립:
import ctypes
lib = ctypes.CDLL("./lib/libagent_desktop_ffi.dylib")
lib.ad_adapter_create.restype = ctypes.c_void_p
adapter = lib.ad_adapter_create()