Skip to main content

CLI-Anything: GUI 소프트웨어를 AI 에이전트용 CLI로 자동 변환하는 오픈소스 도구 심화 분석

Published 11 min readMarkdown

CLI-Anything: GUI 소프트웨어를 AI 에이전트용 CLI로 자동 변환하는 오픈소스 도구 심화 분석

AI 에이전트가 GIMP로 이미지를 편집하거나 Blender로 3D 모델을 만들려면, 에이전트에게 "소프트웨어를 쓸 수 있는 손"을 줘야 합니다. 홍콩대 HKUDS 연구팀이 공개한 CLI-Anything은 이 문제의 획기적 해결책을 제시합니다. 소프트웨어 소스코드를 분석하여 AI 에이전트 전용 CLI를 자동 생성하는 도구입니다.

TL;DR

  • 핵심: 소프트웨어 소스코드 입력 → 7단계 자동 파이프라인 → AI 에이전트용 CLI 출력
  • 검증: 9개 소프트웨어(GIMP, Blender, Inkscape 등), 1,436개 테스트 100% 통과
  • 성과: 2주 공개 → 2,100+ GitHub Stars
  • 효율성: MCP 대비 토큰 33% 절감 (~200 vs ~300), Computer Use 대비 10배 빠름
  • 개발팀: 홍콩대학교 HKUDS (GitHub Stars 77,000+, Chao Huang 교수)

배경: AI 에이전트가 소프트웨어를 쓰는 기존 방법의 문제점

현재의 세 가지 접근법

1. Computer Use (GUI 에이전트) - 느림, 불안정

AI 에이전트 → 스크린샷 캡처 → 화면 인식 → 마우스 좌표 계산 → 클릭 시뮬레이션 → 다음 스크린샷

토큰 사용: 1,000+ (스크린샷 이미지 인코딩) 속도: 초 단위 지연 (프레임마다 인식) 안정성: UI 변경되면 동작 불가

2. MCP 서버 (Model Context Protocol) - 비용, 개발 필요

소프트웨어 분석 → 프로토콜 설계 → 서버 구현 → 스키마 작성 → 에이전트 호출

토큰 사용: ~300 (스키마 매번 주입) 개발 비용: 소프트웨어마다 전용 개발 필요 확장성: 신규 소프트웨어 추가 시 처음부터 시작

3. 수동 API 래퍼 - 확장성 부족

API 스펙 분석 → 래퍼 코드 작성 → 테스트 → 유지보수 (endless)

확장성: 거의 없음 유지보수: 라이브러리 업데이트마다 수정 필요

세 방법의 공통 문제

항목Computer UseMCP수동 래퍼
속도느림보통보통
토큰 효율매우 나쁨나쁨보통
개발 비용0 (기존 도구)높음높음
확장성높음 (범용)낮음 (수동)낮음 (수동)
안정성낮음 (UI 변경)높음보통

해결책: CLI-Anything의 접근 방식

핵심 아이디어: 자동 CLI 생성

비유: GUI 에이전트가 "로봇이 마우스를 잡고 화면을 보면서 클릭하는 것"이라면, CLI-Anything은 "로봇 전용 리모컨을 자동으로 만들어주는 것"입니다.

소프트웨어 소스코드
    ↓
[7단계 자동 분석 파이프라인]
    ↓
완전히 작동하는 AI 에이전트용 CLI
(테스트, 문서화, 배포 포함)

7단계 자동 파이프라인

Step 1: 분석 (Analyze)

소프트웨어 소스코드를 스캔하고 GUI 동작을 API에 매핑합니다.

GIMP Python-Fu API → 각 함수의 시그니처 추출
                    → 파라미터 유형 분석
                    → 반환값 구조 파악

Step 2: 설계 (Design)

명령어 그룹, 상태 모델, 출력 형식을 설계합니다.

# 자동 생성된 설계
command_groups:
  - name: "project"
    commands:
      - new (width, height, mode)
      - open (filename)
      - save (filename, format)
  - name: "layer"
    commands:
      - add (name, type, color)
      - delete (layer_id)
      - merge (layer1_id, layer2_id)

Step 3: 구현 (Implement)

Click CLI 프레임워크로 REPL 모드, JSON 출력, Undo/Redo를 구현합니다.

# 자동 생성 (일부)
@click.group()
def cli():
    """GIMP CLI for AI agents"""
    pass

@cli.group()
def project():
    """Manage GIMP projects"""
    pass

@project.command()
@click.option('--width', type=int, default=1920)
@click.option('--height', type=int, default=1080)
@click.option('--output', '-o', type=str)
@click.option('--json', is_flag=True)
def new(width, height, output, json):
    """Create new GIMP project"""
    # 실제 GIMP 백엔드 호출
    result = gimp.pdb.gimp_image_new(width, height, RGB)
    if json:
        click.echo(json.dumps({"project_id": result}))
    else:
        click.echo(f"Created project {result}")

Step 4-6: 테스트, 문서화, 배포

포괄적 테스트 스위트, 완전한 문서, setup.py를 자동 생성합니다.

Step 7: 완료

# 에이전트가 바로 사용 가능
$ cli-anything-gimp --help
$ cli-anything-gimp project new --width 1920 --height 1080
$ cli-anything-gimp --json layer add -n "Background"

기술 깊이: Authentic Software Integration 원칙

CLI-Anything이 다른 이유는 "Authentic Software Integration" 원칙을 따르기 때문입니다.

대체 구현이 아닌 실제 호출

# ❌ 나쁜 예: 모의 구현
def gimp_layer_add():
    return {"layer_id": random.randint(1, 1000)}

# ✅ 좋은 예: 실제 GIMP 백엔드 호출 (CLI-Anything의 방식)
def gimp_layer_add(name, type, color):
    # gimp.pdb는 실제 GIMP PDB (Procedural Database)
    layer = gimp.pdb.gimp_layer_new(
        gimp.image_list()[0],  # 현재 이미지
        1920, 1080,           # 크기
        RGBA_IMAGE,
        name, 100, LAYER_MODE_NORMAL
    )
    return {"layer_id": layer.id, "name": layer.name}

효과:

  • 100% 호환성 (실제 소프트웨어 기능과 동일)
  • 새 버전 자동 지원 (소스코드 업데이트되면 CLI도 자동 재생성)
  • 신뢰성 (대체 구현의 버그 없음)

검증: 1,436개 테스트, 100% 통과

검증된 소프트웨어 9개

#소프트웨어도메인CLI 명령테스트커버리지
1GIMP이미지 편집cli-anything-gimp107개100%
2Blender3D 모델링/렌더링cli-anything-blender208개100%
3Inkscape벡터 그래픽cli-anything-inkscape202개100%
4Audacity오디오 제작cli-anything-audacity161개100%
5LibreOffice오피스 문서cli-anything-libreoffice158개100%
6OBS Studio라이브 스트리밍cli-anything-obs-studio153개100%
7Kdenlive비디오 편집cli-anything-kdenlive155개100%
8Shotcut비디오 편집cli-anything-shotcut154개100%
9Draw.io다이어그램cli-anything-drawio138개100%
합계1,436개100%

테스트 전략

각 소프트웨어별로:

  1. 단위 테스트: 각 CLI 명령어 검증
  2. 통합 테스트: 워크플로우 시나리오 (예: 프로젝트 생성 → 레이어 추가 → 저장)
  3. 성능 테스트: CLI 응답 시간, 메모리 사용
  4. 회귀 테스트: 소프트웨어 업데이트 후 호환성

실제 사용 예시

# 1. GIMP를 CLI로 조작 (이미지 처리 파이프라인)
for file in *.jpg; do
  cli-anything-gimp project open "$file" \
    --json | jq '.project_id' > proj_id.txt
  PROJ_ID=$(cat proj_id.txt)

  # 이미지 리사이징
  cli-anything-gimp image resize --project "$PROJ_ID" \
    --width 1920 --height 1080

  # 필터 적용
  cli-anything-gimp filter apply --project "$PROJ_ID" \
    --filter "sharpen" --radius 2

  # 저장
  cli-anything-gimp project save --project "$PROJ_ID" \
    --output "output_${file}"
done

# 2. Blender를 CLI로 조작 (3D 렌더링 배치)
cli-anything-blender project new --output scene.blend
cli-anything-blender model load --project scene.blend --file model.obj
cli-anything-blender render --project scene.blend --format png --output render.png

성능 분석: CLI vs MCP vs Computer Use

토큰 효율 비교

Computer Use 접근 (GUI 에이전트)

[턴 1] "GIMP에서 이미지 리사이징해줘"
  → 에이전트가 GIMP 열기 생각
  → 스크린샷 요청 (1,000 토큰)
  → 화면 분석 ("메뉴가 여기에...")
  → 마우스 클릭 시뮬레이션
  ↓
[턴 2] GIMP 메인 화면 스크린샷
  → (1,000 토큰)
  → "파일 열기 클릭"
  ↓
... (총 4-5턴, 5,000+ 토큰 소비)

MCP 서버 접근

[턴 1] MCP 스키마 주입
  - gimp 서버의 1,200개 메서드 스키마 (~300 토큰)
  - 파라미터 정보, 반환값 타입 등

[턴 2] "image.resize(width=1920, height=1080) 호출"
  → JSON RPC 통신
  → 결과 수신

토큰 사용: 300 + (각 호출 시 스키마 반복 주입) = 300-500

CLI-Anything 접근

[턴 1] `cli-anything-gimp --help`
  → (200 토큰, 한 번만)
  → 에이전트가 모든 명령어 학습

[턴 2] `cli-anything-gimp image resize --width 1920 --height 1080`
  → 직접 실행
  → JSON 결과 (구조화, 파싱 쉬움)

토큰 사용: ~200 (턴당)

비교 표

메트릭Computer UseMCPCLI-Anything
첫 호출 토큰1,000+300200
재호출 토큰1,000300200
턴 수4-52-31-2
총 토큰 (5회 작업)5,000+1,5001,000
효율성기준-70%-80%

속도 비교 (벤치마크)

# 작업: GIMP에서 10개 이미지 리사이징

# Computer Use
실행 시간: 85초 (화면 인식 지연 누적)
레이턴시 (턴당): 17초

# MCP 서버
실행 시간: 12초
레이턴시 (턴당): 3초

# CLI-Anything
실행 시간: 2.3초
레이턴시 (턴당): 0.5초

핵심: CLI가 구조화된 텍스트 입출력이기 때문에 화면 인식 지연 완전 제거.


아키텍처: 어떻게 자동 생성이 가능할까?

소스코드 분석 파이프라인

GIMP 소스코드 (1.5M 줄)
  ↓
[1] 함수 시그니처 추출
    - gimp_image_new(width: int, height: int, type: enum) → Image
    - gimp_layer_new(...) → Layer
    - gimp_drawable_edit_... → bool
  ↓
[2] 의존성 그래프 구성
    - gimp_image_new() → 사전 호출 불필요
    - gimp_layer_new() → gimp_image_new() 필수 (이미지가 있어야 함)
    - gimp_drawable_edit_...() → 레이어 필수
  ↓
[3] 명령어 그룹화

project:

  • new (→ gimp_image_new)
  • open (→ gimp_file_load)
  • save (→ gimp_file_save) layer:
  • add (→ gimp_layer_new)
  • delete (→ gimp_drawable_delete)
    ↓
    [4] 상태 머신 설계
    
    IDLE └→ PROJECT_LOADED ├→ LAYER_SELECTED │ └→ FILTER_APPLIED └→ RENDERED
    ↓
    [5] Click CLI 자동 생성
    ```python
    @project.command()
    @click.option('--width', type=int)
    @click.option('--height', type=int)
    def new(width, height):
    result = gimp.pdb.gimp_image_new(width, height, RGB)
    return result
    
    ↓ [6] 테스트 케이스 생성
    • project new --width 1920 --height 1080 → Image 객체 생성
    • layer add --name "Layer1" → 레이어 추가
    • ... ↓ [7] 배포
    • setup.py 생성
    • PATH에 설치
    • cli-anything-gimp --help 완성 ```

주요 기술 스택

소스코드 분석:
  └─ AST (Abstract Syntax Tree) 파싱
     └─ GIMP의 Python/C 코드 → 함수 시그니처 추출

명령어 설계:
  └─ 그래프 이론 (의존성 분석)
  └─ 상태 머신 (워크플로우 모델링)

생성:
  └─ Jinja2 (코드 템플릿)
  └─ Click (CLI 프레임워크)

테스트:
  └─ pytest + 실제 소프트웨어 백엔드 통합

CLI vs MCP 논쟁: 2026년 개발자 커뮤니티의 뜨거운 주제

Google Workspace CLI 개발자의 통찰

Justin Poehnelt (Google Workspace CLI 개발자):

"CLI의 1차 소비자가 더 이상 사람이 아니라 AI 에이전트다"

논쟁의 배경

2026년 초, 기술 커뮤니티에서 "CLI vs MCP" 논쟁이 핫해졌습니다.

MCP 진영 주장:

  • "표준 프로토콜이 필요하다"
  • "스키마 기반이 더 명확하다"
  • "도구 발견(Tool Discovery)이 자동화된다"

CLI 진영 주장 (CLI-Anything 팀):

  • "대부분의 소프트웨어가 이미 CLI를 지원한다"
  • "소스코드만 있으면 자동으로 생성 가능하다"
  • "토큰 효율과 속도가 MCP보다 낫다"

CLI-Anything의 입장

CLI-Anything은 다음을 보여줍니다:

  1. MCP가 없어도 가능: 자동 분석으로 CLI 생성
  2. 효율성 우위: 토큰 33% 절감
  3. 확장성: 소프트웨어 추가 시간 최소 (자동화)
  4. 신뢰성: 실제 백엔드 호출 (대체 구현 없음)

설치 & 사용 가이드

설치

방법 1: 수동 설치 (권장)

# 저장소 클론
git clone https://github.com/HKUDS/CLI-Anything.git
cd CLI-Anything

# 플러그인 설치
cp -r cli-anything-plugin ~/.claude/plugins/cli-anything

# Claude Code 재로드
/reload-plugins

방법 2: Claude Code 마켓플레이스

/plugin install HKUDS/CLI-Anything

CLI 생성

# GIMP 소스코드 분석 → CLI 자동 생성
/cli-anything ./gimp

# Blender
/cli-anything ./blender

# 다른 소프트웨어
/cli-anything /path/to/software/source

사용 예시

예제 1: GIMP 이미지 처리 배치

# 새 프로젝트 생성
cli-anything-gimp project new \
  --width 1920 --height 1080 \
  --output poster.json

# JSON 출력 (에이전트가 파싱하기 쉬움)
cli-anything-gimp --json \
  layer add -n "Background" \
  --type solid --color "#1a1a2e"

# 필터 적용
cli-anything-gimp filter apply \
  --filter blur --radius 5

# 저장
cli-anything-gimp project save \
  --output final.xcf

예제 2: Blender 3D 렌더링 배치

# 씬 생성
cli-anything-blender project new --output scene.blend

# 모델 로드
cli-anything-blender model import \
  --project scene.blend \
  --file model.obj \
  --scale 2.0

# 카메라 설정
cli-anything-blender camera set \
  --project scene.blend \
  --position "0,5,10" \
  --rotation "45,0,0"

# 렌더링
cli-anything-blender render \
  --project scene.blend \
  --engine cycles \
  --samples 256 \
  --output render.png

예제 3: 에이전트 통합

# Claude Code에서 에이전트가 자동으로 실행
import subprocess
import json

def resize_images_with_gimp(input_files):
    for file in input_files:
        # CLI 실행 → JSON 파싱
        result = subprocess.run(
            ['cli-anything-gimp', 'image', 'resize',
             '--width', '1920', '--height', '1080',
             '--input', file, '--json'],
            capture_output=True, text=True
        )

        data = json.loads(result.stdout)
        print(f"Resized {file} → {data['output_path']}")

개발팀: HKUDS의 신뢰도와 트랙 레코드

Chao Huang 교수

  • 소속: 홍콩대학교 (HKU) Data Intelligence Lab (HKUDS) 디렉터
  • 학문적 영향력:
    • Google Scholar 인용: 11,000+
    • h-index: 55 (매우 높음)
    • 상위 1% 인용 연구자 (Elsevier 선정)

HKUDS 연구실

  • GitHub Stars 합계: 77,000+ (글로벌 Top-200)
  • 대표 프로젝트:
    • LightRAG (29,000+ Stars) - RAG 방식 혁신
    • RAG-Anything - 범용 RAG 도구
    • DeepCode - 코드 이해 모델
    • AutoAgent - 자동 에이전트 생성

신뢰성 평가

지표평가
논문 인용도⭐⭐⭐⭐⭐ (11,000+)
실전 오픈소스⭐⭐⭐⭐⭐ (77,000+ Stars)
커뮤니티 반응⭐⭐⭐⭐⭐ (2,100 Stars in 2주)
기술 깊이⭐⭐⭐⭐⭐ (1,436 테스트)

결론: "논문만 쓰는 연구실"이 아니라, 실무에 바로 적용 가능한 오픈소스를 지속적으로 내놓는 팀입니다.


로드맵과 향후 전망

공식 로드맵

  1. 더 많은 애플리케이션 카테고리 지원

    • CAD 도구 (AutoCAD, Fusion 360)
    • DAW (Digital Audio Workstation)
    • IDE 및 코드 에디터
    • EDA 도구 (전자 설계)
    • 과학/수학 도구
  2. 벤치마크 스위트

    • 에이전트 작업 완료율 측정
    • 성능 비교 프레임워크
  3. 커뮤니티 CLI 하네스

    • 사용자가 기여한 CLI 공유 플랫폼
  4. 다중 에이전트 프레임워크 지원

    • Claude Code (현재)
    • OpenClaw, nanobot, Cursor 등
  5. 비공개 소프트웨어 지원

    • 상용 소프트웨어 API 패키징
    • 웹 서비스 CLI 자동 생성
  6. SKILL.md 생성 (가장 흥미로운 기능)

    • CLI-Anything으로 생성된 CLI들이 에이전트 "스킬"로 인식
    • 에이전트가 도구를 자동으로 발견하고 조합
    • "메타 에이전트" 생태계 형성

미래 비전

[전체 소프트웨어 생태계]
  ├─ GIMP (이미지)
  ├─ Blender (3D)
  ├─ Inkscape (벡터)
  ├─ Audacity (오디오)
  ├─ AutoCAD (CAD)
  ├─ Ableton Live (DAW)
  └─ ... (모든 소프트웨어)
       ↓
       CLI-Anything 자동 변환
       ↓
       각 소프트웨어 전용 "스킬"
       ↓
    AI 에이전트가 자유롭게 조합
       ↓
  "Making ALL Software Agent-Native"

FAQ (자주 묻는 질문)

Q1: CLI-Anything으로 생성한 CLI는 상업적으로 사용할 수 있나요?

A: 네. CLI-Anything은 MIT 라이선스이므로 상업적 사용이 가능합니다. 다만 대상 소프트웨어의 라이선스는 별도로 확인해야 합니다. 예: GIMP (GPL) → 생성된 CLI도 GPL 따름

Q2: 소스코드가 없는 상용 소프트웨어에도 사용할 수 있나요?

A: 현재는 소스코드가 있는 오픈소스 소프트웨어를 대상으로 합니다. 로드맵에 "비공개 소프트웨어/웹 서비스 API 패키징" 지원이 포함되어 있습니다.

Q3: MCP 서버가 이미 있는 소프트웨어라면 CLI-Anything을 써야 하나요?

A: MCP 서버가 잘 구축되어 있다면 그대로 사용해도 됩니다. CLI-Anything을 사용하면 좋은 경우:

  • MCP 서버가 없는 소프트웨어
  • 토큰 효율이 중요한 경우 (33% 절감)
  • 여러 소프트웨어를 동일한 방식으로 통합하고 싶을 때

Q4: 어떤 에이전트 프레임워크와 호환되나요?

A: CLI 호출이 가능한 모든 에이전트 프레임워크와 호환:

  • Claude Code (기본)
  • OpenClaw
  • nanobot
  • Cursor AI
  • 기타 CLI 기반 에이전트

Q5: 생성된 CLI의 성능은 얼마나 좋나요?

A: 대부분 매우 우수합니다:

  • GIMP CLI: 첫 실행 ~500ms, 재실행 ~100ms
  • Blender CLI: 첫 실행 ~2초 (Blender 초기화 비용), 재실행 ~500ms
  • 의존성: 실제 소프트웨어의 성능 = CLI의 성능

참고 자료


마무리

CLI-Anything은 "Making ALL Software Agent-Native"라는 슬로건처럼, 모든 소프트웨어를 AI 에이전트가 자연스럽게 사용할 수 있는 세상을 목표로 합니다.

GUI 시대가 끝나는 것은 아니지만, AI 에이전트에게는 CLI가 모국어입니다. 2주 만에 2,100+ Stars를 받은 것은 개발자 커뮤니티가 이 필요성에 공감하고 있다는 강력한 증거입니다.

AI 에이전트를 활용한 자동화를 고려하고 있다면, CLI-Anything은 검토해볼 가치가 있는 도구입니다. 특히 토큰 효율과 빌드 속도가 중요한 대규모 에이전트 워크플로우에서는 더욱 그렇습니다.

No comments yet. Be the first to comment.

More from this blog