unity-workflow について
unity-workflowは、UnityのAI操作を記録してロールバックする永続履歴スキルモジュールです。エージェントはタスクや会話単位で変更を追跡し、複数スキルの計画を確認して、Editorの再起動後も記録済みの操作を元に戻せます。
主な機能
- 01タスク・セッション単位の変更追跡
- 02永続スナップショットとロールバック
- 03複数ステップの取り消しとやり直し
- 04複数スキルの実行計画
- 05アセットの一括検索と再試行
活用シーン
- 01リスクのある編集前に変更を記録
- 02会話中のUnity変更を一括で取り消し
- 03一括操作前に実行計画を確認
- 04バッチレポートの失敗項目を再試行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ besty0728/ unity-skills --skill unity-workflowインストール後、Claude Code で/unity-workflowを入力して読み込まれたか確認します。
詳細
このモジュールのスキルを呼び出す前に: 名前や説明から推測したパラメーターでスキルを呼び出そうとしている場合は、いったん停止し、まずこのファイルを読むか、
GET /skills/recommend?includeSchema=trueでスキーマを取得してください。recommend/schema からパラメーター定義をすでに取得している場合は、そのまま dryRun に進めます。
トリガー
- タスクまたはセッション全体を取り消す
- リスクの高い変更の前にスナップショットを作成する
- 一括操作を計画/プレビューする
- ロールバックする
- 撤销整个任务或会话、高危改动前快照、规划/预览批量操作、回滚
ワークフロースキル
AI 操作の永続的な履歴およびロールバックシステム(「タイムマシン」)です。 タスクにタグを付けたり、オブジェクトの変更前にスナップショットを作成したり、Editor の再起動後でも特定のタスクを取り消したりできます。
新機能:セッション単位の取り消し — 会話中のすべての変更をまとめて取り消せます。
動作モード
- 承認:このモジュールのほとんどのスキルは
SkillMode.SemiAuto(bookmark / history / task / session 系列の読み取り専用クエリとworkflow_plan。後者は ReadOnly=true で、集約された計画のみを生成)に設定されており、直接実行できます。副作用のあるスキル(bookmark_set/bookmark_goto/workflow_snapshot_object/workflow_snapshot_created/batch_retry_failed)はデフォルトのSkillMode.FullAutoで実行され、grant が必要です。 - 自動/バイパス:FullAuto は直接実行されます。
- NeverInSemi に該当する高リスクスキル:
bookmark_delete/workflow_delete_task(Operation.Delete に設定。ブックマーク/タスク記録を削除)、workflow_clear_history(Operation.Delete + RiskLevel=high に設定。すべての履歴、redo スタック、ファイルストレージを消去し、元に戻せません)。これらは Approval/Auto ではMODE_FORBIDDENを返し、Bypass または Allowlist に該当する場合にのみ呼び出せます。
注意:
workflow_undo_task/workflow_session_undoは Delete operation ではありません(Modify/Execute に設定)。Approval/Auto でも、記録済みのタスクを直接取り消せます。
サーフェスプロファイル: workflow_undo_task / workflow_redo_task / workflow_revert_task / workflow_session_undo は、対象タスクが復元するすべてのスナップショットを検査します。スナップショットのいずれかが、アクティブなプロファイルで除外されているカテゴリ(シーンの GameObject、または .unity / .mat アセット)を作成する場合、呼び出し全体が SURFACE_EXCLUDED で拒否され、一部だけが適用されることはありません(surfaceProfile/category/operation/manualDoc/userControlled/hint は最上位にあり、details の下にはネストされません)。スクリプト、プレハブ、テクスチャ、ScriptableObjects、Editor/プロジェクト設定のスナップショットには影響しません。これらはどのプロファイルでも引き続き取り消し可能です。
使用しないでください(よくある誤った思い込み):
workflow_saveは存在しません → タスクを終了して保存するにはworkflow_task_endを使用してくださいworkflow_rollbackは存在しません →workflow_undo_task(taskId を指定)またはworkflow_session_undo(sessionId を指定)を使用してくださいworkflow_createは存在しません →workflow_task_startを使用してくださいworkflow_revert_taskは非推奨です →workflow_undo_taskを使用してください
使い分け:
- 単純な取り消し/やり直し(1 ステップ)→
editor_undo/editor_redo(editor モジュール) - 複数ステップの取り消し →
stepsパラメーターを指定してhistory_undo(このモジュール) - 会話単位での取り消し →
workflow_session_undo(このモジュール)
ブックマークスキル
bookmark_set
現在の選択項目とシーンビューの位置をブックマークとして保存します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| bookmarkName | string | はい | - | ブックマークの名前 |
| note | string | いいえ | null | ブックマークの任意のメモ |
戻り値: { success, bookmark, selectedCount, hasSceneView, note }
bookmark_goto
ブックマークから選択項目とシーンビューを復元します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| bookmarkName | string | はい | - | 復元するブックマークの名前 |
戻り値: { success, bookmark, restoredSelection, note }
bookmark_list
保存済みのブックマークをすべて一覧表示します。
パラメーターはありません。
戻り値: { success, count, bookmarks: [{ name, selectedCount, hasSceneView, note, createdAt }] }
bookmark_delete
ブックマークを削除します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| bookmarkName | string | はい | - | 削除するブックマークの名前 |
戻り値: { success, deleted }
履歴スキル
history_undo
最後の操作を取り消します(複数ステップの取り消しも可能です)。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| steps | int | いいえ | 1 | 取り消すステップ数 |
戻り値: { success, undoneSteps }
history_redo
最後に取り消した操作をやり直します(複数ステップのやり直しも可能です)。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| steps | int | いいえ | 1 | やり直すステップ数 |
戻り値: { success, redoneSteps }
history_get_current
現在の取り消しグループの名前を取得します。
パラメーターはありません。
戻り値: { success, currentGroup, groupIndex }
計画とバッチ管理
workflow_plan
サーバー側で複数のスキルを組み合わせた実行計画を生成します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
skillsJson | string | はい | - | { "name": "...", "params": { ... } } エントリーの JSON 配列 |
戻り値: { totalSteps, totalRisk, steps, dependencies, warnings, mayDisconnect }
batch_query_assets
バッチクリーンアップや移行作業の前に役立つフィルターを使って、プロジェクトのアセットを検索します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
searchFilter | string | いいえ | - | 追加の AssetDatabase.FindAssets フィルターテキスト |
folder | string | いいえ | Assets | 検索ルート |
typeFilter | string | いいえ | - | t:Material や Prefab などのアセットタイプフィルター |
namePattern | string | いいえ | - | 拡張子を除いたファイル名に適用する正規表現 |
labelFilter | string | いいえ | - | l:Addressable などのアセットラベルフィルター |
maxResults | int | いいえ | 200 | 返されるアセットの最大数 |
戻り値: { count, totalMatched, summary, assets }
batch_retry_failed
以前のバッチ実行レポートで失敗した項目のみを再試行します。レポートに保存された元の操作コンテキストを再利用します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
reportId | string | はい | - | batch_report_get / batch_report_list のソースレポート ID |
runAsync | bool | いいえ | true | jobId をすぐに返すか、完了まで待機するか |
chunkSize | int | いいえ | 100 | 再試行実行のチャンクサイズ |
戻り値: { status, jobId?, retryCount, originalReportId, reportId? }
セッション管理(会話単位の取り消し)
workflow_session_start
新しいセッション(会話単位)を開始します。すべての変更が追跡され、まとめて取り消せます。 各会話の開始時に呼び出してください。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| tag | string | いいえ | null | セッションのラベル |
戻り値: { success, sessionId, message }
workflow_session_end
現在のセッションを終了し、追跡されたすべての変更を保存します。 各会話の終了時に呼び出してください。
パラメーターはありません。
戻り値: { success, sessionId, message }
workflow_session_undo
特定のセッション中に行われたすべての変更を取り消します(会話単位の取り消し)。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| sessionId | string | いいえ | null | 取り消すセッションの UUID。指定しない場合は、直近のセッションを取り消します |
戻り値: { success, sessionId, message }
workflow_session_list
記録されたすべてのセッションを一覧表示します(会話単位の履歴)。
パラメーターはありません。
戻り値: { success, count, currentSessionId, sessions: [{ sessionId, taskCount, totalChanges, startTime, endTime, tags }] }
workflow_session_status
現在のセッションのステータスを取得します。
パラメーターはありません。
戻り値: { success, hasActiveSession, currentSessionId, isRecording, currentTaskId, currentTaskTag, currentTaskDescription, snapshotCount }
タスクレベルのスキル
workflow_task_start
取り消しのために変更を追跡する、新しい永続ワークフロータスクを開始します。完了したら workflow_task_end を呼び出してください。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| tag | string | はい | - | タスクの短いラベル(例:「NPC を作成」) |
| description | string | いいえ | "" | 詳細な説明またはプロンプト |
戻り値: { success, taskId, message }
workflow_task_end
現在のワークフロータスクを終了して保存します。アクティブなタスクが必要です(先に workflow_task_start を呼び出してください)。
パラメーターはありません。
戻り値: { success, taskId, snapshotCount, message }
workflow_snapshot_object
変更前に、オブジェクトの状態を手動でスナップショットします。アクティブなタスクが必要です(先に workflow_task_start を呼び出してください)。
component_set_property、gameobject_set_transform などを呼び出す前に、必ずこれを呼び出してください。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| name | string | いいえ | null | Game Object の名前 |
| instanceId | int | いいえ | 0 | オブジェクトのインスタンス ID(推奨) |
戻り値: { success, objectName, type }
workflow_snapshot_created
新しく作成したオブジェクトを、取り消し追跡用に記録します。アクティブなタスクが必要です(先に workflow_task_start を呼び出してください)。
注: component_add と gameobject_create は作成したオブジェクトを自動的に記録するため、通常は手動で呼び出す必要はありません。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| name | string | いいえ | null | Game Object の名前 |
| instanceId | int | いいえ | 0 | オブジェクトのインスタンス ID(推奨) |
戻り値: { success, objectName, type }
workflow_list
永続ワークフローの履歴を一覧表示します。
パラメーターはありません。
戻り値: { success, count, history: [{ id, tag, description, time, changes }] }
workflow_undo_task
特定のタスクによる変更を取り消し、以前の状態に復元します。取り消したタスクは保存され、後からやり直すことができます。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| taskId | string | はい | - | 取り消すタスクの UUID |
戻り値: { success, taskId }
workflow_redo_task
以前に取り消したタスクをやり直し、変更を復元します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| taskId | string | いいえ | null | やり直すタスクの UUID。指定しない場合は、最後に取り消したタスクをやり直します |
戻り値: { success, taskId }
workflow_undone_list
やり直し可能な、取り消し済みタスクをすべて一覧表示します。
パラメーターはありません。
戻り値: { success, count, undoneStack: [{ id, tag, description, time, changes }] }
workflow_revert_task
(非推奨) workflow_undo_task の別名です。代わりに workflow_undo_task を使用してください。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| taskId | string | はい | - | 取り消すタスクの UUID |
戻り値: { success, taskId }
workflow_delete_task
履歴からタスクを削除します(変更は元に戻さず、記録のみを削除します)。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| taskId | string | はい | - | 削除するタスクの UUID |
戻り値: { success, deletedId }
workflow_clear_history
ワークフローの履歴をすべて完全に消去します。すべてのタスク、やり直し(取り消し済み)スタック、コンテンツアドレス可能なストア内のバックアップ済みファイル blob が対象です。リスクが高く、元に戻せません。
これは追跡履歴のみを削除します。プロジェクトのアセット、シーン、設定にすでに適用された変更を取り消したり、元に戻したりすることはありません。 変更をロールバックするには、消去する前に workflow_undo_task / workflow_session_undo を使用してください。
SkillOperation.Delete + RiskLevel="high" に設定されているため、NeverInSemi です(Approval/Auto では MODE_FORBIDDEN を返します。呼び出せるのは Bypass または Allowlist に該当する場合のみです)。
パラメーター: なし
戻り値: { success, before, after, message }。before / after はそれぞれ { tasks, undoneStack, historyFileBytes, fileStoreBytes } を報告します。
スナップショットの仕組み
履歴は workflow_history.json(schemaVersion 5)に保存されます。アセットと .meta のバイト列はそれぞれ Library/UnitySkills/workflow_files/<sha1> にコンテンツアドレス方式で保存され、履歴には fileHash / metaFileHash の参照が保持されます。スキーマ 2/3 の履歴はアトミックに移行されます。インライン base64 が削除される前に、従来の blob が永続化されます。
スナップショットは SnapshotType によって階層化されます。
| タイプ | トリガー | 保存される内容 | 取り消し時の動作 |
|---|---|---|---|
| Created | 新しいアセット/フォルダー | パス + GUID のみ | 作成されたアセット/フォルダーを削除 |
| Moved | asset_move | 旧パス + 新パスのみ | 旧パスに戻す |
| Deleted | asset_delete など | ファイル + .meta をストアに移動 | 完全に復元。.cs スクリプトを含む(旧実装では .cs を復元できませんでした) |
| Modified | material / SO / scene / uss / uxml / shadergraph … | コンテンツアドレス方式のバックアップ + 軽量な originalJson | バックアップしたバイト列を復元 |
| Setting | エディター/プロジェクト設定 | WorkflowSettingRestorerRegistry 経由で処理 | Registry が以前の値を復元 |
取り消し/やり直しでは、スナップショットごとの詳細(TaskUndoResult: total / succeeded / failed / details / error)が返されます。操作は逆順に実行されます。最初の失敗が発生すると、失敗したスナップショットと未処理のスナップショットは、再試行できるように元のスタックに残ります。
自動クリーンアップ
WorkflowAutoCleanConfig(EditorPrefs キー UnitySkills.Workflow.*)は、EndTask の後と LoadHistory の後に履歴とファイルストアを整理します。デフォルト値は MaxTasks=200、MaxHistoryMB=32、MaxTaskAgeDays=30、MaxStoreMB=512、StoreMaxAgeDays=7 です。ストアの経過日数/サイズによる整理では、保持されている履歴から参照されている blob は削除されません。値を 0 にすると、その制限は個別に無効になります。
設定も確実に元に戻せるようになりました
設定クラスのスキルは以前は一方向でしたが、現在は復元機能を登録するため、ロールバックできます。対象は console_set_pause_on_error / console_set_collapse / console_set_clear_on_play、debug_set_defines、graphics_set_quality_level / graphics_set_default_render_pipeline / graphics_set_quality_render_pipeline / graphics_add_always_included_shader / graphics_remove_always_included_shader / graphics_set_shader_stripping、physics_set_gravity / physics_set_layer_collision、project_add_tag です。
Cinemachine の 28 個の書き込みスキルで、TracksWorkflow=true が設定されるようになりました(スナップショットのコードは存在していましたが、自動的にトリガーされていませんでした)。scene_save / scene_create もロールバック可能になりました(既存シーンに対する scene_save は、古いファイルを Modified スナップショットとしてバックアップします)。
既知の制限事項
scene_saveの取り消しでは、ディスク上の.unityファイルが復元されます。シーンが現在開いている場合、復元を反映するには Reload Scene が必要です。- 一度も保存されていないシーンで作成されたオブジェクト:Editor を再起動すると
GlobalObjectIdが無効になるため、取り消し結果の詳細では失敗として記録されます。 - 外部への副作用(Package Manager の操作など)はロールバックできません。
最小限の例
import unity_skills
# Session-level: wrap entire conversation for bulk undo
unity_skills.call_skill("workflow_session_start", tag="Build Player")
unity_skills.call_skill("gameobject_create", name="Player", primitiveType="Capsule")
unity_skills.call_skill("component_add", name="Player", componentType="Rigidbody")
unity_skills.call_skill("workflow_session_end")
# Later: undo entire session
sessions = unity_skills.call_skill("workflow_session_list")
unity_skills.call_skill("workflow_session_undo", sessionId=sessions["sessions"][0]["sessionId"])
自動追跡される操作
セッション/タスクがアクティブな場合、以下の操作は取り消し用に自動追跡されます。
gameobject_create/gameobject_create_batchgameobject_duplicate/gameobject_duplicate_batchcomponent_add/component_add_batchui_create_*(キャンバス、ボタン、テキスト、画像など)light_createprefab_instantiate/prefab_instantiate_batchmaterial_create/material_duplicateterrain_createcinemachine_create_vcam
変更操作では、可能な場合、変更前にシステムが対象オブジェクトのスナップショットを自動的に取得します。
正確なシグネチャ
正確な名前、パラメーター、デフォルト値、戻り値は、このファイルではなく、GET /skills/schema または unity_skills.get_skill_schema() で定義されています。