GIMP·Blender·LibreOffice·OBS… 어떤 GUI 소프트웨어든 7단계 파이프라인으로 에이전트가 다룰 수 있는 CLI로 자동 변환한다.
에이전트가 직면한 인터페이스 절벽.
2026년 현재 AI 에이전트는 코드는 잘 쓰고 글도 잘 짓는다. 하지만 Blender로 3D 모델을 만들거나 GIMP로 포스터를 디자인하는 실제 전문 도구는 거의 못 다룬다. 이유는 단순하다 — 이 도구들은 사람이 마우스로 클릭하는 GUI로 만들어졌고, 에이전트는 키보드로 명령어를 치는 CLI밖에 못 쓰기 때문이다.
기존 해결책은 모두 한계가 있었다. RPA(스크린샷 클릭)는 해상도만 바뀌어도 깨지고, 각 앱의 공식 API는 기능의 10%만 노출하고, "AI용 GIMP-lite" 같은 재구현은 실무에 못 쓴다. CLI-Anything은 "실제 소프트웨어를 그대로 두고, 그 위에 에이전트용 CLI 껍데기만 자동으로 씌우자"는 발상으로 이 문제를 정면 돌파한다.
agent-harness/ 폴더가 있는 이유. HARNESS.md는 7단계 파이프라인의 단일 진실 공급원.한 문장으로 줄이면.
/cli-anything ./blender 한 줄로 5~10분 안에 완전한 CLI 패키지가 나온다."CLI-Anything은 GUI 소프트웨어를 AI 에이전트가 다룰 수 있는 CLI로 자동 변환해주는 "에이전트 어댑터 공장"이다. 사람은 식당에서 메뉴판을 보고 손짓으로 주문할 수 있지만, 전화 주문만 받는 친구(AI 에이전트)는 메뉴판을 못 본다. CLI-Anything은 그 친구를 위해 메뉴를 전화 주문 양식(CLI 명령)으로 자동 번역해주는 통역사 역할이다.
핵심은 — 18개 이상의 실제 앱에 적용해 2,461개 테스트 100% 통과로 검증됐고, 생성물은 JSON 출력·REPL 모드·단위/E2E 테스트까지 포함된 완전한 Python 패키지라는 점. 홍콩대 Data Intelligence Lab(HKUDS) 작품.
기존 한계 + 경쟁 우위 + 생태계 야심.
기존 세 가지 해결책은 모두 부족했다. CLI-Anything의 답은 단순하다 — 흉내내지 말고 진짜를 부르자.
| 기존 방식 | 치명적 문제 |
|---|---|
| GUI 자동화 (RPA) | 스크린샷 보고 클릭 — 화면 해상도·테마만 바뀌어도 깨짐 |
| 각 앱별 공식 API | API 자체가 없거나, 있어도 기능의 10%만 노출 |
| 다운그레이드된 재구현 | "AI용 GIMP-lite" 같은 장난감 — 실무에 못 씀 |
CLI-Anything은 Blender는 그대로 Blender를 부르고, LibreOffice는 그대로 LibreOffice를 호출한다. 기능 손실 0%, 호환성 100% — 이게 진짜 차별점이다.
비슷한 시도(예: 단순 LLM 프롬프트 자동 생성)는 결과 품질이 들쭉날쭉했다. CLI-Anything은 7단계를 고정 SOP(Standard Operating Procedure)로 박아넣어 HARNESS.md 한 파일로 표준화했다. 18개 이상의 앱에 적용해 2,461개 테스트 100% 통과라는 검증된 메트릭이 가능해진 이유다.
홈페이지 슬로건이 인상적이다 — "Today's Software Serves Humans. Tomorrow's Users will be Agents." (오늘의 소프트웨어는 사람을 위한 것, 내일의 사용자는 에이전트). 별도로 CLI-Hub라는 npm/PyPI 같은 중앙 레지스트리를 운영해서 cli-hub install 한 줄로 누가 만든 CLI든 가져다 쓸 수 있게 했다. 생태계를 노리는 그림이다.
| 비교 대상 | 한계 | CLI-Anything의 우위 |
|---|---|---|
| Browser-Use / OS-Atlas | 픽셀 클릭 기반 GUI 자동화 — 깨지기 쉬움 | 명령어 호출 — 안정성·속도 압승 |
| LangChain Tools | 사람이 매번 도구 wrapper 직접 작성 | 코드베이스만 던지면 끝 |
| 단순 MCP 서버 | 플랫폼별 따로 작성 | SKILL.md까지 자동 생성, 다중 플랫폼 동시 지원 |
코어 · 에이전트 통합 · 백엔드 어댑터 · 출력 포맷.
--help 자동 생성pip install -e .로 PATH 자동 등록같은 기능을 다섯 플랫폼에 동시 배포한다. 어댑터 패턴의 모범 사례.
| 플랫폼 | 통합 방식 | 설치 명령 |
|---|---|---|
| Claude Code | 플러그인 마켓플레이스 | /plugin install cli-anything |
| OpenCode | 커스텀 슬래시 커맨드 | cp opencode-commands/*.md ~/.config/opencode/ |
| OpenClaw | SKILL.md 기반 스킬 | cp openclaw-skill/SKILL.md ~/.openclaw/skills/ |
| Codex | 스킬 패키지 | bash codex-skill/scripts/install.sh |
| Qodercli | 플러그인 등록 | bash qoder-plugin/setup-qodercli.sh |
| Goose | CLI provider 경유 | Claude Code provider 설정 후 사용 |
이게 CLI-Anything의 진짜 노하우다. 각 앱마다 다른 방식으로 진짜 프로그램을 부른다.
| 소프트웨어 | 백엔드 호출 방식 |
|---|---|
| GIMP | Pillow + GEGL/Script-Fu 스크립트 주입 |
| Blender | bpy Python API (Blender 내장 인터프리터) |
| Inkscape | SVG/XML 직접 조작 (Inkscape 호출 없이도 동작) |
| LibreOffice | ODF 파일 생성 + libreoffice --headless 변환 |
| OBS Studio | obs-websocket 프로토콜 + JSON 씬 파일 |
| Kdenlive / Shotcut | MLT XML 직접 작성 + melt 렌더러 |
| Zoom | Zoom REST API + OAuth2 |
| Ollama / AdGuard | REST API 래핑 |
| ComfyUI | ComfyUI REST API 호출 |
--json 플래그로 모든 명령이 구조화 출력. 에이전트 소비용전체 구조도 → 핵심 패턴 → 7단계 파이프라인.
┌─────────────────────────────────────────────────────────────────┐
│ 사용자 (개발자) — Claude Code 등 │
└───────────────────────────┬─────────────────────────────────────┘
│ /cli-anything ./gimp
▼
┌─────────────────────────────────────────────────────────────────┐
│ CLI-Anything Plugin (HARNESS.md SOP) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 7-Phase Auto Pipeline │ │
│ │ 1 Analyze → 2 Design → 3 Implement → 4 Plan Tests │ │
│ │ 5 Write Tests → 6 Document → 6.5 SKILL.md → 7 Publish │ │
│ └──────────────────────────────────────────────────────────┘ │
└───────────────────────────┬─────────────────────────────────────┘
│ generates
▼
┌─────────────────────────────────────────────────────────────────┐
│ agent-harness/ (생성된 Python 패키지) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Click CLI │ │ ReplSkin │ │ Backend Adapter │ │
│ │ (commands) │ │ (REPL UI) │ │ (bpy / API / XML 조작) │ │
│ └─────────────┘ └─────────────┘ └────────────┬────────────┘ │
│ │ │
│ ┌─────────────────────────────────┐ │ │
│ │ Tests (단위/E2E/subprocess) │ │ │
│ └─────────────────────────────────┘ │ │
│ ┌─────────────────────────────────┐ │ │
│ │ SKILL.md (에이전트 자동 발견용) │ │ │
│ └─────────────────────────────────┘ │ │
└─────────────────────────────────────────────────┼─────────────────┘
▼
┌──────────────────────────┐
│ 실제 소프트웨어 백엔드 │
│ (Blender / GIMP / OBS…) │
└──────────────────────────┘
"흉내내지 않고 진짜를 부른다." LibreOffice CLI가 PDF를 만들 때 실제 LibreOffice 바이너리를 headless 모드로 호출한다. 그래서 백엔드가 없으면 테스트가 skip이 아니라 fail 된다 — 가짜 기능을 못 만들게 강제하는 설계 철학.
같은 CLI가 두 가지 모드로 동작한다.
cli-anything-gimp layer add ... (스크립트/파이프라인용)모든 작업은 프로젝트 파일(JSON)에 저장된다. --project report.json으로 같은 상태를 여러 명령이 공유. 덕분에 undo/redo, 세션 복원, 병렬 작업 모두 가능해진다.
--json 플래그 하나로 모든 출력을 머신 친화적 형식으로 전환. 에이전트는 --help와 which 표준 명령만으로 능력을 발견한다.
pip install -e .만 하면 PATH에 자동 등록되고, 각 패키지 안의 SKILL.md가 REPL 배너에 절대경로로 표시되어 에이전트가 "스킬 파일이 여기 있다"는 걸 즉시 안다.
"Blender를 AI가 못 쓰니까, AI 친화적인 미니 3D 도구를 새로 만들자"는 유혹. 그러면 결국 진짜 Blender의 기능 10%짜리 장난감이 되고, 사용자는 결과물의 품질에 실망한다.
CLI-Anything은 GUI는 잘라내고 CLI 껍데기만 새로 씌운다. Blender의 모든 기능을 bpy API로 그대로 부르고, LibreOffice는 --headless로 실제 바이너리를 호출한다. 기능 손실 0%.
| Phase | 이름 | 하는 일 |
|---|---|---|
| Phase 1 | Analyze | 소스코드 스캔, GUI 액션 → API 매핑, 의존성 파악 |
| Phase 2 | Design | 명령 그룹·상태 모델·출력 포맷 아키텍처 설계 |
| Phase 3 | Implement | Click CLI 작성, REPL/JSON/undo-redo 구현 |
| Phase 4 | Plan Tests | TEST.md에 단위+E2E 테스트 계획 명시 |
| Phase 5 | Write Tests | 실제 테스트 코드 작성 + 진짜 백엔드로 검증 |
| Phase 6 | Document | TEST.md에 결과 업데이트, README 정리 |
| Phase 6.5 | SKILL.md | Click 데코레이터에서 메타데이터 추출 → 에이전트용 스킬 파일 |
| Phase 7 | Publish | setup.py 생성, pip install로 PATH 등록 |
어디에 뭐가 있는지.
cli-anything/ ├── cli-anything-plugin/ # Claude Code 플러그인 본체 │ ├── HARNESS.md # 7단계 SOP "성경" │ ├── repl_skin.py # 모든 CLI가 공유하는 REPL UI │ ├── commands/ # 슬래시 커맨드 정의 │ │ ├── cli-anything.md # 메인 빌드 커맨드 │ │ ├── refine.md # 점진적 개선 │ │ ├── test.md # 테스트 실행 │ │ └── validate.md # 표준 준수 검증 │ └── scripts/ │ ├── codex-skill/ # Codex용 어댑터 ├── openclaw-skill/ # OpenClaw용 SKILL.md ├── opencode-commands/ # OpenCode 슬래시 커맨드 ├── qoder-plugin/ # Qodercli 플러그인 │ ├── gimp/agent-harness/ # 16개 앱 어댑터 (각각 별도) ├── blender/agent-harness/ ├── inkscape/agent-harness/ ├── audacity/agent-harness/ ├── libreoffice/agent-harness/ ├── obs-studio/agent-harness/ ├── kdenlive/agent-harness/ ├── shotcut/agent-harness/ ├── zoom/agent-harness/ ├── drawio/agent-harness/ ├── mermaid/agent-harness/ ├── anygen/agent-harness/ ├── comfyui/agent-harness/ ├── notebooklm/agent-harness/ ├── adguardhome/agent-harness/ ├── ollama/agent-harness/ ├── mubu/agent-harness/ │ ├── docs/hub/ # CLI-Hub 정적 페이지 ├── skill_generation/tests/ # SKILL.md 생성기 테스트 ├── registry.json # CLI-Hub 중앙 레지스트리 ├── CONTRIBUTING.md # 새 앱 추가 가이드 └── README.md / _CN / _JA # 다국어 README
agent-harness/ 내부 표준 구조{software}/agent-harness/
├── cli_anything/{software}/ # 실제 Python 패키지
│ ├── cli.py # Click 엔트리포인트
│ ├── core/ # 도메인 로직
│ ├── utils/
│ │ ├── repl_skin.py # 공통 REPL (복사본)
│ │ └── backend.py # 백엔드 어댑터 (앱별 다름)
│ ├── skills/SKILL.md # 자동 생성된 에이전트 스킬
│ └── tests/
│ ├── test_core.py # 단위 테스트
│ ├── test_e2e.py # 진짜 백엔드 호출 테스트
│ └── test_cli.py # subprocess.run 검증
├── setup.py # pip 패키지 정의
├── README.md
└── TEST.md # 테스트 계획 + 결과
HARNESS.md가 단순 README가 아니라 LLM에게 던지는 실행 명세서다. "Skill-as-Code" 패턴 — 이 파일 하나가 7단계 파이프라인의 단일 진실 공급원(SoT) 역할을 한다.
각 어댑터는 완전 독립된 Python 패키지라 하나만 골라 설치/배포 가능. registry.json은 CLI-Hub의 중앙 인덱스로, PR로 항목 하나 추가하면 Hub가 자동 업데이트된다.
기술 영역마다 무엇을 가져갈지.
이 레포의 모든 CLI는 Click으로 작성된다. 데코레이터 기반 명령 그룹화, 자동 --help 생성, 타입 변환을 한 번에 익힐 수 있다.
import click
@click.group()
@click.option('--json', 'json_mode', is_flag=True, help='JSON 출력')
@click.pass_context
def cli(ctx, json_mode):
ctx.obj = {'json': json_mode}
@cli.group()
def project():
"""프로젝트 명령 그룹"""
@project.command()
@click.option('--width', type=int, default=1920)
@click.option('--height', type=int, default=1080)
@click.option('-o', '--output', required=True)
def new(width, height, output):
"""새 프로젝트 생성"""
click.echo(f"Created {width}x{height} project: {output}")
실습 아이디어: 자주 쓰는 도구 하나(가계부 엑셀, 자동 SSH 접속)를 Click 기반 CLI로 만들어보기. --json 플래그도 같이.
Claude Code, OpenCode, Codex 등 모던 AI 에이전트는 "SKILL.md"라는 표준 파일로 능력을 발견한다. CLI-Anything은 이걸 코드 메타데이터에서 자동 추출해준다.
--- name: cli-anything-gimp description: GIMP 이미지 편집을 위한 에이전트 CLI --- ## Commands - `cli-anything-gimp project new` — 새 이미지 생성 - `cli-anything-gimp layer add` — 레이어 추가 ## Usage 사용자가 "포스터 만들어줘" 요청 시: 1. project new --width 1920 ... 2. layer add --type text ...
실습 아이디어: 본인의 작업 흐름 하나를 SKILL.md로 작성해보고 Claude Code에 install. 호출되는지 검증.
같은 기능을 Claude Code 플러그인, OpenCode 커맨드, OpenClaw 스킬, Codex 스킬, Qodercli 플러그인 다섯 곳에 동시 배포하는 방법을 보여준다. 각 플랫폼의 인터페이스 차이를 추상화하는 어댑터 패턴을 코드로 학습할 수 있다.
| 레이어 | 역할 | 대상 |
|---|---|---|
| Unit | 로직 검증 | 합성 데이터로 함수 단위 |
| E2E (native) | 파일 포맷 검증 | ODF/MLT/SVG 등이 정상 생성되는가 |
| E2E (true backend) | 진짜 호출 | 실제 LibreOffice → PDF, Blender → PNG |
| CLI subprocess | 설치 검증 | subprocess.run("cli-anything-gimp --json ...") |
실습 아이디어: 본인 프로젝트에 이 3중 구조 도입. 특히 "백엔드 없으면 fail" 패턴은 통합 테스트 신뢰도를 크게 올려준다.
Phase 7에서 Jinja2 템플릿으로 setup.py가 자동 생성된다. entry_points로 cli-anything-{name} 명령을 PATH에 등록하는 패턴이 핵심.
16개 CLI가 모두 같은 룩앤필을 갖도록 한 모듈에 집중. prompt_toolkit, rich, ANSI 컬러로 통합 UX를 만드는 좋은 케이스 스터디다.
의존성 + 운영체제별 주의.
| 항목 | 요구사항 | 비고 |
|---|---|---|
| Python | 3.10 이상 | match-case 등 신문법 사용 |
| Click | 8.0 이상 | 그룹·서브커맨드 핵심 의존 |
| AI 에이전트 | 1개 이상 | Claude Code · OpenCode · OpenClaw · Codex · Qodercli 중 |
| 대상 소프트웨어 | 설치 필수 | Blender CLI를 쓰려면 진짜 Blender가 깔려 있어야 함 (가짜 안 됨) |
| RAM | 일반 노트북 | CLI 자체는 가벼움 · 백엔드 앱의 요구사항을 따름 |
Claude Code가 bash로 셸 명령을 실행하기 때문에 Windows에서는 Git for Windows(bash + cygpath 포함) 또는 WSL이 필수다. 그렇지 않으면 cygpath: command not found 에러로 실패한다.
난이도별 실습 — Easy → Hard.
1) pip install cli-anything-hub 2) cli-hub list로 카탈로그 탐색 3) 마음에 드는 앱(예: ollama) install 4) cli-anything-ollama --help로 명령 탐색 5) 본인 ollama 모델로 prompt 실행.
배우는 것: CLI-Hub 사용법, 자동 PATH 등록, JSON 출력 구조 (예상 30분)
1) Claude Code에서 /plugin marketplace add HKUDS/CLI-Anything 2) /plugin install cli-anything 3) 본인이 만든 작은 Python 프로젝트를 /cli-anything ./내프로젝트로 변환 4) 생성된 HARNESS.md와 SKILL.md 정독.
배우는 것: 7단계 파이프라인 실제 흐름, 자동 생성물의 구조 (예상 1시간)
1) blender/agent-harness/ 폴더를 복사 2) 본인이 좋아하는 앱(VS Code·Notion·Obsidian)에 맞게 수정 3) backend.py 호출 방식 결정 (REST API? 파일 직접? subprocess?) 4) 3중 테스트 작성 5) PR 양식(.github/PULL_REQUEST_TEMPLATE.md) 따라 본 레포에 PR 시도.
배우는 것: 어댑터 패턴 적용, 백엔드 호출 방식 선택 (예상 반나절~1일)
1) skill_generation/ 폴더 정독 2) 본인의 Click CLI에서 데코레이터 메타데이터를 추출하는 코드 작성 3) Jinja2 템플릿으로 SKILL.md 렌더링 4) 51개 기존 테스트 케이스를 검증 기준으로 활용.
배우는 것: Click 내부 구조, 코드 메타데이터 자동 추출 (예상 1~2일)
1) Cursor/Windsurf/Aider/Continue 중 본인이 자주 쓰는 도구 선정 2) opencode-commands/를 reference로 슬래시 커맨드 패턴 이식 3) 해당 플랫폼의 스킬·툴 정의 방식 분석 4) 5개 플랫폼 비교표 작성.
배우는 것: 멀티 플랫폼 추상화, 스킬 인터페이스 비교 분석 (예상 2~3일)
주차별로 따라가면 CLI 패턴 마스터.
Click 공식 튜토리얼 완주, argparse와 비교 → 본인 도구 1개 CLI화. 그룹·서브커맨드·옵션 타입 변환 익히기.
JSON 출력 패턴, dataclasses + asdict(), Pydantic 입문 → 같은 명령이 휴먼/머신 모드 둘 다 지원하도록 구현.
pytest 단위 → E2E → subprocess 흐름 직접 구현. fixture 패턴, "백엔드 없으면 fail" 정책 적용.
setup.py / pyproject.toml, entry_points로 PATH 등록, PyPI 첫 배포까지.
prompt_toolkit, rich로 인터랙티브 셸 만들기 — CLI-Anything의 repl_skin.py 정독하고 본인 CLI에 이식.
Anthropic Agent Skills, MCP 프로토콜, SKILL.md 작성법. 본인 도구에 YAML 헤더 추가하고 Claude Code에서 호출 검증.
플러그인 마켓플레이스 구조, 슬래시 커맨드, 직접 플러그인 1개 빌드·배포.
좋아하는 도구 1개를 CLI-Anything 패턴으로 처음부터 끝까지 변환 → 본 레포에 PR 제출.
자주 마주칠 단어들.
python이 대표 예. CLI-Anything의 모든 CLI에 내장.agent-harness/ 폴더가 있는 이유.@click.command() 데코레이터만 붙이면 명령·옵션·도움말이 자동 생성됨.libreoffice --headless로 PDF 변환만 수행. CLI-Anything이 거의 항상 사용.melt로 렌더링.bpy.ops.mesh.primitive_cube_add()로 큐브 생성 가능.pip install cli-anything-hub 한 줄로 누가 만든 어댑터든 가져다 씀.--project report.json으로 명령들이 같은 상태 공유 → undo/redo·세션 복원 가능.공식 · 명세 · 학습 리소스.
pip install cli-anything-hub → cli-hub list. 16개 어댑터 중 본인이 쓰는 도구가 있는지 확인, 하나 골라 install 후 --help 정독./plugin marketplace add HKUDS/CLI-Anything → /plugin install cli-anything. HARNESS.md도 같이 띄워 7단계 SOP를 머리에 새긴다./cli-anything ./내프로젝트. 5~10분 후 생성된 agent-harness/ 폴더를 끝까지 정독 — 어떤 파일들이 자동 생성되었는지 체득.--json 없이 한 번, --json으로 한 번 호출해 출력 차이를 본다. 인자 없이도 실행해 REPL 모드 체험.blender/agent-harness/ 복사로 시작해 어댑터 작성. 3중 테스트 통과시키고 본 레포에 PR 제출 — 진짜 학습은 여기서 일어난다.