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
start_dev_loop. 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 retrystart_dev_looponce. - Call
screenshot()and begin interaction.
Fallback to plain device session only when dev loop is unavailable.
Execution Guardrails
- First tool call must be
start_dev_loop. - 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. Itsremediationobject is the read-only view of the same recovery plan: followcheck_commandbeforeapply_commandwhen 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:
auth_required/auth_expired/auth_invalid: runremediation.commandonce, then retrystart_dev_loop. If the command cannot complete, postoutcome.authorization_urlas 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.cloud_secret_required: runremediation.commandonce to bridge the hosted agent's injectedremediation.env_name, then retrystart_dev_loop. If that command reports no key in the environment, postoutcome.authorization_urlas a clickable link and tell the user that addingremediation.env_nameas a Runtime Secret plus a new Cloud session is the durable fix.project_not_initialized: useremediation.commandto pull an existing UI-created or server-managed project, orremediation.alternative_commandto initialize a genuinely new project. Use repository and user context to choose; ask when unclear. Run only the selected exact command withremediation.working_directory, then retrystart_dev_looponce. The executable may be the plugin-pinned runtime rather thanrevylonPATH; do not rewrite either command or add--force.project_legacy_config: run the exact JSONremediation.check_commandfirst and review its canonical proposal and complete omission ledger. Then run the exactremediation.apply_commandonce to create the backup and apply that proposal. If the ledger is lossy, reconcile the migrated file against the reported backup before retryingstart_dev_loop; otherwise retry directly. Do not rewrite either command, skip the check, or hide reported omissions or ambiguities.project_outside_git: select a project directory inside an active Git worktree from repository context and retrystart_dev_loopwith that exact path asproject_dir. Treatremediation.env_nameas 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.project_ambiguous: inspectremediation.candidate_roots, select the intended project from repository context, and retry with that exact root asproject_dir. If the intended project is unclear, ask the user to choose. Do not initialize another project or retry without an explicitproject_dir.project_invalid: reportremediation.config_pathand 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 start_dev_loop 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 platform_key
input returns dev_loop_platform_key_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.