Repository navigation
feat: add MobileGuard agent skill with ledger - #1
Merged
Merged
Conversation
…main advice Add skills/mobileguard, an agent skill that traces AI data flows in mobile apps (React Native/Expo first, plus iOS, Android, Flutter) and checks them against Apple/Google guidelines, OWASP LLM Top 10 2025, OWASP Agentic Top 10 2026, and MASVS v2. Modes cover the whole release cycle: build, pr, review, release, rejection, and lookback. All share a committed MOBILEGUARD.md ledger. ai_surface.py maps the AI surface and detects drift against the ledger (--snapshot, --diff-ledger, --fail-on-drift). Fix AS-006: it told developers to add AI domains to NSPrivacyTrackingDomains, which makes iOS block those requests until ATT is granted. It now flags AI hosts in tracking domains, a missing manifest, and missing NSPrivacyCollectedDataTypes. Fix AS-001, which treated the ATT prompt as AI consent. Remove three stale duplicate modules that shipped the old advice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e leak CI was already failing on main (ruff, mypy, bandit, coverage). Fixes: - preflight --platform auto (the default) passed None to run_scan and crashed on platform.lower(). Pass the platform through unchanged. - contract: the installed anthropic SDK no longer accepts `temperature` in messages.create, so every LLM evaluation raised TypeError. Drop it. - AS-006/AS-007 project-wide checks ignored .gitignore and generated-file suffixes, unlike the per-file detectors. Apply the same skip rules. - Lint: unused/duplicate imports, import order, long lines; datetime.UTC. - bandit B310: annotate the fixed https://itunes.apple.com urlopen. - Tests for preflight (exit codes, json/sarif, --strict, --distribution) and scanner edge cases; coverage 76.8% -> 81.0%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ran the skill's review mode on 7 real apps (React Native/Expo, iOS, Android): 1 Blocker, 5 High, and 2 likely upload rejections confirmed by trace. Tuned from what that review found: Recall: Secrets Gradle plugin / BuildConfig.*_KEY (missed a Blocker), Gradle and version-catalog AI dependencies, credentials stored under key/token names in UserDefaults, @AppStorage, AsyncStorage, and SharedPreferences. Precision: src/api/ is client code, debug-only manifests, commented-out code, static SQL in migrations, jest setup files as test code. References: public-by-design keys (Supabase anon, Firebase, Stream), the open-relay proxy pattern, the lethal trifecta for agent tools, MG-R05 severity tiers, and which Swift logging persists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bump pyproject, __version__ (was stale at 1.3.0, so --version and SARIF reported the wrong version), the preflight banner (now derived from __version__), CITATION.cff, and the README install pin. Date the CHANGELOG entry and list the CLI fixes from this branch. Add a test that keeps __version__ in sync with pyproject.toml. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add skills/mobileguard, an agent skill that traces AI data flows in mobile apps (React Native/Expo first, plus iOS, Android, Flutter) and checks them against Apple/Google guidelines, OWASP LLM Top 10 2025, OWASP Agentic Top 10 2026, and MASVS v2. Modes cover the whole release cycle: build, pr, review, release, rejection, and lookback. All share a committed MOBILEGUARD.md ledger. ai_surface.py maps the AI surface and detects drift against the ledger (--snapshot, --diff-ledger, --fail-on-drift).
Fix AS-006: it told developers to add AI domains to NSPrivacyTrackingDomains, which makes iOS block those requests until ATT is granted. It now flags AI hosts in tracking domains, a missing manifest, and missing NSPrivacyCollectedDataTypes. Fix AS-001, which treated the ATT prompt as AI consent. Remove three stale duplicate modules that shipped the old advice.