SKILL.md
Revyl MCP Dev Loop Skill
This skill is for users who opt into custom MCP. The Cursor plugin does not start an MCP server. Add a personal MCP entry with a literal command such as revyl or /usr/local/bin/revyl, never ${...}.
Use this skill for the full flow:
- Start dev loop equivalent.
- Execute screenshot-observe-action cycles.
Default Operating Mode
Always prefer dev-loop flow before plain device-only flows:
- Call
startdevloop. Passprofileandplatformwhen repository
evidence determines the named recipe; never invent an active/default value.
- On success, share
viewer_urlas a clickable link and confirm the session is active. When the inline Revyl app exposes Open live device, the user may use it to hand the URL to the host browser; the link remains the portable fallback. - On a setup failure, follow the single structured
remediationaction and
retry startdevloop once.
- Call
screenshot()and begin interaction.
Fallback to plain device session only when dev loop is unavailable.
Execution Guardrails
- First tool call must be
startdevloop. - Do not call listing tools unless the user explicitly asks.
- Treat
next_stepsas advisory only. - Re-anchor with
screenshot()before state-dependent actions. - Express device actions through the current natural-language schema, for example
interact(task="Tap the Sign In button"). Do not calculate or supply coordinates. - Use
setup_statusonly when the user explicitly asks for setup diagnostics.
Its remediation object is the read-only view of the same recovery plan: follow checkcommand before applycommand when both are present.
- Never claim that a Cloud Agent opened the viewer on the user's local computer. Cloud tools run on the remote VM; the inline open control and clickable URL are client-side handoffs.
Setup Recovery
Handle setup outcomes as bounded recovery steps:
authrequired/authexpired/authinvalid: runremediation.commandonce, then retrystartdevloop. If the command cannot complete, postoutcome.authorizationurlas a clickable markdown link and stop until the user approves; that URL is a live approval request Revyl already registered, and it works from any browser.cloudsecretrequired: runremediation.commandonce to bridge the hosted agent's injectedremediation.envname, then retrystartdevloop. If that command reports no key in the environment, postoutcome.authorizationurlas a clickable link and tell the user that addingremediation.env_nameas a Runtime Secret plus a new Cloud session is the durable fix.projectnotinitialized: useremediation.commandto pull an existing UI-created or server-managed project, orremediation.alternativecommandto initialize a genuinely new project. Use repository and user context to choose; ask when unclear. Run only the selected exact command withremediation.workingdirectory, then retrystartdevlooponce. The executable may be the plugin-pinned runtime rather thanrevylonPATH; do not rewrite either command or add--force.projectlegacyconfig: run the exact JSONremediation.checkcommandfirst and review its canonical proposal and complete omission ledger. Then run the exactremediation.applycommandonce to create the backup and apply that proposal. If the ledger is lossy, reconcile the migrated file against the reported backup before retryingstartdevloop; otherwise retry directly. Do not rewrite either command, skip the check, or hide reported omissions or ambiguities.projectoutsidegit: select a project directory inside an active Git worktree from repository context and retrystartdevloopwith that exact path asprojectdir. Treatremediation.envnameas the durable runtime configuration hint, not as permission to invent a path. If no intended Git worktree is evident, ask the user to choose one.projectambiguous: inspectremediation.candidateroots, select the intended project from repository context, and retry with that exact root asprojectdir. If the intended project is unclear, ask the user to choose. Do not initialize another project or retry without an explicitprojectdir.projectinvalid: reportremediation.configpathand wait for it to be repaired before retrying.
After one remediation and one retry, stop and report any remaining failure. Do not enter a setup loop.
If startdevloop fails with a profile/platform selection error instead of a setup remediation, inspect its valid choices and retry once with exact profile and platform values. Do not guess. If a deprecated platformkey input returns devloopplatformkey_removed, replace it with profile and platform.
Interaction Loop
For each iteration:
screenshot()- State visible UI in one short line.
- Take one best action with
interact(task="..."). screenshot()to verify.- Repeat.
Short deterministic burst allowance:
- Up to two actions before verification for obvious two-step entry flows.