Skip to content
Report library
Purpose / Other

Eas Update Insights Skill Security Audit

What the author says it does (original text)

EAS service (paid). Check the health of published EAS Update: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.

Independent security check

Security risks found

Files checked
4
Risks found
4
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.Risks found: 1
Medium risk

Install and feedback steps execute unpinned npm packages

Source references: 4
What we found

The prerequisite globally installs `eas-cli`, the upgrade instruction uses `@latest`, and the feedback command automatically downloads and executes a latest-version tool through `npx --yes`. An unpinned future package runs with the user's privileges, while its implementation is not included in the supplied material for review.

Why this matters

If a package, publisher account, or latest dependency is compromised, it could read or alter files, environment variables, and credentials accessible to the user. A global install also makes a persistent change to the development environment.

The prerequisites globally install an unpinned `eas-cli`, troubleshooting requests `@latest`, and the feedback flow uses `npx --yes` to fetch and execute the latest tool. If followed, npm package code runs with the user's permissions, while the supplied source does not include those packages for review. These operations fit legitimate EAS and feedback workflows, but users can ask for pinned, verified versions or prohibit autonomous installs, upgrades, and feedback-tool execution.

SKILL.md:34In the instructionsOpen original file
- `eas-cli` installed (`npm install -g eas-cli`).- Logged in: `eas login`.- For `channel:insights`: run from an Expo project directory (the command resolves the project ID from `app.json`). `update:insights` only needs a login.
Show 3 other places
SKILL.md:118In the instructionsOpen original file
- `Update group "<id>" has no ios update (available platforms: android)` — `--platform ios` was used but the group wasn't published for iOS.- `EAS Update insights is not supported by this version of eas-cli. Please upgrade ...` — the server deprecated a field the CLI relies on. Run `npm install -g eas-cli@latest`.
SKILL.md:233In the instructionsOpen original file
## Submitting FeedbackIf you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:```bashnpx --yes submit-expo-feedback@latest --category skills --subject "eas-update-insights" "<actionable feedback>"```Only submit when you have something specific and actionable to report. Include as much relevant context as possible.If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
SKILL.md:234In the instructionsOpen original file
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:```bashnpx --yes submit-expo-feedback@latest --category skills --subject "eas-update-insights" "<actionable feedback>"```Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
Medium risk

The feedback flow may send user-supplied project context to Expo

Source references: 3
What we found

The instructions ask users to report issues to Expo through a submission tool and include as much relevant context as possible. Feedback is passed as a command-line argument to an external npm tool, while the supplied material does not specify transmitted fields, retention, or redaction.

Why this matters

Logs, update messages, project identifiers, internal incident details, paths, or credentials pasted into the feedback may leave the machine. Command arguments may also be retained in local shell history or exposed in process listings.

The feedback flow explicitly reports to Expo, passes the feedback as an argument to an external npm tool, and encourages including as much relevant context as possible. If an agent inserts logs, project identifiers, account details, or other sensitive context into the placeholder, that material may be sent to Expo. The source does not describe fields, redaction, or retention. Submission is conditional rather than automatic; users can require a complete preview, redaction, and confirmation before sending.

SKILL.md:232In the instructionsOpen original file
## Submitting FeedbackIf you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:```bashnpx --yes submit-expo-feedback@latest --category skills --subject "eas-update-insights" "<actionable feedback>"```Only submit when you have something specific and actionable to report. Include as much relevant context as possible.If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
Show 2 other places
SKILL.md:234In the instructionsOpen original file
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:```bashnpx --yes submit-expo-feedback@latest --category skills --subject "eas-update-insights" "<actionable feedback>"```Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
SKILL.md:237In the instructionsOpen original file
```Only submit when you have something specific and actionable to report. Include as much relevant context as possible.If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.No risks found
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.No risks found
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.Risks found: 2
Medium risk

Incomplete and delayed telemetry is proposed for release gating

Source references: 4
What we found

The Skill explicitly proposes gating CI on update health and shows a `crashRatePercent > 1` filter. It also states that OTA users may be undercounted or duplicated across platforms, fresh publishes may show zero, install and failure reports lag, and some crashes never appear. The example sets no minimum sample size, waiting period, or confidence requirement.

Why this matters

An automated gate could approve an unhealthy rollout or block a healthy one because of sparse or delayed data, potentially widening an incident, affecting users, or causing unnecessary release disruption.

The Skill positions aggregate metrics as a CI release gate and shows a one-day `crashRatePercent > 1` regression filter, without specifying a minimum sample, stabilization period, or confidence rule. It also states that fresh data may temporarily be zero, install/failure reporting lags, some crashes are absent, and users may be double-counted across platforms. Using the simple threshold directly for automation could wrongly approve or block a release. Users can require sample-size, freshness, waiting-period, and human-review safeguards.

agents/openai.yaml:4In the instructionsOpen original file
  short_description: "Paid EAS service. Check EAS Update health, adoption, crash rates, launch counts, payload size, and OTA vs embedded usage"  default_prompt: "Use $eas-update-insights to inspect published EAS Update with eas-cli, compare rollout health, gather update or channel metrics, parse JSON output, and gate releases on aggregate update performance."
Show 3 other places
SKILL.md:203In the instructionsOpen original file
### Detect a rollout regression in the last 24 hours```basheas update:insights "$GROUP_ID" --days 1 --json --non-interactive \  | jq '.platforms[] | select(.totals.crashRatePercent > 1)'```
SKILL.md:227In the instructionsOpen original file
- **Unique users across platforms** may double-count users who run the same publish on both iOS and Android. The same caveat applies to `otaTotalUniqueUsers` in channel insights, which is a sum over `mostPopularUpdates`.- **Fresh publishes** may show zeros for a short period while the metrics pipeline catches up.- **Installs are downloads, not launches**: the `installs` / "Launches" field counts users who downloaded the manifest and launch asset. A confirmed run only registers on the user's *next* update check (typically up to 24h later, depending on the app's update policy). So metrics lag the real-world state slightly.- **Crashes are self-reported**: `failedInstalls` / "Crashes" counts updates that errored during install/launch and were reported on the next update check. Crashes that don't trigger an update request (e.g. process kill before recovery) won't appear.
SKILL.md:229In the instructionsOpen original file
- **Fresh publishes** may show zeros for a short period while the metrics pipeline catches up.- **Installs are downloads, not launches**: the `installs` / "Launches" field counts users who downloaded the manifest and launch asset. A confirmed run only registers on the user's *next* update check (typically up to 24h later, depending on the app's update policy). So metrics lag the real-world state slightly.- **Crashes are self-reported**: `failedInstalls` / "Crashes" counts updates that errored during install/launch and were reported on the next update check. Crashes that don't trigger an update request (e.g. process kill before recovery) won't appear.
Low risk

EAS Update Insights may consume paid-service quota

Source references: 1
What we found

The Skill states that EAS Update is a paid service with free-tier limits and that update delivery and the data behind these commands count toward plan usage.

Why this matters

Frequent monitoring or CI queries may consume organization quota and could increase charges or reach plan limits sooner. The Skill does explicitly disclose this cost risk.

The source explicitly identifies EAS Update as a paid service with free-tier limits and says update delivery and the data behind these commands count toward plan usage. Therefore, using these insights with a connected EAS project may affect the user's paid quota. The source does not quantify the cost of an individual query; users can check their current plan, free allowance, and expected usage first.

SKILL.md:11In the instructionsOpen original file
> **EAS service - costs apply.** Insights cover updates published through EAS Update, a paid Expo Application Services product with free-tier limits. Update delivery and the data behind these commands count against your plan's EAS Update usage. Review https://expo.dev/pricing.

Inside this skill

8 instruction sections

This Skill is primarily an instruction set; actual data access is delegated to an installed `eas` CLI. It lists updates, reads metrics for an update group, and reads embedded/OTA user metrics by channel and runtime version.

View source
SKILL.md:42In the instructionsOpen original file
|---|---|| `eas update:list` | Discover recent update groups, their `group` IDs, and branch names || `eas update:insights <groupId>` | Per-platform launches, failed launches, crash rate, unique users, payload size, daily breakdown || `eas update:view <groupId> --insights` | Update group details + the same metrics appended || `eas channel:insights --channel <name> --runtime-version <version>` | Embedded/OTA user counts, most popular updates, cumulative metrics for a channel + runtime |All of these support `--json --non-interactive` for programmatic parsing.

Access depends on the current `eas` login. Channel queries also resolve the project ID from the current Expo project's `app.json`, so the account and project queried depend on the user's active login and working directory.

View source
SKILL.md:34In the instructionsOpen original file
- `eas-cli` installed (`npm install -g eas-cli`).- Logged in: `eas login`.- For `channel:insights`: run from an Expo project directory (the command resolves the project ID from `app.json`). `update:insights` only needs a login.

The returned data is aggregate telemetry rather than per-user or device crash records. Output can include update messages, group IDs, user counts, install/failure counts, and payload size, and is designed for scripted parsing.

View source
SKILL.md:30In the instructionsOpen original file
Don't use when the user needs per-user crash detail or device-level reporting; this skill only exposes aggregate EAS metrics.
SKILL.md:102In the instructionsOpen original file
### JSON output shapeTop level: `groupId`, `timespan` (`start`, `end`, `daysBack`), and `platforms[]` with one entry per platform the group was published to. Each platform entry has `updateId`, `totals` (`uniqueUsers`, `installs`, `failedInstalls`, `crashRatePercent`), `payload` (`launchAssetCount`, `averageUpdatePayloadBytes`), and a `daily[]` time series of `{ date, installs, failedInstalls }`.
Start here · InstructionsSKILL.md
eas-update-insights
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source. 3 more sections are available in the original file.

File reference map

References: 2
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records4 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/channel-insights-schema.mdFull text included
  • references/update-insights-schema.mdFull text included
  • agents/openai.yamlFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • agents/openai.yamlSupporting file
  • references/channel-insights-schema.mdSupporting file
  • references/update-insights-schema.mdSupporting file

Operations mentioned in code and instructions

Run commands
SKILL.md:6In the instructionsOpen original file
license: MITallowed-tools: "Bash(eas *)"---
SKILL.md:53In the instructionsOpen original file
```bash# Latest group id across all branches
SKILL.md:88In the instructionsOpen original file
```basheas update:insights 03d5dfcf-736c-475a-8730-af039c3f4d06
Connect to websites
SKILL.md:11In the instructionsOpen original file
> **EAS service - costs apply.** Insights cover updates published through EAS Update, a paid Expo Application Services product with free-tier limits. Update delivery and the data behind these commands count against your plan's EAS Update usage. Review https://expo.dev/pricing.
Install extra software packages
SKILL.md:34In the instructionsOpen original file
- `eas-cli` installed (`npm install -g eas-cli`).- Logged in: `eas login`.
SKILL.md:118In the instructionsOpen original file
- `Update group "<id>" has no ios update (available platforms: android)` — `--platform ios` was used but the group wasn't published for iOS.- `EAS Update insights is not supported by this version of eas-cli. Please upgrade ...` — the server deprecated a field the CLI relies on. Run `npm install -g eas-cli@latest`.
SKILL.md:235In the instructionsOpen original file
```bashnpx --yes submit-expo-feedback@latest --category skills --subject "eas-update-insights" "<actionable feedback>"```
Lines read
362
File checksum (to compare versions)
39ea73d355bfb9eceda413b801bbeec81bde6477a514dfd9f6d9d1f74f4d4f06