VS Code のコマンドパレット風 UI を持つ、Unity 用のデバッグコンソール / コマンド実行ライブラリ。
[LiminalCommand] を付けた C# メソッドを Editor / Runtime / HTTP API の 3 経路から統一的に実行できる。AI Agent (Claude Code 等) や CLI / Discord bot から curl 一発でゲーム操作を自動化したいケースに特化している。
- ファジー検索付きコマンドパレット (Editor / Runtime 両対応、UI Toolkit 製)
- 4 タブ構成: Command (新規実行) / Scenario (コマンドチェイン実行) / Log (起動履歴の詳細閲覧) / History (再実行特化)。
Tab/Shift+Tabでタブ巡回 - 型解決済み引数 UI:
int/float/string/bool/enum/Vector2/3/4/Color/[Flags] enum/UnityEngine.Object派生 - HTTP API: ローカル localhost で
/api/v1/{health, commands, execute, logs, state, scenarios, scenarios/run}を提供。Bearer トークン認証 + レートリミット - Production ビルド除外:
defineConstraintsの三重防御で Player ビルドにシンボル混入なし - 拡張点:
ITypeConverter/IParameterEditor/ICommandHistoryで利用側が拡張可能
- Unity 6000.3 以降 (UI Toolkit Runtime support 利用)
- .NET Standard 2.1 / C# 9 以降
- 入力: Legacy Input Manager / Input System Package のどちらでも動く (両方有効でも可)
- R3 (Cysharp/R3) —
ReactiveProperty<T>/Observable<T>対応 (Phase 5a 以降必須) - VContainer (hadashiA/VContainer) — インスタンスメソッドコマンドの解決 (Phase 5a 以降必須)
Phase 4 までは外部依存ゼロだったが、Phase 5a で R3 + VContainer 必須に方針転換した。利用側のコード量を最小化する設計判断。
using R3;
using UnityEngine;
using Void2610.LiminalPalette;
public class Player : MonoBehaviour
{
public ReactiveProperty<int> Hp { get; } = new(100);
[LiminalObservableField("Player/Health")]
public ReactiveProperty<int> HpField => Hp; // 現在値が UI に常時表示される
[LiminalCommand("Player/Health/Set", Description = "プレイヤーの HP を設定する")]
public void SetHealth(int value) => Hp.Value = value; // インスタンスメソッドでも OK
}public class GameLifetimeScope : LifetimeScope
{
protected override void Configure(IContainerBuilder builder)
{
builder.RegisterComponentInHierarchy<Player>();
builder.RegisterEntryPoint<LiminalPaletteEntryPoint>(); // 1 行で接続完了
}
}- Editor:
Cmd/Ctrl + Kでパレットを開き、"Player Set" などで検索 → 引数欄上部に現在 HP が表示 → Run で実行。 - Play Mode (ゲーム実行中): 同じ
Cmd/Ctrl + Kで半透明 overlay として開く。値は R3 push 駆動で自動更新。
TOKEN=$(cat ~/.liminal-palette/token)
curl -s -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-X POST http://127.0.0.1:7610/api/v1/execute \
-d '{"path":"Player/Health/Set","args":{"value":"100"}}'
# → {"success":true,"value":null,"durationMs":0.51,...}トークンは Editor 起動時に ~/.liminal-palette/token へ自動生成される。
Claude Code から HTTP API を叩くための Agent Skills を package に同梱している。利用側プロジェクトを Unity で開いた状態で:
Tools > LiminalPalette > Install AI Skills...
を選ぶと、プロジェクトルートの .claude/skills/ に 8 個の liminal-* skill (liminal-overview / liminal-find-port / liminal-list-commands / liminal-execute / liminal-get-state / liminal-get-logs / liminal-list-scenarios / liminal-run-scenario) がコピーされる。Claude Code を再起動すれば skill が認識され、「LP のコマンド一覧」「Player/Health/Set を 50 で実行」のような指示で curl 操作が自動選択される。
アンインストール: Tools > LiminalPalette > Uninstall AI Skills。
skill ファイル本体は package 内の AISkills~/ に同梱されており、上書きインストールで常に LP の最新版に同期する。
詳細は Documentation~/ 配下を参照:
| 章 | 内容 |
|---|---|
| index | ドキュメントのハブ + 全体構成図 |
| getting-started | インストール / Hello World / 最初の動作確認 |
| commands | [LiminalCommand] の全機能、引数の型、async、動的登録 |
| ui | Editor Window / Runtime UI / ショートカット / 入力ブロッカー |
| ipc | HTTP API リファレンス + curl 例 + AI Agent 連携 |
| extensibility | ITypeConverter / IParameterEditor / ICommandHistory で利用側拡張 |
| asmdef | 8 つの asmdef 構成と依存ルール / defineConstraints |
| security | localhost only / トークン / Production 除外 / レートリミット |
| troubleshooting | よくある問題と既知の制約 |
Packages/manifest.json に以下を追加する:
{
"dependencies": {
"com.void2610.liminal-palette": "https://github.com/void2610/liminal-palette.git",
"com.cysharp.r3": "https://github.com/Cysharp/R3.git?path=src/R3.Unity/Assets/R3.Unity",
"jp.hadashikick.vcontainer": "https://github.com/hadashiA/VContainer.git?path=VContainer/Assets/VContainer"
}
}R3 と VContainer は Phase 5a 以降必須なので、利用側 manifest で別途インストールする必要がある (UPM の dependencies には git URL を書けないため、本パッケージの package.json には記載していない)。
特定のリリースに固定したい場合はタグを付ける:
"com.void2610.liminal-palette": "https://github.com/void2610/liminal-palette.git#v0.1.0"開発中のローカルクローンを参照する場合:
"com.void2610.liminal-palette": "file:../../liminal-palette"相対パスは利用側プロジェクトの
Packages/フォルダから見て解決される。
MIT License — Copyright (c) 2026 void2610