cd ../
AI·2026-06-01·5 min read·# entry/044

Claude Code Command: LLM 컨텍스트를 결정론적으로 제어하는 인터페이스

Command는 단순한 단축키가 아닙니다. 비결정적인 LLM 에이전트를 사용자가 직접 제어하기 위해 등장한 세션 제어 패러다임, 그 기술적 배경과 실무 활용법을 정리합니다.

Command는 Skill, MCP와 다르게 직접 정의하고 구현하는 것이 아닌, 기존 구현체들을 실행하는 인터페이스입니다.

Command는 터미널 편의 기능이 아닙니다. LLM의 Working Memory와 State를 결정론적으로 제어하기 위해 등장한 세션 제어 패러다임입니다.


왜 Command가 필요했는가

전통적인 LLM 챗봇은 입력을 받고 출력을 반환하는 단선적이고 Stateless에 가까운 구조를 갖습니다. 하지만 IDE/CLI에 통합된 AI 에이전트는 수만 라인의 소스코드, 빌드 로그, 실행 상태 같은 방대하고 가변적인 전역 상태(Global State) 를 다뤄야 합니다.

이 과정에서 두 가지 치명적인 한계가 드러났습니다.

LLM의 컨텍스트 창이 커졌음에도, 대화가 길어지거나 소스코드가 주입되면 정보의 밀도가 떨어집니다.

초기 세션
[지침 20%] [코드 30%] [대화 50%]
→ 에이전트가 지침을 잘 따름

장시간 후
[지침 2%] [코드 10%] [대화 88%]
→ 에이전트가 초기 지침을 망각하기 시작
희석(Dilution)이 위험한 이유

에이전트는 이전 대화의 맥락이나 엄격한 지침을 망각합니다. 처음에 "TypeScript만 사용해"라고 설정했더라도 대화가 길어지면 JavaScript를 혼용하기 시작할 수 있습니다.

이 문제를 해결하기 위해 에이전트의 자율적 흐름에 사용자가 강제로 개입하여 LLM의 Working Memory와 State를 결정론적으로 리셋·변경·압축할 수 있는 명시적 제어권, 즉 Command 인터페이스가 필요해졌습니다.


다른 메커니즘과의 차이

Claude Code 내에서 Command는 Hook, MCP, Rules와 명확히 구분되는 고유한 레이어를 갖습니다.

비교 축CommandHookMCP / ToolsRules / CLAUDE.md
주체사용자가 LLM에게 직접 내리는 명령시스템이 수명주기 이벤트에 자동 실행LLM이 자율적으로 판단해 호출LLM이 행동 시 참조하는 제약조건
목적에이전트 상태 및 컨텍스트 제어작업 전후의 검증 및 자동화외부 환경과의 상호작용행동 양식 및 도메인 지식 주입
컨텍스트 영향컨텍스트를 비우거나 과거로 되돌림프롬프트 직전 새 컨텍스트를 강제 주입실행 결과 데이터가 컨텍스트에 추가시스템 프롬프트의 기저로 상시 작용

핵심 내장 Command

현재까지 쌓인 긴 대화 이력과 소스코드 덤프를 핵심만 남기고 요약하여 Context Window를 확보합니다.

Before /compact
[대화 누적: 50,000 tokens]
→ 컨텍스트 포화, 지침 망각 위험

After /compact
[요약된 핵심 컨텍스트: 3,000 tokens]
→ 중요한 결정사항과 현재 상태만 유지
언제 사용할까?

긴 디버깅 세션 이후, 새로운 기능 구현을 시작하기 전, 또는 에이전트가 이전 지침을 잊기 시작한다는 느낌이 들 때 사용합니다.


커스텀 Command 실무 활용

고급 개발자들은 내장 명령어에 그치지 않고 프로젝트 고유의 커스텀 Command를 정의하여 개발 흐름을 제어합니다.

/test-loop: TDD 자동화

TDD를 진행할 때 매번 명령을 반복하는 것은 비효율적입니다.

개발자: /test-loop UserService
   ↓
Claude가 독립된 하위 루프에 진입
   ↓
테스트 실행 → 실패 분석 → 코드 수정 → 재실행
   ↓          (자율 반복)
모든 테스트 100% 통과 시 루프 종료
격리된 태스크 상태

에이전트가 명령어 실행 후 특정 테스트가 통과할 때까지 자율적으로 코드를 수정하고 테스트를 반복하는 '격리된 태스크 상태'로 전이됩니다.

/sync-issue: 컨텍스트 주입 자동화

새 작업마다 Jira 티켓이나 GitHub 이슈를 복사해서 프롬프트에 붙여넣는 것은 반복 비용입니다.

/sync-issue #1234
gh-cli와 연동
   ↓
이슈 #1234의 본문 + 댓글 + 연관 PR 명세 파싱
   ↓
현재 세션의 최상위 컨텍스트에 목표 상태로 강제 주입
   ↓
에이전트가 즉시 이슈 내용을 기반으로 작업 시작

슬래시 커맨드가 LLM을 우회하는 방법

/ 로 시작하는 입력은 자연어 처리 레이어를 거치지 않고 특정 도구를 결정론적으로 강제 호출합니다.

자연어의 모호성 문제

슬래시 커맨드 (/compact)
  • NLP 추론 없이 즉시 실행 - 동일 입력 → 항상 동일 결과 (결정론적) - 추가 토큰 소비 없음 - 실행 여부에 의심 없음
자연어 ('컨텍스트 정리해줘')
  • LLM이 의도를 해석하는 추론 과정 필요 - 컨텍스트 상태와 Temperature에 따라 실행 여부가 달라짐 - 추가 토큰 소비 - "정리했습니다"라고 말만 할 수도 있음

Claude Code는 개발자에게 익숙한 CLI와 IRC/Slack의 슬래시 커맨드 패러다임을 차용하여 이 문제를 해결했습니다.

실행 경로의 차이

슬래시 커맨드 내부 아키텍처

일반 텍스트 입력

User Prompt
  ↓
LLM (Intent Analysis)
  ↓
Tool Selection (비결정적)
  ↓
Execution

슬래시 커맨드 입력

User Prompt (/ 감지)
  ↓
시스템 런타임이 즉시 캐치 (LLM 우회)
  ↓
Direct Tool Execution (결정론적)

런타임이 /를 감지하는 순간 LLM 라우팅 트리거를 건너뛰고 도구를 직결 실행합니다.

슬래시 커맨드가 실행되면 해당 스킬에 필요한 최소한의 인자와 시스템 프롬프트 조각만 Context Window에 일시적으로 주입됩니다. 불필요한 이전 대화 맥락에 오염되지 않은 채로 플러그인의 순수한 기능만 정확하게 수행하도록 격리합니다.


정리

LLM의 불확실성 문제
  ├─ 컨텍스트 포화 → /compact 로 리셋
  ├─ 잘못된 방향   → /rewind 로 롤백
  ├─ 무분별한 수정 → /plan 으로 설계만 강제
  └─ 자연어 모호성 → /슬래시커맨드 로 결정론적 실행
Command를 사용하는 핵심 원칙

에이전트가 의도한 대로 동작하고 있다면 자연어로 충분합니다. 하지만 컨텍스트가 오염되었거나, 에이전트가 잘못된 방향으로 가고 있거나, 특정 동작을 반드시 실행해야 할 때는 Command로 결정론적 제어권을 되찾아야 합니다.