{"id":48085201,"url":"https://github.com/chsm04/pulse","last_synced_at":"2026-04-20T01:00:45.439Z","repository":{"id":346708914,"uuid":"1191242709","full_name":"chsm04/pulse","owner":"chsm04","description":"Local Channel plugin for Claude Code — push notifications into sessions via HTTP. No Discord, no Slack, just curl.","archived":false,"fork":false,"pushed_at":"2026-03-25T09:12:56.000Z","size":37,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T09:38:52.930Z","etag":null,"topics":["automation","bun","channel","ci-cd","claude-code","claude-code-plugin","developer-tools","mcp","mcp-server","notifications","plugin"],"latest_commit_sha":null,"homepage":"https://github.com/chsm04/pulse#readme","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chsm04.png","metadata":{"files":{"readme":"README.ko.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-25T03:45:53.000Z","updated_at":"2026-03-25T12:17:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/chsm04/pulse","commit_stats":null,"previous_names":["chsm04/pulse"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/chsm04/pulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsm04%2Fpulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsm04%2Fpulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsm04%2Fpulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsm04%2Fpulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chsm04","download_url":"https://codeload.github.com/chsm04/pulse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsm04%2Fpulse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32028547,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"ssl_error","status_checked_at":"2026-04-20T00:17:31.068Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","bun","channel","ci-cd","claude-code","claude-code-plugin","developer-tools","mcp","mcp-server","notifications","plugin"],"created_at":"2026-04-04T15:14:13.314Z","updated_at":"2026-04-20T01:00:45.433Z","avatar_url":"https://github.com/chsm04.png","language":"TypeScript","funding_links":[],"categories":["Plugins"],"sub_categories":["All Plugins"],"readme":"# Pulse\n\nClaude Code 세션에 외부 알림을 실시간으로 주입하는 로컬 Channel 플러그인.\n\nDiscord, Telegram 같은 외부 서비스 없이 HTTP POST 하나로 대화에 끼어들 수 있어요.\n\n**[English](./README.md)**\n\nhttps://github.com/user-attachments/assets/7bf4442e-8be9-4a6b-bfa0-b6dd4d41245e\n\n## 왜 Pulse인가?\n\nCI가 실패할 때마다 메일을 확인하고, 에이전트에게 \"CI 결과 확인해봐\"라고 말하고 있진 않나요?\n\n빌드 에러가 나면 에러 로그를 직접 복사해서 붙여넣고 있진 않나요?\n\n배포 스크립트를 돌려놓고, 끝났는지 직접 터미널을 열어보고 있진 않나요?\n\nPulse가 있으면 그럴 필요 없어요. 백그라운드 프로세스가 끝나면 세션에 직접 메시지를 보내요.\n\nPulse는 Claude Code의 [Channels](https://docs.anthropic.com/en/docs/claude-code/channels) 프로토콜을 활용하는 **이벤트 추상화 레이어**예요. 외부 메신저 없이, HTTP 호출이 가능한 모든 로컬 프로세스가 Claude Code 세션과 직접 소통할 수 있어요.\n\n## 개념\n\n```\n훅 / 스크립트 / cron\n    ↓ HTTP POST localhost:3400/notify\nPulse MCP 서버\n    ↓ notifications/claude/channel\nClaude Code 세션에 실시간 주입\n```\n\nPulse는 Claude Code의 [Channels](https://docs.anthropic.com/en/docs/claude-code/channels) 프로토콜을 활용해요. MCP 서버가 `claude/channel` capability로 등록되고, HTTP 요청을 받으면 `notifications/claude/channel`로 세션에 메시지를 전달해요.\n\n## 설치\n\n### 1. Claude Code에서 marketplace 추가\n\n`/plugins` → `Add Marketplace` → `chsm04/pulse` 입력\n\n### 2. pulse 플러그인 설치\n\nmarketplace 목록에서 pulse 선택 → Install\n\n### 3. 채널 모드로 세션 시작\n\n```bash\nclaude --dangerously-load-development-channels plugin:pulse@pulse\n```\n\n## API\n\n### POST `/notify`\n\n알림을 Claude Code 세션에 전달.\n\n```bash\ncurl -s -X POST localhost:3400/notify \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"메시지 내용\",\"source\":\"ci\",\"level\":\"error\"}'\n```\n\n| 필드 | 타입 | 필수 | 설명 |\n|------|------|------|------|\n| `text` | string | O | 알림 내용 |\n| `source` | string | X | 알림 출처 (ci, deploy, cron 등) |\n| `level` | string | X | `info` \\| `warn` \\| `error` (기본: info) |\n\n**응답:** `204 No Content` (성공 시 `x-pulse-id` 헤더에 메시지 ID 포함)\n\n### GET `/health`\n\n```bash\ncurl localhost:3400/health\n# {\"status\":\"ok\",\"port\":3400,\"session\":\"12345\",\"pid\":67890}\n```\n\n## 활용 예시\n\n### CI/CD 결과 알림\n\n[`examples/ci-watcher.sh`](./examples/ci-watcher.sh) — GitHub Actions 실행을 추적하고 결과를 Pulse로 보내주는 hook 스크립트에요.\n\n**기능:**\n- Claude Code PID를 기반으로 Pulse 포트를 자동 탐색\n- 중복 알림 방지 (`git push` + `gh pr create` 동시 트리거 시 1번만 알림)\n- `.ci-watch-ignore`로 특정 워크플로우 제외 가능\n- 여러 CI run을 동시 추적, 각각 완료될 때마다 알림\n\n**설정** — `~/.claude/settings.json`에 추가:\n\n```json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Bash\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash /path/to/ci-watcher.sh\",\n            \"statusMessage\": \"CI watcher started...\",\n            \"async\": true\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n`gh`, `jq`, `curl`이 필요해요.\n\n### 빌드 에러 자동 전달\n\nhttps://github.com/user-attachments/assets/7bf4442e-8be9-4a6b-bfa0-b6dd4d41245e\n\n[`examples/build-notify.sh`](./examples/build-notify.sh) — 빌드 실패 시 에러 로그를 세션으로 보내주는 래퍼 스크립트에요.\n\n빌드 스크립트에 추가하면, 실패 시 에러 로그를 세션으로 바로 보내요:\n\n```bash\n#!/bin/bash\nBUILD_OUTPUT=$(npm run build 2\u003e\u00261)\nEXIT_CODE=$?\nif [ $EXIT_CODE -ne 0 ]; then\n  # 마지막 30줄만 전달 (너무 길면 잘림)\n  ERROR=$(echo \"$BUILD_OUTPUT\" | tail -30 | jq -Rsa .)\n  curl -s -X POST localhost:3400/notify \\\n    -H \"Content-Type: application/json\" \\\n    -d \"{\\\"text\\\":$ERROR,\\\"source\\\":\\\"build\\\",\\\"level\\\":\\\"error\\\"}\"\nfi\n```\n\n### 배포 완료 알림\n\n배포 스크립트 끝에 한 줄 추가:\n\n```bash\n#!/bin/bash\ndocker compose up -d --build backend\ncurl -s -X POST localhost:3400/notify \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\":\"backend 배포 완료\",\"source\":\"deploy\",\"level\":\"info\"}'\n```\n\n### cron job 결과 알림\n\n```bash\n# crontab -e\n0 * * * * /path/to/backup.sh \u0026\u0026 curl -s -X POST localhost:3400/notify -H \"Content-Type: application/json\" -d '{\"text\":\"백업 완료\",\"source\":\"cron\",\"level\":\"info\"}' || curl -s -X POST localhost:3400/notify -H \"Content-Type: application/json\" -d '{\"text\":\"백업 실패!\",\"source\":\"cron\",\"level\":\"error\"}'\n```\n\n### 서버 모니터링\n\n```bash\n#!/bin/bash\nUSAGE=$(df -h / | awk 'NR==2{print $5}' | tr -d '%')\nif [ \"$USAGE\" -gt 90 ]; then\n  curl -s -X POST localhost:3400/notify \\\n    -H \"Content-Type: application/json\" \\\n    -d \"{\\\"text\\\":\\\"디스크 사용량 ${USAGE}% 초과!\\\",\\\"source\\\":\\\"monitor\\\",\\\"level\\\":\\\"warn\\\"}\"\nfi\n```\n\n## 설정\n\n| 환경변수 | 기본값 | 설명 |\n|----------|--------|------|\n| `PULSE_PORT` | `3400` | HTTP 서버 포트 |\n\n## 제약사항\n\n- localhost 전용 (127.0.0.1)\n- 인메모리 (서버 재시작 시 초기화)\n- Claude Code 세션이 `--dangerously-load-development-channels`로 시작돼야 함\n- 인증 없음 (로컬 환경 전용)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchsm04%2Fpulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchsm04%2Fpulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchsm04%2Fpulse/lists"}