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

# 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 Use | MCP | 수동 래퍼 |
|------|--------------|-----|---------|
| 속도 | 느림 | 보통 | 보통 |
| 토큰 효율 | 매우 나쁨 | 나쁨 | 보통 |
| 개발 비용 | 0 (기존 도구) | 높음 | 높음 |
| 확장성 | 높음 (범용) | 낮음 (수동) | 낮음 (수동) |
| 안정성 | 낮음 (UI 변경) | 높음 | 보통 |

---

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

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

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

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

### 7단계 자동 파이프라인

#### Step 1: 분석 (Analyze)

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

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

#### Step 2: 설계 (Design)

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

```yaml
# 자동 생성된 설계
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를 구현합니다.

```python
# 자동 생성 (일부)
@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: 완료

```bash
# 에이전트가 바로 사용 가능
$ 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"** 원칙을 따르기 때문입니다.

### 대체 구현이 아닌 실제 호출

```python
# ❌ 나쁜 예: 모의 구현
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 명령 | 테스트 | 커버리지 |
|---|-----------|--------|---------|--------|---------|
| 1 | GIMP | 이미지 편집 | `cli-anything-gimp` | 107개 | 100% |
| 2 | Blender | 3D 모델링/렌더링 | `cli-anything-blender` | 208개 | 100% |
| 3 | Inkscape | 벡터 그래픽 | `cli-anything-inkscape` | 202개 | 100% |
| 4 | Audacity | 오디오 제작 | `cli-anything-audacity` | 161개 | 100% |
| 5 | LibreOffice | 오피스 문서 | `cli-anything-libreoffice` | 158개 | 100% |
| 6 | OBS Studio | 라이브 스트리밍 | `cli-anything-obs-studio` | 153개 | 100% |
| 7 | Kdenlive | 비디오 편집 | `cli-anything-kdenlive` | 155개 | 100% |
| 8 | Shotcut | 비디오 편집 | `cli-anything-shotcut` | 154개 | 100% |
| 9 | Draw.io | 다이어그램 | `cli-anything-drawio` | 138개 | 100% |
| **합계** | | | | **1,436개** | **100%** |

### 테스트 전략

각 소프트웨어별로:

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

### 실제 사용 예시

```bash
# 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 Use | MCP | CLI-Anything |
|--------|--------------|-----|--------------|
| 첫 호출 토큰 | 1,000+ | 300 | 200 |
| 재호출 토큰 | 1,000 | 300 | 200 |
| 턴 수 | 4-5 | 2-3 | 1-2 |
| **총 토큰 (5회 작업)** | **5,000+** | **1,500** | **1,000** |
| **효율성** | 기준 | -70% | **-80%** |

### 속도 비교 (벤치마크)

```bash
# 작업: 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: 수동 설치 (권장)

```bash
# 저장소 클론
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 마켓플레이스

```bash
/plugin install HKUDS/CLI-Anything
```

### CLI 생성

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

# Blender
/cli-anything ./blender

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

### 사용 예시

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

```bash
# 새 프로젝트 생성
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 렌더링 배치

```bash
# 씬 생성
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: 에이전트 통합

```python
# 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 공식 GitHub](https://github.com/HKUDS/CLI-Anything) - 소스코드, 설치 가이드, 예제
- [Chao Huang 교수 공식 발표](https://x.com/huang_chao4969) - 프로젝트 비전 및 기술 세부사항
- [Yuhao Yang 기여자 설명](https://x.com/itsyuhao) - 핵심 기술 설명 및 벤치마크
- [HKUDS 연구실](https://sites.google.com/view/chaoh) - 연구팀 프로필 및 프로젝트 포트폴리오
- [CLI is the New MCP 논쟁](https://oneuptime.com/blog/post/2026-02-03-cli-is-the-new-mcp/view) - CLI vs MCP 배경
- [Why CLI Tools Are Beating MCP for AI Agents](https://jannikreinhard.com/2026/02/22/why-cli-tools-are-beating-mcp-for-ai-agents/) - CLI 장점 상세 분석

---

## 마무리

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

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

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

