Agent skill · Audited from source

expo-cicd-workflows

skill · expo/skillsMIT licenceAudited 29 Oct 2026 · source 573650ce5712

★ 3,640pushed today
✕BLOCKGrade D · 69/100 · 12 findings · 573650c
3,640repo stars · whole expo/skills

Is it safe? No — BLOCK, grade D (69/100). We read this skill's source at commit 573650ce5712 and observed network access and no hard-coded secrets. The audit raised 12 findings, 3 critical or high. What it does: Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo…

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “expo-cicd-workflows (expo/skills)”. Retrieved 29 Oct 2026. https://modelsatlas.com/skills/expo/expo-cicd-workflows

Blocked. The page stays public so you can check this skill if someone recommended it to you. The audit found 3 critical or high findings, starting with “Prompt injection” in plugins/expo/skills/eas-simulator/SKILL.md:137. Do not install it without reading them.

Trust audit

Audit 0.4.1 · source read 29 Oct 2026

Trust score69/100✕BLOCK D
0 critical3 high1 medium4 low4 info

BLOCK means the audit found something that could harm you or your machine. Grade D is shared by 642 of 14,816 audited skills.

What the source does

  • FilesystemNone observedNo reads or writes in the source
  • NetworkDeclared5 observations
  • ShellNone observedNo commands run in the source
  • DependenciesNot pinnedSome versions float
  • SecretsNone foundNo keys in source

Five audit layers

LayerWhat we checkResultFindings
L0 ProvenanceRepo owner, licence, archive status, activityPASS3
L1 Static sourceSecrets, path traversal, supply chain, hidden codePASS2
L2 InstructionsPrompt injection, authority framing, hidden directivesFAIL7
L3 InventoryThe files and declarations match the sourcePASS0
L4 SandboxRun in isolation and watch behaviourSKIPPED why0

Gates applied: no behavioural pass.

Findings (12)

HIGHPrompt injectionprompt.credential_read · plugins/expo/skills/eas-simulator/SKILL.md:137
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
| `npx --yes eas-cli@latest simulator:exec <cmd> [args...]` | Load `.env.eas-simulator`, then run `<cmd>` with that env. The bridge to the controller. |
Why
asks the agent to read credentials
Fix
—
HIGHPrompt injectionprompt.credential_read · plugins/expo/skills/expo-data-fetching/SKILL.md:352
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
- Never put secrets (API keys with write access, database passwords) in `EXPO_PUBLIC_` variables—they're visible in the built app
Why
asks the agent to read credentials
Fix
—
HIGHPrompt injectionprompt.credential_read · plugins/expo/skills/expo-project-structure/SKILL.md:80
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
Appending `+api` to a file in `app/` makes it a server **API route**. Server code is different from frontend code — it runs in a Node-like server environment (deployed with EAS Hosting or on [third-pa
Why
asks the agent to read credentials
Fix
—
MEDIUMPrompt injectionprompt.hidden_style · plugins/expo/skills/expo-router/references/tabs.md:181
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
<NativeTabs hidden={isTabBarHidden}>{/* triggers */}</NativeTabs>
Why
No further detail recorded for this rule.
Fix
—
LOWInventory / provenanceinv.hidden_file · .gitmodules
F-13 Inventory / provenanceCWE-1104Layer L0
.gitmodules
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWSupply chainsupply.unpinned · tests/fixtures/expo-brownfield/sdks/55/package.json
F-08 Supply chainCWE-829 · CWE-1357Layer L1
@types/react, expo, expo-brownfield, expo-status-bar, typescript
Why
5 dependency range(s) float
Fix
pin exact versions or ship a lockfile
LOWSupply chainsupply.unpinned · tests/fixtures/expo-brownfield/sdks/57/package.json
F-08 Supply chainCWE-829 · CWE-1357Layer L1
@types/react, expo, expo-brownfield, expo-status-bar, typescript
Why
5 dependency range(s) float
Fix
pin exact versions or ship a lockfile
INFOInventory / provenanceinv.oversize · assets/expo-skills.png
F-13 Inventory / provenanceCWE-1104Layer L0
assets/expo-skills.png
Why
2458561 bytes not read
Fix
—
INFOPrompt injectionprompt.authority_framing · plugins/expo/skills/expo-animation/SKILL.md:21
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
You are a senior mobile engineer building the animation yourself. Make the call, state the reasoning in one line, write the code. Never present motion options as a menu.
Why
No further detail recorded for this rule.
Fix
—
INFOPrompt injectionprompt.authority_framing · plugins/expo/skills/expo-data-fetching/references/expo-router-loaders.md:56
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
| `request` object | Full access (headers, cookies) | Not available |
Why
No further detail recorded for this rule.
Fix
—
INFOPrompt injectionprompt.authority_framing · plugins/expo/skills/expo-data-fetching/references/expo-router-loaders.md:320
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
| **`request` object** | Full access | Not available |
Why
No further detail recorded for this rule.
Fix
—

Audit 0.4.1 · source sha 573650ce5712 · 29 Oct 2026Report an issue or request a re-scan

Provenance

Who published it, and what the verdict is pinned to

  • Publisherexpo GitHub organizationOwner of the repository this skill is read from
  • Source folderexpo/skillsThe exact folder we audited
  • LicenceMITAs the repository states it
  • Commit pinned for this verdict573650ce5712A new audit runs when the source changes
  • Repository statusNot archivedPushed today
  • Sandboxed runNot runSkills are read, not executed; layer L4 is skipped

What it tells the agent

Full source on GitHub ↗

Its description: Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo…

---
name: expo-skill-eval
description: Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo skill, test that a skill produces working code, benchmark a skill with device screenshots, or verify a skill's output renders correctly.
license: MIT
allowed-tools: "Read(~/.cache/expo-skill-eval/**), Read(/tmp/expo-skill-eval-*/**), Read(/private/tmp/expo-skill-eval-*/**), Write(/tmp/expo-skill-eval-*/**), Write(/private/tmp/expo-skill-eval-*/**), Edit(/tmp/expo-skill-eval-*/**), Edit(/private/tmp/expo-skill-eval-*/**), Bash(python3 /tmp/expo-skill-eval-*), Bash(python3 /private/tmp/expo-skill-eval-*), Bash(python3 *expo-skill-eval/scripts/*), Bash(tee /tmp/expo-skill-eval-*), Bash(tee /private/tmp/expo-skill-eval-*), Bash(bash *expo-skill-eval/scripts/*)"
---

# Expo Skill Eval

Evaluates skills in `plugins/expo/skills/` for trigger accuracy, generated code quality, and/or runtime rendering in Expo Go.

Requirements: macOS with Xcode (iOS simulators), Android SDK with at least one AVD, and `bun`. No other device tooling is assumed.

Workspace root: `/private/tmp/expo-skill-eval-<skill-name>/iteration-N/` (e.g. `/private/tmp/expo-skill-eval-expo-ui/iteration-4/`).

## Before starting — clarify scope

**Confirm all of the following up front, before any pipeline work — don't skip any** (only skip a given item if the request already states that choice). Batch them into `AskUserQuestion` calls of ≤4 questions each, in this order:

1. **Which skill** to eval (if not clear from the request).
2. **Prompts** — which prompts drive the eval. Built-in prompts (from the skill's eval cases) are **pre-selected all**; drop any, add a custom text prompt, or **build from an uploaded screenshot** (a target UI the skill must reproduce). See **Prompts** below.
3. **What to verify** — one multi-select of three options: Runtime + screenshots / Trigger accuracy / Code checks (no device). See *What to verify* below.
4. **Expo SDK** — latest (default, auto-detected) or a pinned version.
5. **Runner** — Expo Go (default) or development build.
6. **Platforms** — iOS / Android / web (always offer all three).
7. **Permission flag** for `claude -p` — skip-permissions (default) or accept-edits.
8. **Viewer delivery** — local only (default) or publish a shareable Artifact.
9. **If trigger accuracy is selected** — confirm the published `expo` plugin is disabled (or not installed).

Each is detailed below. Items 4–6 (SDK, runner, platforms) fit naturally in one `AskUserQuestion` call.

**If the skill to eval is not clear from the request**, list available skills from `plugins/expo/skills/` and ask which one to evaluate.

**How the skill under test is loaded — two mechanisms, one per phase** (don't pick one globally): executor runs reference it by **file path** (`SKILL_PATH = plugins/expo/skills/<skill>/SKILL.md`, read explicitly), while the trigger eval loads it as a **plugin** (`--plugin-dir plugins/expo`, so the model can auto-select it from its description). Both point at the *local, in-repo* version — that's what you're evaluating. You do **not** need any special flag to *launch* the harness session itself (the harness finds the skill by repo path); the mechanisms apply to the `claude -p` subprocesses it spawns. See steps 1 and 3 for why each phase differs. **One pre-run check (required when the trigger eval is in scope):** if the *published* `expo` plugin is installed/enabled, disable it (via `/plugin`) **before launching** the harness and re-enable after. A single disable is a global-config change that both this session and the spawned `claude -p` subprocesses inherit. Why it's required for the trigger eval: that phase loads the local skill via `--plugin-dir`, and a second installed `expo` collides with it — the model may trigger the *published* `expo:expo-ui`, and since detection only sees the tool-call name you'd silently score the published description instead of your local edits (the collision could also just error). The **executor / runtime / static** phases are *not* affected — they read the skill under test by its local `SKILL_PATH` with no `--plugin-dir` — so a run with no trigger eval can skip the disable. Disabling `expo` does **not** disable `expo-skill-eval` (a standalone project skill, not part of the `expo` plugin), so the harness stays available.

**Surface this to the user as an explicit up-front confirmation** — the same way you confirm which skill to eval. When the trigger eval is in scope, ask the user to confirm the published `expo` plugin is disabled (or not installed) *before* you start step 1; if it's still enabled, pause and have them disable it via `/plugin`. Don't run the trigger eval until they confirm — the harness can't reliably detect installed plugins on its own (reading the global plugin config or `claude plugin list` would prompt), so this is a manual confirmation, not an auto-check.

**Pick the prompts — built-in, custom, or a target screenshot.** The prompts are the *inputs* that drive the executor (with-skill and without-skill); they are separate from what you *verify*. Confirm them with `AskUserQuestion` (skip if the request already names a prompt):

- **Built-in prompts** — representative prompts you generate by reading the skill under test (its `SKILL.md` + `references/`) and `references/runtime-matrix.md`, covering the skill's standard use cases. (If the skill already ships eval cases under `evals/evals.json`, fold their `prompt` fields in too — but most skills don't, so you usually derive them.) **Pre-select all** so the default run exercises the skill's standard cases; let the user deselect any.
- **Custom text prompt** — a one-off prompt the user types. Don't spend a dedicated option slot on this: `AskUserQuestion` auto-adds a **"Type something"** / Other entry, and anything typed there becomes a custom text case.
- **

Excerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.

Install

Pinned to the audited commit 573650c

claude plugin install expo@claude-plugins-official
npm install -g eas-cli
npm install -g @swmansion/argent
git clone --depth 1 --filter=blob:none --sparse https://github.com/expo/examples.git /tmp/expo-ref/examples \
npm install react-native-wgpu@^0.4.1 [email protected] @react-three/fiber@^9.4.0 wgpu-matrix@^3.0.2 @types/[email protected] --legacy-peer-

Commands as the repository documents them: shown, never run by us. Our verdict covers commit 573650ce5712 only.

Works in which agents?

What its own text says, not a test

AgentStatusMore
Claude CodeMentioned in its text, not testedSkills for Claude Code · About Claude Code
CodexMentioned in its text, not testedSkills for Codex · About Codex
GitHub CopilotMentioned in its text, not testedSkills for GitHub Copilot · About GitHub Copilot
CursorMentioned in its text, not testedSkills for Cursor · About Cursor
WindsurfMentioned in its text, not testedSkills for Windsurf · About Windsurf
“Mentioned” means the skill’s text names the agent. We have not run it there.

Audit history

Every audit, every source change

  1. ✕BLOCK D 69 / 100

    first audit · source 573650ce5712

README badge

For maintainers · shows the latest audit

ModelsAtlas: BLOCK DMODELSATLASBLOCK · D
[![ModelsAtlas: BLOCK D](https://modelsatlas.com/skills/expo/expo-cicd-workflows/badge.svg)](https://modelsatlas.com/skills/expo/expo-cicd-workflows/)

The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.

Add this badge to your README

[![ModelsAtlas: BLOCK D](https://modelsatlas.com/skills/expo/expo-cicd-workflows/badge.svg)](https://modelsatlas.com/skills/expo/expo-cicd-workflows/)

Questions about expo-cicd-workflows

What does the expo-cicd-workflows skill do?
A collection of AI agent skills for working with Expo projects and Expo Application Services
Is expo-cicd-workflows safe to install?
No — not without reading the findings first. The audit graded it D (69/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What can expo-cicd-workflows access on my machine?
The audit observed that it reaches the network. Each of those is consistent with what it says it does. Secrets in the source: none found.
Which assistants does expo-cicd-workflows work with?
Its documentation mentions claude-code, codex, copilot, cursor and windsurf. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (573650ce5712), read on 2026-10-29. The repository is watched, and a new audit runs when it changes — this is the first audit.

Sources

  • github.com/expo/skills — the audited source at commit 573650ce5712 and every finding aboveObserved · 29 Oct 2026

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.