Mac mini セットアップ手順

HAGI 母艦 / 24時間ヘッドレス運用 + Agent Board 常駐 — 2026-09-12 作成

要ディスプレイ 画面を繋いだ状態でやる SSH可 Windows から遠隔で打てる Windows側 Mac ではなく Windows での作業
先に読んでください。 Mac mini は 最初だけディスプレイ・キーボード・マウスが必要です。 何も繋がずに箱から出して起動しても、初期設定が終わらないので SSH も画面共有も有効になりません。 テレビの HDMI で構いません。手順2までを画面ありで終わらせれば、以降は線を抜いて構いません。

0. 用意するもの

1. macOS の初期設定 要ディスプレイ

画面の指示どおりに進めます。判断が要るのは次の3つだけです。

聞かれることこうする理由
ユーザ名(アカウント名)英数字だけにする
例: hamada
SSH のログイン名とホームフォルダ名になります。日本語や記号が入ると後で面倒です
FileVault(ディスク暗号化)オフ下の注意を読んでください
Siri / 解析の送信どちらでも動作に影響しません
FileVault をオフにする理由(判断してください)。 FileVault をオンにすると、停電や再起動のたびに、画面の前で誰かがパスワードを打つまで Mac が起動しきりません。 ディスプレイを繋いでいない 24時間稼働機では、これは「勝手に復帰できない」ことを意味します。 代わりにディスクの中身は暗号化されません。自宅に置く機械で、盗難リスクより自動復帰を優先するならオフが実用的です。 盗難が心配ならオンにして、停電のたびに画面を繋ぐ運用を受け入れることになります。

2. ヘッドレスにするための設定 要ディスプレイ

ここが一番大事です。この章を終える前に画面を外すと、二度と入れなくなって最初からやり直しになります。

2-1. リモートから入れるようにする

システム設定一般共有 を開いて、次の2つをオンにします。

「リモートログイン」の情報ボタンから、アクセスを許可するユーザに自分が入っているか確認してください。

2-2. コンピュータ名を決める

同じ画面の上部にある「コンピュータ名」hagi にします。 これで他の機械から hagi.local で呼べるようになります(IPアドレスを覚えなくて済みます)。

2-3. 眠らないようにする / 停電から復帰するようにする

アプリケーションユーティリティターミナル を開いて、次を貼り付けて実行します(パスワードを聞かれます)。

# 本体もディスクもスリープさせない
sudo pmset -a sleep 0
sudo pmset -a disksleep 0
# 停電などで落ちたあと、電気が戻ったら自動で起動する
sudo pmset -a autorestart 1
# ネットワーク越しの起動要求で目を覚ます
sudo pmset -a womp 1
# 確認(sleep 0 / autorestart 1 になっていればOK)
pmset -g

2-4. 自動ログインをオンにする

システム設定ユーザとグループ自動ログイン で自分のアカウントを選びます。

これで再起動後、誰も操作しなくてもデスクトップまで立ち上がり、Agent Board が自動で復帰します。FileVault がオンだとこの項目は選べません。

ここまでで画面を外せます。 次の章からは Windows 機から SSH で入って作業できます。念のため、画面を外す前に次の手順3-0で接続確認をしてください。

3. Windows から入れるか確認する Windows側

Windows の PowerShell または ターミナル を開いて、次を打ちます(hamada は手順1で決めた名前に置き換え)。

ssh hamada@hagi.local

初回は「本物か?」と聞かれるので yes、続いてパスワードを入れます。 プロンプトが hamada@hagi ~ % のように変われば成功です。

繋がらないとき。 hagi.local が見つからない場合は、Mac の画面で システム設定 → ネットワーク から IP アドレス(192.168.x.x)を確認して、 ssh hamada@192.168.x.x を試してください。 それでもダメなら、手順2-1の「リモートログイン」がオンになっていません。

4. 開発環境を入れる SSH可

ここからは SSH で入った Mac のターミナルで打ちます。

4-1. コマンドラインツール

xcode-select --install

ダイアログが出たらインストールを選びます。数分かかります。すでに入っていればエラーが出ますが、それで正常です。

4-2. Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

終わったら、PATH を通します(Apple Silicon はここを忘れると brew: command not found になります)。

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
brew --version

4-3. 必要なものを入れる

brew install git python@3.13 node gh
git --version
python3 --version
node --version
gh --version

4-4. GitHub にログインする

このあと手順6・6.5 で private リポジトリを2つ取ってきます。 ここでログインしておかないと、その2箇所で必ず止まります(GitHub はパスワードでの clone を受け付けません)。

gh auth login

聞かれたら GitHub.comHTTPSYes(git の認証に使う)→ Login with a web browser の順に選びます。

XXXX-XXXX の形のワンタイムコードが表示されます。先にこれを控えてから Enter を押してください。 Enter を押すまで認証の待ち受けが始まらないので、押し忘れるとブラウザ側で承認しても端末が止まったままに見えます
Enter を押したら、Windows のブラウザで https://github.com/login/device を開き、控えたコードを入力します (Mac の画面が無くても、これで通ります)。

gh auth status

Logged in to github.com と出れば準備完了です。

5. Claude Code / Codex を入れる SSH可

npm install -g @anthropic-ai/claude-code
claude --version

ログインします。表示された URL を Windows のブラウザで開いて認証します。

claude

Codex も使うなら、Windows で入れているのと同じ方法で入れてください(npm install -g 系)。 明日は Agent Board が動けば十分なので、Codex は後日でも構いません。

6. Agent Board を動かす SSH可

6-1. 取ってくる

cd ~
git clone https://github.com/yamadao/agent-hub.git
cd agent-hub

private リポジトリです。手順4-4 で gh auth login を済ませていれば、何も聞かれずに通ります。

6-2. Python の環境を作る

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

6-3. APIキーを置く

カードのタイトルを短く要約する機能に使います。無くても board は動きます(要約が省略されるだけ)。

echo 'ANTHROPIC_API_KEY=ここにキー' > ~/agent-hub/.env
chmod 600 ~/agent-hub/.env

.env.gitignore 済みなので GitHub には上がりません。

6-4. 手で起動してみる

cd ~/agent-hub
source .venv/bin/activate
python -m uvicorn hub:app --host 0.0.0.0 --port 8765

エラーが出ずに止まっていれば動いています。この状態のまま、Windows のブラウザで次を開いてください。

http://hagi.local:8765/

ボードが表示されれば成功です(カードは空です。まだ誰も報告していないので正常)。 iPad でも同じ URL を開いて、見えることを確認してください。

初回はファイアウォールの確認が出ることがあります。 「"python" がネットワークからの接続を待ち受けています」と聞かれたら 「許可」を選んでください。 画面を外している場合は、システム設定 → ネットワーク → ファイアウォール をオフにするか、Python を許可リストに入れます。

確認できたらターミナルで Control + C を押して一旦止めます。次で自動起動にします。

6-5. 常駐させる(再起動しても自動で立ち上がる)

macOS の自動起動は launchd という仕組みを使います。次をそのまま貼り付けてください。

mkdir -p ~/Library/LaunchAgents ~/agent-hub/logs
cat > ~/Library/LaunchAgents/local.agent-hub.plist <<'PLIST'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>              <string>local.agent-hub</string>
  <key>ProgramArguments</key>
  <array>
    <string>PYTHONPATH_PLACEHOLDER</string>
    <string>-m</string><string>uvicorn</string>
    <string>hub:app</string>
    <string>--host</string><string>0.0.0.0</string>
    <string>--port</string><string>8765</string>
    <string>--log-level</string><string>warning</string>
  </array>
  <key>WorkingDirectory</key>   <string>WORKDIR_PLACEHOLDER</string>
  <key>RunAtLoad</key>          <true/>
  <key>KeepAlive</key>          <true/>
  <key>StandardOutPath</key>    <string>LOGDIR_PLACEHOLDER/hub.log</string>
  <key>StandardErrorPath</key>  <string>LOGDIR_PLACEHOLDER/hub.err</string>
</dict>
</plist>
PLIST

# プレースホルダを自分の実際のパスに置き換える
sed -i '' "s|PYTHONPATH_PLACEHOLDER|$HOME/agent-hub/.venv/bin/python|" ~/Library/LaunchAgents/local.agent-hub.plist
sed -i '' "s|WORKDIR_PLACEHOLDER|$HOME/agent-hub|"                     ~/Library/LaunchAgents/local.agent-hub.plist
sed -i '' "s|LOGDIR_PLACEHOLDER|$HOME/agent-hub/logs|g"                ~/Library/LaunchAgents/local.agent-hub.plist

登録して起動します。

launchctl unload ~/Library/LaunchAgents/local.agent-hub.plist 2>/dev/null
launchctl load  ~/Library/LaunchAgents/local.agent-hub.plist
sleep 2
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:8765/api/sessions

HTTP 200 と出れば常駐成功です。Mac を再起動しても自動で戻ります。

200 が出ないときは、ログを見ます。
cat ~/agent-hub/logs/hub.err

6.5 HAGI(ham)を取ってくる SSH可

ham は「AI分身脳 HAGI」の本体です。Windows の C:\ham と同じ中身を Mac にも置きます。 手順6 の Agent Board とは別のリポジトリで、役割もまったく違います (board = 作業状況を映す画面 / ham = AI社員たちの本体)。

6.5-1. 取ってくる

cd ~
git clone https://github.com/yamadao/ham.git
cd ham

こちらも private リポジトリです。手順4-4 のログインが済んでいればそのまま通ります。

6.5-2. 秘密ファイル(.env)を用意する

空の雛形を作ります。値はご自分で書き込んでください(AI は .env を読み書きしません)。

cd ~/ham
if [ -f .env ]; then
  echo "すでに .env があります。上書きしません。"
else
  cat > .env <<'EOF'
TELEGRAM_DAILY_BOT_TOKEN=
TELEGRAM_DAILY_ALLOWED_USER_ID=
TELEGRAM_DAILY_DIR=01-private/01-daily
TELEGRAM_DAILY_TIMEZONE=Asia/Tokyo
EOF
fi
chmod 600 .env
cat .env

すでに .env がある場合は上書きせずそのままにします(値を入れたあとに間違ってもう一度実行しても、書いた秘密は消えません)。

中身が4行表示されれば成功です。項目は Telegram 日記受信(tools/telegram-daily)用のこの4つだけで、 Mac で日記Botを動かさないなら、値は空のままでも ham 自体は問題なく使えます。

項目中身
TELEGRAM_DAILY_BOT_TOKEN日記専用Botのトークン
TELEGRAM_DAILY_ALLOWED_USER_IDご自分の user id
TELEGRAM_DAILY_DIR既定のままでよい(01-private/01-daily
TELEGRAM_DAILY_TIMEZONE既定のままでよい(Asia/Tokyo

値を入れるなら、Windows の C:\ham\.env をそのまま持ってくるのが一番早いです。 中身は秘密なのでコピー操作はご自分で行ってください。
なお C:\ham にある .env.example(雛形)は、まだ GitHub に上げていないため clone しても降りてきません。 上のコマンドで直接作っているのはそのためです(2026-09-12 実測)。

6.5-3. 動くか確かめる

cd ~/ham
claude

ham の中で Claude Code を起動すると、CLAUDE.md 経由で AGENTS.md(起動手順書)が読み込まれます。 「AI社員ワークスペース」として応答すれば成功です。Codex の場合は AGENTS.md を直接読みます。

ham には個人情報(01-private/)が入っています。 リポジトリが private のままであることを確認してください。公開に切り替えないこと。

7. Mac 自身の作業をボードに出す SSH可

Mac で動かす Claude Code のフックを登録します。Mac 上の ~/.claude/settings.json に対する作業です。 設定ファイルは下の 7-2 のコマンドがその場で作ります(あらかじめ用意したファイルは使いません。 GitHub に上げ忘れていても止まらないようにするためです)。

中身は Windows 側の登録(8イベント = SessionStart / UserPromptSubmit / PreToolUse / PostToolUse / PermissionRequest / Notification / Stop / SessionEnd)を Mac のパスに置き換えたものです。SubagentStop は Windows 側にも登録が無いので入れていません。 Python は /usr/bin/python3 を使います(agent_hook.py は標準ライブラリだけで動くので、.venv を作り直してもフックが壊れません)。 送信先の指定は不要です(未設定なら自機の 127.0.0.1:8765 に送る=Mac 自身の board が正解)。

7-1. いまの設定があるか確かめる

cat ~/.claude/settings.json

「No such file or directory」と出るか、{} だけなら 7-2 に進んでください。
何か中身が表示された場合は 7-2 をやらず、私に声をかけてください。上書きすると既存の設定が消えます。私が足りないぶんだけ足します。

7-2. 設定を作って置く(7-1 が空だった場合だけ)

下の全部をまとめてコピーして、ターミナルに貼り付けてください(1回で通ります)。

mkdir -p ~/.claude
cp ~/.claude/settings.json ~/.claude/settings.json.bak-$(date +%Y%m%d-%H%M%S) 2>/dev/null
/usr/bin/python3 - <<'PY' > /tmp/claude-hooks.json
import json, os
cmd = "/usr/bin/python3 %s claude" % os.path.expanduser("~/agent-hub/agent_hook.py")
events = ["SessionStart", "UserPromptSubmit", "PreToolUse", "PostToolUse",
          "PermissionRequest", "Notification", "Stop", "SessionEnd"]
with_matcher = {"PreToolUse", "PostToolUse", "PermissionRequest", "Notification"}
with_async = {"PreToolUse", "PostToolUse"}
hooks = {}
for e in events:
    h = {"type": "command", "command": cmd, "timeout": 5}
    if e in with_async:
        h["async"] = True
    g = {"hooks": [h]}
    if e in with_matcher:
        g["matcher"] = ""
    hooks[e] = [g]
print(json.dumps({"hooks": hooks}, indent=2))
PY
/usr/bin/python3 -m json.tool /tmp/claude-hooks.json > /dev/null \
  && cp /tmp/claude-hooks.json ~/.claude/settings.json \
  && echo "JSON OK" \
  && grep -c "agent_hook.py" ~/.claude/settings.json

JSON OK と出て、そのあとの数字が 8 なら成功です(8イベントぶん登録されています)。 ホームディレクトリの場所は自動で埋まるので、ユーザー名が何であってもそのまま動きます。 形式が壊れていたら JSON OK が出ず、既存の設定にも触りません

7-3. 実際に出るか確かめる

Mac で Claude Code を起動して、何か一言打ってみてください。

cd ~/ham
claude

http://hagi.local:8765/ を開き直して、ham のカードが出れば成功です。

出ない場合は、次のコマンドで board に直接テストの報告を送ってみてください。 これでカードが出るなら board とフック本体は正常なので、原因は settings.json の登録側だけに絞れます。

cd ~/ham
echo '{"session_id":"hook-test","cwd":"'"$PWD"'","hook_event_name":"SessionStart"}' \
  | /usr/bin/python3 ~/agent-hub/agent_hook.py claude

確認できたら、次でテスト用カードを終了状態にしておきます(放っておくと board に残り続けます。 終了状態にすれば1時間ほどで自動的に消えます)。

cd ~/ham
echo '{"session_id":"hook-test","cwd":"'"$PWD"'","hook_event_name":"SessionEnd"}' \
  | /usr/bin/python3 ~/agent-hub/agent_hook.py claude

8. Windows の作業を Mac のボードに送る Windows側

Windows に環境変数を1つ足すだけです。PowerShell で次を実行します。

[Environment]::SetEnvironmentVariable("AGENT_HUB_URL","http://hagi.local:8765/event","User")

設定後、Claude Code と Codex を開き直してください(起動中のセッションには反映されません)。 以降、Windows の作業も Mac のボードに出ます。

Windows 側の Agent Board(8765)は、しばらく動かしたままで構いません。Mac 側が安定したら止めます。

9. 明日の完了確認

10. 明日はやらないこと

項目いつ
外出先からボードを見る(Cloudflare Tunnel + 認証)LAN で安定してから
machine_id(どちらのマシンの作業か表示)2台運用を始めてすぐ。明日無くても動きます
Mac のパスに合わせたプロジェクト定義・アイコンMac の実際のフォルダ構成が決まってから
カードをタップしてウィンドウを前面化Mac はヘッドレスなので「セッションにアタッチ」に設計変更。別途
HAGI の中身づくり(部署・スキルの設計)土台ができてから。仕様のヒアリングが先。明日やるのは手順6.5 の「置くだけ」まで
詰まったら、そこで止めて聞いてください。 エラーメッセージをそのまま貼ってもらえれば読みます。 特に手順2を終える前に画面を外すと復旧が面倒なので、そこだけは慎重に。