name: unity-workflow description: "Persistent operation history, snapshots, task/session undo, bookmarks, and batch planning/retry. Use when users want to record a task, snapshot before modification, undo/redo by task or session (conversation-level), list/delete tasks, manage scene-view bookmarks, generate combined execution plans, query assets pre-batch, or retry failed batch items. Triggers: workflow, task, task start, task end, session, session undo, session-level undo, conversation undo, snapshot, snapshot object, rollback, revert, persistent history, undo task, redo task, bookmark, save bookmark, goto bookmark, list bookmarks, plan skills, batch retry, retry failed, batch query assets, 工作流, 任务, 任务快照, 会话, 会话撤销, 对话级撤销, 快照, 回滚, 还原, 持久历史, 撤销任务, 重做任务, 书签, 保存书签, 跳转书签, 列出书签, 技能计划, 批量重试." platforms: [unity-editor, claude-code] task-categories: [editor-automation, workflow] use-when: |- Load when the task requires: Persistent operation history, snapshots, task/session undo, bookmarks, and batch planning/retry. Use when users want to record a task, snapshot before modification, undo/redo by task or session (conversation-level), list/delete tasks, manage scene-view bookmarks, generate combined execution plans, query assets pre-batch, or retry failed batch items. Unity Editor must be running with the unity-skills REST server reachable at http://localhost:8090. do-not-use-when: |- Do not load when Unity Editor is not running locally. Do not load when unity-skills REST server is unreachable at http://localhost:8090. metadata: source: https://github.com/Besty0728/Unity-Skills version: 1.9.2 tier: 2
Workflow Skills
Persistent history and rollback system for AI operations ("Time Machine"). Allows tagging tasks, snapshotting objects before modification, and undoing specific tasks even after Editor restarts.
NEW: Session-level undo - Group all changes from a conversation and undo them together.
Operating Mode
- Approval(默认):本模块大部分 skill 标
SkillMode.SemiAuto(bookmark / history / task / session 系列 +workflow_plan,后者 ReadOnly=true 仅生成聚合计划),可直接执行。少数写类 skill (workflow_snapshot_object/workflow_snapshot_created/batch_retry_failed) 走默认SkillMode.FullAuto,需 grant。 - Auto / Bypass:FullAuto 直接执行。
- 含 NeverInSemi 高危 skill:
bookmark_delete/workflow_delete_task(标 Operation.Delete,删除书签/任务记录)。这些在 Approval/Auto 下返MODE_FORBIDDEN,仅 Bypass 或 Allowlist 命中可调。
注意:
workflow_undo_task/workflow_session_undo不是 Delete operation(标的是 Modify/Execute),它们能在 Approval/Auto 直接撤销已记录任务。
DO NOT (common hallucinations):
workflow_savedoes not exist → useworkflow_task_endto end and save a taskworkflow_rollbackdoes not exist → useworkflow_undo_task(by taskId) orworkflow_session_undo(by sessionId)workflow_createdoes not exist → useworkflow_task_startworkflow_revert_taskis deprecated → useworkflow_undo_task
Routing:
- For simple undo/redo (1 step) →
editor_undo/editor_redo(editor module) - For multi-step undo →
history_undowithstepsparameter (this module) - For conversation-level undo →
workflow_session_undo(this module)
Bookmark Skills
bookmark_set
Save current selection and scene view position as a bookmark.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| bookmarkName | string | Yes | - | Name for the bookmark |
| note | string | No | null | Optional note for the bookmark |
Returns: { success, bookmark, selectedCount, hasSceneView, note }
bookmark_goto
Restore selection and scene view from a bookmark.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| bookmarkName | string | Yes | - | Name of the bookmark to restore |
Returns: { success, bookmark, restoredSelection, note }
bookmark_list
List all saved bookmarks.
No parameters.
Returns: { success, count, bookmarks: [{ name, selectedCount, hasSceneView, note, createdAt }] }
bookmark_delete
Delete a bookmark.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| bookmarkName | string | Yes | - | Name of the bookmark to delete |
Returns: { success, deleted }
History Skills
history_undo
Undo the last operation (or multiple steps).
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| steps | int | No | 1 | Number of undo steps to perform |
Returns: { success, undoneSteps }
history_redo
Redo the last undone operation (or multiple steps).
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| steps | int | No | 1 | Number of redo steps to perform |
Returns: { success, redoneSteps }
history_get_current
Get the name of the current undo group.
No parameters.
Returns: { success, currentGroup, groupIndex }
Planning And Batch Governance
workflow_plan
Generate a combined execution plan for multiple skills on the server side.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
skillsJson |
string | Yes | - | JSON array of { "name": "...", "params": { ... } } entries |
Returns: { totalSteps, totalRisk, steps, dependencies, warnings, mayDisconnect }
batch_query_assets
Query project assets with filters that are useful before batch cleanup or migration work.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
searchFilter |
string | No | - | Extra AssetDatabase.FindAssets filter text |
folder |
string | No | Assets |
Search root |
typeFilter |
string | No | - | Asset type filter such as t:Material or Prefab |
namePattern |
string | No | - | Regex applied to file name without extension |
labelFilter |
string | No | - | Asset label filter such as l:Addressable |
maxResults |
int | No | 200 |
Max assets returned |
Returns: { count, totalMatched, summary, assets }
batch_retry_failed
Retry only the failed items from an earlier batch execution report. This now reuses the original operation context stored in the report.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
reportId |
string | Yes | - | Source report ID from batch_report_get / batch_report_list |
runAsync |
bool | No | true |
Return a jobId immediately or wait for completion |
chunkSize |
int | No | 100 |
Chunk size for retry execution |
Returns: { status, jobId?, retryCount, originalReportId, reportId? }
Session Management (Conversation-Level Undo)
workflow_session_start
Start a new session (conversation-level). All changes will be tracked and can be undone together. Call this at the beginning of each conversation.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| tag | string | No | null | Label for the session |
Returns: { success, sessionId, message }
workflow_session_end
End the current session and save all tracked changes. Call this at the end of each conversation.
No parameters.
Returns: { success, sessionId, message }
workflow_session_undo
Undo all changes made during a specific session (conversation-level undo).
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sessionId | string | No | null | The UUID of the session to undo. If not provided, undoes the most recent session |
Returns: { success, sessionId, message }
workflow_session_list
List all recorded sessions (conversation-level history).
No parameters.
Returns: { success, count, currentSessionId, sessions: [{ sessionId, taskCount, totalChanges, startTime, endTime, tags }] }
workflow_session_status
Get the current session status.
No parameters.
Returns: { success, hasActiveSession, currentSessionId, isRecording, currentTaskId, currentTaskTag, currentTaskDescription, snapshotCount }
Task-Level Skills
workflow_task_start
Start a new persistent workflow task to track changes for undo. Call workflow_task_end when done.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| tag | string | Yes | - | Short label for the task (e.g., "Create NPC") |
| description | string | No | "" | Detailed description or prompt |
Returns: { success, taskId, message }
workflow_task_end
End the current workflow task and save it. Requires an active task (call workflow_task_start first).
No parameters.
Returns: { success, taskId, snapshotCount, message }
workflow_snapshot_object
Manually snapshot an object's state before modification. Requires an active task (call workflow_task_start first).
Call this BEFORE component_set_property, gameobject_set_transform, etc.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| name | string | No | null | Name of the Game Object |
| instanceId | int | No | 0 | Instance ID of the object (preferred) |
Returns: { success, objectName, type }
workflow_snapshot_created
Record a newly created object for undo tracking. Requires an active task (call workflow_task_start first).
Note: component_add and gameobject_create automatically record created objects, so you typically don't need to call this manually.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| name | string | No | null | Name of the Game Object |
| instanceId | int | No | 0 | Instance ID of the object (preferred) |
Returns: { success, objectName, type }
workflow_list
List persistent workflow history.
No parameters.
Returns: { success, count, history: [{ id, tag, description, time, changes }] }
workflow_undo_task
Undo changes from a specific task (restore to previous state). The undone task is saved and can be redone later.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| taskId | string | Yes | - | The UUID of the task to undo |
Returns: { success, taskId }
workflow_redo_task
Redo a previously undone task (restore changes).
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| taskId | string | No | null | The UUID of the task to redo. If not provided, redoes the most recently undone task |
Returns: { success, taskId }
workflow_undone_list
List all undone tasks that can be redone.
No parameters.
Returns: { success, count, undoneStack: [{ id, tag, description, time, changes }] }
workflow_revert_task
(deprecated) Alias for workflow_undo_task. Use workflow_undo_task instead.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| taskId | string | Yes | - | The UUID of the task to undo |
Returns: { success, taskId }
workflow_delete_task
Delete a task from history (does not revert changes, just removes the record).
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| taskId | string | Yes | - | The UUID of the task to delete |
Returns: { success, deletedId }
Minimal Example
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"])
Auto-Tracked Operations
The following operations are automatically tracked for undo when a session/task is active:
gameobject_create/gameobject_create_batchgameobject_duplicate/gameobject_duplicate_batchcomponent_add/component_add_batchui_create_*(canvas, button, text, image, etc.)light_createprefab_instantiate/prefab_instantiate_batchmaterial_create/material_duplicateterrain_createcinemachine_create_vcam
For modification operations, the system auto-snapshots target objects before changes when possible.
Exact Signatures
Exact names, parameters, defaults, and returns are defined by GET /skills/schema or unity_skills.get_skill_schema(), not by this file.