Mission Control: Claude Code 서브에이전트와 도구 호출을 실시간으로 보기
Claude Code의 메인 에이전트, 서브에이전트, 모든 도구 호출을 실시간으로 보여 주는 패널과, 이들이 건드린 파일의 코드 맵입니다.
권한
- 파일 읽기컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
- 파일 쓰기컴퓨터에 파일을 만들거나 덮어쓸 수 있습니다($.fs.write).
- 명령어 실행컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
- 모델 호출 (사용량 소모)Claude에 자체 요청을 보낼 수 있으며, 이는 요금제 사용량에 포함됩니다($.model.* / $.agent.spawn).
- 도구 호출 가로채기Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
- UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 명령어/도구 추가사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
- 테스트 버전
- v2.1.296
- 마지막 테스트
- 필요 버전
- Claude Code ≥ 2.1.287
- 표시 위치
- 패널, 프롬프트 위
Claude Code 안에서 설치:
/plugin install mission-control --marketplace hamzafer/claude-code-mods이 모드는 무엇을 하나요?
Mission Control은 Hamza Zafar(hamzafer)가 만든 커뮤니티 모드로, 그의 claude-code-mods 컬렉션에 속해 있습니다. 메인 에이전트와 Claude Code 서브에이전트, 그리고 이들이 하는 모든 도구 호출을 한곳에서 보여 주어 Claude Code가 무엇을 하고 있는지 알 수 있게 합니다. /mission을 실행하면 채팅 옆에 트리가 있는 패널이 열립니다. 메인 루프가 맨 위에 있고, 각 Claude Code 서브에이전트가 그 아래에 달리며, 도구 호출은 그 호출을 한 에이전트 아래에 놓입니다. 같은 도구의 연속 호출은 read: README.md → src/login.js ×2처럼 한 줄로 접히고, 각 줄에는 소요 시간이 표시됩니다.
Claude가 작업하는 동안과 그 후 30초 동안에는 프롬프트 위의 한 줄이 상황을 요약합니다. ◈ mission: 2 tools 같은 형태이며, 에이전트나 변경된 파일이 있으면 그 개수도 붙습니다. 두 번째 보기인 /mission code는 Claude가 읽거나 편집한 파일의 맵을 그립니다. 파일 사이의 상대 import는 화살표로, 지금 다루고 있는 파일은 빛나는 효과로 표시되며, 각 변경에는 한 줄 메모가 붙습니다. 작성자의 README에 따르면 이 컬렉션에는 Claude Code 2.1.287 이상이 필요하며, 저희는 2.1.296에서 테스트했습니다.
데모
녹화 영상에서는 작은 데모 프로젝트에서 모드를 불러온 채 Claude Code를 시작하고, Claude에게 README.md와 src/login.js를 읽고 각각 무엇을 하는지 한 문장으로 말해 달라고 요청합니다. Claude가 두 파일을 읽는 동안 프롬프트 위 띠의 줄이 도구 수를 셉니다. 답변이 끝나면 영상에서 /mission을 입력합니다. 패널이 프롬프트 위에 열리며 Who, Code, Close 버튼, 0 agents (0 running) · 2 tool calls 요약, 프롬프트 텍스트가 담긴 초록색 메인 줄, 그 아래 접힌 read: demo-app/README.md → src/login.js ×2 줄이 표시됩니다. 코드 맵은 영상에 나오지 않습니다.
설치
설치 블록의 방법 중 아무것이나 사용하십시오. 모두 작성자 자신의 마켓플레이스에서 바로 설치합니다. 그런 다음 세션에서 /mission을 실행하십시오. 이미 열려 있는 세션에 설치했다면 먼저 /reload-plugins를 실행하십시오.
$ install mission-control
Claude Code 2.1.287 이상 필요
작성자의 마켓플레이스에서 설치: hamzafer/claude-code-mods
1.Claude Code 안에서 한 줄로
/plugin install mission-control --marketplace hamzafer/claude-code-mods실행 중인 세션(v2.1.275 이상)에 붙여 넣으세요. Claude Code가 먼저 마켓플레이스 추가 여부를 묻습니다.
2.셸에서 설치
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install mission-control@claude-code-mods그런 다음 이미 열려 있는 세션에서 /reload-plugins를 실행하세요.
3.설치하지 않고 사용해 보기
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/mission-control한 세션에서만 모드를 불러옵니다. 설정에는 아무것도 추가되지 않습니다.
작동 방식
모드는 트리, 파일 목록, 현재 보기를 호스트가 보관하는 $.state 아톰에 저장하므로 핫 리로드 후에도 화면이 유지됩니다. 모든 도구 호출은 tool.call 훅으로 감싸지며, 훅은 노드를 추가하고 호출을 실행시킨 뒤 완료 또는 실패로 표시합니다. hooks/register.tsx의 코드는 다음과 같습니다.
let failed = true
let r: Awaited<ReturnType<typeof next>>
try {
r = await next(e)
failed = r.deny !== undefined || r.isError === true
} finally {
await update($, nodes, list => list.map(n => (n.id === id ? { ...n, status: failed ? 'failed' : 'done', end: Date.now() } : n)))
}agent.spawn은 서브에이전트를 추가하고, turn.start는 트리를 초기화하며, turn.complete는 아직 실행 중으로 표시된 것을 닫습니다. Agent 호출과 Claude Code 자체의 관리용 도구(ToolSearch, TaskCreate 등)는 제외됩니다. 1초 간격의 시계는 무언가 실행 중일 때만 화면을 갱신하며, 트리는 최대 300개 노드로 제한됩니다. 코드 맵의 경우 hooks/map.ts가 SVG를 만듭니다. 건드린 각 소스 파일을 $.fs.read로 읽고, 정규식으로 상대 import를 찾은 뒤, import 깊이에 따라 파일을 열로 배치합니다. SVG는 헤드리스 Chrome으로 PNG로 변환되어 패널의 Image 요소로 표시됩니다.
사용자 지정
/config에는 옵션이 없습니다. 조작 수단은 /mission, /mission who, /mission code와 패널 버튼 w, c, q뿐입니다. 동작을 바꾸려면 register.tsx 맨 위의 상수를 수정하십시오. MAX_NODES(트리 크기), MAX_FILES(맵에 표시할 파일 수), BAND_AFTER_MS(띠가 남아 있는 시간), INTERNAL(트리에서 제외할 도구), CODE_FILE(맵에 나타나는 파일 형식)입니다.
권한 및 안전
저희는 실행하기 전에 플러그인이 실행할 수 있는 모든 파일을 읽었습니다. .claude-plugin/plugin.json, hooks/hooks.json, hooks/register.tsx, hooks/map.ts, hooks/tree.ts, 타입 선언, 테스트입니다. package.json, 설치 스크립트, 바이너리, 번들된 코드는 없으며, 숨겨진 유니코드, eval, 원격 코드도 발견하지 못했습니다.
- 네트워크: 모드 자체는 사용하지 않습니다.
fetch, 소켓, 호스트가 없습니다. - 모델 호출: 메인 턴에서 파일을 편집하거나 쓴 뒤,
register.tsx의explain()이model: 'haiku'로$.model.complete를 호출합니다. 프롬프트에는 각old_string과new_string이 최대 300자(쓴 파일은 400자) 들어가며, 응답은 맵 위의 최대 80자 메모가 됩니다. 응답은 JSON으로 파싱되고, 잘리고, 이스케이프된 뒤에 SVG에 들어갑니다. 세션의 사용량 한도를 씁니다. - 프로세스:
$.process.run을 통해sh -c스크립트 하나를 실행합니다. 이 스크립트는 일회용 프로필로 헤드리스 Chrome을 시작하고, 스크린샷을 기다린 뒤, 그 Chrome을 종료합니다. 파일 및 폴더 이름은 셸 문자열에 끼워 넣지 않고 인자로 전달됩니다. Chrome은 패널이 코드 보기로 열려 있을 때만 시작됩니다. - 파일 쓰기:
$TMPDIR/mission-control/에만 씁니다.map.svg,map-N.png파일 두 개, Chrome 프로필 폴더입니다.~/.claude, 설정, 셸 파일, LaunchAgents에는 아무것도 쓰지 않습니다. 모드는 import를 찾기 위해 Claude가 건드린 파일을 읽고, 편집 조각은 메모리에 보관합니다. - 데몬: 없습니다. 1초 간격의 시계는 세션과 함께 멈추고, Chrome은 스크린샷마다 종료됩니다.
- 비밀 정보 및 환경:
TMPDIR만 읽습니다. - 텔레메트리: 없습니다.
- 프롬프트 영향:
additionalContext를 추가하지 않으며, 프롬프트나 도구 결과를 다시 쓰지 않습니다. - 게이팅 훅:
tool.call과agent.spawn을 감싸며,claude plugin validate는 이를.catch가 없는 게이팅 훅으로 표시합니다. 이 훅들은 관찰만 합니다.tool.call은 도구 결과를 바꾸지 않고 돌려주며 인자도 바꾸지 않습니다. - 외부 요구 사항: 코드 맵에는
/Applications/Google Chrome.app(macOS 경로)의 Google Chrome이 필요합니다. Who 보기에는 필요하지 않습니다. - 라이선스: MIT이며 LICENSE 파일이 있습니다.
claude plugin validate는 오류나 경고를 보고하지 않았고, 작성자의 테스트 7개가 Claude Code 2.1.296에서 모두 통과했습니다.
- 파일 읽기
- 컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
- 파일 쓰기
- 컴퓨터에 파일을 만들거나 덮어쓸 수 있습니다($.fs.write).
- 명령어 실행
- 컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
- 모델 호출 (사용량 소모)
- Claude에 자체 요청을 보낼 수 있으며, 이는 요금제 사용량에 포함됩니다($.model.* / $.agent.spawn).
- 도구 호출 가로채기
- Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
- UI 변경
- Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 명령어/도구 추가
- 사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
호환성 및 문제 해결
macOS에서 Claude Code 2.1.296으로 확인했습니다(validate, 테스트, 녹화). 문제가 있으면 다음을 확인하십시오.
/mission이 알 수 없는 명령으로 나옵니다./plugin에서 플러그인이 로드되었는지 확인하고, 새로 설치한 뒤에는/reload-plugins를 실행하십시오.- 코드 맵에 Google Chrome이 필요하다고 나옵니다.
/Applications/Google Chrome.app에 Chrome을 설치하십시오. 모드는 이 경로만 확인합니다. - "Nothing yet"이 표시됩니다. 트리는 턴이 실행되면서 채워집니다. 작업을 시작하면 줄이 나타납니다.
- 터미널 밖에서는 맵이 없습니다. 다른 화면에서는 코드 맵이 터미널에서 그려진다는 안내가 패널에 표시됩니다.
- 띠의 줄이 보이지 않습니다. Claude가 작업하는 동안과 그 후 30초 동안에만 표시되며, 설문이 열려 있을 때는 표시되지 않습니다.
자주 묻는 질문
- Mission Control이 도구 호출을 바꾸거나 막나요?
- 아닙니다. tool.call 훅은 호출을 기록하고 next(e)로 그대로 실행한 뒤 결과를 바꾸지 않고 돌려줍니다. 기록에 필요한 처리 외에는 호출을 거부하거나, 다시 쓰거나, 지연시키지 않습니다.
- 모델이나 네트워크를 호출하나요?
- 모드 자체는 네트워크 요청을 하지 않습니다. 파일을 편집한 턴이 끝나면 Claude Code에 작은 haiku 완성을 한 번 실행해 달라고 요청해, 변경된 파일마다 한 줄 메모를 씁니다. 프롬프트에는 각 편집 내용이 최대 수백 자 들어가므로, 그 텍스트는 이미 사용 중인 모델 제공자에게 전송됩니다.
- Google Chrome이 필요한가요?
- 코드 맵에만 필요합니다. Who 트리는 추가로 필요한 것이 없습니다. 코드 맵은 /Applications/Google Chrome.app에 있는 헤드리스 Chrome으로 SVG를 렌더링하며, Chrome이 없으면 안내 메시지를 보여 줍니다.
- 어떻게 열고 닫나요?
- /mission을 실행하거나, 코드 맵은 /mission code를 실행하십시오. 패널 안에서 w는 트리, c는 코드 맵을 보여 주고 q는 패널을 닫습니다.
- Agent Radar와 무엇이 다른가요?
- Agent Radar는 에이전트를 지켜보는 별도의 커뮤니티 모드입니다. Mission Control은 여기에 더해 모든 도구 호출을 해당 에이전트 아래에 나열하고, 같은 도구의 연속 호출을 접으며, 건드린 파일과 그 사이의 import 관계를 맵으로 그립니다.
# 관련 모드
추천Agent Radar
실행 중인 서브에이전트마다 프롬프트 위에 한 줄씩: 경과 시간, 도구 수, 현재 작업. /radar 패널도 제공합니다.
- 프롬프트 위
- 패널
- 토스트
- 도구 호출 가로채기
- 프롬프트 읽기
- UI 변경
- 명령어/도구 추가
v2.1.291에서 테스트됨
추천도구 호출 카운터
Claude의 도구 호출을 턴별·세션별로 세어 스피너 옆에 표시하고, 상세 내역을 보는 /tally 명령을 추가합니다.
- 스피너
- 대화 기록
- 상태 표시줄
- 도구 호출 가로채기
- UI 변경
- 명령어/도구 추가
v2.1.310에서 테스트됨
더 보기: 패널 및 대시보드, 타이머, 할 일, 스탠드업.