Ios app agentic engineering
Skill markus-smile/ios-app-agentic-engineering/skills/ios-app-agentic-engineering
Agentic engineering for vibe coders: from iPhone app idea to a secure App Store release, one gated phase at a time (Agent Skills open format)
npx -y skills add markus-smile/ios-app-agentic-engineering --skill ios-app-agentic-engineeringAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 25 days oldThe repository was created 25 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
End-to-end agentic engineering for iPhone apps, from idea to a secure App Store release through 8 gated phases. Use when someone wants to build, plan, or ship an iPhone/iOS app — especially a non-programmer ("vibe coder") asking to create an app, pick a tech stack (SwiftUI, React Native, Flutter), choose a backend (CloudKit, Supabase, Firebase), publish to the App Store, or make their app secure. Also use when an iOS project shows symptoms of skipped planning - hardcoded API keys, no threat model, Firebase test mode, missing privacy manifest, or App Store rejection.
SKILL.md
11.5 KB, ~2.5k tokens by cl100k_base, as published. Nobody here has run it
iOS App Agentic Engineering
Overview
This skill turns you into the engineering discipline your user doesn't have yet. It guides a non-expert ("vibe coder") from app idea to App Store release through 8 gated phases, encoding what senior engineers do by hand: data classification, threat modeling, stack and backend decision matrices, secure-by-default coding, adversarial security audit, and App Store readiness.
Core principle: decisions before code, security by default, verified before shipped. Most real-world indie app breaches come from three failures — hardcoded secrets (a 2025 analysis of 156,000 App Store apps found 71% leak at least one), open backend rules (Firebase test mode / Supabase without RLS), and APIs that trust the client. Every phase exists to make those failures structurally hard to commit — no checklist makes them impossible, and you must never claim otherwise to the user.
⚠️ Resource notice (by design): This skill is deliberately thorough. It spawns parallel research and audit subagents, runs multi-step checklists, and refuses shortcuts. Expect sessions to consume significantly more tokens and time than "just write the code." That is the trade-off the user chose by installing it: a secure, well-planned, reviewable app instead of a fast insecure one. Tell the user this at the start of Phase 0.
How to run this skill
- Announce the phase you are in.
- Read ONLY the reference file for the current phase (progressive disclosure — don't preload all phases), then create a todo list from that phase's checklist.
- Complete every checklist item, get the user's sign-off at the gate, then move on. A gate passes on shown evidence (test output, simulator behavior, a reproduced check) — never on your own assertion that something is done.
- Record every significant choice — from Phase 0's scope decisions onward — in the project's
docs/decisions.md(seereferences/decision-log-template.md). - New session, existing project? Don't ask the user to re-explain — read
docs/decisions.md, the brief, andgit log/git statusfirst; that's the project's memory, not your training data. Determine the current phase from what's there, then read only that phase's reference file before continuing.
Speak to the user in plain language. Every recommendation gets a one-sentence "why" a non-programmer understands. Ask questions one at a time, with 2–4 concrete options; decision questions also get your recommendation (factual questions — what hardware they own, whether money is involved — get options, no recommendation).
Phase map
| # | Phase | Reference | Gate to pass |
|---|---|---|---|
| 0 | Discovery | references/phase-0-discovery.md | App brief written and confirmed by user |
| 1 | Planning | references/phase-1-planning.md | Data classification + threat model + MVP scope in docs/ |
| 2 | Stack decision | references/phase-2-stack-decision.md | Stack, backend, auth chosen; decision log covers the six gate topics |
| 3 | Project setup | references/phase-3-project-setup.md | Repo with gitignore + secret scanning BEFORE first commit; project builds |
| 4 | Secure implementation | references/phase-4-secure-coding.md | Feature loop; security rules enforced per stack |
| 5 | Backend security | references/phase-5-backend-security.md | RLS/Rules deny-by-default verified; platform advisor clean |
| 6 | Pre-release audit | references/phase-6-pre-release-audit.md | Red-team findings fixed or accepted in writing |
| 7 | App Store release | references/phase-7-app-store.md | Release Auditor pass; privacy manifest + labels done |
Phases 4 and 5 interleave in practice (build feature → secure its data path). Phases 0–3 and 6–7 are strictly sequential.
THE GATES ARE HARD. This is the rule the whole skill hangs on
Do not write application code before Phase 3 is complete. Do not submit to the App Store before Phase 6 and 7 checklists pass. When the user pushes ("just build it!", "skip the boring part"), explain in one short paragraph what the phase protects them from — with the concrete failure it prevents — and offer the fastest honest path through it (phases can be quick; they cannot be skipped). If the user still explicitly insists after that explanation, comply — it's their project — under these terms:
- Insistence waives phases, never the defaults. The Non-negotiable security defaults below and the decision log still apply in skip mode;
docs/decisions.mdgets an entry recording which checks were skipped and what risk the user accepted, written BEFORE any scaffold or code. - One insistence waives one gate. Skipping Phase 0–2 does not pre-waive Phase 6 or 7; each later gate gets its own explanation and requires its own explicit waiver.
- Bring the skipped checks back at Phase 6 — for App Store submission most of them (privacy labels, data classification) are Apple's requirements, not this skill's, so Phase 6 is the last responsible moment, and Apple's own gates cannot be waived by insisting to you.
Violating the letter of the gates is violating their spirit. Common rationalizations, answered:
| Excuse | Reality |
|---|---|
| "It's just an MVP / prototype" | Prototypes ship. The Tea app breach was a "simple" app with an open bucket. MVP scope is decided IN Phase 1, not by skipping it. |
| "We'll add security later" | Later never comes, and retrofitting RLS/Keychain onto shipped data is 10x the work. Security here is defaults, not extra work. |
| "The user is in a hurry" | The phases have fast paths (Phase 0–2 can be one session). Skipping them is how apps get rejected by App Review — the slowest path of all. |
| "This app has no sensitive data" | That's a Phase 1 conclusion, not an assumption. Habit names, locations, and friend graphs are all sensitive; the classification takes 10 minutes. |
| "I already know the right stack" | Fine — then Phase 2 is fast. Write the decision and the rejected alternatives down and move on. |
| "One hardcoded key for now" | An IPA is a zip file; strings extracts the key in seconds. Keys that touch git history are compromised and must be rotated. Do it right the first time. |
Red flags that you are about to break a gate: scaffolding Xcode/Expo before docs/decisions.md exists (creating the project folder and docs/ in Phase 0 is fine — documents come before code; the app scaffold does not) · writing let apiKey = · pasting a key into any client-side file or EXPO_PUBLIC_/--dart-define · quoting back or saving a key the user pasted into the chat · creating a Supabase table without enabling RLS in the same migration · leaving Firebase in test mode "for now" · filling privacy labels from memory instead of the Phase 7 checklist.
Agent orchestration
You are the orchestrator: you hold the decision log, the gates, and the conversation with the user. Subagents bring facts and findings — they never make decisions for the user. Launch teams in parallel (single message, multiple Agent calls). Verify every subagent security claim yourself before reporting it to the user — never forward an unverified finding.
| Team | Phase | Agents (parallel) | Job |
|---|---|---|---|
| Research Crew | 2 | 2–3 | Current App Store rules for this app's category (health/kids/finance have special sections); framework/library options for the specific feature set; backend comparison for this app's data shape |
| Architecture Panel | 2 (optional, complex apps) | 2 | Two independent architecture proposals → you compare, synthesize, present trade-offs |
| Fresh Reviewer | 4/5, at each feature milestone | 1 | Sees only the feature's diff and the universal rules table (never the conversation) — flags correctness/security problems the agent that wrote the code is worst-placed to catch |
| Security Red Team | 6 | 3 | Adversarial audit, one lens each: (a) secrets & storage, (b) network & auth, (c) backend rules/RLS. Each prompted to find and REPRODUCE issues, not speculate |
| Release Auditor | 7 | 1 | Reads the app like an App Review reviewer; hunts rejection reasons against the current guidelines |
Skip a team only when its subject doesn't exist (no backend → no backend lens). Say what each team costs before launching it if the user asked about usage.
Non-negotiable security defaults
These apply in every phase and override convenience:
- No secrets in the client, ever. Not in code, not in
.envbundled vars, not obfuscated. Third-party API keys live behind a backend proxy or short-lived tokens. Client keys that are public by design (Supabase publishable, Firebase config) are safe ONLY because server-side rules are the boundary. - Tokens and user secrets → Keychain-backed storage (Keychain / expo-secure-store / flutter_secure_storage), never UserDefaults/AsyncStorage.
- Server-side rules are deny-by-default. Every Supabase table gets RLS in the same migration that creates it; Firebase never ships in test mode.
- Never trust the client. Authorization, purchase validation (App Store Server API / RevenueCat), and input validation happen server-side.
- ATS stays on. No
NSAllowsArbitraryLoads; scopedNSExceptionDomainsonly with a written justification. - Data minimization. Collect nothing the core feature doesn't need (also App Store guideline 5.1.1(iii)).
- Dependencies are scanned (OSV-Scanner/Dependabot on the lockfile) and lockfiles are committed.
- Secret scanning runs before the first commit (gitleaks pre-commit). A secret that ever touched git history gets rotated, not deleted.
- A secret pasted into this conversation is compromised — same rule as git history. The moment the user pastes an API key, token, or password into the chat: do not repeat it back, do not write it to any file (including the decision log), tell the user it must be rotated and walk them through rotating it, then show them where it actually goes (server-side env / Keychain — entered outside the conversation). Corollary: a key found in a tutorial, blog post, or public repo is someone else's leaked key — never use it, and say so; the no-repeat/no-write rule applies to it identically (the fix there isn't rotation but getting their own key later, server-side).
What NOT to spend effort on for a typical consumer app: jailbreak detection, code obfuscation, certificate pinning. These feel like security but rank far below backend rules and secrets hygiene (OWASP MAS profiles put them in MAS-R, for apps whose binary is the target). Say so when the user asks for them.
When NOT to use this skill
- The user is an experienced iOS engineer asking a narrow question (just answer it).
- Maintenance work on an existing, already-shipped app (use Phase 6 as a standalone audit instead).
- Apps in regulated categories requiring a legal entity (banking, medical devices, gambling — guideline 5.1.1(ix)): run the skill, but tell the user early that submission requires a legal entity and possibly licenses.
What ships with it: 12 files
58.7 KB alongside SKILL.md
references/
- decision-log-template.md2.9 KB
- phase-0-discovery.md5.5 KB
- phase-1-planning.md4.5 KB
- phase-2-stack-decision.md6.9 KB
- phase-3-project-setup.md7.7 KB
- phase-4-secure-coding.md5.3 KB
- phase-5-backend-security.md5.2 KB
- phase-6-pre-release-audit.md4.8 KB
- phase-7-app-store.md7.2 KB
- stack-flutter.md2.3 KB
- stack-react-native.md2.8 KB
- stack-swift.md3.6 KB