메뉴
HN
Hacker News 38일 전

폰에서 승인하는 클로드 코드 대시보드, Pulse

IMP
8/10
핵심 요약

Pulse는 Claude Code의 로컬 작업 현황, 토큰 사용량, 세션 컨텍스트를 실시간으로 보여주는 대시보드입니다. 외부 종속성 없이 로컬에서만 작동하며, 스마트폰 푸시 알림을 통해 언제 어디서나 도구 실행 권한을 승인하거나 거부할 수 있는 것이 핵심입니다. 터미널 오류로 인한 세션 손실 방지 및 전체 로그 검색 기능까지 지원합니다.

번역된 본문

원문 제목: Show HN: Pulse – Dashboard for Claude Code, approve tool calls from your phone 소스: hackernews

Claude Code를 위한 Pulse Claude Code를 위한 로컬 대시보드로, Claude가 현재 무엇을 하고 있는지, 비용을 얼마나 지출하고 있는지 보여주며 스마트폰에서 도구 호출을 승인할 수 있게 해줍니다. 종속성이 전혀 없으며 어떤 데이터도 사용자의 기기를 떠나지 않습니다.

Claude Code는 이미 모든 세션을 디스크에 기록합니다. Pulse는 해당 파일들을 (읽기 전용으로) 읽어와서 실시간 대시보드로 변환합니다. 시간, 일, 주 단위의 토큰 지출, 활성 세션의 컨텍스트 충전율, Claude 작업 중인 앰비언트 뷰(주변 뷰), 지금까지 실행한 모든 내용에 대한 전체 텍스트 검색, 그리고 Claude가 사용자의 결정을 필요로 할 때 데스크톱이나 스마트폰에 Allow(허용) / Allow all(모두 허용) / Deny(거부) 버튼이 포함된 알림을 제공합니다. 계정, 원격 측정, 네트워크 호출이 전혀 없습니다.

왜 이것이 필요할까요?

  • 스마트폰에서 승인: 작동하는 Allow / Allow all / Deny 버튼이 포함된 푸시 알림을 받습니다. Wi-Fi 설정, IP 입력, 포트 개방이 필요 없습니다. 셀룰러 네트워크를 포함해 어디서든 작동합니다.
  • 세션 손실 방지: 단 한 번의 명령으로 마지막 세션을 읽을 수 있는 기록으로 복구하고, Pulse는 활성 세션을 자동으로 스냅샷 찍으므로 충돌이나 노트북 멈춤으로 인해 컨텍스트를 잃는 일이 절대 없습니다.
  • 비용 확인: 설정한 예산 대비 시간, 일, 주, 모델 및 프로젝트별 라이브 토큰 및 API 동등 비용을 확인하세요. 예산을 초과하면 폰으로 알림을 받습니다.
  • 앰비언트 오피스 (Ambient office): 작업 중이거나, 쉬거나, 사용자를 기다리는 작은 마스코트의 전체 화면 보기와 대략적인 예상 시간(ETA)을 제공합니다. 보조 모니터에서 조용히 켜두면 빠져들게 됩니다.
  • 모든 것 검색: 디스크에 있는 모든 세션에 대한 전체 텍스트 검색을 지원하며, 클릭 한 번으로 대화 기록으로 이동합니다.
  • 로컬 및 프라이빗: ~/.claude 디렉토리를 읽기 전용으로 읽고 127.0.0.1에서 서비스하며, 종속성이 없고 원격 측정(telemetry)도 없습니다.

[앰비언트 오피스 뷰 이미지] [대시보드나 스마트폰에서 승인하는 이미지]

빠른 시작 Node 18+이 필요합니다. 설치 없이 실행하세요: npx pulse-for-claude-code 또는 클론하세요: git clone https://github.com/nikitadoudikov/claude-pulse.git cd claude-pulse node bin/cli.js 어느 쪽이든 http://127.0.0.1:4317 이 열립니다.

데스크톱 및 스마트폰 알림을 받고 도구 호출을 승인하려면 훅(hooks)을 연결하세요 (명령어 한 개, 재실행해도 안전함): claude-pulse install-hooks # ~/.claude/settings.json에 훅을 추가합니다. 그런 다음 Claude Code를 다시 시작하면 설정이 완료됩니다.

기타 옵션: claude-pulse --port 4317 # 포트 변경 claude-pulse --no-open # 브라우저를 열지 않음

계속 실행하기 포그라운드에서 실행하면 해당 터미널을 닫을 때 Pulse도 종료됩니다. 독립적으로 유지하려면 백그라운드에서 실행하세요: claude-pulse start # 분리 실행, 터미널 종료 시에도 유지 claude-pulse status # 실행 중인지 확인 claude-pulse stop # 중지 claude-pulse restart # 중지 후 다시 시작

터미널이 충돌하면 claude-pulse start 명령어 한 번으로 다시 가져올 수 있으며, 백그라운드 인스턴스는 처음부터 충돌의 영향을 받지 않습니다. macOS에서는 Pulse를 시스템에 넘겨서 로그인 시 시작되고 중단되면 자동으로 다시 시작되게 할 수 있습니다: claude-pulse install-service # 로그인 시 시작, 자동 재시작 claude-pulse uninstall-service # 제거

잃어버린 세션 복구 터미널이 충돌하거나, 노트북이 멈췄거나, 세션 제한에 도달했나요? 잃어버린 것은 없습니다. Claude Code는 모든 세션을 발생 즉시 디스크에 기록합니다. 명령어 한 번으로 마지막 세션을 다시 불러오고, 요약을 인쇄하며, 읽을 수 있는 기록으로 저장합니다: claude-pulse recover # 가장 최근의 세션 claude-pulse recover 2 # 그 이전 세션 claude-pulse recover < id > # 특정 세션

~/.claude-pulse/exports/ 경로에 가벼운 마크다운 파일을 저장하고 (15MB 로그가 약 180KB 파일이 됨) 브라우저나 스마트폰에서 전체 대화 내용을 읽을 수 있는 링크를 출력합니다. 대시보드에서 아무 세션이나 열어서 transcript 열기 / .md 다운로드를 사용할 수도 있습니다. Pulse가 실행되는 동안 최근 활성 세션의 자동 스냅샷을 ~/.claude-pulse/exports/snapshots/에 생성합니다 (세션당 한 개의 파일, 변경될 때만 다시 작성됨). 따라서 recover를 실행하지 않아도 최신 상태가 항상 디스크에 저장됩니다. ~/.claude-pulse.json에서 snapshotMinutes를 0으로 설정하여 이 기능을 끌 수 있습니다.

모든 것을 한 번에 백업하려면 claude-pulse export-all을 사용해 모든 세션을 작은 gzip 마크다운 파일로 작성하거나, Sessions 화면에서 'download all history'를 사용하세요.

모든 세션 검색 어디서 무엇을 했는지 잃어버렸나요? Sessions 화면에는 모든 세션의 바다가...

원문 보기
원문 보기 (영어)
Pulse for Claude Code A local dashboard for Claude Code that shows what Claude is doing, what it is spending, and lets you approve its tool calls from your phone. Zero dependencies, nothing leaves your machine. Claude Code already writes every session to disk. Pulse reads those files (read only) and turns them into a live dashboard: token spend by hour, day and week, the context fill of your active session, an ambient view of Claude at work, full-text search across everything you have ever run, and a notification with Allow / Allow all / Deny buttons when Claude needs you, on your desktop or your phone. No account, no telemetry, no network calls. Why you might want it Approve from your phone. A push with working Allow / Allow all / Deny buttons. No Wi-Fi setup, no IP, no open port: it works from anywhere, even on cellular. Never lose a session. One command recovers your last session as a readable transcript, and Pulse auto-snapshots active ones, so a crash or a frozen laptop never costs you context. See the spend. Live tokens and API-equivalent cost by hour, day, week, model and project, against budgets you set, with a phone alert when you cross one. Ambient office. A full-screen view of a little mascot working, resting, or waiting on you, with a rough ETA. Quietly addictive on a second monitor. Search everything. Full-text search across every session on disk, one click to the transcript. Local and private. Reads ~/.claude read only, serves on 127.0.0.1 , zero dependencies, no telemetry. Ambient office view Approve from the dashboard or your phone Quick start Requires Node 18+. Run it with no install: npx pulse-for-claude-code Or clone it: git clone https://github.com/nikitadoudikov/claude-pulse.git cd claude-pulse node bin/cli.js Either way it opens http://127.0.0.1:4317 . To get desktop and phone notifications and to approve tool calls, wire the hooks (one command, safe to re-run): claude-pulse install-hooks # adds the hooks to ~/.claude/settings.json Then restart Claude Code, and you are set. Other options: claude-pulse --port 4317 # change the port claude-pulse --no-open # do not open the browser Keep it running Run in the foreground and Pulse dies when you close that terminal. To keep it alive independently, run it in the background: claude-pulse start # run detached, survives closing the terminal claude-pulse status # is it running? claude-pulse stop # stop it claude-pulse restart # stop and start again If your terminal crashes, claude-pulse start brings it back in one command, and a background instance is not affected by the crash in the first place. On macOS you can hand Pulse to the system so it starts at login and respawns itself if it ever dies: claude-pulse install-service # start at login, auto-restart claude-pulse uninstall-service # remove it Recover a lost session Terminal crashed, laptop froze, hit a session limit? Nothing is lost: Claude Code writes every session to disk as it happens. One command brings the last one back, prints a recap and saves a readable transcript: claude-pulse recover # the most recent session claude-pulse recover 2 # the one before that claude-pulse recover < id > # a specific session It saves a light markdown file under ~/.claude-pulse/exports/ (a 15 MB log becomes a ~180 KB file) and prints a link to read the full transcript in the browser or on your phone. You can also open any session in the dashboard and use open transcript / download .md . While Pulse runs it also auto-snapshots every recently active session to ~/.claude-pulse/exports/snapshots/ (one file per session, rewritten only when it changes). So the latest state is always on disk even if you never run recover . Set snapshotMinutes to 0 in ~/.claude-pulse.json to turn it off. To back up everything at once, claude-pulse export-all writes every session into a single small gzipped markdown file, or use download all history on the Sessions screen. Search every session Lost where you did something? The Sessions screen has a search box that scans every session on disk for a word or phrase and jumps you straight to the transcript. It works from your phone too. On your phone The simplest phone control is the ntfy notification itself: it carries working Allow / Allow all / Deny buttons (see above), no network setup at all. For a richer view, open http://<your-machine>:4317/phone on the same Wi-Fi (needs bindLan: true ) to see what Claude is doing right now plus a Pause / Resume button. Pausing stops Claude from running further tools until you resume. Both need the PreToolUse hook wired. How it works ┌──────────────┐ writes .jsonl ┌──────────────────────┐ SSE ┌──────────────┐ │ Claude Code │ ─────────────────▶ │ Pulse (read only) │ ───────▶ │ dashboard │ │ (terminal) │ │ 127.0.0.1:4317 │ │ + phone │ └──────┬───────┘ └──────────────────────┘ └──────────────┘ │ │ hooks: Notification · Stop · PreToolUse ▼ ┌─────────────────────────────┐ │ ~/.claude-pulse/ │ pending approvals · decisions · events └─────────────────────────────┘ Claude Code logs every session as JSONL under ~/.claude/projects/ . Each assistant message carries a usage block (input, output and cache tokens) with a timestamp. Pulse reads those files (read only), caches each file by modification time so unchanged sessions are never re-parsed, and aggregates the numbers. The browser gets live updates over Server-Sent Events. Three small hooks let Claude Code tell Pulse when it needs you, when a turn ends, and when it wants to run a tool. Notifications when Claude needs you Claude Code can run a hook when it needs your attention. Point its Notification event at the bundled script and Pulse will show a banner and fire a desktop notification, even if the tab is in the background. The easy way is one command: claude-pulse install-hooks # wires the hooks into ~/.claude/settings.json (safe to re-run) claude-pulse uninstall-hooks # removes them It backs up your settings once, merges next to any hooks you already have, and never adds a duplicate. Restart Claude Code afterwards. To do it by hand instead, add this to ~/.claude/settings.json (use the absolute path to your clone): { "hooks" : { "Notification" : [ { "matcher" : " " , "hooks" : [ { "type" : " command " , "command" : " node /absolute/path/to/claude-pulse/hooks/notify-hook.js " } ] } ], "Stop" : [ { "matcher" : " " , "hooks" : [ { "type" : " command " , "command" : " node /absolute/path/to/claude-pulse/hooks/stop-hook.js " } ] } ], "PreToolUse" : [ { "matcher" : " " , "hooks" : [ { "type" : " command " , "command" : " node /absolute/path/to/claude-pulse/hooks/permission-hook.js " } ] } ] } } Keep claude-pulse running and you are set. Approve tools from the dashboard (and your phone) With the PreToolUse hook wired, when Claude wants to run something that needs permission, an approval card appears in Pulse with Allow , Allow all and Deny . Allow all stops asking for the rest of the run. This is built to never hang Claude. Read only tools pass straight through, and if Pulse is not running, has not heard from you within the approval timeout (60s by default, set approvalTimeoutMs ), or hits any error, it falls back to the normal terminal prompt. Nothing breaks if you ignore it. The phone push carries Allow , Allow all and Deny buttons. To approve from your phone, you only need an ntfyTopic (below) and the ntfy app. The push notification carries Allow , Allow all and Deny buttons, and tapping one sends the answer back through ntfy to a private reply topic that Pulse listens on. No same Wi-Fi, no IP, no open port: it works from anywhere, even on cellular. Pulse only acts on a reply while it is actually waiting for that request, so a stale notification can do nothing. Claude wants to run a tool │ ▼ PreToolUse hook ──▶ Pulse ──push──▶ phone notification │ │ │ tap "Allow" │ │ │ answer returns over ntfy │ │ ▼ ▼ hook is still waiting ◀── decision ◀── Pulse (subscribed to the reply topic) │ ▼ hook returns "allow" ──▶ Claude runs the tool Phone push (optional)