본문으로 건너뛰기
claudemods

Project Sentinel: Claude Code 컨텍스트 핸드오프와 실행 제어

긴 Claude Code 실행을 위한 상태 띠, 컨텍스트 핸드오프, 프롬프트 캐시 추적, 권한 규칙을 제공합니다.

권한

  • 파일 읽기컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
  • 명령어 실행컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
  • 모델 호출 (사용량 소모)Claude에 자체 요청을 보낼 수 있으며, 이는 요금제 사용량에 포함됩니다($.model.* / $.agent.spawn).
  • 도구 호출 가로채기Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
  • 프롬프트 읽기입력한 내용과 대화 기록을 볼 수 있습니다(prompt.* / session.append / session.messages).
  • UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
  • 명령어/도구 추가사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
  • 데이터 저장플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).
테스트 버전
v2.1.296
마지막 테스트
필요 버전
Claude Code ≥ 2.1.287
표시 위치
프롬프트 위, 패널, 스피너, 상태 표시줄, 토스트

Claude Code 안에서 설치:

/plugin install project-sentinel --marketplace Arjun0014/project-sentinel
모든 설치 방법 ↓

이 모드는 무엇을 하나요?

Project Sentinel은 Project Sentinel 기여자들(Arjun0014)이 만든 커뮤니티 모드입니다. 긴 Claude Code 실행을 위해 만들어졌으며, 가장 잘 알려진 기능은 Claude Code 컨텍스트 핸드오프입니다. 컨텍스트 창이 가득 차면 Context Autopilot이 Claude에게 현재 작업 단위를 마무리하고 노트 파일을 쓰도록 요청한 뒤, 컨텍스트를 지우고 그 노트를 읽는 새 컨텍스트를 시작합니다. 이 모드는 버전 1.4.0까지 Control Room이라는 이름이었기 때문에 패널과 상태 띠에는 아직 그 이름이 남아 있습니다.

그 주변에 많은 기능이 더해져 있습니다. 프롬프트 위의 상태 띠는 컨텍스트 사용량, 프롬프트 캐시, 실행 비용을 보여 줍니다. Cache Guardian은 프롬프트 캐시가 얼마나 오래 따뜻하게 유지되는지 추적하고, 100k 이상의 토큰을 다시 보내게 될 모델 전환 전에 확인을 요청합니다. 권한 카테고리를 사용하면 패키지 설치, 푸시, 배포 및 비슷한 작업을 확인 요청 또는 거부로 설정할 수 있습니다. 그 밖에 Mission Queue와 Decision Inbox, 서브에이전트 제한, 모델 라우터, 머신 부하 조절기, 선택형 픽셀 컴패니언이 있습니다. 전체 목록은 작성자의 README에 있으며, 이 페이지는 저희가 코드에서 확인한 내용을 다룹니다.

데모

녹화 영상에서는 작은 데모 프로젝트에서 모드를 불러온 채 Claude Code를 시작하고, Claude에게 README.md를 읽고 프로젝트를 한 문장으로 설명해 달라고 요청합니다. 프롬프트를 보내기 전 입력창 위의 띠에는 Control Room 배지와 RUN $0.00과 함께 "Ready"가 표시됩니다. 턴이 진행되는 동안 "Thinking"으로 바뀌고, 이어서 컨텍스트 미터가 4%까지 차오르는 모습을 보여 줍니다. 턴이 끝나면 "Read 1 file", 컨텍스트 막대, CACHE 1h left, 그리고 1센트 미만의 실행 비용이 표시됩니다.

설치

설치 블록의 방법 중 아무것이나 사용하십시오. 모두 control-room이라는 이름의 작성자 자신의 마켓플레이스에서 바로 설치합니다. 띠는 다음 세션 시작 때 나타납니다. 패널을 열려면 /control-room 또는 /cr을 실행하십시오.

$ install project-sentinel

Claude Code 2.1.287 이상 필요

작성자의 마켓플레이스에서 설치: Arjun0014/project-sentinel

  1. 1.Claude Code 안에서 한 줄로

    /plugin install project-sentinel --marketplace Arjun0014/project-sentinel

    실행 중인 세션(v2.1.275 이상)에 붙여 넣으세요. Claude Code가 먼저 마켓플레이스 추가 여부를 묻습니다.

  2. 2.셸에서 설치

    claude plugin marketplace add Arjun0014/project-sentinel
    claude plugin install project-sentinel@control-room

    그런 다음 이미 열려 있는 세션에서 /reload-plugins를 실행하세요.

  3. 3.설치하지 않고 사용해 보기

    git clone https://github.com/Arjun0014/project-sentinel
    claude --plugin-dir ./project-sentinel/plugins/project-sentinel

    한 세션에서만 모드를 불러옵니다. 설정에는 아무것도 추가되지 않습니다.

작동 방식

플러그인에는 훅 모듈 hooks/register.tsx 하나가 있으며, 이 모듈은 모든 엔진 호출을 위한 단일 호스트 어댑터를 만들고 각 훅을 런타임 객체를 호출하는 몇 줄짜리 코드로 등록합니다. 모든 게이팅 훅에는 Claude Code 자체 동작으로 되돌아가는 .catch가 있습니다. hooks/register.tsx의 도구 호출 훅은 다음과 같습니다.

on('tool.call', async ($, e, next) => {
  if (rt.isStandby) return next(e)
  if (rt.host === null) rt.bind(hostOf($))
  const tool = String(e.tool)
  const input: Record<string, unknown> = isRecord(e) ? { ...e } : {}
  const refusal = await rt.beforeTool(tool, input, e.tool_use_id, e.agentId)
  if (refusal !== null) return { deny: refusal }
  // ... then next(e), with afterTool in a finally block
})

beforeTool은 셸 명령을 토큰으로 나누고, 각 구간을 권한 카테고리로 분류한 뒤 가장 엄격한 설정을 적용합니다. 이 검사가 실패하더라도 .catch는 명백히 위험한 명령을 여전히 거부합니다. 상태는 플러그인의 $.store(설정, 실행 기록, 캐시 메모리)와 렌더 훅이 읽는 $.state 아톰에 보관됩니다.

사용자 지정

모든 설정은 패널(/cr) 또는 /cr 명령에서 합니다. 프로필, Autopilot 임계값(기본값은 창의 70%, 또는 토큰 수), 핸드오프 파일 이름, 카테고리별 권한 상태, 답변 스타일, 라우터 전략, 서브에이전트 모드와 제한, 리소스 상한, Keep warm, 컴패니언을 설정할 수 있습니다. /cr reset confirm은 기본값을 복원합니다. 모든 옵션은 작성자의 docs/CONFIGURATION.md에 나와 있습니다.

권한 및 안전

저희는 매니페스트, hooks/hooks.json, hooks/register.tsx, 호스트 어댑터, core/settings.ts, features/prompts.ts, features/permissions/decide.ts, app/formerStore.ts, 그리고 작성자의 SECURITY.md를 읽었습니다. 플러그인에는 TypeScript 파일이 약 60개 있습니다(가장 큰 네 파일만 약 7,800줄). UI, 패널, 3,000줄짜리 컴패니언 모듈(kit.client.tsx)은 모든 줄을 읽지는 않았습니다. 이 파일들과 나머지 파일에 대해서는 네트워크 호출, eval, 동적 import, 프로세스 호출, 파일 쓰기, 비밀 값, 숨겨진 유니코드를 모든 파일에서 검색했으며, 아래에 적은 것 외에는 발견되지 않았습니다. 플러그인에는 package.json, 설치 스크립트, 바이너리, 압축(minified)된 코드가 없습니다.

확인 결과:

  • 네트워크: 없음. fetch, 소켓, 호스트가 없습니다. 모델 요청은 Claude Code 자체 클라이언트를 거칩니다(선택적 가드 검사, 그리고 기본값이 꺼짐이며 짧은 "reply ok" 메시지와 함께 마지막 요청을 다시 보내는 Keep warm).
  • 프로세스: macOS에서는 top -l 0 -s 2 -n 0("Live CPU and memory"가 켜져 있는 동안 실행되는 장기 실행 CPU 및 메모리 샘플러로, 기본값은 켜짐)과 sysctl -n kern.memorystatus_level, Windows에서는 typeperf와 systeminfo, git 저장소에서는 git status --porcelain=v1 --branch를 실행합니다. 모두 고정 인수를 사용하며 셸을 거치지 않습니다. 샘플러는 세션이 끝나면 멈춥니다.
  • 파일 쓰기: 플러그인 자체는 자기 $.store 파일 외에는 쓰지 않습니다. 핸드오프 노트 파일(기본값 NEXT_SESSION_PROMPT.md)은 Claude가 권한 검사를 거치는 일반 도구로 작성합니다. 설정을 이어받기 위해 ~/.claude/plugins/store/ 아래의 예전 Control Room 저장소 파일을 한 번 읽으며, 그 파일은 절대 변경하지 않습니다.
  • 데몬: 없음. 감시자용 타이머는 Claude Code 프로세스 안에서 동작합니다.
  • 환경 변수: HOME, USERPROFILE, CLAUDE_CONFIG_DIR(예전 저장소를 찾기 위해)와 프롬프트 캐시 설정 CLAUDE_CODE_PROMPT_CACHE_TTL, ENABLE_PROMPT_CACHING_1H, FORCE_PROMPT_CACHING_5M을 읽습니다. 작성자의 SECURITY.md 요약에는 환경 변수를 전혀 읽지 않는다고 되어 있지만, 같은 문서의 표에는 이 읽기가 나와 있습니다. 어디로도 전송되지 않습니다.
  • 텔레메트리: 없음.
  • 모델에 대한 영향: Autopilot이나 Frontier Max 같은 기능이 켜져 있으면 시스템 프롬프트에 정책 섹션을 추가하고, 도구 결과에 짧은 메모를 덧붙이며, 두 개의 도구(milestones와 decision_request)를 제공하고, 자체 프롬프트(핸드오프, 이어서 진행, 대기 작업)를 제출합니다. 문구는 features/prompts.ts에 있습니다. Frontier Max(기본값은 꺼짐)는 Claude에게 세션이 "is being evaluated for frontier-level autonomous capability"라고 알리고 일찍 멈추지 말라고 지시합니다. 숨겨진 텍스트나 폭이 0인 텍스트, 검토자를 겨냥한 지시는 발견되지 않았습니다.
  • 게이팅 훅: 도구 호출을 거부할 수 있고(기본값: 강제 푸시, 리셋, 위험한 명령은 거부, 설치, 다운로드, 푸시, 배포, 삭제, 프로젝트 밖의 편집은 확인 요청), 모델 전환이나 크고 차가운 컨텍스트의 재개 전에 확인을 요청하며, 서브에이전트를 숨기거나 거부하고, 일찍 멈춘 턴을 이어서 진행시킬 수 있습니다(가드, 기본값은 꺼짐). 권한 확인에 대신 응답하거나 거부를 완화하는 일은 절대 없습니다. 이는 README와 일치합니다.
  • 외부 요구 사항: Claude Code 2.1.287 이상 외에는 없습니다. top과 sysctl은 macOS에 기본으로 들어 있습니다.
  • 라이선스: MIT이며, 저장소와 플러그인 폴더에 LICENSE 파일이 있습니다.

claude plugin validate는 오류나 경고를 보고하지 않았습니다. claude plugin test 명령은 플러그인 폴더에서 *.test.ts 파일을 찾지 못했습니다. 작성자가 테스트 하네스를 저장소의 별도 tools/test 폴더에 두기 때문이며, 그래서 작성자의 테스트는 실행할 수 없었습니다. 이 모드는 범위가 넓고 침습적인 것으로 간주하십시오. 해당 기능을 켜면 프롬프트를 다시 쓰고, 도구를 거부하고, 컨텍스트를 지울 수 있습니다.

파일 읽기
컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
명령어 실행
컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
모델 호출 (사용량 소모)
Claude에 자체 요청을 보낼 수 있으며, 이는 요금제 사용량에 포함됩니다($.model.* / $.agent.spawn).
도구 호출 가로채기
Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
프롬프트 읽기
입력한 내용과 대화 기록을 볼 수 있습니다(prompt.* / session.append / session.messages).
UI 변경
Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
명령어/도구 추가
사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
데이터 저장
플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).

호환성 및 문제 해결

macOS에서 Claude Code 2.1.296으로 확인했습니다(validate와 녹화된 세션). 무언가 이상해 보이면 다음을 확인하십시오.

  • /cr을 실행해 패널과 현재 설정을 확인하십시오.
  • 띠가 보이지 않으면 Setup에서 띠 스타일을 확인하십시오. 꺼짐으로 설정되어 있을 수 있습니다.
  • Claude가 명령을 거부하면 Guardrails를 확인하십시오. 기본 권한 상태는 강제 푸시와 위험한 명령을 거부합니다.
  • 예전 control-room 플러그인도 함께 불러와져 있으면 Project Sentinel은 대기 상태로 물러나고 그 사실을 한 번 알립니다.
  • Windows에서 CPU 및 메모리 카운터는 영어판 Windows가 필요합니다.

자주 묻는 질문

Project Sentinel은 제가 켜지 않아도 무언가를 하나요?
상태 띠, 압축된 도구 행, Control Room 패널을 그리고, 띠에 쓸 CPU 및 메모리 샘플러를 실행하며, 기본 권한 규칙을 적용합니다(설치, 다운로드, 푸시, 배포는 확인을 요청하고 강제 푸시와 위험한 명령은 거부합니다). Context Autopilot, Frontier Max, 라우터, Keep warm, 컴패니언은 직접 켜기 전까지 꺼져 있습니다.
데이터를 어딘가로 보내나요?
자체적으로는 네트워크 요청을 하지 않으며 텔레메트리도 없습니다. 두 가지 기능이 Claude Code에 모델 요청을 보내도록 하며, 이는 패널에서 확인할 수 있습니다. 가드의 선택적 스마트 검사와 Keep warm(기본값은 꺼짐)입니다.
제 컨텍스트를 스스로 지울 수 있나요?
Context Autopilot을 켰거나 사용자가 핸드오프를 요청한 경우에만 그렇습니다. 먼저 Claude에게 노트 파일을 쓰게 하고, 그 파일이 방금 작성되었는지 확인한 다음 /clear를 실행하고 이어서 진행할 프롬프트를 제출합니다.
Context Bar나 Compact Adviser와 무엇이 다른가요?
그 모드들은 컨텍스트 사용량을 보여 주거나 조언합니다. Project Sentinel은 더 큰 묶음입니다. 컨텍스트 외에도 프롬프트 캐시, 권한 카테고리, 서브에이전트 제한, 대기 중인 작업과 감시자를 다루며, 세션에 직접 조치를 취할 수도 있습니다.
패널은 어떻게 여나요?
/control-room 또는 줄여서 /cr을 실행하십시오. 패널에는 활동, 컨텍스트, 캐시, 가드레일, 동작, 설정 탭이 있습니다.
Claude Code에서 실행 중인 Context Bar추천

Context Bar

Claude Code 컨텍스트 창을 프롬프트 위 누적 막대 하나로 보여 줍니다. 카테고리마다 색이 다르고 토큰 수도 표시됩니다.

  • 프롬프트 위
  • UI 변경
  • 명령어/도구 추가
  • 데이터 저장

v2.1.291에서 테스트됨

Claude Code에서 실행 중인 Compact Adviser추천

Compact Adviser

작업 단위가 끝난 시점을 판단해 Claude Code에서 /compact를 실행하기 좋은 때를 힌트로 알려 줍니다.

  • 상태 표시줄
  • 패널
  • 토스트
  • 파일 읽기
  • 파일 쓰기
  • 네트워크
  • 프롬프트 읽기
  • UI 변경
  • 명령어/도구 추가
  • 데이터 저장

v2.1.291에서 테스트됨

Claude Code에서 실행 중인 컨텍스트 미터추천

컨텍스트 미터

컨텍스트 창 사용률, 5시간·7일 요금제 사용량, 세션 비용을 상태 표시줄에 보여 주고 한도에 가까워지면 경고합니다.

  • 상태 표시줄
  • 토스트
  • UI 변경

v2.1.310에서 테스트됨

더 보기: 타이머, 할 일, 스탠드업, 안전 가드, 컨텍스트, 사용량, 비용.