Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions .agents/skills/uloop-clear-console/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,11 @@ uloop clear-console --add-confirmation-message
## Output

Returns JSON with:
- `success` (boolean): Whether the clear operation succeeded
- `clearedLogCount` (number): Total number of log entries that were cleared
- `clearedCounts` (object): Breakdown by log type
- `errorCount` (number): Errors cleared
- `warningCount` (number): Warnings cleared
- `logCount` (number): Info logs cleared
- `message` (string): Description of the result. On failure, this field carries the error summary.

- `Success` (boolean): Whether the clear operation succeeded
- `ClearedLogCount` (number): Total number of log entries that were cleared
- `ClearedCounts` (object): Breakdown by log type
- `ErrorCount` (number): Errors cleared
- `WarningCount` (number): Warnings cleared
- `LogCount` (number): Info logs cleared
- `Message` (string): Description of the result. On failure, this field carries the error summary.
9 changes: 5 additions & 4 deletions .agents/skills/uloop-compile/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ uloop compile --stop-on-external-scene-changes
## Output

Returns JSON:
- `success`: boolean or null
- `errorCount`: number or null
- `warningCount`: number or null
- `message`: string

- `Success`: boolean or null
- `ErrorCount`: number or null
- `WarningCount`: number or null
- `Message`: string
13 changes: 7 additions & 6 deletions .agents/skills/uloop-control-play-mode/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@ uloop control-play-mode --action Step
## Output

Returns JSON with the current play mode state:
- `isPlaying`: Whether Unity is currently in play mode
- `isPaused`: Whether play mode is paused
- `changed`: Whether the requested action changed the current play mode state
- `wasAlreadyStopped`: Whether `Stop` was requested while Play Mode was already stopped
- `message`: Description of the action performed

- `IsPlaying`: Whether Unity is currently in play mode
- `IsPaused`: Whether play mode is paused
- `Changed`: Whether the requested action changed the current play mode state
- `WasAlreadyStopped`: Whether `Stop` was requested while Play Mode was already stopped
- `Message`: Description of the action performed

## Notes

- Stop on an already-stopped Editor sets `changed: false`, `wasAlreadyStopped: true`
- Stop on an already-stopped Editor sets `Changed: false`, `WasAlreadyStopped: true`
- Step is independent of `Time.timeScale`; requires PlayMode to be running
- The command waits for the requested state before returning. Increase `--timeout-seconds` for projects with slow PlayMode entry.
21 changes: 11 additions & 10 deletions .agents/skills/uloop-execute-dynamic-code/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,17 @@ Prefer terminal commands for file operations and keep snippets focused on Unity
## Output

Returns JSON:
- `success`: boolean — overall execution success
- `result`: string — value of the snippet's `return` statement (empty when omitted)
- `logs`: string[] — execution messages from the dynamic-code tool; read Unity Console `Debug.Log` output with `get-logs`
- `compilationErrors`: object[] — Roslyn diagnostics with `message`, `line`, `column`, `errorCode`, optional `hint` and `suggestions`
- `error` / `errorMessage`: string — top-level failure summary (empty on success)
- `updatedCode`: string|null — the wrapped form actually compiled (handy when debugging using-statement reordering)
- `diagnosticsSummary`: string|null — compact summary when diagnostics are available
- `diagnostics`: object[] — structured diagnostics; same shape as `compilationErrors`, usually populated together with it

On `success: false`, inspect `compilationErrors` first. If empty, read `errorMessage` (and `logs` for extra context) — the failure may be a runtime exception, cancellation, or an "execution in progress" rejection, all of which return empty `compilationErrors`. Both EditMode and PlayMode are supported targets — the snippet runs in whichever mode the Editor is currently in.

- `Success`: boolean — overall execution success
- `Result`: string — value of the snippet's `return` statement (empty when omitted)
- `Logs`: string[] — execution messages from the dynamic-code tool; read Unity Console `Debug.Log` output with `get-logs`
- `CompilationErrors`: object[] — Roslyn diagnostics with `Message`, `Line`, `Column`, `ErrorCode`, optional `Hint` and `Suggestions`
- `Error` / `ErrorMessage`: string — top-level failure summary (empty on success)
- `UpdatedCode`: string|null — the wrapped form actually compiled (handy when debugging using-statement reordering)
- `DiagnosticsSummary`: string|null — compact summary when diagnostics are available
- `Diagnostics`: object[] — structured diagnostics; same shape as `CompilationErrors`, usually populated together with it

On `Success: false`, inspect `CompilationErrors` first. If empty, read `ErrorMessage` (and `Logs` for extra context) — the failure may be a runtime exception, cancellation, or an "execution in progress" rejection, all of which return empty `CompilationErrors`. Both EditMode and PlayMode are supported targets — the snippet runs in whichever mode the Editor is currently in.

## Code Examples by Category

Expand Down
30 changes: 16 additions & 14 deletions .agents/skills/uloop-find-game-objects/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,21 +70,23 @@ uloop find-game-objects --search-mode Selected --include-inactive
## Output

Returns JSON with:
- `results` (array): Matching GameObjects, each containing:
- `name` (string): GameObject name
- `path` (string): Hierarchy path (e.g., `Canvas/Panel/Button`)
- `isActive` (boolean): Active state in hierarchy
- `tag` (string): GameObject tag
- `layer` (number): Layer index
- `components` (array): Each entry has `type` (short name, e.g., `Rigidbody`), `fullTypeName` (e.g., `UnityEngine.Rigidbody`), and `properties` (array of Inspector-visible `{name, type, value}` pairs)
- `totalFound` (number): Results returned (after `--max-results` clipping). For multi-selection file export, this is the number exported.
- `errorMessage` (string): Top-level failure summary (empty on success)
- `processingErrors` (array): Selected-mode per-GameObject serialization failures, each `{gameObjectName, gameObjectPath, error}`. Omitted/null or empty on clean runs.

- `Results` (array): Matching GameObjects, each containing:
- `Name` (string): GameObject name
- `Path` (string): Hierarchy path (e.g., `Canvas/Panel/Button`)
- `IsActive` (boolean): Active state in hierarchy
- `Tag` (string): GameObject tag
- `Layer` (number): Layer index
- `Components` (array): Each entry has `Type` (short name, e.g., `Rigidbody`), `FullTypeName` (e.g., `UnityEngine.Rigidbody`), and `Properties` (array of Inspector-visible `{Name, Type, Value}` pairs)
- `TotalFound` (number): Results returned (after `--max-results` clipping). For multi-selection file export, this is the number exported.
- `ErrorMessage` (string): Top-level failure summary (empty on success)
- `ProcessingErrors` (array): Selected-mode per-GameObject serialization failures, each `{GameObjectName, GameObjectPath, Error}`. Omitted/null or empty on clean runs.

### Multi-selection file export

For `Selected` mode with **multiple** successfully serialized GameObjects, inline `results` is not populated and the data is written to a file instead. Two extra fields appear:
- `resultsFilePath` (string): Relative path under `.uloop/outputs/FindGameObjectsResults/`
- `message` (string): Human-readable summary (e.g., "5 GameObjects exported")
For `Selected` mode with **multiple** successfully serialized GameObjects, inline `Results` is not populated and the data is written to a file instead. Two extra fields appear:

- `ResultsFilePath` (string): Relative path under `.uloop/outputs/FindGameObjectsResults/`
- `Message` (string): Human-readable summary (e.g., "5 GameObjects exported")

Single-selection and search-mode calls (`Exact`, `Path`, `Regex`, `Contains`) always return inline. No selection (`Selected` mode with empty selection) returns empty `results` plus a `message`.
Single-selection and search-mode calls (`Exact`, `Path`, `Regex`, `Contains`) always return inline. No selection (`Selected` mode with empty selection) returns empty `Results` plus a `Message`.
5 changes: 3 additions & 2 deletions .agents/skills/uloop-focus-window/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ uloop focus-window
## Output

Returns JSON with:
- `success`: Whether the focus operation succeeded
- `message`: Status message (e.g. `Unity Editor window focused (PID: 12345)`, or the failure reason such as `Unity project not found` / `No running Unity process found for this project` / `Failed to focus Unity window: <reason>`)

- `Success`: Whether the focus operation succeeded
- `Message`: Status message (e.g. `Unity Editor window focused (PID: 12345)`, or the failure reason such as `Unity project not found` / `No running Unity process found for this project` / `Failed to focus Unity window: <reason>`)

## Notes

Expand Down
7 changes: 4 additions & 3 deletions .agents/skills/uloop-get-hierarchy/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ uloop get-hierarchy --use-selection
## Output

Returns JSON with:
- `message` (string): Human-readable guidance pointing at the saved file
- `hierarchyFilePath` (string): Filesystem path to the JSON file that contains the actual hierarchy data

The hierarchy itself is **not** in the response — it is written to the file at `hierarchyFilePath`. Open that file to read the `Context` and `Hierarchy` payload (GameObject tree, components, etc.).
- `Message` (string): Human-readable guidance pointing at the saved file
- `HierarchyFilePath` (string): Filesystem path to the JSON file that contains the actual hierarchy data

The hierarchy itself is **not** in the response — it is written to the file at `HierarchyFilePath`. Open that file to read the `Context` and `Hierarchy` payload (GameObject tree, components, etc.).
15 changes: 8 additions & 7 deletions .agents/skills/uloop-get-logs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,11 @@ uloop get-logs --search-text "Missing.*Component" --use-regex
## Output

Returns JSON with:
- `totalCount` (number): Total logs available before max-count clipping
- `displayedCount` (number): Logs returned in this response (≤ `--max-count`)
- Input filters (`logType`, `maxCount`, `searchText`, `includeStackTrace`) are echoed back in the response
- `logs` (array): Each entry has:
- `type` (string): `"Error"`, `"Warning"`, or `"Log"`
- `message` (string): Log message body
- `stackTrace` (string): Stack trace text. Empty when `--include-stack-trace` is `false`.

- `TotalCount` (number): Total logs available before max-count clipping
- `DisplayedCount` (number): Logs returned in this response (≤ `--max-count`)
- Input filters (`LogType`, `MaxCount`, `SearchText`, `IncludeStackTrace`) are echoed back in the response
- `Logs` (array): Each entry has:
- `Type` (string): `"Error"`, `"Warning"`, or `"Log"`
- `Message` (string): Log message body
- `StackTrace` (string): Stack trace text. Empty when `--include-stack-trace` is `false`.
8 changes: 5 additions & 3 deletions .agents/skills/uloop-hello-world/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,15 @@ uloop hello-world --name "Carlos" --language spanish --no-include-timestamp
## Output

Returns JSON with:
- `message`: The greeting message
- `language`: Language used for greeting
- `timestamp`: Current timestamp (if enabled)

- `Message`: The greeting message
- `Language`: Language used for greeting
- `Timestamp`: Current timestamp (if enabled)

## Notes

This is a sample custom tool demonstrating:

- Type-safe parameter handling with Schema
- Enum parameters for language selection
- Value-less flag parameters
Expand Down
25 changes: 13 additions & 12 deletions .agents/skills/uloop-launch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,18 +50,19 @@ uloop launch --quit
May print status/progress lines before the final JSON payload, such as project path, detected Unity version, or readiness wait messages.

The final JSON payload includes:
- `success`: whether the command completed
- `ready`: whether Unity CLI Loop is ready for commands
- `serverReady`: whether the Unity CLI Loop server accepted requests
- `projectIpcReady`: whether the project IPC path accepted tool requests
- `alreadyRunning`: whether an existing Unity process was reused
- `launched`: whether this command launched a Unity process
- `restarted`: whether this command stopped an existing process and launched a new one
- `quit`: whether this command stopped Unity without launching a new process
- `previousProcessId`: process ID stopped by restart or quit, when available
- `currentProcessId`: current Unity process ID, when available
- `projectRoot`: resolved project root
- `message`: readiness summary

- `Success`: whether the command completed
- `Ready`: whether Unity CLI Loop is ready for commands
- `ServerReady`: whether the Unity CLI Loop server accepted requests
- `ProjectIpcReady`: whether the project IPC path accepted tool requests
- `AlreadyRunning`: whether an existing Unity process was reused
- `Launched`: whether this command launched a Unity process
- `Restarted`: whether this command stopped an existing process and launched a new one
- `Quit`: whether this command stopped Unity without launching a new process
- `PreviousProcessId`: process ID stopped by restart or quit, when available
- `CurrentProcessId`: current Unity process ID, when available
- `ProjectRoot`: resolved project root
- `Message`: readiness summary

## Notes

Expand Down
17 changes: 9 additions & 8 deletions .agents/skills/uloop-record-input/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,12 @@ Replay injects input frame-by-frame, so the game must also be deterministic to p
## Output

The CLI prints JSON with:
- `success`: Whether the operation succeeded
- `message`: Status message
- `action`: Echoes which action was executed (`Start` or `Stop`)
- `outputPath`: Path to saved recording (nullable; populated on `Stop` only)
- `totalFrames`: Number of frames recorded (nullable int; populated on `Stop` only)
- `durationSeconds`: Recording duration in seconds (nullable float; populated on `Stop` only)

Frame data lives only in the JSON file at `outputPath`; internal metadata fields are not included in the response.

- `Success`: Whether the operation succeeded
- `Message`: Status message
- `Action`: Echoes which action was executed (`Start` or `Stop`)
- `OutputPath`: Path to saved recording (nullable; populated on `Stop` only)
- `TotalFrames`: Number of frames recorded (nullable int; populated on `Stop` only)
- `DurationSeconds`: Recording duration in seconds (nullable float; populated on `Stop` only)

Frame data lives only in the JSON file at `OutputPath`; internal metadata fields are not included in the response.
17 changes: 9 additions & 8 deletions .agents/skills/uloop-replay-input/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,12 @@ Replay injects the exact same input frame-by-frame, but the game must also be de
## Output

Returns JSON with:
- `success`: Whether the operation succeeded
- `message`: Status message
- `action`: Echoes which action was executed (`Start`, `Stop`, or `Status`)
- `inputPath`: Path to recording file (nullable string; populated on `Start` only)
- `currentFrame`: Current replay frame index (nullable int)
- `totalFrames`: Total frames in the recording (nullable int)
- `progress`: Replay progress (nullable float in 0.0 – 1.0)
- `isReplaying`: Whether replay is currently active (nullable bool)

- `Success`: Whether the operation succeeded
- `Message`: Status message
- `Action`: Echoes which action was executed (`Start`, `Stop`, or `Status`)
- `InputPath`: Path to recording file (nullable string; populated on `Start` only)
- `CurrentFrame`: Current replay frame index (nullable int)
- `TotalFrames`: Total frames in the recording (nullable int)
- `Progress`: Replay progress (nullable float in 0.0 – 1.0)
- `IsReplaying`: Whether replay is currently active (nullable bool)
32 changes: 17 additions & 15 deletions .agents/skills/uloop-run-tests/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ description: "Run Unity Test Runner and report detailed results. Use for EditMod

# uloop run-tests

Execute Unity Test Runner. When tests fail, NUnit XML results with error messages and stack traces are automatically saved. Read the XML file at `xmlPath` for detailed failure diagnosis.
Execute Unity Test Runner. When tests fail, NUnit XML results with error messages and stack traces are automatically saved. Read the XML file at `XmlPath` for detailed failure diagnosis.

Before running tests, run `uloop compile` first if you created, deleted, renamed, moved, or edited C# files, test files, `.asmdef`/`.asmref`, or package manifests since the last successful compile. This refreshes the AssetDatabase and surfaces compile errors before test execution.

Before executing tests, `uloop run-tests` saves unsaved loaded Scene changes and unsaved current Prefab Stage changes by default. If saving fails, it returns `success: false`, keeps `testCount` at `0`, lists the unsaved items in `message`, and does not start the Unity Test Runner.
Before executing tests, `uloop run-tests` saves unsaved loaded Scene changes and unsaved current Prefab Stage changes by default. If saving fails, it returns `Success: false`, keeps `TestCount` at `0`, lists the unsaved items in `Message`, and does not start the Unity Test Runner.

`NoTestsFound` means zero tests matched — not a test failure. Check `noTestsFoundExplanation` and `message` for asmdef hints.
`NoTestsFound` means zero tests matched — not a test failure. Check `NoTestsFoundExplanation` and `Message` for asmdef hints.

## Usage

Expand Down Expand Up @@ -57,22 +57,24 @@ uloop run-tests --filter-type regex --filter-value ".*Integration.*"
## Output

Returns JSON with:
- `success` (boolean): Whether all tests passed
- `status` (string): Machine-readable execution status such as `Passed`, `Failed`, `NoTestsFound`, or `ExecutionFailed`
- `hasFailures` (boolean): Whether any discovered test failed
- `message` (string): Summary message
- `noTestsFound` (boolean): Whether Unity Test Runner discovered zero matching tests
- `noTestsFoundExplanation` (string): Agent-facing explanation when `noTestsFound` is true; empty otherwise
- `completedAt` (string): ISO timestamp when the run finished
- `testCount` (number): Total tests executed
- `passedCount` (number): Passed tests
- `failedCount` (number): Failed tests
- `skippedCount` (number): Skipped tests
- `xmlPath` (string): Path to NUnit XML result file. Empty string when no XML was saved (typically on `success: true`); populated only when tests failed and the XML file exists on disk.

- `Success` (boolean): Whether all tests passed
- `Status` (string): Machine-readable execution status such as `Passed`, `Failed`, `NoTestsFound`, or `ExecutionFailed`
- `HasFailures` (boolean): Whether any discovered test failed
- `Message` (string): Summary message
- `NoTestsFound` (boolean): Whether Unity Test Runner discovered zero matching tests
- `NoTestsFoundExplanation` (string): Agent-facing explanation when `NoTestsFound` is true; empty otherwise
- `CompletedAt` (string): ISO timestamp when the run finished
- `TestCount` (number): Total tests executed
- `PassedCount` (number): Passed tests
- `FailedCount` (number): Failed tests
- `SkippedCount` (number): Skipped tests
- `XmlPath` (string): Path to NUnit XML result file. Empty string when no XML was saved (typically on `Success: true`); populated only when tests failed and the XML file exists on disk.

### XML Result File

When tests fail, NUnit XML results are automatically saved to `{project_root}/.uloop/outputs/TestResults/<timestamp>.xml`. The XML contains per-test-case results including:

- Test name and full name
- Pass/fail/skip status and duration
- For failed tests: `<message>` (assertion error) and `<stack-trace>`
Loading
Loading