{"id":46286353,"url":"https://github.com/delphinus/homebrew-claude-code-hooks","last_synced_at":"2026-06-06T10:00:50.240Z","repository":{"id":341106040,"uuid":"1166203408","full_name":"delphinus/homebrew-claude-code-hooks","owner":"delphinus","description":"Claude Code hooks for Obsidian integration and notifications","archived":false,"fork":false,"pushed_at":"2026-03-16T06:59:12.000Z","size":119,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-16T19:10:52.896Z","etag":null,"topics":["claude-code","claude-code-hooks","cli","go","homebrew","macos","obsidian"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/delphinus.png","metadata":{"files":{"readme":"README.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-02-25T01:25:22.000Z","updated_at":"2026-03-16T06:59:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/delphinus/homebrew-claude-code-hooks","commit_stats":null,"previous_names":["delphinus/homebrew-claude-code-hooks"],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/delphinus/homebrew-claude-code-hooks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delphinus%2Fhomebrew-claude-code-hooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delphinus%2Fhomebrew-claude-code-hooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delphinus%2Fhomebrew-claude-code-hooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delphinus%2Fhomebrew-claude-code-hooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/delphinus","download_url":"https://codeload.github.com/delphinus/homebrew-claude-code-hooks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delphinus%2Fhomebrew-claude-code-hooks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33977371,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["claude-code","claude-code-hooks","cli","go","homebrew","macos","obsidian"],"created_at":"2026-03-04T07:10:11.846Z","updated_at":"2026-06-06T10:00:50.220Z","avatar_url":"https://github.com/delphinus.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# claude-code-hooks\n\nClaude Code での会話やツール操作を Obsidian ノートに自動記録するための Go バイナリ。5つのサブコマンドで構成される。\n\n- **`claude-code-hooks save`** — Claude Code のフックから呼び出され、イベントをノートに追記する\n- **`claude-code-hooks backfill`** — 既存ノートに session リンクをバックフィルする\n- **`claude-code-hooks setup`** — フック設定を `~/.claude/settings.json` に適用する\n- **`claude-code-hooks notify`** — macOS 通知を表示するヘルパー（WezTerm のフォーカス検出対応）\n- **`claude-code-hooks tabcolor`** — Claude Code の状態に応じて WezTerm のタブ色を変える\n- **`claude-code-hooks completion`** — シェル補完スクリプトを出力する（Bash / Zsh / Fish 対応）\n\n## インストール\n\n```bash\nbrew tap delphinus/claude-code-hooks\nbrew install claude-code-hooks\nclaude-code-hooks setup\n```\n\n開発版（HEAD）をインストールする場合:\n\n```bash\nbrew install --HEAD claude-code-hooks\n```\n\n## 使い方\n\n### claude-code-hooks setup\n\nhooks.json の内容を `~/.claude/settings.json` の `hooks` キーにマージする。`env` や `model` など端末固有の設定はそのまま保持される。\n\n```bash\n# 差分を確認（適用しない）\nclaude-code-hooks setup --diff\n\n# hooks を適用\nclaude-code-hooks setup\n```\n\n### claude-code-hooks save\n\nClaude Code の各フックイベントに応じて、セッションごとに1つの Obsidian ノート（`.md`）を作成し、時系列でイベントを追記していく。\n\n#### 対応イベントと記録内容\n\n| フックイベント     | 記録内容                                   |\n| ------------------ | ------------------------------------------ |\n| `UserPromptSubmit` | ユーザーの入力テキスト（`## User` 見出し） |\n| `Stop`             | アシスタントの応答（`## Assistant` 見出し）  |\n| `PostToolUse`      | ツール使用（下記参照）                     |\n| `SessionEnd`       | Haiku で要約を生成しフロントマターの後に挿入 |\n\n#### PostToolUse で記録するツール\n\n| ツール名        | 記録形式                                            | 備考                                             |\n| --------------- | --------------------------------------------------- | ------------------------------------------------ |\n| `Bash`          | `\u003e [!terminal]- description (HH:MM:SS)` + コード   | ブロックリストに該当するコマンドはスキップ        |\n| `EnterPlanMode` | `\u003e [!plan] Entering Plan Mode (HH:MM:SS)`           | related リンクの追加も試みる                       |\n| `ExitPlanMode`  | `\u003e [!plan]- タイトル (HH:MM:SS)` + プラン全文       | プランの先頭行をタイトルに使用                   |\n| `Edit`          | `\u003e [!file] Edit: path (HH:MM:SS)`                   | ファイルパスのみ（内容は記録しない）             |\n| `Write`         | `\u003e [!file] Write: path (HH:MM:SS)`                  | 同上                                             |\n\n#### Bash コマンドのフィルタリング\n\nブロックリスト方式。以下のコマンドは探索用としてスキップする:\n\n`ls`, `cat`, `head`, `tail`, `wc`, `file`, `stat`, `which`, `where`, `type`, `echo`, `printf`, `pwd`, `cd`, `test`, `true`, `false`, `grep`, `rg`, `find`, `diff`, `sort`, `uniq`, `tr`, `cut`, `mkdir`, `rmdir`, `rm`, `cp`, `mv`, `ln`, `chmod`, `chown`, `touch`, `basename`, `dirname`, `realpath`, `readlink`, `tree`, `du`, `df`, `less`, `more`, `xargs`, `tee`, `whoami`, `hostname`, `date`, `uname`, `env`, `set`, `export`, `alias`, `id`, `jq`\n\nパイプやチェインで繋がったコマンドは、1つでも記録対象があれば全体を記録する。\n\n#### 再開セッションのリンク\n\n`claude -r` でセッションを再開した場合、同じ `session_id` の既存ノートを自動検出し、新しいノートにリンクを追加する。\n\n- **frontmatter** に `related` フィールドとして `[[ファイル名]]` のリストを追加\n- **本文** に `\u003e [!link] Previous Sessions` コールアウトとして wiki-link を追加\n\n#### ノートのファイル名規則\n\n```\nYYYYMMDD-HHMMSS-SSID-タイトル.md\n```\n\n- `SSID`: セッション ID の先頭4文字\n- タイトル: 最初のユーザープロンプトの先頭50文字から生成\n\n### claude-code-hooks backfill\n\n既存の Obsidian ノートに対して、同じ `session_id` を持つノート間の `related` リンクをバックフィルする。何度実行しても安全（冪等）。\n\n```bash\n# 変更内容のプレビュー（ファイルは変更しない）\nclaude-code-hooks backfill --dry-run\n\n# 実行\nclaude-code-hooks backfill\n```\n\n### claude-code-hooks notify\n\nmacOS の通知を表示する。WezTerm 使用時は、現在のペインがフォーカスされている場合は通知を抑制する。\n\n```bash\nclaude-code-hooks notify 'タイトル' 'メッセージ'\n```\n\n### claude-code-hooks tabcolor\n\nClaude Code の状態を WezTerm のタブ色で可視化する。各フックイベントで現在のペイン (`$WEZTERM_PANE`) の user var `claude_state` をセットし、WezTerm 側の `format-tab-title` でその値に応じてタブ背景を塗り分ける。\n\n```bash\nclaude-code-hooks tabcolor \u003cstartup|thinking|idle|waiting|default\u003e\n```\n\n- WezTerm 外（`WEZTERM_PANE` 未設定）では何もしない。\n- 装飾目的なので失敗は握り潰し、フックの流れを止めない。\n\n#### 仕組み\n\nWezTerm には user var をセットする CLI が無いため、`claude_state` は OSC 1337 `SetUserVar` エスケープシーケンスで設定する。フックの標準出力は Claude Code にキャプチャされ `/dev/tty` も使えないことがあるので、対話実行で標準出力が端末のときはそこへ、そうでないときは `wezterm cli list` で `$WEZTERM_PANE` の tty デバイスを引いてそこへ書き込む。user var は mux 経由で GUI クライアントへ同期される。\n\nmux 多重化環境では GUI 側のペイン ID が `$WEZTERM_PANE` と一致せず、また Claude のペインがタブのアクティブペインとは限らない。そのため `format-tab-title` 側は `active_pane` だけでなく**タブ内の全ペイン**を走査し、`claude_state` が立っているペインがあればそのタブを塗る。\n\n#### 状態と対応イベント\n\n| 状態 (`claude_state`) | 意味   | フックイベント                                 |\n| --------------------- | ------ | ---------------------------------------------- |\n| `startup`             | 起動時 | `SessionStart`                                 |\n| `thinking`            | 思考中 | `UserPromptSubmit` / `PostToolUse`             |\n| `idle`                | 待機中 | `Stop` / `Notification(idle_prompt)`           |\n| `waiting`             | 入力待ち | `PermissionRequest` / `Notification(permission_prompt)` |\n| `default`             | 非起動時 | `SessionEnd`（タブ色を通常に戻す）           |\n\n#### WezTerm 側の設定\n\n`wezterm.lua`（または `format-tab-title` を定義しているファイル）で user var を読んでタブを塗る。`use_fancy_tab_bar = true` でもタブ背景に反映される。`active_pane` だけでなくタブ内の全ペイン (`tab.panes`) を走査するのがポイント。\n\n```lua\nlocal STATE_BG = {\n  startup = \"#7dcfff\",\n  thinking = \"#bb9af7\",\n  idle = \"#9ece6a\",\n  waiting = \"#e0af68\",\n}\n\n-- タブ内のいずれかのペインに claude_state が立っていれば、その色を返す\nlocal function claude_bg(tab)\n  for _, p in ipairs(tab.panes) do\n    local uv = p.user_vars\n    local s = uv and uv.claude_state\n    if s and STATE_BG[s] then\n      return STATE_BG[s]\n    end\n  end\n  return nil\nend\n\nwezterm.on(\"format-tab-title\", function(tab, tabs, panes, config, hover, max_width)\n  local bg = claude_bg(tab)\n  local title = \" \" .. (tab.active_pane.title or \"\") .. \" \"\n  if bg then\n    return {\n      { Background = { Color = bg } },\n      { Foreground = { Color = \"#1a1b26\" } },\n      { Text = title },\n    }\n  end\n  return title\nend)\n```\n\n### claude-code-hooks completion\n\nシェル補完スクリプトを出力する。Bash、Zsh、Fish に対応。\n\nHomebrew でインストールした場合は補完が自動的にインストールされるため、手動設定は不要。\n\n手動で設定する場合:\n\n```bash\n# Bash（~/.bashrc に追記）\neval \"$(claude-code-hooks completion bash)\"\n\n# Zsh（~/.zshrc に追記）\neval \"$(claude-code-hooks completion zsh)\"\n\n# Fish（~/.config/fish/config.fish に追記）\nclaude-code-hooks completion fish | source\n```\n\n## 環境変数\n\n| 変数名 | 説明 |\n|---|---|\n| `CLAUDE_OBSIDIAN_VAULT` | Obsidian vault パスの上書き（デフォルト: iCloud 上の `Notes/Claude Code`） |\n\n## 前提条件\n\n- macOS + iCloud 同期の Obsidian vault（`~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Notes/Claude Code/`）\n- `claude` CLI（SessionEnd での要約生成に使用）\n\n## リリース\n\nバージョンは [Semantic Versioning](https://semver.org/) に従う。新しいバージョンをリリースするには:\n\n```bash\ngit tag v2.x.x\ngit push origin v2.x.x\n```\n\nタグをプッシュすると GitHub Actions が自動的に以下を実行する:\n\n1. GitHub Release を作成（リリースノートは自動生成）\n2. リリースの tarball から sha256 を計算\n3. `Formula/claude-code-hooks.rb` を新しいバージョンの URL と sha256 で更新\n4. Formula の変更を `main` ブランチにコミット・プッシュ\n\nリリース後は `brew upgrade claude-code-hooks` で更新できる。\n\n## ファイル構成\n\n```\n~/.claude/\n└── settings.json           # Claude Code の設定（端末固有、git 管理外）\n\n~/.cache/claude-obsidian/\n└── \u003csession-id\u003e            # セッションとノートの対応キャッシュ\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdelphinus%2Fhomebrew-claude-code-hooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdelphinus%2Fhomebrew-claude-code-hooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdelphinus%2Fhomebrew-claude-code-hooks/lists"}