AI 에이전트가 화면을 클릭하면 안 되는 이유: 데스크톱 앱용 로컬 컨트롤 플레인 만들기
화면 자동화는 쉽게 깨지고 권한을 너무 많이 줍니다. KwaFlux는 형식이 정해진 도구와 앱이 다시 구성하는 작업으로 AI 에이전트에게 데스크톱 앱을 맡깁니다.
한눈에 보기
AI 에이전트에게 데스크톱 앱을 맡길 때 가장 쉽게 떠올리는 방법은 사람처럼 화면을 보고 클릭하게 하는 것입니다. 하지만 영상 앱에는 잘못된 설계입니다. 클릭은 쉽게 어긋나고, 에이전트는 마우스가 닿는 곳이면 어디든 건드릴 수 있으며, "내보내기를 클릭했다"는 사실이 내보내기가 제대로 됐다는 증거는 아닙니다.
- AI 에이전트가 스크린샷을 보고 클릭하면서 데스크톱 앱을 조작하는 방식은 데모에서는 통하지만, 쉽게 깨지고 느리며 마우스로 할 수 있는 모든 일을 에이전트에게 허용합니다.
- KwaFlux는 그 대신 구조화된 컨트롤 플레인을 제공합니다. 형식이 정해진 MCP 도구, 호출마다 소수의 매개변수, 그리고 대기열에 넣기 전 앱 안에서 이루어지는 검사입니다.
- 에이전트는 전체 작업을 작성하지 않습니다. KwaFlux 워커가 사용자가 내보내기를 클릭할 때 앱이 쓰는 것과 같은 작업 빌더로 작업을 다시 구성합니다.
- 앱과 공유하는 규칙은 복사가 아니라 생성으로 만들어지며, 둘이 어긋나면 테스트가 실패합니다.
KwaFlux는 다른 길을 택했습니다. 형식이 정해진 요청을 받아 검사하고, 실제 작업은 앱 안에서 구성하는 로컬 컨트롤 플레인입니다.
이 글에서는 이 작업에서 화면 자동화가 부족한 이유, KwaFlux의 계층이 어떻게 맞물리는지, 에이전트가 작은 매개변수만 보내는 이유, 그리고 이 설계가 일부러 하지 않는 일을 알아봅니다.
목차
- AI 에이전트용 컨트롤 플레인이란?
- 화면 자동화와 컨트롤 플레인 비교
- 채팅에서 워커까지의 계층
- 작은 매개변수, 앱이 다시 구성
- 앱과 에이전트가 함께 쓰는 하나의 규칙
- 대기열에 넣기 전에 컨트롤 플레인이 확인하는 것
- 에이전트가 믿을 수 있는 결과
- 이 설계가 포기한 것
- 자주 묻는 질문
AI 에이전트용 컨트롤 플레인이란?
AI 에이전트용 컨트롤 플레인은 에이전트가 애플리케이션에 특정 작업을 요청할 수 있게 하는 좁은 프로그래밍 인터페이스입니다. 요청마다 검사하고, 거부하고, 실행할 권한은 애플리케이션이 계속 갖습니다.
KwaFlux에서는 MCP 도구 모음이 이 인터페이스이고, 권한은 실행 중인 데스크톱 앱에 있습니다. 에이전트는 요청하고, 결정은 KwaFlux가 합니다.
화면 자동화와 컨트롤 플레인 비교
스크린샷을 보고 작업하는 computer use(컴퓨터 조작) 에이전트는 분명한 진전이며, API가 없는 앱이라면 다른 방법이 없습니다. Anthropic도 자사 computer use 도구 문서에서 한계를 솔직하게 밝힙니다. 모델이 "결과를 명시적으로 확인하지 않고 작업이 성공한 것처럼 행동할 때가 있다"고, 드롭다운과 스크롤바는 마우스로 조작하기 "까다로울 수 있다"고, 웹 페이지나 이미지 속 지시가 "사용자의 지시보다 우선할 수 있다"고 적고 있습니다. 그리고 computer use를 "최소 권한만 가진 전용 가상 머신이나 컨테이너"에서 실행하라고 권장합니다.
화질 복구와 변환 도구를 갖춘 KwaFlux처럼 내 컴퓨터에서 돌아가는 영상 앱이라면 이런 한계가 중요해집니다.
| 질문 | 화면 자동화 | KwaFlux 컨트롤 플레인 |
|---|---|---|
| 에이전트는 설정을 어떻게 고르나요? | 스크린샷에서 라벨을 읽고 클릭 | 앱 자체 구성에서 허용값을 가져온, 형식이 정해진 항목을 채움 |
| UI를 새로 디자인하면 어떻게 되나요? | 클릭이 엉뚱한 곳에 떨어질 수 있음 | 도구는 그대로 작동함. 약속은 레이아웃이 아니라 매개변수임 |
| 에이전트는 어디까지 닿을 수 있나요? | 보이는 것 전부: 설정, 계정 페이지, 다른 앱 | 제공된 도구만. 도구마다 앱이 검사함 |
| 작업이 성공했는지 어떻게 아나요? | 화면을 다시 봄 | 작업 ID, 실시간 진행률, 구조화된 결과를 받음 |
| 긴 내보내기를 지켜보는 사람 없이 돌릴 수 있나요? | 스크린샷을 계속 찍어야 함 | 진행률 업데이트를 받으며 작업을 기다리고, 취소할 수도 있음 |
| 컨텍스트 비용 | Anthropic 문서에 따르면 스크린샷 한 장에 입력 토큰 약 1,000~1,800개 | 도구 목록 전체가 텍스트로 약 51 KB이며 한 번만 불러옴 |
마지막 행은 정확한 숫자를 겨루자는 것이 아닙니다. 구조화된 호출은 내보내기가 10초 걸리든 10분 걸리든 비용이 같지만, 화면을 지켜보는 에이전트는 볼 때마다 비용을 낸다는 점이 핵심입니다.
채팅에서 워커까지의 계층
요청은 여섯 계층을 거칩니다. 계층마다 맡은 일이 하나씩 있고, 어느 계층이든 거절할 수 있습니다.

- AI 호스트(Cursor, Claude, Codex 등)가 KwaFlux MCP 서버를 로컬 프로세스로 실행하고 표준 입력과 출력으로 통신합니다.
- MCP 프로세스는 도구 호출을 형식이 정해진 작은 요청으로 바꾸고, 파일을 건드리기 전에 앱과 같은 방식으로 경로를 검사합니다.
- 로컬 채널은 MCP 프로세스와 실행 중인 앱을 잇습니다. Windows에서는 사용자 계정 전용 명명된 파이프, Mac에서는 내 계정만 열 수 있는 소켓입니다. 모든 연결은 토큰 핸드셰이크로 시작합니다. 이 계층은 로컬 채널 글에서 다룹니다.
- 앱 안의 컨트롤 플레인이 요청을 검사합니다. 경로가 로컬 전체 경로인지, 사용자가 맞는 플랜으로 로그인했는지, 작업이 이 에이전트의 것인지, 에이전트가 속도 제한 안에 있는지, 다운로드 설정이 허용하는지 확인합니다.
- 스케줄러는 사용자가 창에서 시작한 작업 옆에 이 작업을 넣으므로, 둘은 같은 GPU와 같은 작업 목록을 씁니다.
- 워커가 전체 작업을 구성하고, 유료 기능이라면 서명된 리스를 확인한 뒤, 엔진을 실행해 결과를 원본 파일 옆에 씁니다.
작은 매개변수, 앱이 다시 구성
나머지 모든 것을 결정한 선택은 이것입니다. 에이전트는 전체 작업 명세를 보내지 않습니다.
KwaFlux 내보내기 작업에는 디코더 설정, 모델 선택, 타일 크기, 인코더 옵션, 색 처리 등 항목이 많습니다. 에이전트가 이 구조 전체를 보낼 수 있다면 두 가지 문제가 생깁니다. 모델은 확인할 수도 없는 값을 지어내게 되고, 오염된 파일 이름이나 웹 페이지로 모델을 조종할 수 있는 사람이라면 누구든 엔진 매개변수 전부에 손댈 수 있게 됩니다.
그래서 도구마다 사람이 고를 법한 항목 몇 개만 받습니다. 입력 파일, 모듈, 앱 목록에 있는 출력 크기, 품질 단계, GIF용 시간 구간 같은 것입니다. 그다음 워커가 사용자가 내보내기를 클릭할 때 앱이 쓰는 것과 같은 작업 빌더로 완전한 작업을 구성하고, 엔진이 실행 시점에 받는 매개변수 계약에 맞게 다듬습니다.
그 결과 에이전트가 시작한 작업과 클릭으로 시작한 작업은 빌더부터 같은 코드를 거칩니다. 다만 일부 도구는 MCP에서 범위가 더 좁기 때문에, 저희는 이를 "동일한 출력"이 아니라 "앱과 같은 매개변수 규칙"이라고 표현합니다. 그 차이는 기능 소개 글에 정리해 두었습니다.
앱과 에이전트가 함께 쓰는 하나의 규칙
같은 규칙을 두 벌 두면 결국 서로 어긋납니다. KwaFlux는 규칙을 두 벌 두지 않습니다.
- MCP가 제공하는 모듈 카탈로그는 각 모듈의 경로, 설정, 허용값까지 앱 화면과 같은 구성 파일에서 생성됩니다. 사진용 변형은 같은 파일의 이미지 섹션에서 가져옵니다.
- 다섯 가지 규칙은 앱 소스 코드에서 MCP 서버용으로 그대로 옮겨 옵니다. 출력 해상도 단계, 압축기의 컨테이너·코덱 선택, 오디오 작업 공간의 알고리즘 매개변수, AI 보이스 체인지의 음성 목록, 감지 규칙 하나입니다.
- 불일치 테스트는 앱 쪽 규칙이 바뀌었는데 MCP 쪽을 다시 생성하지 않았으면 실패합니다.
같은 원리로 도구 설명도 작게 유지하는데, 이 내용은 도구 설계 글에서 다룹니다.
대기열에 넣기 전에 컨트롤 플레인이 확인하는 것
MCP 사양은 서버가 모든 도구 입력을 검증하고, 적절한 접근 제어를 구현하고, 도구 호출에 속도 제한을 두고, 도구 출력을 정제해야 한다("MUST")고 규정합니다. KwaFlux에서는 이 검사들이 MCP 스크립트가 아니라 앱 안에 있으므로, 다른 클라이언트를 쓴다고 해서 건너뛸 수 없습니다.
| 검사 | 규칙 |
|---|---|
| 경로 | 로컬 전체 경로여야 함. 네트워크 경로는 파일을 열기 전에 거부 |
| 출력 | 원본 옆에 기록. 이름이 겹치면 덮어쓰지 않고 name(1).ext로 저장 |
| 로그인과 플랜 | 유료 기능은 로그인과 플랜이 필요하고, 워커가 서명된 리스를 확인. AI 도구 호출과 유료 기능 참고 |
| 소유권 | 에이전트는 자신이 제출한 작업만 일시 중지, 재개, 취소, 재시도할 수 있음 |
| 속도 | 새 작업은 전체 합쳐 분당 10개, 연결당 6개까지. 연결은 8개까지 |
| 메시지 크기 | 메시지 하나는 64 KiB까지. 유휴 연결은 5분 뒤 종료 |
| 다운로드 | 기본적으로 꺼져 있음. 데스크톱 팝업에서 클릭해야 하도록 설정 가능 |
| 마스터 스위치 | 설정 하나로 에이전트 제어 전체를 끔 |
에이전트가 믿을 수 있는 결과
KwaFlux의 모든 도구는 출력 스키마를 선언합니다. 그래서 결과는 모델이 해석해야 하는 문단이 아니라 호스트가 검증할 수 있는 구조화된 데이터입니다. 호스트가 진행 토큰을 넘기면 KwaFlux는 작업이 실행되는 동안 진행 알림을 보냅니다. 사용자가 호스트에서 요청을 멈추면 KwaFlux는 기다리기를 멈추고, 에이전트는 작업을 취소할 수 있습니다.
작업 결과는 작업이 실제로 성공했을 때만 "출력 준비 완료"라고 알리고 출력 파일 이름을 함께 줍니다. 대기 중이거나 실패한 작업이 무언가를 만들어 냈다고 주장하지는 않습니다.
이 설계가 포기한 것
컨트롤 플레인의 범위는 도구의 범위를 넘지 못합니다. 물체 제거나 하늘 교체처럼 KwaFlux 기능 아홉 가지는 누군가 화면에 그리거나, 피사체를 클릭하거나, 미리보기를 보고 판단해야 합니다. 에이전트가 좌표를 짐작하게 하거나 날것의 작업 명세를 받아들일 수도 있었습니다. 앞의 방법은 아무도 예측할 수 없는 결과에 성공했다는 영수증을 붙여 내놓습니다. 뒤의 방법은 이 설계를 안전하게 만드는 경계를 없앱니다. 그래서 이 기능들은 앱에 남기고, 에이전트는 사용자를 앱으로 안내하라는 응답을 받습니다.
이는 제품 차원의 선택이지, 규칙을 느슨하게 풀어서 메우려는 빈틈이 아닙니다.
마치며
에이전트가 앱을 쓰려고 픽셀을 봐야 한다면, 에이전트가 무엇을 하려는지 미리 확인할 수 없습니다. 컨트롤 플레인은 이 관계를 뒤집습니다. 에이전트는 좁고 형식이 정해진 언어로 요청하고, 앱이 자체 코드로 작업을 검사하고 구성하고 실행합니다. KwaFlux에서 에이전트가 시작한 내보내기가 사용자가 클릭한 내보내기와 같은 작업 빌더를 거치는 것도 이 때문입니다.
KwaFlux의 로컬 MCP 서버를 쓰면 Codex, Claude, Cursor 등 MCP 앱이 데스크톱 앱에 실제 작업을 넣을 수 있습니다. AI 처리는 사용자 GPU에서 실행되며 미디어 파일이 처리를 위해 업로드되지 않습니다. Windows 10(64비트, 버전 1809 이상), Windows 11, Apple Silicon 탑재 macOS 12 이상에서 실행됩니다. 파일 가져오기와 앱 둘러보기에는 계정이 필요 없습니다. 내보내기, 변환, 파일 복구, 링크에서 파일 다운로드에만 로그인과 유료 플랜이 필요합니다.
내 실제 영상으로 효과를 확인하세요
KwaFlux를 받고 결제 전에 내 영상으로 효과를 무료로 미리 보세요. 계정이 필요 없고, 내 GPU에서 처리하며 처리를 위해 미디어를 업로드하지 않습니다. 영상 미리보기는 1, 3 또는 5초, 흔들림 보정 미리보기는 5, 15 또는 30초 중에서 고를 수 있습니다.
자주 묻는 질문
computer use와 MCP는 무엇이 다른가요?
computer use는 모델이 스크린샷을 보고 어떤 앱에든 마우스와 키보드 입력을 보내게 합니다. MCP는 앱이 형식이 정해진 특정 도구를 제공하고 모델이 그것을 호출하게 합니다. computer use는 범용이지만 쉽게 깨지고, MCP는 범위가 좁지만 검사할 수 있습니다.
AI 에이전트가 아무 데스크톱 앱이나 제어할 수 있나요?
일부는 그렇습니다. 화면 자동화를 쓰면 대부분의 앱을 조작할 수 있지만, 공급업체들이 문서에 밝힌 안정성 한계가 따릅니다. 안정적으로 제어하려면 앱이 API나 MCP 도구를 제공해야 합니다. 한 가지 예로 영상 앱에서 AI 어시스턴트가 MCP로 할 수 있는 일을 참고하세요.
그냥 모델에게 ffmpeg 명령을 쓰게 하면 안 되나요?
생성된 명령은 모델의 짐작만큼만 정확하고, 실행은 사용자가 해야 하기 때문입니다. 앱 자체 엔진을 호출하면 앱이 이미 검증한 설정을 쓰고, 잘못된 입력은 앱이 거부할 수 있습니다.
MCP 서버가 모델이 보낸 원시 구성을 받아도 되나요?
대개는 받지 않는 편이 낫습니다. 원시 구성은 파일이 저장되는 위치나 프로그램의 동작을 바꾸는 항목까지 모든 매개변수를 모델에게 넘깁니다. 서버가 확장하는 작고 형식이 정해진 입력이 검증하기 더 쉽습니다.
MCP 도구 결과에 스키마가 꼭 필요한가요?
필수는 아니지만 도움이 됩니다. MCP 사양은 도구가 출력 스키마를 선언할 수 있게 하며, 선언한 서버는 그 스키마에 맞는 결과를 돌려줘야 하므로 클라이언트가 결과를 검증할 수 있습니다.
참고 자료
- Anthropic, "Computer use tool" (security considerations; reliability; screenshot token cost) (2026-10-25 확인)
- Model Context Protocol, "Tools" (2026-07-28; output schema; Security Considerations) (2026-07-28 확인)
- Model Context Protocol, "Progress" (2025-11-25; progressToken and progress notifications) (2025-11-25 확인)
- Model Context Protocol, "Cancellation" (2025-11-25; notifications/cancelled) (2025-11-25 확인)


