会話の最初のメッセージに現在ブランチ・git status・main からの差分コミットを注入する

個人用のdotfiles設定リポジトリです。 パッケージ管理と Homebrew 管理は別の nix-config リポジトリで行い、このリポジトリは主にシェルやアプリ設定を管理します。
git clone https://github.com/yourusername/dotfiles.git ~/dotfiles
cd ~/dotfiles
cd ~/nix-config
darwin-rebuild switch --flake .#<nix-configで定義したホスト名>
./install.sh
既存の設定ファイルは~/backupディレクトリにバックアップされます。
install.sh: dotfilesのシンボリックリンク作成スクリプトMANUAL_APPS.md: 手動インストールが必要なアプリケーション一覧.config/: 各種アプリケーションの設定ファイル.zshrc: Zshシェルの設定.gitconfig: Git設定.tmux.conf: tmux設定.claude/: Claude Code の設定.codex/: Codex の設定hooks/index.ts 25 lines1import type { Register } from "claude-code";
2
3export const register: Register = (on) => {
4 on("prompt.context", async ($, e, next) => {
5 const run = async (argv: readonly string[]) => {
6 const r = await $.process.run(argv);
7 return r.exitCode === 0 ? r.stdout.replace(/\n$/, "") : undefined;
8 };
9
10 const inRepo = await run(["git", "rev-parse", "--is-inside-work-tree"]);
11 if (inRepo === undefined) return next(e);
12
13 const branch =
14 (await run(["git", "rev-parse", "--abbrev-ref", "HEAD"])) ?? "?";
15 const status = (await run(["git", "status", "--short"])) || "(クリーン)";
16 let text = `現在のブランチ: ${branch}\n\n## git status --short\n${status}`;
17 if (branch !== "main") {
18 const log = await run(["git", "log", "--oneline", "main..HEAD"]);
19 text += `\n\n## main からの差分コミット\n${log || "(なし)"}`;
20 }
21
22 return next({ ...e, blocks: [...e.blocks, { name: "gitStatus", text }] });
23 });
24};
25