<img src="https://raw.githubusercontent.com/msllrs/jattends/HEAD/Resources/icon.png" alt="Jattends icon" width="64">
Jattends는 사용자의 [Claude Code] 세션에 주의가 필요할 때 알려주는 메뉴바 앱입니다.
프랑스어 "j'attends"에서 유래했으며, 이는 "저는 기다리고 있다(I'm waiting)"라는 뜻입니다.
설치 (Install)
git clone https://github.com/msllrs/jattends.git
cd jattends
bash scripts/install.sh
프롬프트가 나타날 때 접근성(Accessibility) 권한을 부여해야 합니다. 이렇게 해야 Jattends가 세션을 클릭했을 때 올바른 터미널 창을 띄울 수 있습니다. Ghostty, iTerm2 또는 Terminal.app 세션을 처음 클릭할 때 해당 앱에 대한 일회성 자동화(Automation) 프롬프트도 나타납니다. 이를 허용하면 Jattends가 정확한 분할 창(split pane)이나 탭에 초점을 맞출 수 있습니다.
작동 방식 (How it works)
Jattends는 세션 상태를 추적하기 위해 Claude Code [hooks]를 사용합니다. 도구 승인(tool approval), 질문, 오류 등 주의가 필요한 일이 생기면 메뉴바에 배지(badge)가 나타납니다. 세션을 클릭하여 올바른 터미널 창으로 바로 이동하거나, 현재 작업을 중단하지 않고도 권한 요청을 승인할 수 있습니다.
<img src="https://raw.githubusercontent.com/msllrs/jattends/HEAD/Resources/screenshot.png" alt="Jattends menubar dropdown" width="420">
기능 (Features)
- 메뉴바에서 승인(Approve from the menu bar) — Claude가 권한을 요청할 때, 알림 또는 메뉴바에서 '승인(Approve)'/‘거부(Deny)’로 답변합니다. 창 전환이 필요 없습니다. 제때 응답하지 않으면 프롬프트는 평소처럼 터미널에 나타납니다.
- 실시간 세션 상태(Live session states) — 승인이 필요하며, 대기 중(waiting), 오류(error), 작업 중(working) (무엇을 하는지: "Running: npm test", "Editing: Store.swift"), 압축 중(compacting), 준비 완료(ready) 등의 상태가 있습니다.
- 세션 이름(Session names) — 폴더 이름만 표시하는 대신 Claude Code의 세션 이름("fix scroll overlay gaps")으로 행 제목을 지정하여, 하나의 리포지토리 내 10개의 세션을 구별할 수 있게 합니다 (선택적 statusline bridge 필요).
- 메뉴바 배지(Menubar badge) — 어떤 세션이 자신을 필요로 하는지 한눈에 확인할 수 있습니다.
- 터미널 포커스(Terminal focus) — 세션을 클릭하면 정확한 창/탭이 활성화됩니다 (OSC 2 제목 태깅 사용으로, 동일 프로젝트 내 두 세션도 올바르게 해결됨). Ghostty 1.3+와 iTerm2는 정확한 **분할 패널(split pane)**에 포커스를 맞추고, Terminal.app은 정확한 탭에 포커스합니다 (자동화 권한을 요청받으면 부여해야 합니다).
- 해제(Dismiss) — 세션을 Option 키를 누른 채 클릭하여 해제하거나, 헤더를 Option 키를 누른 채 클릭하여 모두 지울 수 있습니다.
- 알림(Notifications) — 세션의 상태와 상세 정보가 포함된 네이티브 macOS 알림입니다.
- 사운드 알림(Sound alerts) — 시스템 사운드를 재생하며, 해제될 때까지 반복할지 여부를 선택할 수 있습니다.
- 전역 단축키(Global shortcut) — 모든 앱에서 가장 최근에 대기 중인 세션으로 이동합니다.
- 자동 정리(Auto-clear) — 설정 가능한 시간 초과 후 주의가 필요한 세션을 자동으로 해제합니다.
- 다중 터미널(Multi-terminal) — Ghostty, Terminal.app, iTerm2, kitty, Warp, Alacritty, WezTerm, Hyper, VS Code
기본적으로 인앱 승인 기능은 활성화되어 있습니다. 알림, 사운드, 단축키 및 자동 정리는 기본적으로 비활성화되어 있습니다. 설정(메뉴바 아이콘 → 설정)에서 구성할 수 있습니다.
세션 이름 (선택 사항)
Claude Code는 statusLine 명령어에 세션의 표시 이름(자동 생성된 토픽 제목 또는 사용자의 /rename 이름)만 노출하며, 세션 중간 단계의 훅(hooks)에는 노출하지 않습니다. 만약 statusline 스크립트를 사용하는 경우, 이 줄을 추가하면 Jattends가 세션 이름으로 행 제목을 지정합니다:
echo "$input" | ~/.claude/hooks/jattends-hook.py --statusline >/dev/null 2>&1 &
브릿지(bridge)가 없으면, 행(rows)은 이전과 같이 프로젝트 폴더 이름으로 되돌아갑니다.
Raycast 확장 프로그램 (Raycast Extension)
빠른 퍼지 검색(fuzzy-search) 세션 전환을 위한 보조 Raycast 확장 프로그램입니다. 설정은 raycast-extension/를 참조하십시오.
요구 사항 (Requirements)
제거 (Uninstall)
bash scripts/uninstall.sh
라이선스 (License)
MIT