본문으로 건너뛰기
claudemods

Mindful Claude: Claude가 일하는 동안 쓰는 Claude Code 호흡 모드

Claude가 작업하는 동안 프롬프트 위에 호흡 안내 애니메이션을 그려, 기다리는 시간을 짧은 호흡 운동으로 바꿉니다.

권한

  • UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
  • 명령어/도구 추가사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
  • 데이터 저장플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).
테스트 버전
v2.1.291
마지막 테스트
필요 버전
Claude Code ≥ 2.1.287
표시 위치
프롬프트 위, 스피너

Claude Code 안에서 설치:

/plugin install mindful-claude --marketplace halluton/Mindful-Claude
모든 설치 방법 ↓

이 모드는 무엇을 하나요?

Mindful Claude는 Anthony(halluton)가 만든 커뮤니티 모드입니다. 이 Claude Code 호흡 모드는 Claude를 기다리는 시간을 짧은 호흡 안내 운동으로 바꿉니다. Claude가 작업을 시작하면 입력창 위에 아홉 줄짜리 호흡 애니메이션이 나타나고, 그 아래에 Breathe in... 4s 같은 단계 줄과 호흡법 이름이 표시됩니다. 동시에 스피너 문구도 호흡에 맞춰 바뀌어, 평소 문구 대신 Breathe in 4s…처럼 읽힙니다. Claude가 답하면 띠가 사라집니다.

README에 적힌 작성자의 설명에 따르면, 분당 약 5.5회의 느린 호흡은 심박 변이도(HRV)를 높이므로, Claude의 턴 하나하나가 터미널을 떠나지 않고도 작은 호흡 세션이 됩니다. 호흡법은 네 가지(공명 호흡, 생리적 한숨, 박스 호흡, 4-7-8 호흡)이고 애니메이션 스타일도 네 가지(pulse, ripples, dots, wave)입니다. 기본적으로 스타일은 턴마다 무작위로 고르되, 같은 스타일이 연달아 나오지는 않습니다. /breathe 슬래시 명령으로 설정을 바꾸며, 설정은 세션이 바뀌어도 유지됩니다. README에 따르면 Claude Code 2.1.269 이상이 필요합니다.

데모

녹화 영상에서는 모드를 불러온 채 Claude Code를 시작하고, Claude에게 파일 세 개를 읽고 프로젝트를 설명해 달라고 요청합니다. 턴이 진행되는 동안 프롬프트 위의 호흡 띠가 Breathe in… 5s 라벨(기본 공명 호흡 패턴)과 함께 커졌다 작아지고, 스피너 줄도 같은 리듬을 따릅니다.

설치

설치 블록의 방법 중 아무것이나 사용하십시오. 모두 작성자 자신의 마켓플레이스에서 바로 설치합니다. 설치가 끝나면 아무 프롬프트나 보내십시오. Claude가 작업하는 동안 띠가 나타납니다.

$ install mindful-claude

Claude Code 2.1.287 이상 필요

작성자의 마켓플레이스에서 설치: halluton/Mindful-Claude

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

    /plugin install mindful-claude --marketplace halluton/Mindful-Claude

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

  2. 2.셸에서 설치

    claude plugin marketplace add halluton/Mindful-Claude
    claude plugin install mindful-claude@mindful-claude

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

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

    git clone https://github.com/halluton/Mindful-Claude
    claude --plugin-dir ./Mindful-Claude

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

작동 방식

모드는 두 부분으로 되어 있습니다. hooks/register.tsx는 훅 모듈로, 턴이 시작된 시각을 기억하고 AbovePrompt 렌더 사이트를 훅합니다. 엔진이 턴이 작업 중이라고 보고하면 클라이언트 서피스 모듈 hooks/breathe.tsx를 마운트하며, 이 모듈은 자체 시계로 1초에 열 번 애니메이션을 그립니다. hooks/register.tsx의 렌더 훅은 다음과 같습니다.

on('ui.render', { component: 'AbovePrompt' }, async ($, e, next) => {
  if (e.surface !== 'terminal' || !config.enabled || !e.props.isWorking || e.props.hasSurvey) return next(e)
  const now = await $.clock.now()
  const running = turn ?? (turn = { startedAt: now, style: pickStyle(config.style, lastStyle) })
  const elapsedMs = now - running.startedAt
  if (elapsedMs < config.delay * 1000) return next(e)
  const { Box, Client } = $.ui.resolve(e)
  // ...
  return (
    <Box flexDirection="column">
      <Client key={key} module="./breathe.tsx" width={e.viewport?.columns ?? 80} height={rows}
        props={{ exercise: config.exercise, style: running.style, elapsedMs }} />
      {await next(e)}
    </Box>
  )
})

띠는 턴 시작 시각을 키로 쓰므로 턴마다 새 애니메이션이 시작됩니다. 단계 줄이 바뀔 때마다 서피스는 surface.post로 현재 문구를 되돌려 보냅니다. 훅 모듈은 이를 ui.message 훅에서 받아 Spinner 컴포넌트의 두 번째 렌더 훅에 넘기고, 이 훅이 스피너의 message prop을 바꿉니다. turn.complete 훅은 턴을 지우므로, Claude가 답하는 즉시 띠가 사라집니다. 호흡법, 이징 곡선, 모양은 hooks/breath/에 순수 함수로 들어 있습니다.

사용자 지정

모든 설정은 모드가 session.start에서 등록하는 /breathe 명령으로 합니다.

  • /breathe는 현재 설정을 보여 주고, /breathe help는 모든 옵션을 나열합니다.
  • /breathe on / off는 띠를 보이거나 숨깁니다.
  • /breathe hrv, sigh, box, 478로 호흡법을 고릅니다.
  • /breathe style wave는 스타일 하나(pulse, ripples, dots, wave)를 고정하고, /breathe style random은 기본값으로 되돌립니다.
  • /breathe delay 5는 턴이 시작되고 5초가 지난 뒤에 띠를 보여 주므로, 빠른 답변에서는 조용히 지나갑니다.
  • /breathe spinner off는 스피너 문구를 건드리지 않습니다.

설정은 $.store의 config 키 하나에 저장되고 다음 세션 시작 때 다시 읽힙니다.

권한 및 안전

저희는 실행하기 전에 플러그인이 불러오는 모든 파일을 읽었습니다. 플러그인은 UI, 시계, 명령, 저장소 호출만 사용합니다. $.process.run도, 네트워크도, 파일 접근도 없습니다. 사용자의 코드, 프롬프트, 대화 기록을 읽지 않습니다. 설정은 모드 자체의 $.store에 저장되며, settings.json이나 셸 rc 파일을 수정하지 않습니다. UI 변경은 띠와 바뀐 스피너 문구에, 명령/도구 추가는 /breathe에, 데이터 저장은 저장된 설정에 해당합니다.

저장소에는 원래의 bash·tmux 버전이 담긴 legacy/ 폴더도 있습니다. 플러그인은 이 폴더를 불러오지 않습니다. 그 안의 install.sh는 ~/.claude/settings.json을 수정하고 ~/.claude/mindful/에 쓰므로, 예전 버전을 원할 때만 실행하십시오. claude plugin validate는 경고 하나를 보고합니다. 플러그인 이름에 "claude"가 들어 있어 Anthropic 플러그인처럼 읽힌다는 내용입니다. 이름에 대한 안내일 뿐 코드 문제는 아닙니다.

UI 변경
Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
명령어/도구 추가
사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
데이터 저장
플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).

호환성 및 문제 해결

macOS에서 Claude Code 2.1.291로 검증했으며, 작성자의 bun test 단위 테스트 31개가 통과합니다. 이 테스트는 bun:test를 import하므로 claude plugin test로는 불러올 수 없습니다. 띠가 나타나지 않으면 다음을 확인하십시오.

  • claude --version이 2.1.269 이상인지 확인하십시오. 작성자의 README는 ~/.claude/settings.json의 env 블록에 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1을 설정하라고도 안내합니다.
  • /breathe를 실행해 breathe: on과 delay 0s로 표시되는지 확인하십시오.
  • 띠는 터미널에서만 그려집니다. 프롬프트 위에 설문이 열려 있는 동안에도 자리를 비켜 줍니다.
  • 이미 열려 있는 세션에 설치했다면 /reload-plugins를 실행하십시오.

자주 묻는 질문

호흡 애니메이션은 언제 나타나나요?
턴이 시작되어 프롬프트에 Claude가 작업 중이라고 표시될 때 나타나고, Claude가 답하면 사라집니다. /breathe delay 5를 쓰면 Claude가 5초 동안 작업한 뒤에만 나타납니다.
어떤 호흡법이 들어 있나요?
네 가지입니다. 기본값인 공명 호흡(Coherent Breathing, 5.5초 들숨, 5.5초 날숨), 생리적 한숨(Physiological Sigh, 두 번 들이쉬고 길게 내쉼), 박스 호흡(Box Breathing, 4초 들숨·참기·날숨·참기), 4-7-8 호흡(4초 들숨, 7초 참기, 8초 날숨)입니다. /breathe hrv, sigh, box, 478로 전환합니다.
토큰을 쓰거나 모델에 무언가를 보내나요?
아닙니다. 모드는 UI만 그리고 설정은 플러그인 자체 저장소에 보관합니다. 네트워크 호출을 하지 않으며 모델은 애니메이션을 보지 못합니다.
애니메이션은 유지하고 스피너는 그대로 둘 수 있나요?
네. /breathe spinner off를 실행하십시오. 프롬프트 위 띠는 계속 움직이고 스피너는 원래 문구로 돌아갑니다.
데스크톱 앱에서도 작동하나요?
띠는 렌더 대상이 터미널일 때만 그려지며, 다른 곳에서는 코드가 띠를 건너뜁니다. 스피너 문구는 여전히 바뀔 수 있습니다.
Claude Code에서 실행 중인 완료 토스트

완료 토스트

긴 Claude 턴이 끝나면 "Done in 2m 14s" 토스트와 짧은 알림음을 내고, 데스크톱 알림도 선택적으로 보냅니다.

  • 토스트
  • 명령어 실행
  • UI 변경
  • 소리 재생

v2.1.291에서 테스트됨

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

컨텍스트 미터

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

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

v2.1.291에서 테스트됨

더 보기: 타이머, 할 일, 스탠드업, 슬래시 명령.