Agent skill · Audited from source
expo-cicd-workflows
skill · expo/skillsMIT licenceAudited 29 Oct 2026 · source 573650ce5712
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…
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
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
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 3 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | PASS | 2 |
L2 Instructions | Prompt injection, authority framing, hidden directives | FAIL | 7 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (12)
HIGHPrompt injectionprompt.credential_read · plugins/expo/skills/eas-simulator/SKILL.md:137
| `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
- 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
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
- —
LOWInventory / provenanceinv.symlink · CLAUDE.md
CLAUDE.md
- Why
- link not followed
- Fix
- —
LOWSupply chainsupply.unpinned · tests/fixtures/expo-brownfield/sdks/55/package.json
@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
@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
assets/expo-skills.png
- Why
- 2458561 bytes not read
- Fix
- —
INFOPrompt injectionprompt.authority_framing · plugins/expo/skills/expo-animation/SKILL.md:21
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
| `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
| **`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-
git clone https://github.com/expo/skills git -C skills checkout 573650ce5712
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
| Agent | Status | More |
|---|---|---|
| Claude Code | Mentioned in its text, not tested | Skills for Claude Code · About Claude Code |
| Codex | Mentioned in its text, not tested | Skills for Codex · About Codex |
| GitHub Copilot | Mentioned in its text, not tested | Skills for GitHub Copilot · About GitHub Copilot |
| Cursor | Mentioned in its text, not tested | Skills for Cursor · About Cursor |
| Windsurf | Mentioned in its text, not tested | Skills for Windsurf · About Windsurf |
Audit history
Every audit, every source change
- ✕BLOCK D 69 / 100
first audit · source
573650ce5712
README badge
For maintainers · shows the latest audit
[](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.
Similar skills
All devops & cloud skills →affaan-m/ECC
Docker and Docker Compose patterns for local development, container security, networking, volume strategies, and multi-service orchestration. Use when setting up containerized development environments or reviewing…
n8n-io/n8n
Fetch and display the full transcript from a Loom video URL. Use when the user wants to get or read a Loom transcript.
anthropics/skills
Reference for the Claude API / Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration. TRIGGER — read BEFORE opening the target file; don't skip because it…
Add this badge to your README
[](https://modelsatlas.com/skills/expo/expo-cicd-workflows/)
<a href="https://modelsatlas.com/skills/expo/expo-cicd-workflows/"><img src="https://modelsatlas.com/skills/expo/expo-cicd-workflows/badge.svg" alt="ModelsAtlas: BLOCK D"></a>
Questions about expo-cicd-workflows
What does the expo-cicd-workflows skill do?
Is expo-cicd-workflows safe to install?
What can expo-cicd-workflows access on my machine?
Which assistants does expo-cicd-workflows work with?
How current is this page?
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.
- What does the expo-cicd-workflows skill do?
- Is expo-cicd-workflows safe to install?
- What can expo-cicd-workflows access on my machine?