Skip to content

feat: add MobileGuard agent skill with ledger - #1

Merged
jsingh6 merged 4 commits into
mainfrom
feat/mobileguard-skill-and-as006-fix
Oct 11, 2026
Merged

jsingh6 merged 4 commits into
mainfrom
feat/mobileguard-skill-and-as006-fix

Conversation

@jsingh6

@jsingh6 jsingh6 commented Oct 11, 2026

Copy link
Copy Markdown
Owner

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.

Jaspreet Singh and others added 4 commits October 10, 2026 22:20
…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>
@jsingh6
jsingh6 merged commit 75d2a06 into main Oct 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant