ThumbAgent
ThumbAgent
로컬 퍼스트 플랫폼으로, AI 에이전트에 모바일 기기에서의 실질적인 컨트롤을 제공합니다.
한국어 | English
AI 에이전트를 위한 로컬 퍼스트, 크로스 플랫폼 모바일 기기 Skills 플랫폼입니다.
현재 진행 상황
프로젝트는 ITER-0052 Desktop Device Screen & Live Observation을 완료했습니다: 데스크톱 워크벤치가 에이전트 작업 실행 시 기기 화면 패널을 표시하며, 각 턴이 끝날 때마다 실시간으로 업데이트된 실제 스크린샷을 보여줍니다. 작업 보고서는 턴 단위로 스크린샷 증거를 펼쳐서 확인할 수 있습니다. Runtime에는 읽기 전용 콘텐츠 엔드포인트 GET /v1/artifacts/{artifact_id}/content(Bearer 토큰 인증, 스크린샷 PNG만 해당, 단일 파일 최대 8MiB, no-store)가 추가되었으며, task.step_completed 이벤트가 해당 턴의 screenshot_artifact_id를 전달합니다.
데스크톱 워크벤치(Tauri 2)는 로컬 Runtime을 자동으로 시작하고 인증하며, 홈페이지에 통합 준비 상태 진단과 발견된 기기 목록을 표시합니다. 자연어 작업 제출, 실행 타임라인 및 전체 보고서를 지원합니다. 데스크톱 개발에 대한 자세한 내용은 apps/desktop/README.md를 참조하세요. Python 3.11+ 사용:
make check
make runRuntime은 기본적으로 127.0.0.1:8765에서 수신 대기하며, /v1/health, /v1/devices 및 POST /v1/devices/{device_id}/observe를 제공합니다.
Related MCP server: Android MCP Server
MCP Skills 개발자 미리보기
macOS + Codex 데스크톱에서 로컬 실기기 수락 테스트를 수행할 때 원클릭 스크립트를 사용할 수 있습니다:
./scripts/run-mcp-preview.zsh첫 실행 시 스크립트가 모델 키 입력을 요청하며, 모델 키와 안정적인 로컬 Runtime 토큰을 각각 macOS 로그인 키체인에 저장합니다. 이후 시작 시에는 다시 묻지 않습니다. 스크립트는 대상 포트를 점유 중인 이전 mobile_agent.api.server를 안전하게 중지하고, 변경되지 않은 MCP 등록을 재사용한 후 새 Runtime을 시작합니다. Codex/ChatGPT가 이미 실행 중이어도 종료하거나 다시 열 필요가 없습니다. 최초 등록, 명시적 --refresh-mcp, MCP 구성 또는 Tool Catalog 변경 시에만 실행 중인 Codex를 한 번 재시작하고 새 작업을 생성하여 캐시된 MCP 환경을 새로 고쳐야 합니다. 일반적인 Runtime 재시작은 필요 없습니다.
모델 키는 키체인과 Runtime 프로세스 환경에만 들어가며, 저장소나 스크립트 출력에는 기록되지 않습니다. 스크립트는 포그라운드에서 실행되며 Ctrl+C로 Runtime을 중지합니다. Python, ADB, Codex 및 모델 구성 경로만 확인하고 키를 읽거나 MCP 구성을 수정하지 않으려면 다음을 사용하세요:
./scripts/run-mcp-preview.zsh --checkMCP 등록을 강제로 새로 고치거나 미리보기 시크릿을 삭제해야 하는 경우:
./scripts/run-mcp-preview.zsh --refresh-mcp
./scripts/run-mcp-preview.zsh --forget-secrets등록을 새로 고쳐도 키체인의 토큰은 교체되지 않습니다. 대상 포트가 다른 프로그램에 의해 점유된 경우 스크립트는 잘못된 프로세스 종료를 거부합니다. 명령줄에서 명시적으로 mobile_agent.api.server에 속한 프로세스만 자동으로 중지합니다.
Web, CLI 및 MCP가 동일한 Runtime을 공유하도록 하려면 명시적 로컬 토큰으로 서비스를 시작하세요:
MOBILE_AGENT_API_TOKEN=<local-random-token> \
MOBILE_AGENT_ADB_PATH=/usr/local/platform-tools/adb \
make run그런 다음 MCP 호스트에서 stdio Server를 동일한 토큰으로 구성합니다. 예시는 mcp-server.example.json을 참조하세요. MCP 호스트가 실제로 실행하는 명령은 다음과 같습니다:
PYTHONPATH=runtime \
MOBILE_AGENT_API_TOKEN=<same-local-random-token> \
python3.11 -m mobile_agent.mcpMCP는 준비 상태 진단, 기기 및 설치된 앱 확인, 앱 수명 주기, 에이전트 비동기 작업, 작업 조회/취소, 비식별화 로그, 집계 성능 스냅샷, 진단 증거 패키지, 성능 비교 및 로컬 Artifact 보존 정리를 포함한 목표 수준의 도구를 제공합니다. ADB, 임의 Shell, 임의 파일 경로 또는 input.tap과 같은 원자적 도구는 노출하지 않습니다. 확인이 필요한 작업은 MCP 호스트가 사용자에게 매개변수와 영향을 제시하고 확인을 받은 후에만 confirmed=true를 전달할 수 있습니다.
시작 후 통합 준비 상태 진단을 확인할 수 있습니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.runtime_diagnoseGET /v1/readiness 및 Web UI는 Android Gateway, 기기 연결/권한 부여, 세션, 임대 점유 및 수정 제안을 표시합니다. ADB가 설치되지 않았거나 경로가 잘못된 경우에도 Runtime은 진단 인터페이스를 계속 시작하며 더 이상 ADB_NOT_FOUND로 직접 종료되지 않습니다.
단일 기기의 현재 기능, 위험, 확인 요구 사항 및 제한 사항을 확인합니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_inspect <device_id>MCP는 또한 읽기 전용 mobile_list_apps 및 mobile_inspect_app을 제공하여 앱 식별자를 제한적으로 나열하고 단일 앱의 버전, 설치 소스 및 활성화 상태를 조회합니다. APK 경로, 서명, 권한 또는 원시 dumpsys를 반환하지 않으며 앱을 시작하거나 수정하지 않습니다.
로컬 APK 설치는 <data-dir>/apks 디렉토리의 단일 .apk 파일만 허용합니다. 외부 에이전트는 먼저 mobile_prepare_apk_install을 호출하여 파일 이름, 크기, SHA-256, 매니페스트 패키지 ID 및 교체 영향을 포함한 단기 Approval을 받아야 합니다. MCP 호스트가 사용자에게 요약을 제시하고 명시적 확인을 받은 후에만 mobile_install_apk를 호출할 수 있습니다. Approval은 10분 후 만료되며 기본적으로 한 번만 사용할 수 있습니다. Runtime은 URL을 다운로드하지 않으며, split APK 또는 임의 ADB 인수를 허용하지 않습니다.
앱 제거는 별도의 mobile_prepare_app_uninstall → mobile_uninstall_app 2단계 프로세스를 사용합니다. Prepare는 앱 버전, 시스템 앱 여부 및 데이터 삭제 영향을 읽기 전용으로 반환합니다. 시스템 앱이거나 속성을 알 수 없는 앱은 직접 거부됩니다. 사용자가 요약을 다시 명시적으로 확인한 후에만 비동기 제거 작업을 제출할 수 있습니다. 실패하거나 결과를 알 수 없는 경우 자동 재시도하지 않습니다.
앱 수명 주기는 mobile_inspect_app_state, mobile_launch_app 및 mobile_stop_app을 제공합니다. 상태 확인은 프로세스 존재 여부, 포그라운드 여부 및 중지 플래그만 반환합니다. 시작/중지는 비동기 task_id를 반환하며, 비시스템 앱을 중지하기 전에 명시적 확인이 필요합니다. 앱 데이터를 영구적으로 지우려면 먼저 mobile_prepare_app_data_clear를 호출하여 패키지 이름, 버전 및 데이터 삭제 영향을 표시하고 새로운 명시적 확인을 받은 후 mobile_clear_app_data를 호출해야 합니다. 앱 데이터를 지워도 앱이 제거되지는 않으며, 실패하거나 결과를 알 수 없는 경우 자동 재시도하지 않습니다.
명시적 확인 후 최근 로그 스냅샷을 수집합니다(Runtime 시작 시 생성된 로컬 API 토큰 필요):
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_logs_collect \
<device_id> --max-lines 500 --minimum-level info --confirm --token <runtime-token>로그는 먼저 비식별화된 후 최대 1MiB의 로컬 Artifact로 저장됩니다. CLI와 REST는 로그 본문을 반환하지 않습니다.
--async-task를 추가하면 즉시 task_id를 얻을 수 있으며, 통합 실행 상태, 이벤트, 취소 및 작업 보고서를 사용할 수 있습니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_logs_collect \
<device_id> --confirm --async-task --deadline-seconds 60 --token <runtime-token>집계 CPU, 메모리, 배터리 온도 및 시스템 부하 스냅샷을 수집합니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_performance_snapshot \
<device_id> --async-task --deadline-seconds 90 --token <runtime-token>성능 Artifact에는 집계된 JSON 지표만 포함되며 dumpsys 원본, 프로세스 이름 또는 앱 세부 정보는 저장되지 않습니다.
스크린샷, UI 트리, 비식별화된 로그, 집계 성능 및 선택적 앱 상태를 일회성으로 수집하고 SHA-256 매니페스트가 포함된 로컬 ZIP을 생성합니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.diagnostic_bundle_collect \
<device_id> --app-id <package-id> --max-log-lines 500 \
--minimum-log-level info --confirm --token <runtime-token>진단 패키지는 중간 위험에 해당하므로 명시적 확인이 필요합니다. CLI, Web, REST 및 MCP는 Artifact 메타데이터와 안전 요약만 반환하며 스크린샷, UI 트리, 로그 또는 ZIP 콘텐츠를 인라인하지 않습니다. 패키지 내 파일 이름은 고정되어 있고 총 크기는 24MiB를 초과하지 않으며 업로드되거나 외부로 전송되지 않습니다.
로컬 Artifact 사용량을 확인하고 기본 7일 보존 기간을 초과하는 증거를 읽기 전용으로 사전 점검합니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.local_storage
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.local_data_cleanup_prepare \
--retention-days 7 --max-artifacts 500 --token <runtime-token>Prepare는 파일을 삭제하지 않으며 후보 수, 크기, 마감 시간 및 단기 Approval만 반환합니다. 사용자가 영향 요약을 검토하고 다시 명시적으로 확인한 후에만 비동기 정리 작업을 제출할 수 있습니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.local_data_cleanup \
<approval-id> --confirm --token <runtime-token>정리는 Approval에 바인딩된 시스템 생성 Artifact ID, 상대 경로, 크기 및 SHA-256만 허용합니다. 임의 경로를 허용하지 않으며 작업 데이터베이스, 구성, 키 또는 APK를 삭제하지 않으며 자동 백그라운드 실행이나 실패한 작업의 자동 재시도를 수행하지 않습니다.
동일한 기기에서 완료된 두 개의 성능 스냅샷 작업을 비교합니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.device_performance_compare \
<baseline_task_id> <candidate_task_id> --token <runtime-token>웹 작업 보고서는 성공한 스냅샷을 기준선으로 설정하고 다른 스냅샷을 선택하여 비교할 수도 있습니다. 비교 결과는 두 지점 샘플의 값 방향과 안정성 임계값만 나타내며 인과 관계나 성능 회귀를 자동으로 판단하지 않습니다.
adb가 PATH에 없으면 명시적으로 구성할 수 있습니다:
MOBILE_AGENT_ADB_PATH=/usr/local/platform-tools/adbITER-0003은 GET /v1/tools, POST /v1/tools/{tool_id}/invoke 및 POST /v1/skills/app.open/invoke를 추가합니다. input.tap은 중간 위험이며 기본적으로 명시적 확인이 필요합니다.
ITER-0004는 안전한 UI 계층 구조 파싱, 의미론적 Selector, input.tap_element 및 POST /v1/skills/settings.navigate/invoke를 추가합니다. 의미론적 클릭은 중간 위험이며 일치 항목이 고유하지 않으면 실행을 거부합니다.
ITER-0005는 정책에 제약된 input.swipe, input.text, 제한된 의미론적 스크롤 찾기 및 POST /v1/skills/settings.scroll_navigate/invoke를 추가합니다. 스크롤 및 입력 모두 중간 위험이며 기본적으로 명시적 확인이 필요합니다. 비밀번호, 인증 코드, 결제, 계정 보안 및 자동 제출 시나리오는 이번 반복 범위에 포함되지 않습니다.
ITER-0006은 최소 Task Runner, TaskRun 증거 보고서 및 미리보기 동기 엔드포인트 POST /v1/tasks/settings.scroll_navigate/run을 추가합니다. 이 엔드포인트는 기존 settings.scroll_navigate Skill만 래핑하며 이후 비동기 작업 큐 설계를 대체하지 않습니다.
ITER-0007은 프로세스 내 Task Store, TaskEvent 및 조회 엔드포인트 GET /v1/tasks/{task_id}, GET /v1/tasks/{task_id}/events를 추가합니다. 이 Store는 현재 Runtime 프로세스 수명 주기 동안에만 유효하며 재시작 시 복구를 제공하지 않습니다.
ITER-0008은 첫 번째 버전의 CLI 작업 보고서 보기를 추가하여 TaskRun 및 TaskEvent를 사용자에게 읽기 쉬운 보고서로 렌더링합니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.task_report <task_id>이 명령은 로컬 Runtime API에서 작업 및 이벤트를 조회합니다.
ITER-0009는 SQLite Task Store를 추가하여 기본적으로 작업과 이벤트를 <data-dir>/mobile-agent.db에 저장합니다. MOBILE_AGENT_DATA_DIR이 설정되면 데이터베이스는 해당 디렉토리에 있고, 그렇지 않으면 플랫폼 기본 로컬 데이터 디렉토리를 사용합니다.
ITER-0010은 기록 작업 목록을 추가합니다:
PYTHONPATH=runtime python3.11 -m mobile_agent.cli.task_list --limit 20목록은 최근 작업 요약을 표시하며, task_id를 복사한 후 task_report로 세부 정보를 볼 수 있습니다.
ITER-0011은 로컬 Web UI를 추가합니다. Runtime 시작 후 다음을 엽니다:
http://127.0.0.1:8765/ui작업 기록 및 작업 보고서 세부 정보를 볼 수 있습니다.
ITER-0012는 Web UI에 "보안 데모 실행" 버튼을 추가합니다. 이 버튼은 온라인 Android 기기를 선택하고 시스템 설정을 열고 디스플레이/밝기 페이지로 이동하는 고정 작업을 실행합니다. POST 요청은 여전히 로컬 Runtime 토큰을 사용하며 동일 출처 루프백 페이지에서만 트리거할 수 있습니다.
ITER-0013은 모델 통합 전 Agent Loop Preview를 추가합니다: POST /v1/tasks/agent.run. 이 엔드포인트는 결정적 Planner를 사용하여 제한된 결정을 생성하며, 현재는 "시스템 설정의 디스플레이/밝기 페이지로 이동"이라는 안전한 데모 목표만 지원하며 관찰 요약, Planner 결정, Skill 실행 결과 및 증거를 작업 보고서에 기록합니다.
ITER-0014는 Web UI에 자연어 작업 입력 상자와 "에이전트 미리보기 실행" 버튼을 추가합니다. 페이지는 POST /v1/tasks/agent.run을 호출하고 작업이 반환된 후 기록 목록을 새로 고치고 작업 보고서를 엽니다.
ITER-0015는 LLM Planner의 내부 미리보기 계약과 MockLLMPlanner를 추가합니다. 모델 출력은 먼저 구조화된 파싱과 필드 검증을 거쳐야 하며, 그런 다음 Agent Runner의 Skill 허용 목록에 의한 2차 검증을 받아야 합니다. 이번 반복에서는 실제 모델 서비스를 호출하지 않으며 모델 키를 읽지 않습니다.
ITER-0016은 기본적으로 비활성화된 OpenAI 호환 Planner Provider 미리보기를 추가합니다. Provider는 chat-completions 스타일 요청을 구성하고, 주입 가능한 전송을 통해 구조화된 응답을 파싱하며, ITER-0015의 Planner 출력 검증을 재사용할 수 있습니다. 기본 Runtime은 실제 Provider를 활성화하지 않으며 테스트는 네트워크나 모델 키에 의존하지 않습니다.
ITER-0017은 모델 Provider 구성 게이트를 추가합니다: 기본 구성은 여전히 RuleBasedPlanner를 반환합니다. openai_compatible을 명시적으로 활성화하고 base_url, model 및 api_key_ref를 제공하고 주입된 SecretResolver를 통해 키를 해석한 경우에만 OpenAI 호환 Planner를 구성합니다. 이번 반복에서는 기본 Runtime에 연결하지 않으며 실제 키를 읽지 않습니다.
ITER-0018은 모델 Provider 읽기 전용 상태 엔드포인트를 추가합니다: GET /v1/model-provider/status 및 Web UI의 "모델 Provider" 상태 패널. 상태는 활성화 여부, provider, model 및 키 참조 구성 여부만 표시하며 실제 키나 api_key_ref 원본을 반환하지 않습니다. 기본 Runtime은 여전히 실제 모델을 활성화하지 않습니다.
ITER-0019는 로컬 모델 구성을 읽는 기능을 추가합니다: Runtime 시작 시 <data-dir>/model-provider.json 또는 MOBILE_AGENT_MODEL_CONFIG로 지정된 파일을 읽고 MOBILE_AGENT_MODEL_* 환경 변수가 구성 필드를 재정의할 수 있습니다. 구성 파일에는 api_key_ref만 저장되며 개발 미리보기 SecretResolver는 env:MOBILE_AGENT_MODEL_SECRET_* 참조만 해석합니다. 기본 Agent Runner는 여전히 실제 모델을 호출하지 않습니다.
ITER-0020은 모델 Planner를 기본 Runtime에 제어된 방식으로 통합합니다: 구성이 꺼져 있으면 규칙 Planner를 계속 사용하고, 구성이 켜져 있고 키 참조를 해석할 수 있으면 OpenAI 호환 Planner를 사용하며, 구성이 켜져 있지만 사용할 수 없으면 에이전트 작업이 MODEL_UNAVAILABLE로 명시적으로 실패하고 규칙 Planner로 자동 대체되지 않습니다. 모델 출력은 여전히 구조화된 파싱, Skill 허용 목록, 정책 엔진 및 기기 게이트웨이를 거쳐야 합니다.
ITER-0021은 Web UI 모델 Provider 상태 카드를 강화합니다: 미활성화, 연결됨, 구성 사용 불가, 구성 읽음 상태를 구분하고, 사용할 수 없을 때 구성 파일, MOBILE_AGENT_MODEL_CONFIG 및 MOBILE_AGENT_MODEL_SECRET_*를 확인하라는 메시지를 표시합니다. 저장소는 구성 예시를 제공합니다: model-provider.example.json.
ITER-0022는 Agent Preview를 "한 턴의 모델 결정으로 큰 Skill 호출"에서 "다중 턴 모델 결정 + 원자적 도구 실행 + 턴마다 재관찰"로 업그레이드합니다. Planner는 run_tool, finish를 출력할 수 있으며 Runtime은 허용 목록의 도구만 허용하고 finish 시 UI Selector를 통한 결정적 검증을 수행합니다. 이전 run_skill 경로는 호환성을 위해 유지됩니다.
ITER-0023은 에이전트의 각 턴 보고서에 있는 AgentObservationSummary, AgentDecision 및 AgentStepResult를 공개 JSON 스키마로 승격하고 TaskRun 스키마를 업데이트하여 agent.run을 공식적으로 지원합니다. 데스크톱, CLI 및 향후 외부 에이전트는 다중 턴 Observe–Plan–Act 보고서를 안정적으로 사용할 수 있습니다.
ITER-0024는 에이전트 동작 진행 피드백을 추가합니다: Runtime이 도구 전후의 포그라운드 앱과 UI 트리를 비교하여 changed/unchanged 피드백을 다음 턴 모델에 전달하고 동일한 무진행 동작이 다시 전달되는 것을 차단합니다. 웹 보고서는 실제 도구, 매개변수 및 페이지 진행 상황을 동기화하여 표시합니다.
ITER-0025는 모델 측 관찰을 최적화합니다: 의미 없는 레이아웃 노드를 필터링하고, 보이는 텍스트와 조작 가능한 노드를 우선 유지하며, 요약 잘림 메타데이터를 추가하고, UI 텍스트가 모델 프롬프트와 작업 요약에 들어가기 전에 일반적인 전화번호, 이메일 및 긴 숫자 식별자를 비식별화합니다.
ITER-0026은 엄격한 Agent ToolCall 계약, 잘못된 모델 매개변수에 대한 제한된 1회 수리 및 실패한 턴 증거 보존을 추가합니다. 실제 기기에서 "디스플레이 및 밝기로 이동"의 다중 턴 모델 폐쇄 루프가 완료되었습니다.
ITER-0027은 목표 기반 온라인 에이전트 평가 기반을 구축합니다: 실제 모델은 매번 현재 기기 인터페이스에 직면하여 재계획하며, 평가는 목표, 최종 상태, 금지 도구 및 턴 예산만 제약하고 고정 동작 경로를 비교하지 않습니다. 완료된 agent.run은 POST /v1/tasks/{task_id}/evaluate로 평가할 수 있으며 시나리오 예시는 agent-evaluation-scenario.example.json에 있습니다.
ITER-0042는 여러 경로 독립 시나리오를 버전 관리된 Suite로 구성합니다. 먼저 Web 또는 MCP를 통해 Suite의 목표를 각각 실행한 다음 완료된 task_id를 읽기 전용 집계 CLI에 전달합니다. 이 명령은 기존 평가 API만 호출하며 기기 동작을 제출하거나 재생하지 않습니다:
./scripts/report-mcp-evaluation.zsh \
--suite evaluations/android-settings-smoke-v1.json \
--task settings.bluetooth.v1=task_<id> \
--task settings.display-brightness.v1=task_<id> \
--task settings.battery.v1=task_<id>보고서는 전체 성공률, 시나리오별 성공률, 소요 시간 p50/p95, 평균 턴 수 및 도구 수, Provider 재시도, NO_PROGRESS, MODEL_UNAVAILABLE 및 정책 위반 통계를 표시합니다. Suite는 목표와 독립적인 성공 조건을 정의하며 고정 동작 경로를 포함하지 않습니다. 스크립트는 Codex에 등록된 mobile-agent 로컬 연결 정보만 읽으며 토큰을 인쇄하지 않고 기기 작업을 제출하지 않습니다.
ITER-0028은 안정성을 강화합니다: 부작용 없는 목표 위치 지정 및 finish 검증 실패는 실패한 라운드로 모델에 피드백하여 계획을 계속할 수 있습니다. finish는 포그라운드 앱/액티비티와 UI Selector를 결합할 수 있습니다. 상단 시스템 영역과 하단 제스처 영역의 클릭은 전달 전에 차단됩니다. Provider 시간 초과, HTTP, 연결 및 응답 형식 오류는 분류되어 기록되며 재시도 가능한 모델 요청은 최대 한 번 재시도됩니다. 잘못된 Selector는 필드 수준 비식별화 진단만 표시합니다.
모델이 안전에 중요하지 않은 reason을 생략하면 Runtime은 고정 감사 메모를 생성하며 이를 위해 추가 모델 수리 요청을 시작하지 않습니다. 도구, Selector, 정책 및 완료 조건은 여전히 엄격하게 검증됩니다.
ITER-0029는 호출자 선택적 Runtime 소유 성공 조건을 추가합니다. POST /v1/tasks/agent.run은 acceptance를 수신할 수 있으며, 포그라운드 앱 ID, Activity 및 고유 UI Selector의 all-of 의미 체계를 사용하여 모델이 발행한 finish를 검증합니다. 경로는 여전히 모델이 실시간 관찰에 따라 동적으로 계획합니다. 작업 보고서는 goal_acceptance 및 completion_source를 영구 저장하고 표시합니다. 요청 예시는 agent-run-runtime-acceptance.example.json에 있습니다.
ITER-0030은 2단계 목표 컴파일을 추가합니다: POST /v1/goals/compile은 짧은 자연어 목표를 향상된 실행 목표, 가정, 신뢰도 및 선택적 성공 조건을 포함한 검토 가능한 AgentGoalSpec 초안으로 변환합니다. 모델 초안은 agent.run에 전달되기 전에 사용자가 명시적으로 확인해야 합니다. 작업은 여전히 모델이 실시간 관찰에 따라 동적으로 계획하며 고정 동작 경로를 생성하지 않습니다. 예시는 agent-goal-spec.example.json을 참조하세요.
ITER-0031은 비동기 에이전트 실행을 추가합니다: POST /v1/tasks/agent.run/async는 즉시 202 Accepted 및 task_id를 반환하고, GET /v1/task-executions/{task_id} 및 /events는 영구 상태와 턴별 이벤트를 제공하며, POST /v1/task-executions/{task_id}/cancel 요청은 안전 경계에서 취소합니다. 비동기 생성을 위해 Idempotency-Key를 지원합니다. 기존 동기 POST /v1/tasks/agent.run은 호환성을 유지합니다. 로컬 Web UI는 기본적으로 비동기 엔드포인트를 사용합니다.
ITER-0032는 Runtime 공개 쓰기 엔드포인트에 동일 기기 전용 임대를 추가하고 동기/비동기 agent.run에 선택적 deadline_seconds(기본 600초, 범위 1–1800)를 추가합니다. 기기가 다른 작업에 의해 점유된 경우 DEVICE_LOCKED를 반환합니다. 작업이 안전 경계에서 예산을 초과하면 timed_out/TASK_DEADLINE_EXCEEDED로 종료되며 완료된 동작의 증거는 유지됩니다.
ITER-0033은 동일한 데이터 디렉토리에 Runtime 단일 인스턴스 잠금을 추가하고 각 연속 온라인 기기 연결에 session_id를 생성합니다. 작업과 임대는 현재 세션에 바인딩됩니다. 기기가 연결 해제되거나 다시 연결되면 이전 작업은 DEVICE_SESSION_CHANGED로 중지되며 후속 동작이 새 연결로 전송되지 않습니다. Device, TaskExecution, TaskRun 및 Web/CLI 보고서 모두 세션 식별자를 표시합니다.
ITER-0034는 통합 Runtime/Device 준비 상태를 추가합니다: Web과 CLI는 동일한 읽기 전용 계약을 사용하여 ADB, 기기 연결 및 권한 부여, 세션 및 임대 상태를 해석합니다. ready 기기만 Web에서 작업을 시작할 수 있습니다. ADB가 없으면 Runtime은 진단 모드로 전환되어 수리 제안을 제공하며 도구를 자동 설치하거나 기기 구성을 수정하지 않습니다.
ITER-0035는 Device Inspection 및 Capability Catalog를 추가합니다. Web에서 기기를 클릭하여 8가지 기본 V1 기능을 볼 수 있습니다. GET /v1/devices/{device_id}/inspection 및 CLI는 현재 가용성, 위험, 멱등성, 검증 요구 사항, 연결된 도구 및 제한 사항을 표시합니다. Inspection은 기기 검색 및 임대만 읽으며 스크린샷을 찍거나 UI를 읽거나 동작을 실행하지 않습니다.
ITER-0036은 첫 번째 엔지니어링 진단 Skill을 추가합니다: POST /v1/skills/device.logs.collect/invoke. Android Adapter는 제한된 줄 수와 고정 로그 수준만 허용하며 고정 logcat 매개변수를 사용하여 스냅샷을 수집합니다. Skill은 중간 위험 명시적 확인을 요구하고 로컬 비식별화 후 device_log Artifact를 생성합니다. Web과 CLI는 Artifact 메타데이터만 표시합니다. 지속적인 스트리밍 수집, 임의 logcat 필터 및 로그 업로드는 이번 반복 범위에 포함되지 않습니다.
ITER-0037은 로그 수집을 통합 비동기 작업 체인에 연결합니다: POST /v1/tasks/device.logs.collect/async는 202 Accepted를 반환하고 TaskExecution 상태, 증분 이벤트, Idempotency-Key, 취소, 기한, 기기 세션, 임대 및 영구 TaskRun 보고서를 재사용합니다. 웹 로그 버튼은 기본적으로 비동기로 제출하며 동기 Skill 엔드포인트는 계속 유지됩니다. 실행기는 코드에 등록된 에이전트 및 로그 작업 유형만 허용하며 클라이언트는 임의 처리기를 제출할 수 없습니다.
ITER-0038은 device.performance.snapshot을 추가합니다: Android Adapter는 고정 읽기 전용 명령을 통해 총 CPU, 총/사용 가능 RAM, 배터리 잔량/온도, 가동 시간 및 평균 부하를 수집하고 정규화된 값만 로컬 JSON Artifact에 기록합니다. 동기 Skill, 비동기 Task, Web 및 CLI는 동일한 계약을 공유합니다. 앱/PID 세부 정보 및 지속적 샘플링은 제공하지 않습니다.
ITER-0039는 POST /v1/performance-comparisons를 추가하여 동일한 기기의 두 성공적인 성능 스냅샷 TaskRun을 입력으로 사용하여 CPU, 메모리, 배터리, 온도 및 부하의 두 지점 차이와 임계값 추세를 계산합니다. 비교는 완전히 로컬에서 구조화된 작업 증거를 읽으며 기기, 모델 또는 원시 dumpsys에 액세스하지 않습니다. Web과 CLI는 두 지점 샘플이 단독으로 인과 관계나 성능 회귀를 증명할 수 없다고 명시적으로 경고합니다.
ITER-0040은 MCP 2025-11-25 stdio 개발자 미리보기를 추가합니다. MCP 하위 프로세스는 시작된 Runtime의 고정 localhost REST API만 호출하므로 Web과 작업, 세션, 임대 및 정책을 공유합니다. 모든 시간 소요 기능은 비동기적으로 ThumbAgent task_id를 반환합니다. 도구 입력은 공개 계약에서 제공되며 호출 전에 엄격한 검증과 속도 제한을 거치며 도메인 오류는 structuredContent로 반환됩니다. MCP Tasks, 원격 전송, 리소스 또는 프롬프트는 아직 구현되지 않았습니다.
ITER-0047은 device.diagnostics.bundle을 추가합니다. 확인된 비동기 작업은 동일한 기기 세션 및 임대에서 관찰, 비식별화된 로그, 집계 성능 및 선택적 앱 상태를 결합하여 고정 콘텐츠의 로컬 ZIP을 생성합니다. 매니페스트는 4가지 소스 Artifact의 이름, 크기 및 SHA-256을 기록합니다. Runtime은 진단 패키지를 게시하기 전에 소스 무결성과 ZIP 파일 집합을 다시 검증하며, 실패 시 완료된 안전한 Artifact 참조를 유지합니다.
ITER-0048은 로컬 Artifact 저장소 요약 및 2단계 만료 정리를 추가합니다. 미리보기는 시스템 생성 파일만 검사하고 집계 영향 요약을 반환합니다. 제출은 10분 유효, 일회성, 범위 바인딩된 높은 위험 승인만 수락하며 경로, 크기, SHA-256 및 마감 시간을 항목별로 검토한 후 삭제합니다. 비동기 작업은 기기 세션 또는 임대를 획득하지 않으며, 취소 및 기한은 Artifact 간 안전 경계에서 후속 삭제를 차단하고 완료된 삭제 요약을 유지합니다.
실제 Provider가 기본 30초 예산 부근에서 지속적으로 응답을 완료하는 경우 로컬 구성에서 timeout_seconds를 60(허용 범위 1–120)으로 높이거나 MOBILE_AGENT_MODEL_TIMEOUT_SECONDS=60으로 재정의할 수 있습니다. 시간 초과 재시도는 추가 모델 호출을 생성할 수 있으며 작업 보고서에 재시도 횟수가 표시됩니다.
제품 문서
엔지니어링 표준
라이선스
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceA comprehensive MCP server that enables AI agents to interact with Android devices through Android Debug Bridge (ADB), offering 198 tools for device control, app management, diagnostics, and more.1008215Apache 2.0
- FlicenseNot gradedqualityDmaintenanceAn MCP server designed for Android development, enabling AI assistants to directly control Android devices for screenshots, UI analysis, app management, and more.
- AlicenseAqualityCmaintenanceAn MCP server that gives AI agents full control of Android devices and emulators through plain ADB — no companion APK, no extra daemon, no telemetry.2615MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI agents to control Android and iOS devices via natural language, using platform tools like adb and simctl.5,44245Apache 2.0
Related MCP Connectors
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
MCP server for static security analysis of Android source code
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/LiuShiYi1027/ThumbAgent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server