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
2 changes: 1 addition & 1 deletion .agents/skills/uloop-execute-dynamic-code/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Run focused C# snippets in the active Unity Editor with `uloop execute-dynamic-c

For basic selected GameObject discovery or property inspection, use `find-game-objects --search-mode Selected` before this tool. Use this tool after the built-in inspection tools are not enough or when you need to modify Unity state.

This tool can inspect reachable Unity state, such as GameObjects, components, public properties, static values, and method results. It cannot directly read local variables or intermediate calculations inside an already-running method. When those values matter, add a focused `Debug.Log` immediately before `UloopPausePoint.Pause("<id>")`, then run `get-logs --search-text <id>` while Unity is paused. Do not replace that log read with execute-dynamic-code.
This tool can inspect reachable Unity state, such as GameObjects, components, public properties, static values, and method results. It cannot directly read local variables or intermediate calculations inside an already-running method. When those values matter, enable a source pause point on that line instead (`uloop enable-pause-point --file <file> --line <line>`, see the `uloop-wait-for-pause-point` skill): the hit response's `CapturedVariables` already contains the locals, parameters, and instance fields at that line, with no code edit or recompile. Do not try to reconstruct those values with execute-dynamic-code.

## Workflow

Expand Down
6 changes: 3 additions & 3 deletions .agents/skills/uloop-simulate-keyboard/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ If a successful `Press` or `KeyDown` leaves `Keyboard.current.<key>.isPressed` t

### Pause Point Inspection (Standard for E2E)

For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Place markers after the app consumed the key, not immediately after `simulate-keyboard`.
For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Pausing on the line that handles the key is safe: when the pause lands mid-command, `simulate-keyboard` returns promptly with `InterruptedByPausePoint: true` instead of running to completion. Prefer a line after the app consumed the key when you want the settled result state rather than the input-handling moment.

- If `InterruptedByPausePoint: true`, Unity is paused and input bookkeeping was released. `PausePointId` and `PausePointHitCount` identify the marker. `PressEdgeObserved` is still reported on pause-point interruptions.

Expand Down Expand Up @@ -92,8 +92,8 @@ Returns JSON with:
- `Action` (string): The `--action` value that was applied (`Press`, `KeyDown`, or `KeyUp`)
- `KeyName` (string, nullable): The key that was acted on; may be `null` when the action could not resolve a key
- `InterruptedByPausePoint` (boolean): True when Unity paused during Pause Point inspection and the input bookkeeping was safely released
- `PausePointId` (string, nullable): The marker id when a `UloopPausePoint.Pause` marker caused the interruption
- `PausePointHitCount` (integer, nullable): The marker hit count when a `UloopPausePoint.Pause` marker caused the interruption
- `PausePointId` (string, nullable): The derived `<file>:<line>` pause point id that caused the interruption (the `Id` returned by `enable-pause-point`)
- `PausePointHitCount` (integer, nullable): The hit count for that pause point when it caused the interruption
- `PausePointHits` (array, nullable): Every marker hit during this input as `{Id, HitCount}` entries, in hit order. Read this when one input may trigger several markers; `PausePointId` only names the latest one
- `PressEdgeObserved` (boolean, nullable): For `Press` and `KeyDown`, whether the press edge (`wasPressedThisFrame`) was actually visible inside a gameplay input update. `false` means the CLI succeeded but gameplay polling most likely missed the edge (e.g. the press was consumed by an editor-only input update) — retry the input or verify with a focused log instead of trusting `Success` alone. `null` only for `KeyUp` and for timed-out responses; pause-point interruptions still report the observed value

Expand Down
8 changes: 4 additions & 4 deletions .agents/skills/uloop-simulate-mouse-input/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ uloop simulate-mouse-input --action <action> [options]

### Pause Point Inspection (Standard for E2E)

For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Place markers after the app consumed the mouse input, not immediately after `simulate-mouse-input`.
For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Pausing on the line that handles the mouse input is safe: when the pause lands mid-command, `simulate-mouse-input` returns promptly with `InterruptedByPausePoint: true` instead of running to completion. Prefer a line after the app consumed the input when you want the settled result state rather than the input-handling moment.

- If `InterruptedByPausePoint: true`, Unity is paused and input bookkeeping was released. `PausePointId` and `PausePointHitCount` identify the marker.
- Remove temporary pause-point/log instrumentation before final validation when it was added only for inspection.
- Clear pause points (`uloop clear-pause-point --all`) before final validation when they were enabled only for inspection.

### Global Options (optional)

Expand Down Expand Up @@ -135,8 +135,8 @@ Returns JSON with:
- `InjectedUnityPositionX` / `InjectedUnityPositionY`: Coordinates injected into `Mouse.current.position`
- `CoordinateConversionFormula`: Conversion formula used by the tool
- `InterruptedByPausePoint`: True when Unity paused during Pause Point inspection and the input bookkeeping was safely released
- `PausePointId`: The id from `UloopPausePoint.Pause("<id>")` when it caused the interruption
- `PausePointHitCount`: The hit count for that `UloopPausePoint.Pause("<id>")`
- `PausePointId`: The derived `<file>:<line>` pause point id that caused the interruption (the `Id` returned by `enable-pause-point`)
- `PausePointHitCount`: The hit count for that pause point when it caused the interruption
- `PausePointHits` (array, nullable): Every marker hit during this input as `{Id, HitCount}` entries, in hit order. Read this when one input may trigger several markers; `PausePointId` only names the latest one

Verify visual outcome with a follow-up screenshot.
9 changes: 7 additions & 2 deletions .agents/skills/uloop-simulate-mouse-ui/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ uloop simulate-mouse-ui --action <action> --x <x> --y <y> [options]

## Pause Point Inspection (Standard for E2E)

For standard frame proof when this UI input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Place markers after the app consumed the UI event, not immediately after `simulate-mouse-ui`.
For standard frame proof when this UI input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Pausing on the line that handles the UI event is safe: when the pause lands mid-command, `simulate-mouse-ui` returns promptly with `InterruptedByPausePoint: true` instead of running to completion. Prefer a line after the app consumed the event when you want the settled result state rather than the input-handling moment.

- Remove temporary pause-point/log instrumentation before final validation when it was added only for inspection.
- If `InterruptedByPausePoint: true`, Unity is paused and `Success: true` only means the command ended cleanly. Read `Message` first: it states whether the pointer event was already dispatched before the pause (only the overlay animation was interrupted) or the pause landed first (no pointer event was fired).
- Clear pause points (`uloop clear-pause-point --all`) before final validation when they were enabled only for inspection.

## Examples

Expand Down Expand Up @@ -133,6 +134,10 @@ Returns JSON with:
- `PositionY`: Target Y coordinate that was used
- `EndPositionX`: Drag end X coordinate (nullable float; populated for drag actions only)
- `EndPositionY`: Drag end Y coordinate (nullable float; populated for drag actions only)
- `InterruptedByPausePoint`: True when Unity paused during Pause Point inspection and the command returned early instead of running to completion. `Message` states whether the pointer event was already dispatched before the pause
- `PausePointId`: The derived `<file>:<line>` pause point id that caused the interruption (nullable string; the `Id` returned by `enable-pause-point`)
- `PausePointHitCount`: The hit count for that pause point when it caused the interruption (nullable integer)
- `PausePointHits`: Every marker hit during this input as `{Id, HitCount}` entries, in hit order (nullable array). Read this when one input may trigger several markers; `PausePointId` only names the latest one

Verify the visual outcome with a follow-up `uloop screenshot --capture-mode rendering --annotate-elements`.

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/uloop-execute-dynamic-code/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Run focused C# snippets in the active Unity Editor with `uloop execute-dynamic-c

For basic selected GameObject discovery or property inspection, use `find-game-objects --search-mode Selected` before this tool. Use this tool after the built-in inspection tools are not enough or when you need to modify Unity state.

This tool can inspect reachable Unity state, such as GameObjects, components, public properties, static values, and method results. It cannot directly read local variables or intermediate calculations inside an already-running method. When those values matter, add a focused `Debug.Log` immediately before `UloopPausePoint.Pause("<id>")`, then run `get-logs --search-text <id>` while Unity is paused. Do not replace that log read with execute-dynamic-code.
This tool can inspect reachable Unity state, such as GameObjects, components, public properties, static values, and method results. It cannot directly read local variables or intermediate calculations inside an already-running method. When those values matter, enable a source pause point on that line instead (`uloop enable-pause-point --file <file> --line <line>`, see the `uloop-wait-for-pause-point` skill): the hit response's `CapturedVariables` already contains the locals, parameters, and instance fields at that line, with no code edit or recompile. Do not try to reconstruct those values with execute-dynamic-code.

## Workflow

Expand Down
6 changes: 3 additions & 3 deletions .claude/skills/uloop-simulate-keyboard/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ If a successful `Press` or `KeyDown` leaves `Keyboard.current.<key>.isPressed` t

### Pause Point Inspection (Standard for E2E)

For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Place markers after the app consumed the key, not immediately after `simulate-keyboard`.
For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Pausing on the line that handles the key is safe: when the pause lands mid-command, `simulate-keyboard` returns promptly with `InterruptedByPausePoint: true` instead of running to completion. Prefer a line after the app consumed the key when you want the settled result state rather than the input-handling moment.

- If `InterruptedByPausePoint: true`, Unity is paused and input bookkeeping was released. `PausePointId` and `PausePointHitCount` identify the marker. `PressEdgeObserved` is still reported on pause-point interruptions.

Expand Down Expand Up @@ -92,8 +92,8 @@ Returns JSON with:
- `Action` (string): The `--action` value that was applied (`Press`, `KeyDown`, or `KeyUp`)
- `KeyName` (string, nullable): The key that was acted on; may be `null` when the action could not resolve a key
- `InterruptedByPausePoint` (boolean): True when Unity paused during Pause Point inspection and the input bookkeeping was safely released
- `PausePointId` (string, nullable): The marker id when a `UloopPausePoint.Pause` marker caused the interruption
- `PausePointHitCount` (integer, nullable): The marker hit count when a `UloopPausePoint.Pause` marker caused the interruption
- `PausePointId` (string, nullable): The derived `<file>:<line>` pause point id that caused the interruption (the `Id` returned by `enable-pause-point`)
- `PausePointHitCount` (integer, nullable): The hit count for that pause point when it caused the interruption
- `PausePointHits` (array, nullable): Every marker hit during this input as `{Id, HitCount}` entries, in hit order. Read this when one input may trigger several markers; `PausePointId` only names the latest one
- `PressEdgeObserved` (boolean, nullable): For `Press` and `KeyDown`, whether the press edge (`wasPressedThisFrame`) was actually visible inside a gameplay input update. `false` means the CLI succeeded but gameplay polling most likely missed the edge (e.g. the press was consumed by an editor-only input update) — retry the input or verify with a focused log instead of trusting `Success` alone. `null` only for `KeyUp` and for timed-out responses; pause-point interruptions still report the observed value

Expand Down
8 changes: 4 additions & 4 deletions .claude/skills/uloop-simulate-mouse-input/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ uloop simulate-mouse-input --action <action> [options]

### Pause Point Inspection (Standard for E2E)

For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Place markers after the app consumed the mouse input, not immediately after `simulate-mouse-input`.
For standard frame proof when this input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Pausing on the line that handles the mouse input is safe: when the pause lands mid-command, `simulate-mouse-input` returns promptly with `InterruptedByPausePoint: true` instead of running to completion. Prefer a line after the app consumed the input when you want the settled result state rather than the input-handling moment.

- If `InterruptedByPausePoint: true`, Unity is paused and input bookkeeping was released. `PausePointId` and `PausePointHitCount` identify the marker.
- Remove temporary pause-point/log instrumentation before final validation when it was added only for inspection.
- Clear pause points (`uloop clear-pause-point --all`) before final validation when they were enabled only for inspection.

### Global Options (optional)

Expand Down Expand Up @@ -135,8 +135,8 @@ Returns JSON with:
- `InjectedUnityPositionX` / `InjectedUnityPositionY`: Coordinates injected into `Mouse.current.position`
- `CoordinateConversionFormula`: Conversion formula used by the tool
- `InterruptedByPausePoint`: True when Unity paused during Pause Point inspection and the input bookkeeping was safely released
- `PausePointId`: The id from `UloopPausePoint.Pause("<id>")` when it caused the interruption
- `PausePointHitCount`: The hit count for that `UloopPausePoint.Pause("<id>")`
- `PausePointId`: The derived `<file>:<line>` pause point id that caused the interruption (the `Id` returned by `enable-pause-point`)
- `PausePointHitCount`: The hit count for that pause point when it caused the interruption
- `PausePointHits` (array, nullable): Every marker hit during this input as `{Id, HitCount}` entries, in hit order. Read this when one input may trigger several markers; `PausePointId` only names the latest one

Verify visual outcome with a follow-up screenshot.
9 changes: 7 additions & 2 deletions .claude/skills/uloop-simulate-mouse-ui/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ uloop simulate-mouse-ui --action <action> --x <x> --y <y> [options]

## Pause Point Inspection (Standard for E2E)

For standard frame proof when this UI input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Place markers after the app consumed the UI event, not immediately after `simulate-mouse-ui`.
For standard frame proof when this UI input drives a state transition, follow the `uloop-wait-for-pause-point` skill. Pausing on the line that handles the UI event is safe: when the pause lands mid-command, `simulate-mouse-ui` returns promptly with `InterruptedByPausePoint: true` instead of running to completion. Prefer a line after the app consumed the event when you want the settled result state rather than the input-handling moment.

- Remove temporary pause-point/log instrumentation before final validation when it was added only for inspection.
- If `InterruptedByPausePoint: true`, Unity is paused and `Success: true` only means the command ended cleanly. Read `Message` first: it states whether the pointer event was already dispatched before the pause (only the overlay animation was interrupted) or the pause landed first (no pointer event was fired).
- Clear pause points (`uloop clear-pause-point --all`) before final validation when they were enabled only for inspection.

## Examples

Expand Down Expand Up @@ -133,6 +134,10 @@ Returns JSON with:
- `PositionY`: Target Y coordinate that was used
- `EndPositionX`: Drag end X coordinate (nullable float; populated for drag actions only)
- `EndPositionY`: Drag end Y coordinate (nullable float; populated for drag actions only)
- `InterruptedByPausePoint`: True when Unity paused during Pause Point inspection and the command returned early instead of running to completion. `Message` states whether the pointer event was already dispatched before the pause
- `PausePointId`: The derived `<file>:<line>` pause point id that caused the interruption (nullable string; the `Id` returned by `enable-pause-point`)
- `PausePointHitCount`: The hit count for that pause point when it caused the interruption (nullable integer)
- `PausePointHits`: Every marker hit during this input as `{Id, HitCount}` entries, in hit order (nullable array). Read this when one input may trigger several markers; `PausePointId` only names the latest one

Verify the visual outcome with a follow-up `uloop screenshot --capture-mode rendering --annotate-elements`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Run focused C# snippets in the active Unity Editor with `uloop execute-dynamic-c

For basic selected GameObject discovery or property inspection, use `find-game-objects --search-mode Selected` before this tool. Use this tool after the built-in inspection tools are not enough or when you need to modify Unity state.

This tool can inspect reachable Unity state, such as GameObjects, components, public properties, static values, and method results. It cannot directly read local variables or intermediate calculations inside an already-running method. When those values matter, add a focused `Debug.Log` immediately before `UloopPausePoint.Pause("<id>")`, then run `get-logs --search-text <id>` while Unity is paused. Do not replace that log read with execute-dynamic-code.
This tool can inspect reachable Unity state, such as GameObjects, components, public properties, static values, and method results. It cannot directly read local variables or intermediate calculations inside an already-running method. When those values matter, enable a source pause point on that line instead (`uloop enable-pause-point --file <file> --line <line>`, see the `uloop-wait-for-pause-point` skill): the hit response's `CapturedVariables` already contains the locals, parameters, and instance fields at that line, with no code edit or recompile. Do not try to reconstruct those values with execute-dynamic-code.

## Workflow

Expand Down
Loading