Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI/CD or workflows in an Expo or EAS context, mentions .eas/workflows/, or wants help with EAS build pipelines or deployment automation.
.claude/skills/lingxling-expo-cicd-workflows/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | -39% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-18 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-20 | ✗→✓ | ▲ Improved | -14% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 8% | 0% |
Help developers write and edit EAS CI/CD workflow YAML files.
.eas/workflows/*.yml files for an Expo project.Fetch these resources before generating or validating workflow files. Use the fetch script (implemented using Node.js) in this skill's scripts/ directory; it caches responses using ETags for efficiency:
bash# Fetch resources node {baseDir}/scripts/fetch.js <url>
Do not rely on memorized values; these resources evolve as new features are added.
Workflows live in .eas/workflows/*.yml (or .yaml).
A workflow file has these top-level keys:
name — Display name for the workflowon — Triggers that start the workflow (at least one required)jobs — Job definitions (required)defaults — Shared defaults for all jobsconcurrency — Control parallel workflow runsConsult the schema for the full specification of each section.
Use ${{ }} syntax for dynamic values. The schema defines available contexts:
github.* — GitHub repository and event informationinputs.* — Values from workflow_dispatch inputsneeds.* — Outputs and status from dependent jobsjobs.* — Job outputs (alternative syntax)steps.* — Step outputs within custom jobsworkflow.* — Workflow metadataWhen generating or editing workflows:
needs and after exist in the workflowif conditions respect the schema's length constraintsAfter generating or editing a workflow file, validate it against the schema:
sh# Install dependencies if missing [ -d "{baseDir}/scripts/node_modules" ] || npm install --prefix {baseDir}/scripts node {baseDir}/scripts/validate.js <workflow.yml> [workflow2.yml ...]
The validator fetches the latest schema and checks the YAML structure. Fix any reported errors before considering the workflow complete.
When users ask about available options (job types, triggers, runner types, etc.), fetch the schema and derive the answer from it rather than relying on potentially outdated information.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 15,001 | 19,917 | +33% | 1 | 1 | 0% | 2,851 | 1,161 | -59% | 0 | 0 | — |
case-02 | fail→fail | 16,493 | 8,133 | -51% | 1 | 1 | 0% | 2,686 | 1,259 | -53% | 0 | 0 | — |
case-03 | pass→pass | 19,858 | 18,943 | -5% | 1 | 1 | 0% | 3,218 | 4,530 | +41% | 0 | 0 | — |
case-04 | pass→pass | 5,286 | 8,721 | +65% | 1 | 1 | 0% | 802 | 2,069 | +158% | 0 | 0 | — |
case-05 | pass→pass | 9,917 | 12,997 | +31% | 1 | 1 | 0% | 1,738 | 2,013 | +16% | 0 | 0 | — |
case-06 | fail→fail | 9,848 | 24,768 | +152% | 1 | 1 | 0% | 1,437 | 1,076 | -25% | 0 | 0 | — |
case-07 | fail→fail | 5,126 | 9,577 | +87% | 1 | 1 | 0% | 312 | 1,148 | +268% | 0 | 0 | — |
case-08 | pass→pass | 5,244 | 2,398 | -54% | 1 | 1 | 0% | 669 | 1,168 | +75% | 0 | 0 | — |
case-09 | pass→fail | 15,785 | 9,497 | -40% | 1 | 1 | 0% | 2,210 | 1,154 | -48% | 0 | 0 | — |
case-10 | pass→fail | 6,855 | 11,229 | +64% | 1 | 1 | 0% | 960 | 1,218 | +27% | 0 | 0 | — |
case-11 | pass→fail | 11,002 | 8,728 | -21% | 1 | 1 | 0% | 1,055 | 1,258 | +19% | 0 | 0 | — |
case-12 | fail→pass | 14,357 | 3,514 | -76% | 1 | 1 | 0% | 2,199 | 1,351 | -39% | 0 | 0 | — |
case-13 | fail→pass | 11,066 | 2,610 | -76% | 1 | 1 | 0% | 1,530 | 1,205 | -21% | 0 | 0 | — |
case-14 | pass→fail | 8,664 | 8,904 | +3% | 1 | 1 | 0% | 1,254 | 1,163 | -7% | 0 | 0 | — |
case-15 | pass→fail | 8,709 | 8,406 | -3% | 1 | 1 | 0% | 1,395 | 1,276 | -9% | 0 | 0 | — |
case-16 | pass→pass | 6,022 | 10,607 | +76% | 1 | 1 | 0% | 822 | 1,396 | +70% | 0 | 0 | — |
case-17 | pass→fail | 12,479 | 9,377 | -25% | 1 | 1 | 0% | 2,135 | 1,371 | -36% | 0 | 0 | — |
case-18 | fail→pass | 15,660 | 3,176 | -80% | 1 | 1 | 0% | 1,520 | 1,439 | -5% | 0 | 0 | — |
case-19 | fail→fail | 8,893 | 15,161 | +70% | 1 | 1 | 0% | 1,422 | 3,243 | +128% | 0 | 0 | — |
case-20 | fail→pass | 10,909 | 3,413 | -69% | 1 | 1 | 0% | 1,558 | 1,339 | -14% | 0 | 0 | — |
case-21 | fail→pass | 13,388 | 8,327 | -38% | 1 | 1 | 0% | 2,166 | 2,336 | +8% | 0 | 0 | — |
case-22 | fail→pass | 11,472 | 6,847 | -40% | 1 | 1 | 0% | 1,723 | 2,102 | +22% | 0 | 0 | — |
case-23 | fail→fail | 14,780 | 8,912 | -40% | 1 | 1 | 0% | 2,381 | 1,322 | -44% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 12 counted toward the lift figure. The other 11 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of 0 percentage points is the difference between those two pass rates over the 12 comparable cases. 9 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.