nuu

nuu

Claude Code に長い作業を任せている間、「今なにしてる?」に 1 枚の HTML で答えるサブエージェントです。

ぬーやが?沖縄の言葉で「なに?」。「ぬー」は「何」を意味します。

作業ごとのダッシュボード 全プロジェクトの一覧 判断待ちでも止まらない スマホの幅にも対応

実験的なツールです。動作は macOS と Claude Code 2.1.283 で確認しています。Claude Code の更新で、動きが変わることがあります。

画面

開けば、進み具合と待っていることがわかる

作業ごとのダッシュボードの上部。状態、完了した手順、未回答の質問、止まっているもの、トークン量の要約。そのすぐ下に作業に関係する GitHub の項目を並べた「GitHub」の欄(PR #128 と Issue #121、題名、レビュー中とオープンの札、最終更新)。その下に利用者への質問と止まっているもの、未着手、進行中、待ち、停止、完了の列に分かれた手順のカンバンが並ぶ
作業ごとのダッシュボード。架空の通販サイトの作業で作った見本です。
スマホの幅で表示した作業ごとのダッシュボードの上部。要約と「GitHub」の欄(PR #128 と Issue #121)が縦に並ぶ
スマホの幅では 1 列に並びます。
全プロジェクトの作業を進行中、中断中、完了に分けて並べた一覧。各行に作業名、プロジェクト名、セッションの ID の先頭、GitHub / GitLab の項目の札(PR #128、MR !42、Issue #121、リリース v2.0.0、リポジトリ api-guide など。多いときは先頭の 3 件と「ほか n 件」)、状態、完了した手順、未回答の質問、止まっているもの、トークン量が並び、15 分以上更新のない進行中の作業は目立たせる
全プロジェクトの作業の一覧。
セッションの欄。セッションの ID、作業ディレクトリ、claude --resume で再開するコマンドが並び、ID とコマンドにはコピーのボタンが付く
ページの下部にあるセッションの欄。コマンドをコピーして、作業した会話に戻れます。
トークン量の欄。キャッシュの読み込みを除いた量と合計の下に、作業本体・ほかのサブエージェント・ダッシュボードの作成と更新の内訳と、入力・出力・キャッシュの種類が並び、その下の「ダッシュボードのモデル」に作成(builder)の Opus 5.5 と更新(updater)の Sonnet 5.5 が並ぶ
ページの下部にあるトークン量の欄。ダッシュボードを作成・更新したモデルも並びます。
仕組み

作業する Claude と、ダッシュボードを書く係を分ける

作業そのものは、いつもの Claude Code が進めます。ダッシュボードを書くのは、専用の 2 つのサブエージェントです。書き込みはすべてフックのスクリプトを通り、決まった場所にだけ書かれます。

利用者 Claude Code 作業を進める CLAUDE.md のルール dashboard-builder opus・パネルを選んでデータを書く dashboard-updater sonnet・途中の更新と完了 会話の記録 ~/.claude/projects フック ガード 書く前に場所を確認 データの確認 壊れたら直させる ページと一覧 データから作る トークン集計 .usage.js に書く ダッシュボード 作業のデータ ページと一覧 固定のクライアント ~/.claude/nuu/ ブラウザ 10 秒ごとに読む 依頼・回答 用意 完了を待つ 途中の更新 待たない 収まらない変化は回す 書く 読む
用意は完了を待ち、途中の更新は待たずに作業を続けます。サブエージェントが書くのは作業のデータだけで、書き込みはフックのガードとデータの確認を通ります。ページのファイルと一覧はフックのスクリプトが作ります。
dashboard-builder・opus

作業に合わせて、1 枚目を作る

作業の性質を見て、7 種類のパネルから載せるものと並びと中身を選び、作業のデータを書きます。HTML は書きません。初回だけ、好みのテーマ、密度、アクセントカラーを聞き、すべてのダッシュボードに使います。builder と updater のモデルは、頼めば ~/.claude/nuu/settings.json に保存して変えられます。

dashboard-updater・sonnet

途中の更新は、軽く速く

回数の多い途中の更新は、effort low で変わった箇所だけを書き換えます。作業のデータファイルだけを書き換え、パネルの構成と一覧には触れません。今のパネルに収まらない変化は、builder に回します。

フック

書き込みを、スクリプトで確かめる

ガードが読み書きできる場所を絞り、書いた直後にデータが決まった形かを確かめます。作業ごとのページのファイルと一覧のデータは、すべての作業のデータからスクリプトが作ります。トークン量は、Claude Code の会話の記録からスクリプトが集計します。セッションの ID と作業ディレクトリも、フックに渡された値をスクリプトが書きます。

client/

見た目と動きは、リポジトリに置く

ページの見た目と動きは、リポジトリの client/ にある固定の HTML、CSS、JavaScript が受け持ちます。すべてのページがリンク越しに同じファイルを読むので、git pull すれば、前に作ったダッシュボードも開き直したときに新しい動きになります。

作業の流れ

1 つの作業で起きること

  1. 1

    長い作業を頼む

    5 ステップを超える作業や、30 分を超えそうな作業だと判断されると、作業の前にダッシュボードが用意されます。確実に使いたいときは「ダッシュボードを用意してから進めて」と頼みます。

  2. 2
    待つ・30 秒ほど

    ダッシュボードを用意する

    builder が作業のデータを書くと、フックが作業ごとのページを置き、全体の一覧に行を足します。Claude Code は、2 つのページの場所を伝えます。

  3. 3
    待たない

    手順ごとに更新する

    手順を 1 つ終えるたびに、updater がバックグラウンドで更新します。作業は更新を待たずに進み、前の更新が終わっていなければ、次の変化とまとめて渡します。

  4. 4
    止まらない

    判断が必要になったら

    質問と既定の対応をダッシュボードに載せ、既定の対応で作業を続けます。都合のよいときにダッシュボードで質問を確かめ、答えは Claude Code に伝えます。

  5. 5
    承認を待つ

    取り消せない操作は別

    削除、push、送信のような取り消せない操作や外部に公開される操作は、既定の対応では進めず、承認を待ちます。その間も、進められるほかの手順があれば続けます。

  6. 6
    待つ

    途中で止めたら、中断中にする

    「今日はここまで」のように止めると、ダッシュボードを中断中にしてから報告します。中断中の作業には、更新が止まっている警告を出しません。再開すると、進行中に戻してから続けます。

  7. 7
    待つ

    完了にして報告する

    作業が終わったら、手順とパネルの最終状態を渡してダッシュボードを完了にし、それから報告します。完了の作業には未着手や途中の値を残しません。一覧では、完了した作業の側に移ります。

守り

ダッシュボードを書く係は、ほかに何もできない

読み書きできる場所を絞る

ダッシュボードを書く 2 つのサブエージェントが読めるのは ~/.claude/nuu/dashboards/ だけ、書けるのは作業のデータと好みだけです。ページのファイル、一覧、トークン量はスクリプトが書きます。コマンドは、時刻を取る date だけを使えます。

作業ディレクトリには何も作らない

ダッシュボードはホームの決まった場所にまとまるので、作業中のリポジトリに余計なファイルが増えません。

時刻は実際の時計から

記録する時刻は、推測ではなく date で取った値です。更新が 15 分以上止まっていると、ダッシュボードと一覧が知らせます。

CLAUDE.md に 1 行を書き込む

install.sh は ~/.claude/CLAUDE.md に、ルールを読み込む 1 行を足します。dotfiles などでシンボリックリンクにしている場合は、リンク先の実体に書き込みます。uninstall.sh は、その 1 行だけを消します。

残る内容に注意

ダッシュボードには、作業の概要や質問、成果物のパスがそのまま残ります。スマホなどから見るために外部へ公開するときは、その中身ごと見えることになります。公開の仕組みは、利用者が自分の環境で用意します。ページは _client(リポジトリの client/ へのリンク)を読むので、公開先でもリンクをたどれるようにします。

対話のセッションで使う

claude -p のような対話なしの実行では、ダッシュボードを作れません。ガードが許可しても、Claude Code が ~/.claude の下への書き込みを止めるためです。auto モード以外の対話のセッションでは、ダッシュボードへの書き込みのたびに確認が出ます。auto モードで使うと、確認なしで進みます。

料金

ダッシュボードにかかる料金の目安

場面担当1 回あたり時間
ダッシュボードの用意dashboard-builder(opus)約 $0.2〜0.325 秒前後
途中の更新と完了dashboard-updater(sonnet)約 $0.02〜0.0310〜20 秒前後

用意の目安は、Claude Code 2.1.285 で性質の違う 3 つの作業を 1 回ずつ用意したときの値です。幅は、キャッシュの保持時間(5 分か 1 時間)でキャッシュへの書き込みの単価が変わるためです。同じ測り方で、sonnet の builder は約 $0.1〜0.17、20 秒前後でした。料金を抑えたいときは、builder を sonnet に変えられます。builder は HTML を書かず、データだけを書くので、用意を短く済ませられます。

途中の更新と完了の目安は、10 通りの作業の流れで 1 回ずつ測った実測です。料金は会話の記録のトークンから推計したもので、記録の都合で少なめに出ることがあります。途中の更新はバックグラウンドで行うので、作業はその時間を待ちません。

API の単価で計算した目安です。契約の形態によっては、料金ではなく使用量の上限に数えられます。トークン量は、会話の記録の都合でサブエージェントの出力が少なめに出ることがあります。

はじめかた

macOS か Linux で、Claude Code と一緒に

bash、jq、python3(clone に git)が必要です。Claude Code CLI と、デスクトップアプリで開く Code(ローカル)で使えます。クラウドは手元の設定を読まず、Cowork はサブエージェントを読み込まないため、使えません。詳しい手順と、アンインストールの方法はセットアップの文書にまとめています。

clone して、リンクを張る

~/.claude にサブエージェント、フック、ページの見た目と動き(client/)、Claude Code の中で見せる mod(mod/)のリンクを作ります。mod は ~/.claude/settings.json の CLAUDE_CODE_PLUGIN_DIRS に足し、/nuu で開けるようにします。git やネットワークは使いません。既存のファイルがあれば、上書きせずに止まります。

git clone https://github.com/shimabox/nuu.git
cd nuu
./install.sh

CLAUDE.md にルールを読み込ませる

install.sh が ~/.claude/CLAUDE.md の末尾に次の 1 行を足します。長い作業でダッシュボードを使うよう、Claude Code に伝えるルールを読み込む行です。書き換えたくないときは --no-claude-md を付けて実行し、この 1 行を自分で足します。

@~/.claude/nuu/claude-instructions.md

長い作業を頼んで、一覧を開く

初回だけ好みを聞かれます。できたダッシュボードは、一覧からたどれます。

open ~/.claude/nuu/dashboards/index.html

Claude Code の中でも見る(実験的)

/nuu で今のプロジェクトの進行中の作業を、/nuu all で全プロジェクトの進行中の作業をペインに出します。開くたびに、このセッションの作業から出します。開いた直後は、o でブラウザで開く、n / p で次と前の作業、h で完了・中断中の作業を出す / 隠す、b でこのセッションの作業へ戻る、a で範囲の切り替え、q か Esc で閉じます。プロンプトの上の帯は、このセッションの作業を優先して出します。別の作業を見ている間にこのセッションの作業が更新されると、トーストとペインの上部の 1 行で知らせます。プロンプトに戻ったあとは、ctrl+x のあと tab でペインに戻ります。/tui fullscreen で全画面にすると、クリックでも操作できます。Claude Code の early access の機能を使うので、更新で動かなくなることがあります。settings.json を書き換えたくないときは ./install.sh --no-mod を使います。uninstall.sh は、足した mod のパスだけを外します。

/nuu
/nuu all