Skip to content
unity-workflow logo

unity-workflow

Persistent operation history, snapshots, task/session undo, bookmarks, and batch planning/retry — record tasks, snapshot before changes, undo/redo by task or conversation session. Exact signatures via GET /skills/schema.

SKILL.md

Full skill instructions

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_save does not exist → use workflow_task_end to end and save a task
  • workflow_rollback does not exist → use workflow_undo_task (by taskId) or workflow_session_undo (by sessionId)
  • workflow_create does not exist → use workflow_task_start
  • workflow_revert_task is deprecated → use workflow_undo_task

Routing:

  • For simple undo/​redo (1 step) → editor_undo / editor_redo (editor module)
  • For multi-step undo → history_undo with steps parameter (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.

ParameterTypeRequiredDefaultDescription
bookmarkNamestringYes-Name for the bookmark
notestringNonullOptional note for the bookmark

Returns: { success, bookmark, selectedCount, hasSceneView, note }

bookmark_goto

Restore selection and scene view from a bookmark.

ParameterTypeRequiredDefaultDescription
bookmarkNamestringYes-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.

ParameterTypeRequiredDefaultDescription
bookmarkNamestringYes-Name of the bookmark to delete

Returns: { success, deleted }

History Skills

history_undo

Undo the last operation (or multiple steps).

ParameterTypeRequiredDefaultDescription
stepsintNo1Number of undo steps to perform

Returns: { success, undoneSteps }

history_redo

Redo the last undone operation (or multiple steps).

ParameterTypeRequiredDefaultDescription
stepsintNo1Number 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.

ParameterTypeRequiredDefaultDescription
skillsJsonstringYes-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.

ParameterTypeRequiredDefaultDescription
searchFilterstringNo-Extra AssetDatabase.FindAssets filter text
folderstringNoAssetsSearch root
typeFilterstringNo-Asset type filter such as t:Material or Prefab
namePatternstringNo-Regex applied to file name without extension
labelFilterstringNo-Asset label filter such as l:Addressable
maxResultsintNo200Max 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.

ParameterTypeRequiredDefaultDescription
reportIdstringYes-Source report ID from batch_report_get / batch_report_list
runAsyncboolNotrueReturn a jobId immediately or wait for completion
chunkSizeintNo100Chunk 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.

ParameterTypeRequiredDefaultDescription
tagstringNonullLabel 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).

ParameterTypeRequiredDefaultDescription
sessionIdstringNonullThe 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.

ParameterTypeRequiredDefaultDescription
tagstringYes-Short label for the task (e.g., "Create NPC")
descriptionstringNo""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.

ParameterTypeRequiredDefaultDescription
namestringNonullName of the Game Object
instanceIdintNo0Instance 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.

ParameterTypeRequiredDefaultDescription
namestringNonullName of the Game Object
instanceIdintNo0Instance 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.

ParameterTypeRequiredDefaultDescription
taskIdstringYes-The UUID of the task to undo

Returns: { success, taskId }

workflow_redo_task

Redo a previously undone task (restore changes).

ParameterTypeRequiredDefaultDescription
taskIdstringNonullThe 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.

ParameterTypeRequiredDefaultDescription
taskIdstringYes-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).

ParameterTypeRequiredDefaultDescription
taskIdstringYes-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_batch
  • gameobject_duplicate / gameobject_duplicate_batch
  • component_add / component_add_batch
  • ui_create_* (canvas, button, text, image, etc.)
  • light_create
  • prefab_instantiate / prefab_instantiate_batch
  • material_create / material_duplicate
  • terrain_create
  • cinemachine_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.