ソースを見る

NemaRoom

議論から実装まで、プロジェクトの理解を揃える。

ハンマースホイ《白い扉》:がらんとした部屋で白い扉が 2 枚開き、奥の部屋が見える。
ハンマースホイ《ストランゲーゼ 30 番地の室内》:開いた扉の向こうに別の部屋と後ろ姿の人物。

依頼や制約は散らばり、同じ要件でも読み方が分かれます。

出典のある一つの理解に揃え、コミットの証拠は議論に戻します。

議論が形になるまで

以下は「請求書のエクスポート」についての議論です。メッセージをオンにすると、Nema が項目に整理し、誰かの発言か、誰かが決めたことか、エージェントの推測かを記録します。

発言あり
議論の中で誰かが言った
決定済み
誰かが決めた
推測
エージェントの提案、確認待ち
ナレッジ · 請求書エクスポート 要件 1 · 決定 1 · 確認事項 1
    議論のメッセージ

    一つの理解に、出典を残す

    誰の言葉かを分ける

    発言・決定・推測を分けて記録します。エージェントの推測が、あなたの決定になりすますことはありません。

    決定 D-2決定済み

    出力ファイルに UTF-8 BOM を付ける

    「付けてください。ないと日本語が文字化けします。」高橋 · 10:12 · Q-1 に回答
    1. a41c0e2D-2 追加:BOM 付きで出力
    2. 7be19f0Q-1 状態:未確認 → 回答済み
    3. e03d551R-2 変更:円は整数に
    4. 19ac7d4D-1 追加:初版は CSV のみ

    変更はすべて Git に

    ナレッジベース自体が Git リポジトリです。何が、なぜ、どう変わったかをいつでもさかのぼれます。

    コードを読める

    ローカルのリポジトリを紐づけると、エージェントが main ブランチのスナップショットを読んで検索します。議論の時点で既存の実装を踏まえられます。

    リポジトリ~/code/ledger-app
    ブランチmain @ 5d2e8a1
    取得2 分前
    src/billing/export.ts:48
    src/billing/export.test.ts:12
    請求書エクスポートの呼び出し図コード変更あり、図が古い可能性
    BillingPage exportCsv BillRepo tz.ts

    古くなった図は知らせる

    コードから描いた図は、どのコミットを元にしたかを覚えています。コードが変わると、図にそう表示されます。

    作る前に確認する

    曖昧な点や、有効な決定と食い違う発言は確認事項になります。Nema は尋ね、あなたの回答を待ちます。赤で示すのは、あなたの回答が必要なものだけです。

    • Q-3請求のない月は空ファイルを出力するか?未回答
    • Q-2過去の請求書も新しいタイムゾーンで再計算するか?未回答
    • Q-1CSV に UTF-8 BOM を付けるか回答済み
    表示言語
    中文English日本語
    ナレッジの言語
    議論に合わせる固定
    ナイトモード

    3 つの表示言語

    中国語・英語・日本語の画面をいつでも切り替えられます。項目を記録する言語は別に設定できます。

    議論に戻る

    開発パッケージ · 請求書 CSV 出力整理中
    • 要件 3
    • 決定 1
    • 未回答の確認事項 2

    まずルームで議論する。項目は自動で整理される。

    開発パッケージ · 請求書 CSV 出力確認済み
    • 要件 3
    • 決定 3
    • 未回答の確認事項 0

    次に、曖昧な点をひとつずつ確かめる。

    開発パッケージ · 請求書 CSV 出力承認済み
    • 仕様と計画を生成済み
    • Claude Code に引き渡し
    • 承認者:高橋

    開発パッケージを承認し、コーディングエージェントに渡す。

    開発パッケージ · 請求書 CSV 出力完了
    • コミット 3 件、main に取り込み済み
    • 変更ファイル 6 件
    • 要件 3 件に結び付け

    コミット報告は議論に戻る。

    データベース
    ローカルディスク上の PGlite
    データフォルダ
    ~/.nema/desktop
    ネットワーク
    ループバックのみで待ち受け

    あなたのパソコンだけで動く

    デスクトップ版はすべてを 1 つのアプリにまとめています。データベース、ローカルコア、Node を同梱し、Git はパソコンに入っている 2.31 以降を使います。Mac では Finder から開いたときも Homebrew と MacPorts の Git を見つけます。Docker もデータベースサーバーも不要です。議論の内容は選んだモデルプロバイダーにだけ送られ、GitHub のトークンを Nema が扱うことはありません。

    現状

    • Windows x64 デスクトップ版最新インストーラーまたは ZIP
    • macOS デスクトップ版最新、Apple シリコン
    • LinuxWeb / Compose 版
    • インストーラー署名未署名
    • 自動更新なし
    • ChatGPT サブスクリプションブラウザでログイン
    • Claude サブスクリプションClaude Code トークン
    • API キーResponses API 互換
    • コーディングエージェントCodex、Claude Code
    • ライセンスMIT

    よくある質問

    今すぐダウンロードできますか?

    できます。最新リリースには Windows x64 のインストーラー、Windows のポータブル ZIP、Apple シリコン向けのディスクイメージがあります。ZIP は展開してそのまま実行するアプリです。展開して Nema.exe を実行します。ショートカットもアンインストーラーもありません。インストーラーと ZIP はどちらも ~/.nema/desktop を使います。どちらか一方を選んでください。未署名のため、Windows では初回に「Windows によって PC が保護されました」と表示され、macOS では「プライバシーとセキュリティ」から開きます。アプリには Git 2.31 以降も必要です。Intel Mac 向けのデスクトップ版はありません。Linux では linux/amd64 の hub と web イメージを使うか、ソースからビルドします。

    費用はかかりますか?

    Nema Room 自体は MIT ライセンスのオープンソースです。項目の整理にはモデルを呼び出すため、費用や利用枠は選んだプロバイダーによります。ChatGPT や Claude のサブスクリプション、または自分の API キーを使えます。

    議論の内容はどこに送られますか?

    データベースとナレッジベースはあなたのパソコンにあります。項目を生成するときだけ、関連する内容が選んだモデルプロバイダーに送られます。サービスは既定でローカルのみで待ち受けます。インターネットに直接公開しないでください。

    エージェントはどう進捗を報告しますか?

    nema report install で Codex や Claude Code に報告フックを入れます。コミットのたびに Nema へ通知され、Nema が動いていないときは手元に保存して次回送ります。

    複数人で使えますか?

    初版は 1 人が自分のパソコンで使うものです。複数端末の同期、バックアップ、チームの閲覧専用アクセスは、ローカルコアの完成後に対応します。

    なぜ Nema?

    名は根回しに由来します。決定の前に理解を揃えつつ、食い違いも根拠も見える形で残します。

    ハンマースホイ《ストランゲーゼ 30 番地の室内》:扉が開き、女性が背を向けてテーブルに座っている。

    ダウンロード

    Windows x64 と Apple シリコン向けのビルドは最新リリースにあります。Windows ではインストーラーかポータブル ZIP のどちらかを選びます。ZIP は展開して Nema.exe を実行します。ショートカットもアンインストーラーもありません。どちらも ~/.nema/desktop を使います。パソコンには Git 2.31 以降が必要です。

    ホストのコマンドは nema で、npm i -g @nema-project/nema@<locked version> から入ります。この数字は取得した docker-compose.yml の 2 つの image: が固定している版です。hub と web のイメージは linux/amd64 です。docker-compose.yml は最新 Release の固定名の資産で、両イメージをその Release の版に固定してレンダリングしたものです。取得したら 2 つの固定が同じ版か確かめ、NEMA_IMAGE_TAG=<その版> を .env に書いてから起動します(既存の値があればそれを使い、releases/download/v<locked>/docker-compose.yml を取得します)。v0.1.6 のファイルの先頭にはテンプレートの「インストール可能な版ではない」というコメントが残っていますが、固定された 2 行の image: が正しい情報です。v0.1.6 より前の固定にはリリース資産がないため、raw.githubusercontent.com/Nema-Project/nema-room/v<locked>/docker-compose.yml を取得します。Linux と macOS では先に NEMA_UID と NEMA_GID を export します。このリポジトリを開発するときは、clone してセットアップウィザードを実行します。

    # hub と web。linux/amd64 のみ。compose ファイルは最新 Release の固定名の資産です。.env に NEMA_IMAGE_TAG があればその版を使います。
    NEMA_FETCHED= NEMA_LOCKED= NEMA_UP= NEMA_INSTALLED=
    NEMA_PIN=$(sed -n 's/^NEMA_IMAGE_TAG=//p' .env 2>/dev/null | tail -1)
    NEMA_URL=https://github.com/Nema-Project/nema-room/releases/latest/download/docker-compose.yml
    test -n "$NEMA_PIN" \
      && NEMA_URL=https://github.com/Nema-Project/nema-room/releases/download/v$NEMA_PIN/docker-compose.yml
    { curl -fsSL -o docker-compose.yml.download "$NEMA_URL" \
      || { test -n "$NEMA_PIN" && curl -fsSL -o docker-compose.yml.download \
        "https://raw.githubusercontent.com/Nema-Project/nema-room/v$NEMA_PIN/docker-compose.yml"; }; } \
      && mv docker-compose.yml.download docker-compose.yml && NEMA_FETCHED=1
    # hub と web が一致すれば版を、.env がその版を固定していれば locked を表示します。どちらかが出なければ止めます。
    NEMA_VERSION=$(grep -o 'nema-room-hub:[0-9.]*' docker-compose.yml | head -1 | cut -d: -f2)
    WEB_VERSION=$(grep -o 'nema-room-web:[0-9.]*' docker-compose.yml | head -1 | cut -d: -f2)
    test -n "$NEMA_FETCHED" && test -n "$NEMA_VERSION" && test "$NEMA_VERSION" = "$WEB_VERSION" \
      && echo "$NEMA_VERSION"
    test -n "$NEMA_FETCHED" && test -n "$NEMA_VERSION" && test "$NEMA_VERSION" = "$WEB_VERSION" \
      && { test -n "$NEMA_PIN" || printf '\nNEMA_IMAGE_TAG=%s\n' "$NEMA_VERSION" >> .env; } \
      && test "$(sed -n 's/^NEMA_IMAGE_TAG=//p' .env | tail -1)" = "$NEMA_VERSION" \
      && NEMA_LOCKED=$NEMA_VERSION && echo "locked $NEMA_LOCKED"
    # 各手順は前の手順が成功したときだけ実行されます。.env で NEMA_HUB_PORT や NEMA_DATA_HOST_DIR を設定したら先に同じ値を export します。
    export NEMA_UID="$(id -u)" NEMA_GID="$(id -g)"   # Linux and macOS only
    NEMA_DIR=${NEMA_DATA_HOST_DIR:-$HOME/.nema/data}
    test -n "$NEMA_LOCKED" && mkdir -p -m 700 "$NEMA_DIR" && test -w "$NEMA_DIR" \
      && NEMA_IMAGE_TAG=$NEMA_LOCKED docker compose up -d --wait && NEMA_UP=1
    test -n "$NEMA_UP" && npm i -g "@nema-project/nema@$NEMA_LOCKED" && NEMA_INSTALLED=1
    # Compose は daemon を起動しません。動かし続けてください。
    test -n "$NEMA_INSTALLED" \
      && NEMA_DATA_DIR=$NEMA_DIR nema daemon --hub "http://127.0.0.1:${NEMA_HUB_PORT:-4400}"
    
    # またはこのリポジトリをソースからビルド
    git clone https://github.com/Nema-Project/nema-room.git
    cd nema-room
    node scripts/setup.mjs --lang ja
    最新版をダウンロード