A face and operator companion app for coding agents.
- Control your PC coding agent from your phone — approve, type, or speak commands via mobile browser.
- Works with Claude Code, Codex CLI, and Gemini CLI — any agent that runs in a terminal.
- tmux operator bridge relays input/output between the browser UI and the agent pane.
- 3D face + TTS + MCP signaling give your agent a voice and expressions that reflect its state.
- Multi-agent support (experimental) — spawn helper agents in isolated worktrees with permission presets and durable mission tracking. See Multi-Agent Guide.
- Tailscale Serve for secure remote access from phone or tablet.
- Operator input — terminal direct prompt, browser PTT (JA/EN ASR), text fallback, desktop
Space/Shift+Spacehold-to-talk safety, key controls (Esc,↑,Select,↓) - Terminal mirror — read-only tmux tail snapshots at 500ms change-only intervals
- Multi-agent (experimental) — spawn/focus/delete helpers from desktop tiles or mobile list, permission presets, mission assignment and delivery, owner inbox. See Multi-Agent Guide.
- MCP signaling —
face.event/face.say/face.pingplus agent lifecycle tools (agent.list,agent.spawn,agent.focus,agent.delete,agent.assign,agent.inject,agent.report,owner.inbox.*) - 3D face — eyebrow/eye/mouth/head animation, state modes (
confused,frustration,confidence,urgency,stuckness,neutral), drag control, panel toggles - TTS — Kokoro ONNX + Misaki default, optional Qwen3-TTS Japanese backend, freshness-first speech policy. See TTS and Speech Guide.
- ASR — Parakeet batch, optional Voxtral realtime. See Operator Stack and ASR Guide.
- Looking Glass WebXR support path
Static exports: High-Level Flow PNG, Sequence Timeline PNG, High-Level Flow SVG, Sequence Timeline SVG
flowchart LR
U[User]
TMUX[tmux Terminal<br/>Agent pane]
C[Coding Agent]
MCP[MCP Server<br/>face_event / face_say / face_ping]
WS[face-app<br/>WebSocket + HTTP :8765]
FE[Frontend UI<br/>Browser]
BR[operator-bridge]
ASRP[/POST /api/operator/asr/]
ASR[asr-worker<br/>Parakeet ASR<br/>JA/EN]
TTS[tts-worker<br/>Kokoro TTS]
TS[Tailscale VPN / serve]
U -- Direct prompt --> TMUX
U -- PTT recording --> FE
U -- Text input --> FE
FE -- Audio binary --> ASRP
ASRP -- JSON (audioBase64,mimeType,lang) --> ASR
ASR -- JSON transcript --> ASRP
ASRP -- Transcript --> FE
FE -- operator_response JSON --> WS
WS -- relay --> BR
BR -- tmux send-keys --> TMUX
TMUX --> C
C -- Work logs / results --> TMUX
BR -- capture-pane (500ms, change-only) --> BR
BR -- operator_terminal_snapshot --> WS
WS --> FE
C -- stdio tool calls --> MCP
MCP -- WebSocket JSON --> WS
WS --> FE
WS -- say payload --> TTS
TTS -- audio + tts state --> FE
FE <-- HTTPS/WS --> TS
TS <---> WS
sequenceDiagram
autonumber
participant U as User
participant TS as Tailscale (optional)
participant FE as Frontend UI
participant FA as face-app (:8765, /ws, /api/operator/asr)
participant ASR as asr-worker (Parakeet)
participant BR as operator-bridge
participant TM as tmux (Agent pane)
participant CX as Coding Agent
participant MCP as mcp-server
participant TTS as tts-worker (Kokoro)
opt Remote access
U->>TS: Open Face UI URL
TS->>FE: Serve forwarded UI
end
FE->>FA: Connect WebSocket /ws
BR->>FA: Connect WebSocket /ws
alt Input path A: direct terminal prompt
U->>TM: Type prompt
TM->>CX: Prompt arrives
else Input path B: frontend PTT
U->>FE: Hold PTT JA/EN
FE->>FA: POST /api/operator/asr?lang=ja|en (audio)
FA->>ASR: /v1/asr/ja|en (audioBase64,mimeType)
ASR-->>FA: Transcript JSON
FA-->>FE: Transcript response
U->>FE: Tap Send
FE->>FA: operator_response{text}
FA-->>BR: Relay payload
BR->>TM: tmux send-keys(text + Enter)
TM->>CX: Prompt arrives
else Input path C: frontend text
U->>FE: Enter text + Send Text
FE->>FA: operator_response{text}
FA-->>BR: Relay payload
BR->>TM: tmux send-keys(text + Enter)
TM->>CX: Prompt arrives
end
loop During work
CX-->>TM: Progress/result logs
BR->>TM: capture-pane -e (500ms)
BR-->>FA: operator_terminal_snapshot
FA-->>FE: Terminal mirror update
end
CX->>MCP: face_event / face_say / face_ping
MCP->>FA: Forward WebSocket JSON
FA-->>FE: event/say/state payloads
FA->>TTS: TTS request
TTS-->>FA: tts_audio / tts_mouth / say_result
FA-->>FE: Realtime status + audio
FE-->>U: Voice, facial state, and status updates
- Node.js 20+ (Node 24 recommended)
uv(for Python worker dependencies)- Python 3.10+
ffmpeg(recommended; used by ASR worker fallback decode for webm/ogg/mp4)- Optional for audible TTS on Linux:
- either PortAudio (
libportaudio2) forsounddevice - or ALSA
aplayfallback
- either PortAudio (
Choose one startup path depending on your goal.
Before starting, configure your coding agent for MCP (see Agent Setup), set up the agent-specific AGENTS.md, and reflect doc/examples/AGENT_RULES.md in the agent instructions. If you want a ready-to-paste starting point, use doc/examples/AGENTS.sample.md as the template for your project-local AGENTS.md.
If you plan to use the mobile UI remotely, it is convenient to start Tailscale Serve in advance:
tailscale serve --bg 8765From repository root:
./scripts/setup.sh
./scripts/run-face-app.shThen, in another terminal:
./scripts/run-mcp-server.shUse this path when you want the simple face UI and signaling, without the full operator panel workflow. run-face-app.sh hides the operator panel by default.
- If your coding agent already starts this repository's MCP server from its own MCP client config, do not also run
./scripts/run-mcp-server.sh. - By default,
face-appstartstts-workerfor you unlessFACE_TTS_ENABLED=0is set. The default backend is Kokoro; if theface-appprocess is launched withTTS_ENGINE=qwen3, the spawned worker uses the optional Qwen3 path instead.
After ./scripts/setup.sh, recommended one-shot startup:
./scripts/run-operator-once.sh --profile realtimeUse this when you want the full tmux-backed operator workflow, browser PTT, terminal mirror, hidden mobile recovery, and the safest default bridge wiring. Start with --profile default or --profile realtime unless you specifically want Qwen3 TTS.
run-operator-once.sh/run-operator-stack.shlaunchface-app, andface-appstartstts-workerby default unlessFACE_TTS_ENABLED=0is set.qwen3/qwen3-realtimeprofiles work by passingTTS_ENGINE=qwen3into that spawned worker path.- Profile shorthand:
--profile default: Kokoro TTS + batch ASR only--profile realtime: Kokoro TTS + Voxtral realtime ASR + Parakeet fallback--profile qwen3: Qwen3 TTS + batch ASR only--profile qwen3-realtime: Qwen3 TTS + Voxtral realtime ASR + Parakeet fallback
- When you use this app to work on another repository, put a project-local
AGENTS.mdin that target repository too. Start fromdoc/examples/AGENTS.sample.md, then customize the repo-specific build/test/run rules there. - For another repository, you can start the operator in either of these equivalent styles:
- run from this repository and pass
--repo /path/to/target-repo - or
cdinto the target repository and launch/path/to/MinimumHeadroom/scripts/run-operator-once.sh ...
- run from this repository and pass
After startup, multi-agent helpers can be spawned and managed from the browser UI or MCP tools. See the Multi-Agent Guide for the full workflow.
Useful variants:
# work on another repository while keeping minimum-headroom as the operator shell
./scripts/run-operator-once.sh --profile realtime --repo /path/to/target-repo
# work from the target repository itself and call the script by absolute path
cd /path/to/target-repo
/path/to/MinimumHeadroom/scripts/run-operator-once.sh --profile realtime
# start with a shell in the agent pane first
./scripts/run-operator-once.sh --profile realtime --agent-shell
# resume an existing Codex conversation
./scripts/run-operator-once.sh --agent-cmd 'codex resume --last'
# keep the current shell instead of attaching to tmux
./scripts/run-operator-once.sh --profile realtime --no-attach
# choose Qwen3 TTS only when you want that path explicitly
./scripts/run-operator-once.sh --profile qwen3-realtimeDo not commit your personal local config files.
Add the MCP server via CLI:
claude mcp add --transport stdio \
--env FACE_WS_URL=ws://127.0.0.1:8765/ws \
minimum-headroom -- node /ABS/PATH/minimum-headroom/mcp-server/dist/index.jsSee Claude Code setup details for permission presets and security hardening.
Use doc/examples/codex/config.toml as a template. Place at ~/.codex/config.toml or .codex/config.toml within a trusted project. Update absolute paths for your machine.
[mcp_servers.minimum_headroom]
command = "node"
args = ["/ABS/PATH/minimum-headroom/mcp-server/dist/index.js"]
env = { "FACE_WS_URL" = "ws://127.0.0.1:8765/ws" }Use doc/examples/antigravity/mcp_config.json as a template. Place in ~/.gemini/ or a project-local .gemini/ folder. Gemini requires MCP_TOOL_NAME_STYLE=underscore.
{
"mcpServers": {
"minimum-headroom": {
"command": "node",
"args": ["/ABS/PATH/minimum-headroom/mcp-server/dist/index.js"],
"env": {
"FACE_WS_URL": "ws://127.0.0.1:8765/ws",
"MCP_TOOL_NAME_STYLE": "underscore"
}
}
}
}See Gemini setup details for permission presets and AGENTS.md guidance.
- Place an
AGENTS.mdin your target repository root (usedoc/examples/AGENTS.sample.mdas the starting template). - Include signaling rules from
doc/examples/AGENT_RULES.mdin the agent instructions. - For Claude Code, you can also use
CLAUDE.mdfor Claude-specific project instructions.
If your MCP client rejects tool names with dots (for example face.event), set env MCP_TOOL_NAME_STYLE=underscore. Tools are then published as face_event, face_say, face_ping.
- Operator Stack and ASR Guide — launcher choice, tmux bridge, operator UI, keyboard shortcuts, hidden mobile recovery, batch/realtime ASR, Tailscale remote operation
- TTS and Speech Guide — Kokoro and Qwen3 setup, speech gate, long-speech behavior, pre-synthesis text normalization
- Multi-Agent Guide — spawning helpers, permission presets, mission assignment, owner inbox, worktree isolation, security hardening
This repository includes reusable skill packages under doc/examples/skills/:
release-ci-flowminimum-headroom-opslooking-glass-webxr-setup
Each folder contains a SKILL.md and can be copied into your local skills directory (for example $CODEX_HOME/skills/) if your agent supports local skill loading.
If you are using the minimum-headroom operator/helper runtime, install minimum-headroom-ops. It covers the expected MCP lifecycle flow (agent.list, agent.spawn, agent.assign, agent.inject, agent.assignment.list, owner.inbox.*, agent.delete) and the helper reporting contract.
- Run tests:
npm test- Verify MCP startup:
./scripts/run-mcp-server.sh- Verify face app startup and browser rendering:
./scripts/run-face-app.sh- Verify TTS worker smoke:
npm run tts-worker:smoke- Verify ASR worker smoke:
npm run asr-worker:smoke- Verify operator stack startup (inside tmux or with
MH_BRIDGE_TMUX_PANEset):
./scripts/run-operator-stack.sh- Runtime/local files (models, local MCP config, caches, venv) are excluded via
.gitignore.
コーディングエージェント向けのフェイス・オペレーター支援アプリです。
- スマホから PC のコーディングエージェントを操作 — モバイルブラウザで承認・入力・音声コマンドを送信できます。
- Claude Code、Codex CLI、Gemini CLI に対応 — ターミナルで動くエージェントなら何でも使えます。
- tmux operator bridge がブラウザ UI とエージェントペイン間の入出力を中継します。
- 3D フェイス + TTS + MCP シグナリング でエージェントに声と表情を与え、状態をリアルタイムに反映します。
- マルチエージェント対応(実験的) — 分離 worktree に helper を生成し、権限プリセットとミッション追跡で管理します。マルチエージェントガイドを参照。
- Tailscale Serve でスマホ/タブレットから安全にリモートアクセス。
- オペレーター入力 — 端末直接入力、ブラウザ PTT(JA/EN ASR)、テキスト入力、Desktop
Space/Shift+Space長押し安全装置、キー操作(Esc,↑,Select,↓) - ターミナルミラー — tmux 末尾出力の読み取り専用スナップショット(500ms、変更時のみ)
- マルチエージェント(実験的) — Desktop タイルまたは Mobile リストから helper の生成/フォーカス/削除、権限プリセット、ミッション割当・配信、owner inbox。マルチエージェントガイドを参照。
- MCP シグナリング —
face.event/face.say/face.pingおよびエージェントライフサイクルツール(agent.list,agent.spawn,agent.focus,agent.delete,agent.assign,agent.inject,agent.report,owner.inbox.*) - 3D フェイス — 眉・目・口・頭のアニメーション、状態モード(
confused,frustration,confidence,urgency,stuckness,neutral)、ドラッグ制御、パネル切替 - TTS — Kokoro ONNX + Misaki 既定、任意 Qwen3-TTS 日本語 backend、鮮度優先発話ポリシー。TTS and Speech Guide を参照。
- ASR — Parakeet batch、任意 Voxtral realtime。Operator Stack and ASR Guide を参照。
- Looking Glass WebXR 対応経路
静的エクスポート: High-Level Flow PNG, Sequence Timeline PNG, High-Level Flow SVG, Sequence Timeline SVG
flowchart LR
U[ユーザー]
TMUX[tmux ターミナル<br/>Agent ペイン]
C[Coding Agent]
MCP[MCP サーバー<br/>face_event / face_say / face_ping]
WS[face-app<br/>WebSocket + HTTP :8765]
FE[フロントエンド UI<br/>ブラウザ]
BR[operator-bridge]
ASRP[/POST /api/operator/asr/]
ASR[asr-worker<br/>Parakeet ASR<br/>JA/EN]
TTS[tts-worker<br/>Kokoro TTS]
TS[Tailscale VPN / serve]
U -- 直接プロンプト --> TMUX
U -- PTT録音 --> FE
U -- テキスト入力 --> FE
FE -- 音声バイナリ --> ASRP
ASRP -- JSON (audioBase64,mimeType,lang) --> ASR
ASR -- 文字起こしJSON --> ASRP
ASRP -- 文字起こし結果 --> FE
FE -- operator_response JSON --> WS
WS -- relay --> BR
BR -- tmux send-keys --> TMUX
TMUX --> C
C -- 作業ログ / 結果 --> TMUX
BR -- capture-pane (500ms, change-only) --> BR
BR -- operator_terminal_snapshot --> WS
WS --> FE
C -- stdio tool calls --> MCP
MCP -- WebSocket JSON --> WS
WS --> FE
WS -- say payload --> TTS
TTS -- audio + tts state --> FE
FE <-- HTTPS/WS --> TS
TS <---> WS
sequenceDiagram
autonumber
participant U as ユーザー
participant TS as Tailscale (任意)
participant FE as Frontend UI
participant FA as face-app (:8765, /ws, /api/operator/asr)
participant ASR as asr-worker (Parakeet)
participant BR as operator-bridge
participant TM as tmux (Agent pane)
participant CX as Coding Agent
participant MCP as mcp-server
participant TTS as tts-worker (Kokoro)
opt リモートアクセス
U->>TS: Face UI URLを開く
TS->>FE: 転送されたUIを表示
end
FE->>FA: WebSocket /ws 接続
BR->>FA: WebSocket /ws 接続
alt 入力経路A: 端末直接入力
U->>TM: プロンプトを入力
TM->>CX: プロンプト到達
else 入力経路B: フロントエンドPTT
U->>FE: PTT JA/EN を押下
FE->>FA: POST /api/operator/asr?lang=ja|en (audio)
FA->>ASR: /v1/asr/ja|en (audioBase64,mimeType)
ASR-->>FA: 文字起こしJSON
FA-->>FE: 文字起こし結果
U->>FE: Send を押下
FE->>FA: operator_response{text}
FA-->>BR: payload relay
BR->>TM: tmux send-keys(text + Enter)
TM->>CX: プロンプト到達
else 入力経路C: フロントエンドテキスト
U->>FE: テキスト入力 + Send Text
FE->>FA: operator_response{text}
FA-->>BR: payload relay
BR->>TM: tmux send-keys(text + Enter)
TM->>CX: プロンプト到達
end
loop 作業中
CX-->>TM: 進捗/結果ログ
BR->>TM: capture-pane -e (500ms)
BR-->>FA: operator_terminal_snapshot
FA-->>FE: ターミナルミラー更新
end
CX->>MCP: face_event / face_say / face_ping
MCP->>FA: WebSocket JSON転送
FA-->>FE: event/say/state payloads
FA->>TTS: TTS request
TTS-->>FA: tts_audio / tts_mouth / say_result
FA-->>FE: リアルタイム状態 + 音声
FE-->>U: 音声・表情・状態を表示
- Node.js 20+(Node 24 推奨)
uv(Python worker依存管理)- Python 3.10+
ffmpeg(推奨。ASR worker の webm/ogg/mp4 フォールバックデコードに使用)- Linuxで音声出力する場合(任意):
- PortAudio (
libportaudio2) +sounddevice - または ALSA
aplay
- PortAudio (
目的に合わせて起動パスを選んでください。
開始前に、利用するコーディングエージェントで MCP 設定を行い(エージェント設定 を参照)、エージェント向け AGENTS.md を設定し、doc/examples/AGENT_RULES.md の内容をエージェント指示へ反映してください。すぐ使えるひな形が必要なら、doc/examples/AGENTS.sample.md を project-local AGENTS.md のテンプレートとして使ってください。
モバイルUIをリモート利用する場合は、先に Tailscale Serve を起動しておくと便利です。
tailscale serve --bg 8765./scripts/setup.sh
./scripts/run-face-app.shその後、別ターミナルで:
./scripts/run-mcp-server.shこれは、シンプルな face UI とシグナリングだけを使いたいとき向けです。run-face-app.sh は既定で operator panel を隠します。
- 利用中のコーディングエージェントが MCP クライアント設定からこのリポジトリの MCP サーバーを自動起動する場合、
./scripts/run-mcp-server.shは二重起動しないでください。 - 既定では
face-appがtts-workerを子プロセス起動するため、FACE_TTS_ENABLED=0にしていない限り別ターミナルでの起動は不要です。既定 backend は Kokoro で、face-app側をTTS_ENGINE=qwen3付きで起動すると任意の Qwen3 worker 経路を使います。
./scripts/setup.sh 実行後の推奨 1 発起動:
./scripts/run-operator-once.sh --profile realtimeこれは、tmux 連携、browser PTT、terminal mirror、隠し復旧、bridge の安全な既定配線まで含む、いちばん実用的な構成です。特に Qwen3 TTS を使いたい理由がなければ、--profile default か --profile realtime から始めてください。
run-operator-once.sh/run-operator-stack.shはface-appを起動し、そのface-appが既定でtts-workerを子起動します。FACE_TTS_ENABLED=0を指定しない限り、別ターミナルでの TTS 起動は不要です。qwen3/qwen3-realtimeprofile は、この子起動 worker にTTS_ENGINE=qwen3を渡して切り替えます。- profile の意味:
--profile default: Kokoro TTS + batch ASR のみ--profile realtime: Kokoro TTS + Voxtral realtime ASR + Parakeet fallback--profile qwen3: Qwen3 TTS + batch ASR のみ--profile qwen3-realtime: Qwen3 TTS + Voxtral realtime ASR + Parakeet fallback
- このアプリを使って別の作業リポジトリを扱う場合は、その target repository 側にも project-local な
AGENTS.mdを置いてください。doc/examples/AGENTS.sample.mdを出発点にして、その repo 固有の build/test/run ルールを追記するのが簡単です。 - 別の作業リポジトリで使う起動方法は、次の 2 通りが実用的です。
- このリポジトリ側から
--repo /path/to/target-repoを付けて起動する - target repository 側へ
cdしてから/path/to/MinimumHeadroom/scripts/run-operator-once.sh ...を呼ぶ
- このリポジトリ側から
起動後のマルチエージェント操作についてはマルチエージェントガイドを参照してください。
よく使う派生例:
# minimum-headroom を operator shell として使いながら、別 repo を作業対象にする
./scripts/run-operator-once.sh --profile realtime --repo /path/to/target-repo
# target repository 側から absolute path で script を呼ぶ
cd /path/to/target-repo
/path/to/MinimumHeadroom/scripts/run-operator-once.sh --profile realtime
# まず agent ペインをシェルだけで開く
./scripts/run-operator-once.sh --profile realtime --agent-shell
# 直前の Codex セッションを再開
./scripts/run-operator-once.sh --agent-cmd 'codex resume --last'
# 起動だけ行い、現在のシェルを維持
./scripts/run-operator-once.sh --profile realtime --no-attach
# Qwen3 TTS を使いたい時だけ明示的に選ぶ
./scripts/run-operator-once.sh --profile qwen3-realtime個人用ローカル設定ファイルはリポジトリにコミットしないでください。
CLI で MCP サーバーを追加:
claude mcp add --transport stdio \
--env FACE_WS_URL=ws://127.0.0.1:8765/ws \
minimum-headroom -- node /ABS/PATH/minimum-headroom/mcp-server/dist/index.js権限プリセットとセキュリティ強化の詳細は Claude Code setup を参照。
doc/examples/codex/config.toml をテンプレートとして使い、~/.codex/config.toml またはプロジェクト内 .codex/config.toml に配置。絶対パスは各自の環境に合わせてください。
[mcp_servers.minimum_headroom]
command = "node"
args = ["/ABS/PATH/minimum-headroom/mcp-server/dist/index.js"]
env = { "FACE_WS_URL" = "ws://127.0.0.1:8765/ws" }doc/examples/antigravity/mcp_config.json をテンプレートとして使い、~/.gemini/ またはプロジェクト内 .gemini/ に配置。Gemini は MCP_TOOL_NAME_STYLE=underscore が必要です。
{
"mcpServers": {
"minimum-headroom": {
"command": "node",
"args": ["/ABS/PATH/minimum-headroom/mcp-server/dist/index.js"],
"env": {
"FACE_WS_URL": "ws://127.0.0.1:8765/ws",
"MCP_TOOL_NAME_STYLE": "underscore"
}
}
}
}権限プリセットと AGENTS.md の詳細は Gemini setup を参照。
- target repository のルートに
AGENTS.mdを配置(doc/examples/AGENTS.sample.mdをテンプレートとして使用)。 doc/examples/AGENT_RULES.mdのシグナリング規約をエージェント指示に含める。- Claude Code の場合は
CLAUDE.mdで Claude 固有のプロジェクト指示も利用可能。
MCP クライアントがドット付きツール名(例: face.event)を受け付けない場合は、環境変数 MCP_TOOL_NAME_STYLE=underscore を設定。ツールは face_event, face_say, face_ping として公開されます。
- Operator Stack and ASR Guide — 起動スクリプトの選び方、tmux bridge、operator UI、キーボードショートカット、batch / realtime ASR、隠し復旧、Tailscale リモート運用
- TTS and Speech Guide — Kokoro / Qwen3 のセットアップ、発話ゲート、長文発話、発話前の正規化
- マルチエージェントガイド — helper の生成、権限プリセット、ミッション割当、owner inbox、worktree 分離、セキュリティ強化
doc/examples/skills/ に再利用可能なスキルを同梱しています。
release-ci-flowminimum-headroom-opslooking-glass-webxr-setup
各フォルダには SKILL.md があり、対応エージェントではローカルスキルディレクトリ(例: $CODEX_HOME/skills/)へコピーして利用できます。
minimum-headroom の operator/helper runtime を使う場合は、minimum-headroom-ops の導入を推奨します。agent.list, agent.spawn, agent.assign, agent.inject, agent.assignment.list, owner.inbox.*, agent.delete を使う標準フローと、helper report の規約をまとめています。
- テスト実行:
npm test- MCP起動確認:
./scripts/run-mcp-server.sh- face-app起動とブラウザ表示確認:
./scripts/run-face-app.sh- TTS worker smoke確認:
npm run tts-worker:smoke- ASR worker smoke確認:
npm run asr-worker:smoke- operator stack起動確認(tmux内 or
MH_BRIDGE_TMUX_PANE指定):
./scripts/run-operator-stack.sh- 実行時ローカルファイル(モデル、ローカルMCP設定、キャッシュ、venv など)は
.gitignoreで除外されています。



