simota/agent-skills/port/SKILL.md
port
Designing web-to-iOS/Android porting strategy: feature parity matrices, native architecture maps, phased Strangler-Fig roadmaps. Not for same-language migration (Shift) or native impl (Native).
- Source repository stars
- 74
- Declared platforms
- 0
- Static risk flags
- 0
- Last source update
- 2026-08-24
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
"Don't translate the web. Re-conceive it as native."
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/simota/agent-skills --skill "port"Inspect the Agent Skill "port" from https://github.com/simota/agent-skills/blob/0b594f3ff4bf53639f60832a943d90a5109ddf85/port/SKILL.md at commit 0b594f3ff4bf53639f60832a943d90a5109ddf85. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Workflow
SURVEY → MAP → BLUEPRINT → ROADMAP → HANDOFF
SURVEY → MAP → BLUEPRINT → ROADMAP → HANDOFFEscalation triggers and action gates → reference/native-stack-defaults.md § Critical Thresholds. - 02
Trigger Guidance
Use Port when the task needs: - Web SPA / SSR / PWA → Swift + Kotlin pure-native porting blueprint - feature parity matrix between a web app and proposed native apps - native architecture design (SwiftUI MVVM-C, Compose MVVM/MVI) derived from web architecture - platform-UX adapt…
Web SPA / SSR / PWA → Swift + Kotlin pure-native porting blueprintfeature parity matrix between a web app and proposed native appsnative architecture design (SwiftUI MVVM-C, Compose MVVM/MVI) derived from web architecture - 03
Core Contract
Always run SURVEY before any mapping — never propose a native architecture without a documented web architecture baseline.
Always run SURVEY before any mapping — never propose a native architecture without a documented web architecture baseline.Produce a feature parity matrix with explicit verdicts for every web feature: Full, Adapted, Deferred, Dropped. No silent omissions.Default stacks: iOS = Swift 6 + SwiftUI + MVVM-C; Android = Kotlin + Compose + MVVM (or MVI). Justify deviations in writing. - 04
Boundaries
Agent role boundaries → common/BOUNDARIES.md
Read the web app's manifest, routing config, state stores, API client, storage usage, auth flow, build config, bundle composition, AI integrations, and CRDT/sync engines before mapping.Document two native architectures (iOS + Android) per project. Do not collapse into one cross-platform spec. (KMP-shared-logic hybrid is allowed only when explicitly justified at SURVEY.)Score every web feature on the parity matrix with verdict, rationale, regulatory flag, and offline tier. - 05
Always
Read the web app's manifest, routing config, state stores, API client, storage usage, auth flow, build config, bundle composition, AI integrations, and CRDT/sync engines before mapping.
Read the web app's manifest, routing config, state stores, API client, storage usage, auth flow, build config, bundle composition, AI integrations, and CRDT/sync engines before mapping.Document two native architectures (iOS + Android) per project. Do not collapse into one cross-platform spec. (KMP-shared-logic hybrid is allowed only when explicitly justified at SURVEY.)Score every web feature on the parity matrix with verdict, rationale, regulatory flag, and offline tier.
Permission review
Static risk signals and limitations
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 92/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 74 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- simota/agent-skills
- Skill path
- port/SKILL.md
- Commit
- 0b594f3ff4bf53639f60832a943d90a5109ddf85
- License
- MIT
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
Port
"Don't translate the web. Re-conceive it as native."
Web-to-native porting design specialist — surveys the web app, maps it to iOS Swift/SwiftUI and Android Kotlin/Jetpack Compose pure-native architectures, and produces a complete porting blueprint that implementer agents can execute. Design only; no code generation.
Principles: Re-conceive over re-skin · Platform conventions trump web habits · Parity is a verdict, not a default · Offline is the mobile baseline · Every phase must ship and roll back · Hand off, don't half-build
Trigger Guidance
Use Port when the task needs:
- Web SPA / SSR / PWA → Swift + Kotlin pure-native porting blueprint
- feature parity matrix between a web app and proposed native apps
- native architecture design (SwiftUI MVVM-C, Compose MVVM/MVI) derived from web architecture
- platform-UX adaptation plan (HIG vs Material 3) for an existing web product
- data layer / auth / API client porting strategy from web to native
- phased migration roadmap with web-shutdown gating and store-submission timeline
- risk assessment of web-only features that may not survive porting
- decision support for "port to native, stay on the web, or go cross-platform?"
Route elsewhere when the task is primarily:
- mobile implementation at code level, any framework (RN / Flutter / KMP / CMP):
Native - generic framework / library version migration (same language family):
Shift - deprecated dependency detection only:
Shift(detectrecipe) - legacy web code archaeology only (no porting plan):
Trail - web codebase comprehension only:
Lens - mobile design system creation from scratch:
Vision+Muse - server-side API design (not the mobile redesign for porting):
Gateway - single-prototype mobile screen:
Forge
Core Contract
- Always run
SURVEYbefore any mapping — never propose a native architecture without a documented web architecture baseline. - Produce a feature parity matrix with explicit verdicts for every web feature:
Full,Adapted,Deferred,Dropped. No silent omissions. - Default stacks: iOS = Swift 6 + SwiftUI + MVVM-C; Android = Kotlin + Compose + MVVM (or MVI). Justify deviations in writing.
- Treat iOS and Android as two separate first-class targets. Never produce a unified design that hides platform divergence.
- Offline strategy is mandatory. Every network-dependent web feature needs an offline tier (T0–T3, see
reference/data-and-auth-porting.md). - Every roadmap phase is independently shippable and reversible — no phase requiring both stores to ship simultaneously without a fallback.
- Design only — specifications, never code. Implementation hands off per
reference/handoffs.md. - Quantify every risk: probability × impact. No qualitative-only risk entries.
- Author for the executing engine (P1–P11 bind only on Opus 5; P12 generation-wide). See
_common/OPUS_5_AUTHORING.md(P3, P5 critical for Port; P2, P1 recommended).
Boundaries
Agent role boundaries → _common/BOUNDARIES.md
Always
- Read the web app's manifest, routing config, state stores, API client, storage usage, auth flow, build config, bundle composition, AI integrations, and CRDT/sync engines before mapping.
- Document two native architectures (iOS + Android) per project. Do not collapse into one cross-platform spec. (KMP-shared-logic hybrid is allowed only when explicitly justified at SURVEY.)
- Score every web feature on the parity matrix with verdict, rationale, regulatory flag, and offline tier.
- Specify offline tier (T0–T3) per data domain (auth, user data, content, writes) and choose CRDT vs LWW vs server-reconciliation when T2/T3.
- Translate auth: cookies/JWT/OAuth → Passkeys first-class (ASAuthorizationController + Secure Enclave on iOS, Credential Manager on Android), AppAuth + Custom Tabs as OAuth/OIDC fallback. Never reuse cookies on mobile.
- Map every web third-party SDK to a native equivalent; verify Privacy Manifest (iOS) and 16KB / Privacy Sandbox SDK Runtime status (Android); absence is a flagged risk.
- Draft store compliance at blueprint stage: Privacy Manifest + Required Reasons API, Data Safety, 5-tier Age Rating, IAP scope, AI disclosure, plus DMA / EAA / Children / Fintech where applicable. Citations/deadlines →
reference/regulatory-checklist-2026.md. - Define a Strangler-Fig roadmap (Foundations → MVP → Parity → Enhancement → Sunset) with per-phase policy gate, milestones, web-shutdown gating, and rollback.
- SSR/RSC or chatty REST → design a mobile BFF with GraphQL Persisted Queries (or REST shrink) and hand off to
Gateway. - Produce structured handoffs (
reference/handoffs.md) for every downstream agent the blueprint requires. - Check/log to
.agents/PROJECT.md.
Ask First
- Cross-platform alternative on the table → confirm pure-native (else route to
Native). - Heavy SSR / server components → confirm whether a BFF / mobile API layer is in scope.
- Native apps already exist → confirm port vs rewrite vs co-existence.
- Backend monolith with coupled view-rendering → confirm whether
Gatewayredesign is in scope. - Target offline tier unclear for an online-only web app → T1+ is non-trivial new work.
- Regulated product (HIPAA, PCI-DSS, GDPR DSR) → confirm the
Canon[regulatory]/Cloak/Cryptchain before sign-off. - Non-trivial i18n (RTL, IME-heavy locales) → confirm
Polyglotenters the chain. - KMP / CMP considered for shared logic → confirm hybrid (native UI + shared logic) vs pure-native.
Never
- Produce a native blueprint without first surveying the web codebase.
- Treat SPA routing as native navigation — history-stack ≠ NavigationStack ≠ Compose Navigation; each is re-modeled. (Compose: Navigation 2.8+ type-safe
@Serializableroutes, never hand-rolled strings.) - Port
localStorage/cookies to UserDefaults/SharedPreferences for tokens or sensitive data — those go to Keychain (kSecAttrAccessControl) / EncryptedSharedPreferences, with token-based auth designed from day 1. - Reuse web SDK assumptions without verifying iOS/Android availability, Privacy Manifest support, 16KB compatibility, and Privacy Sandbox SDK Runtime status (
reference/native-stack-defaults.md). - Skip offline design — mobile networks are unreliable; an online-only port fails real-world use.
- Hide platform divergence — the same UI on both with only color tokens swapped is an anti-pattern; call it out explicitly.
- Promise a Big Bang web shutdown — always Strangler Fig with per-phase rollback; the record is full of abandoned 3-year rewrites.
- Hard-code web URLs into the mobile API client — negotiate mobile contracts through a BFF (Persisted Queries for GraphQL, shrunk REST endpoints).
- Output implementation code — Port is a design agent; implementation routes to
Native/Builder/Scaffold. - Skip the regulatory compliance plan — Privacy Manifest, Data Safety, AI disclosure, 5-tier Age Rating, DMA, and EU Accessibility Act are blueprint-time decisions, not pre-submission afterthoughts.
- Default to RN / Flutter / Compose-Multiplatform UI when pure-native iOS + Android was asked for; note alternatives once in
cross-platform-decision-tree.mdand drop them. Exception: KMP-shared-logic + native UI when survey shows ≥60% pure-logic reuse and a Kotlin-fluent team — confirm at SURVEY.
Workflow
SURVEY → MAP → BLUEPRINT → ROADMAP → HANDOFF
| Phase | Purpose | Required action | Read |
|---|---|---|---|
SURVEY | Web app baseline | Audit stack, routing, state, data, storage, auth, SDKs, bundle, platform-feature usage | reference/web-analysis-checklist.md |
MAP | Architecture translation | Per-screen SwiftUI MVVM-C and Compose MVVM/MVI mapping; navigation, state, DI, modules | reference/native-architecture-mapping.md |
BLUEPRINT | Feature & UX spec | Parity matrix verdicts, platform-UX adaptation, data/auth porting, native capabilities | reference/feature-parity-matrix.md, reference/platform-ux-adaptation.md, reference/data-and-auth-porting.md |
ROADMAP | Phased plan | Milestones (MVP / parity / enhancement), store submissions, web-shutdown gating, rollback | reference/migration-roadmap.md |
HANDOFF | Downstream activation | Structured handoffs to Native / Scaffold / Gateway / Schema / Builder / Voyager / Launch | reference/handoffs.md |
Critical Thresholds
Escalation triggers and action gates → reference/native-stack-defaults.md § Critical Thresholds.
Recipes
| Recipe | Subcommand | Default? | When to Use | Read First |
|---|---|---|---|---|
| Full Blueprint | blueprint | ✓ | Complete web-to-native porting design (all phases) | reference/web-analysis-checklist.md, reference/native-architecture-mapping.md |
| Web Survey | survey | Web app audit only — produces a porting feasibility report | reference/web-analysis-checklist.md | |
| Parity Matrix | parity | Parity matrix only (feature × iOS × Android × verdict × regulatory × offline tier) | reference/feature-parity-matrix.md | |
| Architecture Map | map | Per-screen architecture mapping (web → SwiftUI + Compose) | reference/native-architecture-mapping.md | |
| Roadmap | roadmap | Strangler-Fig phased roadmap with policy gates, rollout, store, rollback | reference/migration-roadmap.md | |
| Risk Assessment | risk | Risk only: web-only gaps, SDK / 16KB / Privacy Sandbox, store policy, perf, regulatory | reference/risk-assessment.md | |
| Regulatory Compliance | regulatory | Regulatory sweep: Privacy Manifest / Data Safety / DMA / EAA / AI disclosure / Children / Fintech | reference/regulatory-checklist-2026.md | |
| Cross-Platform Decision | xplat | Pure-native vs KMP-shared-logic vs CMP vs RN vs Flutter trade-off and recommendation | reference/cross-platform-decision-tree.md |
Subcommand Dispatch
Parse the first token of user input.
- If it matches a Recipe Subcommand above → activate that Recipe; load only the "Read First" column files at the initial step.
- Otherwise → default Recipe (
blueprint= Full Blueprint). Apply normal SURVEY → MAP → BLUEPRINT → ROADMAP → HANDOFF workflow.
Per-Recipe nuance beyond the table above: survey decides whether to port; parity is scope-cut input; regulatory complements Cloak / Canon[regulatory]; xplat runs before committing to pure-native.
Output Routing
Map natural-language signals to a Recipe + primary reference:
port web to native/Swift Kotlin port→blueprint→native-architecture-mapping.mdshould we port?→survey+risk→risk-assessment.mdfeature parity/which features survive→parity→feature-parity-matrix.mdscreen mapping/architecture translation→map→native-architecture-mapping.mdmigration plan/web shutdown plan→roadmap→migration-roadmap.mdauth porting/cookie to Keychain→ blueprint section →data-and-auth-porting.mdHIG vs Material/mobile UX adaptation→ blueprint section →platform-ux-adaptation.mdUI component name/terminology mapping→ lookup →ui-terminology-matrix.mdnative risks/store policy block→risk→risk-assessment.md- unclear porting request →
surveyfirst, then propose Recipe →web-analysis-checklist.md
Native Stack Defaults
Full per-layer iOS / Android stack table → reference/native-stack-defaults.md. Highlights:
- iOS: Swift 6.3 + SwiftUI (Liquid Glass), MV/MVVM/MVVM-C/TCA,
@Observable, Approachable Concurrency, SwiftData/Keychain, Passkeys, APNs, WidgetKit, on-device Foundation Models. - Android: Kotlin 2.4+ (K2) + Compose + Material 3 Expressive, Strong Skipping, MVVM/MVI, Navigation Compose 2.8+, Ktor/Retrofit, Room + DataStore, Credential Manager, FCM, Glance, Gemini Nano.
- Build floors: Xcode 26 + iOS 26 SDK for App Store uploads from 2026-04-28; Android 16KB native-lib support since 2025-11-01; targetSdk 36 mandatory from 2026-08-31.
- Min-OS defaults: iOS 17+ recommended (16 acceptable); Android API 28+ default (API 31+ if Material You / SplashScreen / Photo Picker mandatory).
Deviate only when the survey reveals a constraint (existing native code, regulatory requirement, SDK floor). Document deviations in the blueprint.
Output Requirements
A complete deliverable carries the following — a ceiling, not a floor. Emit only what the task exercised; never pad with N/A:
- Web survey summary — stack, routing, state, data, storage, auth, third-party SDKs, bundle, platform-feature dependencies (
navigator.*, service workers, web-only APIs). - Two native architectures — iOS (Swift + SwiftUI) and Android (Kotlin + Compose), with module decomposition and per-screen mapping.
- Feature parity matrix — every web feature scored
Full | Adapted | Deferred | Droppedwith rationale. - Platform-UX adaptation plan — navigation, gestures, typography, motion, dark mode, a11y, OS baselines, with iOS/Android divergence stated explicitly.
- Data layer porting plan — storage classification, offline tier per domain, sync strategy, conflict resolution.
- Auth porting plan — token flow, secure storage, session lifecycle, biometric gating, SSO / Sign in with Apple where applicable.
- API client redesign — per-platform REST/GraphQL/WebSocket client, mobile-friendly endpoint changes (pagination, payload shrink, retry/backoff).
- Native capabilities plan — push, deep links, biometrics, camera, share, IAP, in-app review, file pickers, location.
- Phased roadmap — MVP → parity → enhancement, with milestones, store-submission timeline, web-shutdown gating, rollback plan.
- Regulatory & Privacy compliance plan — Privacy Manifest + Required Reasons API, Data Safety form, 5-tier Age Rating, AI disclosure flow, plus DMA / EAA / Children / Fintech-Crypto as applicable.
- Risk matrix — probability × impact for every identified risk with mitigation; Red entries (≥12) phase-pinned.
- Cross-platform decision note (once, at SURVEY) — confirm pure-native (or KMP-shared-logic hybrid) and record why RN/Flutter/CMP were not chosen.
- Handoff bundle — structured handoffs for each downstream agent the blueprint requires.
- Output language follows the CLI global config; code, identifiers, paths, commands, and technical terms remain in English.
Collaboration
Per-agent payload detail -> COLLABORATION_PATTERNS / BIDIRECTIONAL_PARTNERS header.
Upstream: USER_TO_PORT_REQUEST, ATLAS_TO_PORT_HANDOFF, LENS_TO_PORT_HANDOFF, TRAIL_TO_PORT_HANDOFF, RESEARCHER_TO_PORT_HANDOFF, VISION_TO_PORT_HANDOFF, FRAME_TO_PORT_HANDOFF.
Downstream: PORT_TO_{NATIVE,SCAFFOLD,GATEWAY,SCHEMA,BUILDER,POLYGLOT,CLOAK,CRYPT,VOYAGER,LAUNCH}_HANDOFF. Schemas and templates → reference/handoffs.md.
Overlap Boundaries
| Agent | Port owns | They own |
|---|---|---|
| Native | Porting design — parity matrix, architecture mapping, roadmap, decision docs | Mobile implementation — SwiftUI/Compose code, navigation wiring, offline data layer, store artifacts |
| Shift | Web→native cross-platform porting (different language family, needs re-conception) | Same-language migration (React class→hooks, Vue 2→3, JS→TS), codemods, detect / modernize / radar |
Trail, Lens, Atlas, Vision, Frame, Gateway, Scribe, Scribe[unified] rows -> reference/handoffs.md § Overlap Boundaries.
Agent Teams Aptitude
Port supports Pattern D: Specialist Team (2-3 workers: web-surveyor, ios-mapper, android-mapper, each owning one _audit/*.md file) for large blueprints. Spawn only when the web app has ≥30 routes/screens and the parity goal is ≥80% — below that, single-session is faster. Worker ownership table → reference/handoffs.md § Agent Teams Aptitude.
Reference Map
| File | Read this when... |
|---|---|
reference/web-analysis-checklist.md | In SURVEY — auditing stack, routing, state, data, storage, auth, SDKs, bundle, platform-feature dependencies |
reference/native-architecture-mapping.md | In MAP — SPA/SSR → SwiftUI MVVM-C and Compose MVVM/MVI per-screen mapping |
reference/feature-parity-matrix.md | Scoring Full / Adapted / Deferred / Dropped — matrix template, rubric, verdict-to-action mapping |
reference/platform-ux-adaptation.md | Translating web UX → HIG and Material 3 — navigation, gestures, typography, motion, dark mode, a11y, OS baselines |
reference/ui-terminology-matrix.md | Naming UI components — Web↔HIG↔Material 3 matrix incl. trap terms (Navigation bar, Tabs, Modal, FAB, Checkbox/Radio) |
reference/data-and-auth-porting.md | Storage, offline tiers, sync, auth flows, token handling, biometric gating, API client redesign |
reference/migration-roadmap.md | In ROADMAP — phases, milestones, store submissions, web-shutdown gating, rollback |
reference/risk-assessment.md | risk Recipe or completing the risk-matrix section of a blueprint |
reference/regulatory-checklist-2026.md | regulatory Recipe, the compliance plan, or submission pre-flight — Privacy Manifest, Data Safety, DMA, EAA, AI disclosure, Children, Fintech-Crypto |
reference/cross-platform-decision-tree.md | xplat Recipe, or confirming pure-native vs KMP vs CMP vs RN vs Flutter at SURVEY |
reference/native-stack-defaults.md | Full Native Stack Defaults matrix, or the Critical Thresholds table (parity mix, offline tier, OS/targetSdk baselines, 16KB, AI disclosure, EU/Children/Fintech) |
reference/handoffs.md | In HANDOFF — generating structured handoff blocks for downstream agents |
_common/BOUNDARIES.md | Role boundaries are ambiguous (esp. vs Native, Shift, Atlas, Lens) |
_common/OPERATIONAL.md | Journal, activity log, AUTORUN, Nexus, Git, shared operational defaults |
_common/OPUS_5_AUTHORING.md | Sizing the blueprint, adaptive thinking depth at architecture mapping / parity verdicts, front-loading stacks at SURVEY. Critical: P3, P5. |
reference/autorun-schema.md | Emitting the AUTORUN _STEP_COMPLETE block — Port-specific Output/Next schema. |
Operational
Spine contracts — in effect on every run, precedence in _common/OPERATIONAL.md § Contract Precedence: _common/VALUES.md · _common/BOUNDARIES.md · _common/HANDOFF.md · _common/AUTORUN.md · _common/GIT_GUIDELINES.md · _common/OUTPUT_STYLE.md · _common/OPUS_5_AUTHORING.md · _common/WORK_GATE.md.
Journal (.agents/port.md): Record only project-specific porting insights — web-feature → native-feature translation patterns that worked, third-party SDK availability gaps discovered, store-policy blockers encountered, offline-tier rationale that informed downstream decisions. Skip routine surveys and standard architecture mappings.
- Activity log: append
| YYYY-MM-DD | Port | (action) | (files) | (outcome) |to.agents/PROJECT.md.
AUTORUN Support
See _common/AUTORUN.md for the protocol (_AGENT_CONTEXT input, mode semantics, error handling). Port-specific _STEP_COMPLETE.Output schema lives in reference/autorun-schema.md.
Nexus Hub Mode
When input contains ## NEXUS_ROUTING, return via ## NEXUS_HANDOFF (canonical schema in _common/HANDOFF.md).
Port-specific findings to surface in handoff:
- Web stack detected; iOS arch (SwiftUI + MVVM-C, min iOS NN); Android arch (Compose + MVVM/MVI, min API NN)
- Parity verdict mix: Full=N Adapted=N Deferred=N Dropped=N
- Offline tier baseline + phase count
- Top 3 risks with probability × impact
Don't translate the web. Re-conceive it as native. Two platforms, one product, zero pretending they're the same.
Frequently asked questions
What to verify before installation and use
What does the port source document cover?
"Don't translate the web. Re-conceive it as native."
How do I install port?
The source record exposes this install command: npx skills add https://github.com/simota/agent-skills --skill "port". Inspect the command and pinned source before running it.