AI 에이전트가 화면(GUI) 대신 터미널 명령(CLI)으로 일하는 방식이자, 에이전트가 쓰기 좋게 CLI를 다시 설계하는 흐름이다. git·빌드·테스트 같은 로컬 작업은 CLI로 맡기고, 인증이 필요한 원격 서비스는 MCP로 나누는 게 일반적이다.
| 방식 | 에이전트 입장 | 잘 맞는 일 |
|---|---|---|
| GUI | 화면을 읽고 버튼을 찾아야 함 | 사람이 직접 하는 작업 |
| CLI | 명령을 넣으면 텍스트 결과가 나옴 | 로컬 파일·git·빌드·테스트 |
| MCP | 정해진 도구를 호출 | OAuth가 필요한 SaaS, 원격 서비스 |
텍스트를 넣으면 텍스트가 나오는 CLI는 텍스트 처리에 강한 LLM에게 가장 자연스러운 인터페이스다.
GUI를 쓰려면 에이전트가 화면 상태를 해석하고 어디를 클릭할지 찾아야 한다. CLI는 명령 한 줄을 실행하고 결과를 읽으면 끝이라 틀릴 곳이 적다. Claude Code, Codex CLI, Gemini CLI가 잇달아 나오면서 터미널에서 도는 에이전트 도구가 하나의 분야로 자리 잡았다.
강점은 두 가지다. 첫째는 구조화된 출력이다. --json 플래그 하나로 파싱하기 쉬운 결과를 받는다. 둘째는 조합성이다. 작은 명령을 파이프로 이어 복잡한 작업을 만드는 Unix 방식이 일을 잘게 쪼개 처리하는 에이전트와 잘 맞는다.
Claude Code 같은 도구에서 에이전트는 git log --oneline, npm test, grep -r "TODO"를 직접 실행하면서 코드를 읽고 고친다. 별도 MCP 서버가 없어도 셸 접근만으로 로컬 작업 대부분을 처리할 수 있다.
사용자는 프로젝트 안내 파일(CLAUDE.md, AGENTS.md 등)에 자주 쓰는 명령을 적어 두면 된다. "테스트는 npm test로 돌리고, GitHub 작업은 gh로 하고, 결과는 --json으로 받아라"처럼 적어 두면 에이전트가 헤매지 않는다. 이미 널리 쓰이는 CLI가 있으면 MCP를 새로 붙이기 전에 그것부터 쓰게 하는 편이 간단하다.
내가 만든 도구를 에이전트가 쓰게 하려면 사람용 CLI와 몇 가지가 달라야 한다. 핵심은 에이전트가 결과를 잘못 읽지 않고 중간에 멈추지 않게 하는 것이다.
| 원칙 | 이유 |
|---|---|
모든 명령에 --json 출력 | 표 모양 텍스트보다 정확하게 파싱된다 |
| 에러도 구조화, 종료 코드 구분 | 실패 원인을 읽고 다시 시도할 수 있다 |
| 명령 하나에 기능 하나 | 조합하기 쉽고 실수의 범위가 좁다 |
확인 질문 대신 플래그(--yes) | 입력을 기다리다 멈추지 않는다 |
CLI가 만능은 아니다. OAuth 인증이 필요한 SaaS API나 실시간 양방향 통신이 필요한 일에는 MCP가 더 적합하다. 그래서 실무에서는 로컬은 CLI, 원격은 MCP로 나누는 혼합 방식이 널리 쓰인다.
셸 접근은 강력한 만큼 위험하다. 파일 삭제나 강제 푸시처럼 되돌리기 어려운 명령은 에이전트 도구의 권한 설정에서 실행 전에 확인을 받도록 해 둔다. 출력이 아주 긴 명령은 필요한 부분만 걸러서 받게 하는 게 좋다.
가장 흔한 쓰임은 터미널 코딩 에이전트다. 에이전트가 이미 있는 CLI를 그대로 실행하며 코드를 읽고, 고치고, 검증한다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 코딩 에이전트 | git·빌드·테스트 명령을 직접 돌리며 기능 구현과 버그 수정을 끝까지 맡긴다 |
| GitHub 작업 | gh로 이슈·PR을 조회하고 만들며, 결과는 --json으로 받는다 |
| CI·자동화 스크립트 | 에이전트를 비대화형으로 실행해 테스트 실패 분석, 변경 요약 같은 반복 작업을 맡긴다 |
| 사내 도구 | 기존 사내 CLI에 --json과 확인 생략 플래그를 붙여 에이전트가 바로 쓰게 한다 |