{"data":{"skill":{"slug":"expo-expo-dev-client","name":"expo-dev-client","icon":"📦","repo":"https://github.com/expo/skills/tree/main/plugins/expo-app-design/skills/expo-dev-client/","status":"approved","author":"expo","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"3c11bc45-b590-443e-a37e-a67aaeb8ca2b","skill_id":"9e979acf-eb6e-4003-8714-de30d6436bc5","version":3,"content_hash":"24ee314694fa6cd0dc17d647b7d69e7d","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":null,"manual_install_policy":null,"summary":"Static analysis flagged many backtick and command examples in SKILL.md. Review found these are Markdown instructions for Expo EAS, simulator, device, and Android tooling, not hidden executable code or malicious automation. The skill is publishable with a medium warning because it instructs users to run external commands that can build, install, update tooling, and submit iOS builds.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":19,"line_start":19},{"file":"SKILL.md","line_end":23,"line_start":23},{"file":"SKILL.md","line_end":45,"line_start":25},{"file":"SKILL.md","line_end":48,"line_start":45},{"file":"SKILL.md","line_end":49,"line_start":48},{"file":"SKILL.md","line_end":50,"line_start":49},{"file":"SKILL.md","line_end":56,"line_start":50},{"file":"SKILL.md","line_end":58,"line_start":56},{"file":"SKILL.md","line_end":74,"line_start":58},{"file":"SKILL.md","line_end":80,"line_start":74},{"file":"SKILL.md","line_end":83,"line_start":80},{"file":"SKILL.md","line_end":84,"line_start":83},{"file":"SKILL.md","line_end":84,"line_start":84},{"file":"SKILL.md","line_end":90,"line_start":84},{"file":"SKILL.md","line_end":94,"line_start":90},{"file":"SKILL.md","line_end":98,"line_start":94},{"file":"SKILL.md","line_end":101,"line_start":98},{"file":"SKILL.md","line_end":105,"line_start":101},{"file":"SKILL.md","line_end":107,"line_start":105},{"file":"SKILL.md","line_end":111,"line_start":107},{"file":"SKILL.md","line_end":120,"line_start":111},{"file":"SKILL.md","line_end":124,"line_start":120},{"file":"SKILL.md","line_end":130,"line_start":124},{"file":"SKILL.md","line_end":141,"line_start":130},{"file":"SKILL.md","line_end":146,"line_start":141},{"file":"SKILL.md","line_end":151,"line_start":146},{"file":"SKILL.md","line_end":153,"line_start":151},{"file":"SKILL.md","line_end":156,"line_start":153},{"file":"SKILL.md","line_end":158,"line_start":156},{"file":"SKILL.md","line_end":161,"line_start":158},{"file":"SKILL.md","line_end":164,"line_start":161}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"External Build, Install, and Submission Commands","locations":[{"file":"SKILL.md","line_end":58,"line_start":56},{"file":"SKILL.md","line_end":80,"line_start":74},{"file":"SKILL.md","line_end":94,"line_start":90},{"file":"SKILL.md","line_end":107,"line_start":98},{"file":"SKILL.md","line_end":130,"line_start":111},{"file":"SKILL.md","line_end":164,"line_start":141}],"confidence":0.82,"description":"The skill provides shell command examples for EAS cloud builds, local builds, TestFlight submission, simulator installation, device installation, Android installation, credential inspection, cache clearing, and CLI updates. These commands match the skill purpose and are not malicious, but they can change local devices, project state, Expo cloud state, and App Store Connect submissions if run without review.","confidence_reasoning":"The referenced lines contain explicit shell commands for known Expo and mobile tooling. The commands are legitimate for this skill, but their operational effects create a real user-consent and environment-change risk."}],"low_findings":[{"title":"Markdown Backtick Detection Is Mostly Benign","locations":[{"file":"SKILL.md","line_end":19,"line_start":19},{"file":"SKILL.md","line_end":25,"line_start":23},{"file":"SKILL.md","line_end":50,"line_start":45},{"file":"SKILL.md","line_end":58,"line_start":56},{"file":"SKILL.md","line_end":80,"line_start":74},{"file":"SKILL.md","line_end":94,"line_start":90},{"file":"SKILL.md","line_end":107,"line_start":105},{"file":"SKILL.md","line_end":146,"line_start":141},{"file":"SKILL.md","line_end":164,"line_start":151}],"confidence":0.9,"description":"The static analyzer reported Ruby or shell backtick execution, but the evidence is Markdown inline code and fenced examples in a documentation-only skill. No evidence found of Ruby code, dynamic command construction, hidden execution logic, or automatic command execution.","confidence_reasoning":"The file is a Markdown instruction document and the flagged syntax appears inside inline code or fenced command examples. There is no executable wrapper or script file in the scanned structure."},{"title":"Weak Cryptography Findings Are False Positives","locations":[{"file":"SKILL.md","line_end":3,"line_start":3},{"file":"SKILL.md","line_end":134,"line_start":134}],"confidence":0.96,"description":"The weak cryptographic algorithm alerts at SKILL.md lines 3 and 134 do not correspond to cryptographic code or algorithm selection. Line 3 is metadata text, and line 134 introduces a feature list for the development client.","confidence_reasoning":"The reviewed lines contain ordinary prose about Expo development clients. No evidence found of MD5, SHA-1, DES, RC4, or any other cryptographic implementation."},{"title":"Reconnaissance Findings Are Benign Tooling Checks","locations":[{"file":"SKILL.md","line_end":79,"line_start":78},{"file":"SKILL.md","line_end":103,"line_start":103},{"file":"SKILL.md","line_end":116,"line_start":115},{"file":"SKILL.md","line_end":130,"line_start":124},{"file":"SKILL.md","line_end":164,"line_start":160}],"confidence":0.88,"description":"The system reconnaissance alerts map to normal build output descriptions and Expo CLI inspection commands. The skill describes checking build status and CLI version, not collecting host data for exfiltration.","confidence_reasoning":"The commands and surrounding text are directly tied to normal Expo build workflows. No evidence found of network exfiltration, credential harvesting, or broad host enumeration."}],"dangerous_patterns":[{"title":"User-Run Shell Commands","locations":[{"file":"SKILL.md","line_end":58,"line_start":56},{"file":"SKILL.md","line_end":80,"line_start":74},{"file":"SKILL.md","line_end":107,"line_start":90},{"file":"SKILL.md","line_end":130,"line_start":111},{"file":"SKILL.md","line_end":164,"line_start":141}],"confidence":0.84,"description":"The skill includes command examples that users or AI agents may run in a terminal. This is expected for Expo build guidance, but commands should be reviewed before execution because they can build, install, submit, or update project tooling.","confidence_reasoning":"The commands are visible, standard mobile development commands. The risk is operational rather than malicious because execution depends on the user or agent."}],"files_scanned":1,"total_lines":165,"audit_model":"codex","audited_at":"2026-06-30T01:08:39.389+00:00","created_at":"2026-06-30T01:34:34.325991+00:00","static_findings":[],"finding_verdicts":[],"semantic_findings":[],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"canonical install advisories are incomplete"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":2,"needsReviewCount":0,"falsePositiveCount":2,"agentAutoInstallPolicy":null,"manualInstallPolicy":null,"artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}