Produce VMOS Edge flows that are verifiable, validatable on real devices, and maintainable across devices. The current semantic baseline is engine v2.0.5; before using newly added syntax, check via
GET /health for the version, and if the version does not match, report the compatibility risk first.
Workflow
- Define the task.
- Create or modify: confirm the goals and action sequence; obtain the host IP and cloud device ID only when inspection or real-device execution is needed.
- Troubleshooting: obtain the YAML, task receipts, and expected versus actual behavior.
- Do not ask for package names, interface language, current page, or control structure that can be found from the device.
- Load only the needed materials. Read according to the table below; do not read through the entire directory.
- Form an execution specification. List the action order, loop stop strategy, configurable variables, page anchors, and dangerous actions. Obtain explicit authorization before executing dangerous actions on a real device.
- Collect evidence screen by screen. When a device address is available, follow device.md to obtain the structure and screenshots; re-check after navigating each screen.
When no device is available, use placeholder selectors and mark
# TODO: 待真机界面结构替换。 - Write the flow. From patterns.md choose the closest structure, and only go to syntax.md to look up the commands and fields actually used.
- Validate the closed loop. Run static validation; after approval, execute on a real device in the smallest batch, read each status item, fix, and repeat validation.
Engine constraints that must always be followed
- Write strictly according to syntax.md command shape; do not guess fields based on experience with similar tools.
- Place key success/failure assertions at the top level. Assertions must prove business outcomes; do not use boundaries already guaranteed by the loop itself or always-true expressions to silence lint warnings.
repeat、runFlow、branchfailures inside do not protect the parent flow. When there is no observable terminal state, keep and explainNO_TOP_ASSERT。 - Define variables before referencing
${name}. Scheduler-sideenvinjected values take effect per device; secrets are inject-only and must not be written into YAML. - Prefer stable text or structural relationships from the target interface; strip dynamic counts. Fall back to percentage coordinates only when there is no stable selector; absolute pixels are prohibited.
- Treat
times、duration、whileas independent optional stop conditions; when passed together, stop as soon as either is satisfied first. If none of the three are passed, it will run indefinitely. - Use
while: trueto express an intentional infinite loop, and provide a reachablebreakor an explicit cancellation plan.breakonly exits the nearestrepeat。 - Use
2fa.outputVariable: otpto generate a variable, and reference it later as${otp};2fa.codeonly accepts an injected Base32 TOTP secret. - Any
repeatthat operates the UI must include a randomsleepin the current round to avoid repetition without intervals; also leave random intervals between consecutive clicks, inputs, or page changes. Load the deep anthropomorphic strategy only in scenarios such as browsing and account nurturing. Bulk sending, following, deleting, and publishing must be configurable and abortable.
Static validation
Execute the script; do not read it and then manually replicate the rules:
python3 <skill目录>/scripts/lint_flow.py flow.yaml
Requires Python 3 and PyYAML. Any ERROR must all be fixed; review one by one WARN. After modification, run repeatedly until zero ERROR。
Before real-device verification, lower the batch upper limit to the minimum value. Use runtime.md to submit, check taskId, view per-item status, and cancel when out of control.
Real-device verification cannot be replaced by static validation.
Deliverables
- Complete YAML;
- Static validation results;
- Steps that have been verified on a real device and those not verified;
- Placeholder selectors, version boundaries, and known limitations;
- Dangerous actions and their authorization status.
On-demand materials
| Current task | Read |
|---|---|
| Queries for commands, fields, selectors, conditions, variables, or default values | syntax.md corresponding sections of |
| Select reusable process structures | patterns.md corresponding patterns of |
| Understand silent failure, scope, failure, and skipping | semantics.md |
| Locate existing scripts by symptom | troubleshooting.md, then read the semantics or syntax sections according to the results |
| Obtain package names, languages, UI structures, and screenshots | device.md |
| Design random waits, probabilistic interactions, and long-run pacing | humanization.md |
| Submit, query, cancel, or interpret task receipts | runtime.md |
All reference files are directly linked from this file. Do not follow another layer of materials through a reference file.