---
title: "tool-timer"
url: "https://claudemods.dev/zh-cn/builds/tool-timer-3ebadd"
source: "https://github.com/UtakataKyosui/exp-claude-mod-sample"
source_type: "github"
repo: "https://github.com/UtakataKyosui/exp-claude-mod-sample"
author: "UtakataKyosui"
author_handle: "UtakataKyosui"
stars: 0
category: "工作流与 CI"
categories: ["workflow"]
tags: ["hooks", "slash-commands", "tool-timing", "usage-stats", "work-log"]
permission_level: 2
scan_complete: true
install: "claude plugin marketplace add UtakataKyosui/exp-claude-mod-sample\nclaude plugin install tool-timer"
added: "2026-11-13T05:05:17.959Z"
updated: "2026-09-15T10:50:18Z"
locale: "zh-cn"
content_locale: "zh-cn"
---

# tool-timer

一个最小配置的 Claude Mod，用于测量 Claude Code 工具调用所花费的时间，在执行期间显示 notice，并在完成时显示包含耗时的 toast。它还提供可查看工具、Skill、Agent 使用情况的斜杠命令，以及按日期记录的工作日志。

## Description

tool-timer 是一个用于试用 Claude Code 早期访问功能 Claude Mods（原 Function Hooks）的最小配置插件。它通过函数钩子包装所有工具调用，在执行期间显示 notice，并在完成时显示包含耗时的 toast。此外，/tool-stats、/skill-stats、/agent-stats 这三个斜杠命令可分别查看工具、Skill、Agent 的使用情况。所有工具调用都会自动记录到 .claude/work-log/YYYY-MM-DD.md，作为按日期划分的工作日志，主要参数也会一并追加。汇总数据保存在 $.store 中，/tool-stats 和 /skill-stats 会跨会话累计。/agent-stats 基于 $.agent.list()，因此只汇总会话内的信息。可在 Claude Code 2.1.267 或更高版本的早期访问版中运行 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude --plugin-dir . 进行试用。Bash 的 command 会以明文记录，因此提醒不要在处理包含令牌或凭据的命令的环境中使用。

## Install

```
claude plugin marketplace add UtakataKyosui/exp-claude-mod-sample
claude plugin install tool-timer
```

## Original README

# tool-timer — Claude Mods sample

Claude Code の早期アクセス機能 **Claude Mods**（旧称 Function Hooks）を試す、最小構成の Plugin です。すべてのツール呼び出しを関数フックで包み、実行中の notice と完了時の所要時間 toast を表示します。さらに `/tool-stats`・`/skill-stats`・`/agent-stats` の3つのスラッシュコマンドで、ツール・Skill・Agent それぞれの使用状況を確認できます。また、すべてのツール呼び出しを日付ごとの作業ログファイルに自動で記録します。

## Claude Mods とは

Mod は、振る舞いを TypeScript の hooks module に実装した Claude Code Plugin です。入口は `register(on, options)` で、各フックは `($, event, next)` を受け取ります。

- `on(...)` はイベントと matcher に関数を登録します。
- `next(event)` は内側の Plugin または Claude Code 本体へ処理を渡します。
- `$` は UI、時計、ファイル、モデルなど、ホストが許可した副作用への窓口です。
- 登録順が middleware の入れ子順になります。先に登録されたフックほど外側です。
- `on('*', ...)` で Plugin 自身が `$` に対して行った呼び出しも含め、全イベントを観測できます。

従来の command / prompt / agent hook が外部プロセスを起動するのに対し、Function Hook は Claude Code 内のイベントを型付き関数として合成でき、入力・結果・UI まで扱える点が大きな違いです。

> [!WARNING]
> 2026-09-15 現在は早期アクセスです。公式案内でも API はリリース間で予告なく変わり得るとされています。

## 構成

```text
.
├── .claude-plugin/plugin.json  # Plugin manifest
├── hooks/
│   ├── hooks.json              # hooks module の宣言（modules は 1 エントリのみ）
│   ├── register.ts             # Mod 本体: hooks.json が指す唯一のエントリ
│   ├── stats.ts                # /tool-stats 用の集計・整形ロジック
│   ├── format-duration.ts      # 所要時間の表示整形（共通）
│   ├── work-log.ts             # 作業ログ1行分のフォーマット・パス決定
│   ├── skill-stats.ts          # /skill-stats 用の集計・整形ロジック
│   └── agent-stats.ts          # /agent-stats 用の集計・整形ロジック
├── tests/
│   ├── register.test.ts        # Claude Code 組み込み test runner 用
│   ├── stats.test.ts
│   ├── work-log.test.ts
│   ├── skill-stats.test.ts
│   └── agent-stats.test.ts
└── tsconfig.json
```

## 試し方

Claude Code 2.1.267 以降の早期アクセス版で、リポジトリ直下から実行します。

```bash
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude --plugin-dir .
```

起動後に Claude にファイルを読ませるなど、何かツールを使わせてください。ツール実行中に `Timing Read…`、完了後に `Read finished in 42 ms` のように表示されます。

`/tool-stats` を実行すると、ツールごとの累計呼び出し回数と累計所要時間が一覧表示されます。集計は `$.store` に保存され、セッションをまたいで積み上がります。

```text
Read: 12 calls, 3.4 s total
Bash: 5 calls, 820 ms total
```

作業ログは `.claude/work-log/YYYY-MM-DD.md` に、ツール呼び出しごとに1行ずつ追記されます。主要な引数（`file_path`・`command`・`path` など、見つかった最初のもの）も添えます。`fs.write` はディレクトリを自動作成するので事前準備は不要です。

書き込み先はこの Plugin を起動したセッションの作業ディレクトリ配下です。このリポジトリの `.gitignore` はこのリポジトリしか守りません。別のリポジトリで `claude --plugin-dir` からこの Mod を試す場合は、そのリポジトリの `.gitignore` にも `.claude/work-log/` を追加してください。また `Bash` の `command` はそのまま平文で記録されるため、トークンや認証情報を含むコマンドを扱う環境では使わないでください。

```text
- 09:15:03 Read `README.md`
- 09:16:40 Bash `jj git push --bookmark feat/tool-stats`
```

`/skill-stats` は Skill ごとの累計呼び出し回数を表示します。`skill.prompt` イベント（Skill が展開されてモデルに渡る直前のフック）を数えており、`$.store` に保存されるので `/tool-stats` と同じくセッションをまたいで積み上がります。

```text
commit: 4 calls
code-review: 2 calls
```

`/agent-stats` は `$.agent.list()` が返す、そのセッションで spawn された Agent（サブエージェント・teammate）を種別（`subagent_type`）ごとに集計し、状態（`running`・`completed` など）の内訳とあわせて表示します。`$.agent.list()` はセッション内の情報しか返さないため、こちらは `/tool-stats`・`/skill-stats` と違って**セッションをまたいで累積しません**。

```text
general-purpose: 3 (completed: 2, running: 1)
Explore: 1 (completed: 1)
```

型定義は `.claude/types/` に置き、Claude Code のバージョンに合わせて生成します。`.gitignore` で除外しているため、clone 後にまず実行してください。

```text
/plugin-types
```

テストと manifest 検証は次の通りです。

```bash
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude plugin test .
claude plugin validate .
```

## 参考資料

- [公式提案・Community Update: Mods - make Claude 10x more extensible](https://github.com/anthropics/claude-code/issues/91870)
- [公式リポジトリの組み込み Mods](https://github.com/anthropics/claude-code/tree/main/mods)

このサンプルは公式リポジトリの `.claude-plugin/plugin.json`、`hooks/hooks.json`、`hooks/register.ts` という現在の構成に合わせています。
