# Cursor user-only skills proof

AI-assisted; verified with the tests and tools listed above.

## Environment

Two separate detached checkouts, each installed with `vp i` and run with
`T3CODE_DEV_SEED=0 vp run dev`. Each server created its own fresh database.
The browser was Chromium, light theme, 1280 by 800 CSS pixels, on both sides.
Both used the same real Cursor SDK configuration and environment API key.
No replay provider or mocked response was used.

Base: b68aedfdb71534bfdfbe55771ef2e686742faa8e
Head: 329988da19ca95b1d0d32c84641b470f6b6ee795

## Seed and actions

The attached seed script is the executed fixture with its output directory made
an argument to remove the private scratch path. It creates the same two git
projects and two project skills. Register each matching project through
`node apps/server/src/bin.ts project add --base-dir .t3 --title 'Skill demo' PROJECT`.

1. Pair the browser with that server's fresh startup pairing link.
2. Settings > Providers > Add provider > Cursor > Next > Next > Add instance.
   The provider authenticates using the environment API key.
3. New thread > Skill demo. Choose Cursor, using the same configuration on both
   sides. Close the thread details panel.
4. Type `$zebra`, select `zebra-only` from the skill picker (both skills appear),
   append ` Reply with the skill's exact response.`, and submit.
5. Wait for the reply. In the same thread, type
   `/zebra-only Reply with the skill's exact response.` and submit.
6. Wait for completion and capture the two replies together.

## Observed

Base: both replies were GREEN-TAPIR-4410, the open skill's response.
Head: both replies were PURPLE-OKAPI-7731, the selected user-only skill's response.
The expected string was not supplied in either user message.

## Capture handling

The model-selector label alone was replaced by a CSS privacy mask reading
“Cursor” before recording, to omit private runtime identifiers. Thread details
were closed to omit the environment name. No messages or results were changed.
Recordings show the two interactions and are played at 2x speed. Stills show
both final replies; each was verified pixel-identical in two screenshots more
than 500 ms apart after blurring the editor. Automatic thread titles differ
because the title generator runs independently of the skill invocation.

The replay scenario runner was not used: its documentation explicitly excludes
provider-specific behavior, and replay bypasses the Cursor SDK adapter.
