@buivietphi/skill-mobile-mt 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @buivietphi/skill-mobile-mt might be problematic. Click here for more details.

package/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Skill Mobile MT — Agent Rules
2
2
 
3
- > Multi-agent compatibility layer for Claude Code, Codex, Gemini CLI, Kimi, Cursor, Copilot, Windsurf, Antigravity, and all Agent Skills-compatible tools.
3
+ > Multi-agent compatibility layer for Claude Code, Cline, Roo Code, Cursor, Windsurf, Copilot, Codex, Gemini CLI, Kimi, Kilo Code, Kiro, Antigravity, and all Agent Skills-compatible tools.
4
4
 
5
5
  ---
6
6
 
@@ -9,12 +9,16 @@
9
9
  | Agent | How it loads rules | Setup | Think Block |
10
10
  |-------|-------------------|-------|-------------|
11
11
  | Claude Code | `~/.claude/skills/` (auto) | `npx skill-mobile-mt --claude` | `<think>...</think>` |
12
+ | **Cline** | **`.clinerules/` in project root** | **`npx skill-mobile-mt --init cline`** | Inline reasoning |
13
+ | **Roo Code** | **`.roo/rules/` in project root** | **`npx skill-mobile-mt --init roocode`** | Inline reasoning |
14
+ | **Cursor** | **`.cursorrules` in project root** | **`npx skill-mobile-mt --init cursor`** | Inline reasoning |
15
+ | **Windsurf** | **`.windsurfrules` in project root** | **`npx skill-mobile-mt --init windsurf`** | Inline reasoning |
16
+ | **Copilot** | **`.github/copilot-instructions.md`** | **`npx skill-mobile-mt --init copilot`** | `// PLAN:` comments |
12
17
  | Codex | `~/.codex/skills/` (auto) | `npx skill-mobile-mt --codex` | `<think>...</think>` |
13
18
  | Gemini CLI | `~/.gemini/skills/` (auto) | `npx skill-mobile-mt --gemini` | `## Thinking:` block |
14
19
  | Kimi | `~/.kimi/skills/` (manual) | `npx skill-mobile-mt --kimi` | `【思考】` or markdown |
15
- | **Cursor** | **`.cursorrules` in project root** | **`npx skill-mobile-mt --init cursor`** | Inline reasoning |
16
- | **Copilot** | **`.github/copilot-instructions.md`** | **`npx skill-mobile-mt --init copilot`** | `// PLAN:` comments |
17
- | **Windsurf** | **`.windsurfrules` in project root** | **`npx skill-mobile-mt --init windsurf`** | Inline reasoning |
20
+ | **Kilo Code** | **`.kilocode/rules/` in project root** | **`npx skill-mobile-mt --init kilocode`** | Inline reasoning |
21
+ | **Kiro** | **`.kiro/steering/` in project root** | **`npx skill-mobile-mt --init kiro`** | Inline reasoning |
18
22
  | Antigravity | `~/.agents/skills/` (auto) | `npx skill-mobile-mt --antigravity` | Agent-native format |
19
23
 
20
24
  ---
@@ -137,7 +141,7 @@ The agent reads the task, then decides which extra file to load:
137
141
  ```yaml
138
142
  skill:
139
143
  name: skill-mobile-mt
140
- version: "1.2.0"
144
+ version: "1.3.0"
141
145
  author: buivietphi
142
146
  category: engineering
143
147
  tags:
@@ -299,24 +303,51 @@ Priority 6 (ON-DEMAND): shared/common-pitfalls.md — Known issue patterns
299
303
  - Supports both Chinese and English prompts
300
304
  - Think blocks use `【思考】` format
301
305
 
306
+ ### Cline
307
+ - Reads `.clinerules/` directory from project root (also supports `.clinerules` single file)
308
+ - Also reads from `~/.cline/skills/` for global skills
309
+ - Run `npx @buivietphi/skill-mobile-mt --init cline` to generate `.clinerules/mobile-rules.md`
310
+ - Supports conditional rules with YAML frontmatter `paths:` field
311
+
312
+ ### Roo Code
313
+ - Reads `.roo/rules/` directory from project root (recursive, multi-file)
314
+ - Also reads from `~/.roo/skills/` for global skills
315
+ - Supports mode-specific rules: `.roo/rules-code/`, `.roo/rules-architect/`
316
+ - Run `npx @buivietphi/skill-mobile-mt --init roocode` to generate `.roo/rules/mobile-rules.md`
317
+ - Auto-loads `AGENTS.md` from workspace root
318
+
302
319
  ### Cursor
303
- - **Does NOT read from `~/.cursor/skills/`** — reads `.cursorrules` from project root
304
- - Run `npx @buivietphi/skill-mobile-mt --init cursor` in your project to generate `.cursorrules`
320
+ - Reads `.cursorrules` from project root
321
+ - Run `npx @buivietphi/skill-mobile-mt --init cursor` to generate `.cursorrules`
305
322
  - The generated file includes auto-detected framework, rules, and security patterns
306
323
  - Think blocks embedded as inline reasoning in Composer
307
324
 
308
325
  ### GitHub Copilot
309
- - **Does NOT read from `~/.copilot/skills/`** — reads `.github/copilot-instructions.md`
310
- - Run `npx @buivietphi/skill-mobile-mt --init copilot` in your project to generate the file
326
+ - Reads `.github/copilot-instructions.md` from project
327
+ - Run `npx @buivietphi/skill-mobile-mt --init copilot` to generate the file
311
328
  - The generated file includes code patterns, required templates, and rules
312
329
  - Think blocks as `// PLAN:` comments before code
313
330
 
314
331
  ### Windsurf
315
- - **Does NOT read from `~/.windsurf/skills/`** — reads `.windsurfrules` from project root
316
- - Run `npx @buivietphi/skill-mobile-mt --init windsurf` in your project to generate `.windsurfrules`
332
+ - Reads `.windsurfrules` from project root
333
+ - Run `npx @buivietphi/skill-mobile-mt --init windsurf` to generate `.windsurfrules`
317
334
  - The generated file includes coding rules, security rules, and architecture patterns
318
335
  - Think blocks as inline reasoning
319
336
 
337
+ ### Kilo Code
338
+ - Reads `.kilocode/rules/` directory from project root
339
+ - Also reads from `~/.kilocode/rules/` for global rules
340
+ - Supports mode-specific rules: `.kilocode/rules-code/`, `.kilocode/rules-architect/`
341
+ - Run `npx @buivietphi/skill-mobile-mt --init kilocode` to generate `.kilocode/rules/mobile-rules.md`
342
+ - Auto-loads `AGENTS.md` from workspace root
343
+
344
+ ### Kiro (AWS)
345
+ - Reads `.kiro/steering/` directory from project root
346
+ - Also reads from `~/.kiro/steering/` for global steering
347
+ - Uses YAML frontmatter with `inclusion: always|fileMatch|manual|auto`
348
+ - Run `npx @buivietphi/skill-mobile-mt --init kiro` to generate `.kiro/steering/mobile-rules.md`
349
+ - Separate specs system in `.kiro/specs/` for feature development
350
+
320
351
  ### Antigravity
321
352
  - Orchestrator loads based on detected project type
322
353
  - Follows `platform_detection` rules above
@@ -332,12 +363,16 @@ These are separate from the skill files — they go in the user's project, not i
332
363
  | Agent | File | Location |
333
364
  |-------|------|----------|
334
365
  | Claude Code | `CLAUDE.md` | Project root |
366
+ | Cline | `.clinerules/` directory | Project root |
367
+ | Roo Code | `.roo/rules/` directory | Project root |
335
368
  | Cursor | `.cursorrules` | Project root |
336
369
  | Windsurf | `.windsurfrules` | Project root |
337
370
  | GitHub Copilot | `.github/copilot-instructions.md` | `.github/` folder |
338
371
  | Codex | `AGENTS.md` | Project root |
339
372
  | Gemini CLI | `GEMINI.md` | Project root |
340
373
  | Kimi | No auto-load — paste as context | — |
374
+ | Kilo Code | `.kilocode/rules/` directory | Project root |
375
+ | Kiro | `.kiro/steering/` directory | Project root |
341
376
  | Antigravity | YAML `context.rules` field | Antigravity config |
342
377
 
343
378
  **Templates for all agents:** `shared/agent-rules-template.md`
@@ -356,11 +391,14 @@ Copy the relevant section to your project to enable auto-check rules in every se
356
391
  ### Skill directory install (agents that read from skills/)
357
392
 
358
393
  ```bash
359
- # Claude Code (global)
394
+ # Claude Code
360
395
  ~/.claude/skills/skill-mobile-mt/
361
396
 
362
- # Claude Code (project-local)
363
- .claude/skills/skill-mobile-mt/
397
+ # Cline
398
+ ~/.cline/skills/skill-mobile-mt/
399
+
400
+ # Roo Code
401
+ ~/.roo/skills/skill-mobile-mt/
364
402
 
365
403
  # Codex
366
404
  ~/.codex/skills/skill-mobile-mt/
@@ -371,6 +409,12 @@ Copy the relevant section to your project to enable auto-check rules in every se
371
409
  # Kimi
372
410
  ~/.kimi/skills/skill-mobile-mt/
373
411
 
412
+ # Kilo Code
413
+ ~/.kilocode/skills/skill-mobile-mt/
414
+
415
+ # Kiro
416
+ ~/.kiro/skills/skill-mobile-mt/
417
+
374
418
  # Antigravity (shared agent directory)
375
419
  ~/.agents/skills/skill-mobile-mt/
376
420
 
@@ -380,8 +424,7 @@ npx @buivietphi/skill-mobile-mt --path /your/custom/path
380
424
 
381
425
  ### Project-level files (agents that read from project root)
382
426
 
383
- These agents read rules from project-level files, NOT from a skills directory.
384
- Use `--init` to generate them:
427
+ These agents read rules from project-level files. Use `--init` to generate them:
385
428
 
386
429
  ```bash
387
430
  # Generate all project-level files (interactive selector)
@@ -389,9 +432,13 @@ npx @buivietphi/skill-mobile-mt --init
389
432
 
390
433
  # Generate specific agent file
391
434
  npx @buivietphi/skill-mobile-mt --init cursor # → .cursorrules
435
+ npx @buivietphi/skill-mobile-mt --init cline # → .clinerules/mobile-rules.md
436
+ npx @buivietphi/skill-mobile-mt --init roocode # → .roo/rules/mobile-rules.md
392
437
  npx @buivietphi/skill-mobile-mt --init copilot # → .github/copilot-instructions.md
393
438
  npx @buivietphi/skill-mobile-mt --init windsurf # → .windsurfrules
394
- npx @buivietphi/skill-mobile-mt --init all # → all three files
439
+ npx @buivietphi/skill-mobile-mt --init kilocode # → .kilocode/rules/mobile-rules.md
440
+ npx @buivietphi/skill-mobile-mt --init kiro # → .kiro/steering/mobile-rules.md
441
+ npx @buivietphi/skill-mobile-mt --init all # → all files
395
442
  ```
396
443
 
397
444
  **What `--init` does:**
@@ -408,7 +455,7 @@ npx @buivietphi/skill-mobile-mt --init all # → all three files
408
455
  {
409
456
  "id": "skill-mobile-mt",
410
457
  "name": "skill-mobile-mt",
411
- "version": "1.2.0",
458
+ "version": "1.3.0",
412
459
  "author": "buivietphi",
413
460
  "category": "engineering",
414
461
  "description": "Master Senior Mobile Engineer. Pre-built patterns from 18 production apps + project adaptation. Auto-detects language and framework. React Native, Flutter, iOS, Android.",
@@ -416,6 +463,6 @@ npx @buivietphi/skill-mobile-mt --init all # → all three files
416
463
  "source": "buivietphi (MIT)",
417
464
  "platforms": ["react-native", "flutter", "ios", "android"],
418
465
  "languages": ["typescript", "javascript", "dart", "swift", "kotlin", "java"],
419
- "agents": ["claude-code", "codex", "gemini", "kimi", "cursor", "copilot", "windsurf", "antigravity"]
466
+ "agents": ["claude-code", "cline", "roo-code", "cursor", "windsurf", "copilot", "codex", "gemini", "kimi", "kilo-code", "kiro", "antigravity"]
420
467
  }
421
468
  ```
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @buivietphi/skill-mobile-mt
2
2
 
3
- **Master Senior Mobile Engineer** — AI skill for Claude Code, Codex, Gemini CLI, Kimi, Cursor, Copilot, Windsurf, and Antigravity.
3
+ **Master Senior Mobile Engineer** — AI skill for Claude Code, Cline, Roo Code, Cursor, Windsurf, Copilot, Codex, Gemini CLI, Kimi, Kilo Code, Kiro, and Antigravity.
4
4
 
5
5
  Pre-built architecture patterns from **30+ production repos (200k+ GitHub stars)** including Ignite, Expensify, Mattermost, Immich, AppFlowy, Now in Android, TCA + auto-adaptation to your current project.
6
6
 
@@ -24,16 +24,20 @@ npx @buivietphi/skill-mobile-mt --all # All agents
24
24
  npx @buivietphi/skill-mobile-mt --path ./dir # Custom directory
25
25
  ```
26
26
 
27
- ### Generate project-level rules (Cursor, Copilot, Windsurf)
27
+ ### Generate project-level rules
28
28
 
29
- Cursor, Copilot, and Windsurf read rules from **project-level files**, not from a skills directory. Run `--init` inside your project to generate them:
29
+ Cline, Roo Code, Cursor, Windsurf, Copilot, Kilo Code, and Kiro read rules from **project-level files**. Run `--init` inside your project to generate them:
30
30
 
31
31
  ```bash
32
32
  npx @buivietphi/skill-mobile-mt --init # Interactive selector
33
33
  npx @buivietphi/skill-mobile-mt --init cursor # .cursorrules
34
+ npx @buivietphi/skill-mobile-mt --init cline # .clinerules/mobile-rules.md
35
+ npx @buivietphi/skill-mobile-mt --init roocode # .roo/rules/mobile-rules.md
34
36
  npx @buivietphi/skill-mobile-mt --init copilot # .github/copilot-instructions.md
35
37
  npx @buivietphi/skill-mobile-mt --init windsurf # .windsurfrules
36
- npx @buivietphi/skill-mobile-mt --init all # All three files
38
+ npx @buivietphi/skill-mobile-mt --init kilocode # .kilocode/rules/mobile-rules.md
39
+ npx @buivietphi/skill-mobile-mt --init kiro # .kiro/steering/mobile-rules.md
40
+ npx @buivietphi/skill-mobile-mt --init all # All files
37
41
  ```
38
42
 
39
43
  **What `--init` does:**
@@ -84,16 +88,20 @@ You'll see an interactive checkbox — use arrow keys to navigate, space to sele
84
88
  ↑↓ navigate Space toggle A select all Enter confirm Q cancel
85
89
 
86
90
  › ◉ Claude Code [detected]
91
+ ◯ Cline [detected]
92
+ ◯ Roo Code [not found]
87
93
  ◯ Cursor [detected]
88
94
  ◯ Windsurf [not found]
89
95
  ◯ Copilot [not found]
90
96
  ◯ Codex [not found]
91
97
  ◉ Gemini CLI [detected]
92
98
  ◯ Kimi [not found]
99
+ ◯ Kilo Code [not found]
100
+ ◯ Kiro [not found]
93
101
  ◯ Antigravity [not found]
94
102
  ```
95
103
 
96
- ### Step 2 (Cursor/Copilot/Windsurf only): Generate project rules
104
+ ### Step 2: Generate project rules
97
105
 
98
106
  ```bash
99
107
  # cd into your mobile project first
@@ -111,9 +119,13 @@ Output:
111
119
 
112
120
  ✓ .cursorrules → Cursor (auto-detected: Expo (React Native))
113
121
  ✓ .github/copilot-instructions.md → GitHub Copilot
122
+ ✓ .clinerules/mobile-rules.md → Cline
123
+ ✓ .roo/rules/mobile-rules.md → Roo Code
124
+ ✓ .kilocode/rules/mobile-rules.md → Kilo Code
125
+ ✓ .kiro/steering/mobile-rules.md → Kiro
114
126
  ✓ .windsurfrules → Windsurf
115
127
 
116
- ✅ Done! → 3 file(s) generated
128
+ ✅ Done! → 7 file(s) generated
117
129
  ```
118
130
 
119
131
  ### Step 3: Use in your AI agent
@@ -132,27 +144,28 @@ Output:
132
144
  > Add cart feature following the same pattern as ProductList
133
145
  ```
134
146
 
135
- #### Cursor
147
+ #### Cline / Roo Code / Kilo Code
136
148
 
137
- After running `--init cursor`, Cursor auto-loads `.cursorrules` every session. Just open your project and code — Cursor follows the rules automatically.
149
+ After running `--init cline` (or `roocode`, `kilocode`), rules are auto-loaded from the project directory. Just open your project and ask:
138
150
 
139
151
  ```
140
- # In Cursor Composer, just ask:
141
152
  > Create a login screen with email/password
142
153
  > Fix the crash in ProductDetail when images is null
143
154
  > Review this PR for mobile best practices
144
155
  ```
145
156
 
157
+ #### Cursor
158
+
159
+ After running `--init cursor`, Cursor auto-loads `.cursorrules` every session. Just open your project and code normally.
160
+
161
+ #### Kiro (AWS)
162
+
163
+ After running `--init kiro`, Kiro loads `.kiro/steering/mobile-rules.md` as steering context. The generated file uses `inclusion: always` frontmatter.
164
+
146
165
  #### GitHub Copilot
147
166
 
148
167
  After running `--init copilot`, Copilot reads `.github/copilot-instructions.md` as workspace context.
149
168
 
150
- ```
151
- # In VS Code with Copilot Chat:
152
- > Add pagination to the product list
153
- > Handle offline mode for the cart feature
154
- ```
155
-
156
169
  #### Windsurf
157
170
 
158
171
  After running `--init windsurf`, Windsurf auto-loads `.windsurfrules`. Just code normally.
@@ -252,7 +265,7 @@ iOS only?
252
265
  ## Installed Structure
253
266
 
254
267
  ```
255
- ~/.claude/skills/ (or ~/.gemini/skills/, ~/.agents/skills/, etc.)
268
+ ~/.claude/skills/ (or ~/.cline/skills/, ~/.roo/skills/, ~/.gemini/skills/, etc.)
256
269
  └── skill-mobile-mt/
257
270
  ├── SKILL.md Entry point + auto-detect + quality gates
258
271
  ├── AGENTS.md Multi-agent compatibility
@@ -288,6 +301,17 @@ iOS only?
288
301
  your-project/
289
302
  ├── .cursorrules Cursor rules (auto-detected stack)
290
303
  ├── .windsurfrules Windsurf rules (auto-detected stack)
304
+ ├── .clinerules/
305
+ │ └── mobile-rules.md Cline rules (auto-detected stack)
306
+ ├── .roo/
307
+ │ └── rules/
308
+ │ └── mobile-rules.md Roo Code rules (auto-detected stack)
309
+ ├── .kilocode/
310
+ │ └── rules/
311
+ │ └── mobile-rules.md Kilo Code rules (auto-detected stack)
312
+ ├── .kiro/
313
+ │ └── steering/
314
+ │ └── mobile-rules.md Kiro steering (auto-detected stack)
291
315
  └── .github/
292
316
  └── copilot-instructions.md Copilot rules (auto-detected stack)
293
317
  ```
@@ -309,6 +333,27 @@ your-project/
309
333
  - Security vulnerabilities, performance issues, UX problems
310
334
  - Platform-specific detection rules
311
335
 
336
+ ### Grounding Protocol (Anti-Hallucination)
337
+ - **Source hierarchy**: project code > skill files > official docs > production repos > AI knowledge
338
+ - **Mandatory rules**: Read before answer, verify APIs exist, cite sources, say "I don't know" when unsure
339
+ - **No phantom packages**: verify package exists in package.json before suggesting
340
+ - **Version-specific**: check actual SDK version, never assume latest
341
+ - **Grounded bug fix**: read file → find exact line → verify types → cite source
342
+ - **Anti-hallucination checklist**: runs before every AI response
343
+
344
+ ### Docs-First Protocol (Always Use Latest)
345
+ - **WebSearch before coding**: when setting up any library, ALWAYS search official docs first
346
+ - **Never rely on AI memory**: docs change, APIs change, syntax changes between versions
347
+ - **Package installation protocol**: verify exists → check compatibility → search install guide → test both platforms
348
+ - **Common AI traps**: React Navigation v5 vs v7, Firebase v8 vs v9 modular, Swift async/await availability
349
+ - **Version matrix + live verification**: snapshot matrix in skill + mandatory WebSearch for current data
350
+
351
+ ### Security Protocol
352
+ - **7-category security scan** on every feature: secrets, token storage, input validation, network, data protection, auth flow, platform-specific
353
+ - **6 absolute rules**: never store tokens in plain storage, never hardcode secrets, never log sensitive data, never trust deep links, never disable SSL, never commit .env
354
+ - **Platform-specific checks**: iOS ATS + privacy manifest, Android cleartext + ProGuard + exported components
355
+ - **Never skip security**: even for prototypes, internal apps, or "quick fixes"
356
+
312
357
  ### Advanced AI Patterns (from Windsurf, Cursor, Devin, Cline)
313
358
  - **Status Update Pattern**: Brief progress notes before tool use (no monologues)
314
359
  - **Execution Modes**: Discovery → Implementation → Completion (prevents thrashing)
@@ -364,13 +409,17 @@ your-project/
364
409
  | Agent | How it works | Setup command |
365
410
  |-------|-------------|---------------|
366
411
  | **Claude Code** | Reads from `~/.claude/skills/` | `npx skill-mobile-mt --claude` |
412
+ | **Cline** | Reads `.clinerules/` from project root | `npx skill-mobile-mt --init cline` |
413
+ | **Roo Code** | Reads `.roo/rules/` from project root | `npx skill-mobile-mt --init roocode` |
414
+ | **Cursor** | Reads `.cursorrules` from project root | `npx skill-mobile-mt --init cursor` |
415
+ | **Windsurf** | Reads `.windsurfrules` from project root | `npx skill-mobile-mt --init windsurf` |
416
+ | **Copilot** | Reads `.github/copilot-instructions.md` | `npx skill-mobile-mt --init copilot` |
367
417
  | **Codex** | Reads from `~/.codex/skills/` | `npx skill-mobile-mt --codex` |
368
418
  | **Gemini CLI** | Reads from `~/.gemini/skills/` | `npx skill-mobile-mt --gemini` |
369
419
  | **Kimi** | Reads from `~/.kimi/skills/` | `npx skill-mobile-mt --kimi` |
420
+ | **Kilo Code** | Reads `.kilocode/rules/` from project root | `npx skill-mobile-mt --init kilocode` |
421
+ | **Kiro** | Reads `.kiro/steering/` from project root | `npx skill-mobile-mt --init kiro` |
370
422
  | **Antigravity** | Reads from `~/.agents/skills/` | `npx skill-mobile-mt --antigravity` |
371
- | **Cursor** | Reads `.cursorrules` from project root | `npx skill-mobile-mt --init cursor` |
372
- | **Copilot** | Reads `.github/copilot-instructions.md` | `npx skill-mobile-mt --init copilot` |
373
- | **Windsurf** | Reads `.windsurfrules` from project root | `npx skill-mobile-mt --init windsurf` |
374
423
 
375
424
  ## License
376
425
 
package/SKILL.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: skill-mobile-mt
3
3
  description: "Master Senior Mobile Engineer. Patterns from 30+ production repos (200k+ GitHub stars: Ignite, Expensify, Mattermost, Immich, AppFlowy, Now in Android, TCA). Use when: building mobile features, fixing mobile bugs, reviewing mobile code, mobile architecture, React Native, Flutter, iOS Swift, Android Kotlin, mobile performance, mobile security audit, mobile code review, app release. Two modes: (1) default = pre-built production patterns, (2) 'project' = reads current project and adapts."
4
- version: "1.2.0"
4
+ version: "1.3.0"
5
5
  author: buivietphi
6
6
  priority: high
7
7
  user-invocable: true
@@ -48,9 +48,12 @@ allowed-tools:
48
48
  10. [Quality Gate](#quality-gate)
49
49
  11. [Build & Deploy Gates](#build--deploy-gates)
50
50
  12. [Smart Loading](#smart-loading)
51
- 13. [Hard Bans](#hard-bans)
52
- 14. [Mobile Anti-Patterns](#mobile-anti-patterns)
53
- 15. [Reference Files](#reference-files)
51
+ 13. [Grounding Protocol (Anti-Hallucination)](#grounding-protocol-anti-hallucination)
52
+ 14. [Docs-First Protocol (Always Use Latest)](#docs-first-protocol-always-use-latest)
53
+ 15. [Security Protocol](#security-protocol)
54
+ 16. [Hard Bans](#hard-bans)
55
+ 17. [Mobile Anti-Patterns](#mobile-anti-patterns)
56
+ 18. [Reference Files](#reference-files)
54
57
 
55
58
  ---
56
59
 
@@ -101,8 +104,12 @@ USER REQUEST → ACTION (Read tool required)
101
104
  Read: shared/anti-patterns.md
102
105
  then: scan for all violations
103
106
 
104
- "Add package/library" → Read: shared/version-management.md
105
- then: check SDK compat FIRST suggest version
107
+ "Add package/library" → Docs-First Protocol (below) + Read: shared/version-management.md
108
+ then: WebSearch official docs → check SDK compat → install
109
+
110
+ "Setup/configure X library" → Docs-First Protocol (below)
111
+ then: WebSearch "[library] [version] setup guide [year]"
112
+ then: follow official docs, NOT memory
106
113
 
107
114
  "Platform UI / guidelines" → Read: shared/platform-excellence.md
108
115
  then: apply iOS 18+ vs Android 15+ native patterns
@@ -728,6 +735,322 @@ FOR UI CHANGES:
728
735
 
729
736
  ---
730
737
 
738
+ ## Grounding Protocol (Anti-Hallucination)
739
+
740
+ **Every answer MUST be grounded in verifiable sources. NEVER answer from "memory" or "intuition".**
741
+
742
+ ### Source Hierarchy (use in order)
743
+
744
+ ```
745
+ PRIORITY 1: PROJECT CODE (highest trust)
746
+ → Read the actual file → cite file:line
747
+ → "Based on src/services/authService.ts:42, your project uses axios with interceptor"
748
+
749
+ PRIORITY 2: SKILL REFERENCE FILES
750
+ → Read shared/*.md or platform/*.md → cite which file
751
+ → "Per react-native/react-native.md, use FlatList instead of ScrollView for lists"
752
+
753
+ PRIORITY 3: OFFICIAL DOCS (via WebSearch)
754
+ → Search official docs → cite URL
755
+ → "Per React Native docs: https://reactnative.dev/docs/flatlist"
756
+
757
+ PRIORITY 4: PRODUCTION REPOS (from architecture-intelligence.md)
758
+ → Cite which repo the pattern comes from
759
+ → "Ignite (19.7k stars) uses this folder structure for features"
760
+
761
+ ⛔ PRIORITY 5: AI GENERAL KNOWLEDGE (lowest trust — AVOID)
762
+ → Only when Priorities 1-4 return nothing
763
+ → MUST prefix with: "⚠️ Not verified from your project or docs:"
764
+ → MUST add: "Verify this before using in production"
765
+ ```
766
+
767
+ ### Mandatory Rules
768
+
769
+ ```
770
+ RULE 1: READ BEFORE ANSWER
771
+ ⛔ NEVER suggest code changes to a file you haven't Read
772
+ ⛔ NEVER reference a function/class without verifying it exists
773
+ ✅ ALWAYS: Read file → find the code → then suggest fix
774
+
775
+ RULE 2: VERIFY APIs AND LIBRARIES EXIST
776
+ ⛔ NEVER suggest an import without verifying the package is installed
777
+ ⛔ NEVER use a function name without checking it exists in the codebase
778
+ ✅ Check package.json/pubspec.yaml FIRST → then suggest usage
779
+ ✅ Grep for the function → confirm it exists → then reference it
780
+
781
+ RULE 3: CITE YOUR SOURCE
782
+ Every code suggestion MUST cite where it came from:
783
+ - "Cloned from src/features/product/productService.ts" (project code)
784
+ - "Pattern from shared/architecture-intelligence.md" (skill file)
785
+ - "Per React Navigation v6 docs" (official docs)
786
+ ⛔ If you can't cite a source → say "I need to verify this first"
787
+
788
+ RULE 4: SAY "I DON'T KNOW" WHEN YOU DON'T KNOW
789
+ ✅ "I'm not sure about this API. Let me check the docs."
790
+ ✅ "I need to read your codebase to answer this correctly."
791
+ ✅ "This might work but I haven't verified — let me check."
792
+ ⛔ NEVER confidently state something you haven't verified
793
+ ⛔ NEVER invent function signatures, API endpoints, or library names
794
+
795
+ RULE 5: VERSION-SPECIFIC ANSWERS
796
+ ⛔ NEVER suggest code for "React Native" without knowing the version
797
+ ⛔ NEVER assume latest version — check package.json first
798
+ ✅ "Your project uses RN 0.73, so the correct API is..."
799
+ ✅ "Expo SDK 51 uses expo-router v3, here's the correct import..."
800
+
801
+ RULE 6: NO PHANTOM PACKAGES
802
+ Before suggesting ANY npm/pub/pod package:
803
+ ✅ Verify it exists: check package.json or search npm/pub
804
+ ✅ Verify it's compatible: check version against project SDK
805
+ ⛔ NEVER suggest a package name from memory without verification
806
+ ⛔ NEVER mix up similar packages (e.g., @react-navigation vs react-navigation)
807
+ ```
808
+
809
+ ### When Fixing Bugs
810
+
811
+ ```
812
+ GROUNDED BUG FIX PROTOCOL:
813
+
814
+ 1. READ the file with the bug (don't guess from error message alone)
815
+ 2. FIND the exact line causing the issue
816
+ 3. UNDERSTAND the data flow (what calls this? what does it return?)
817
+ 4. VERIFY the fix works with the actual types/interfaces in the project
818
+ 5. CHECK side effects (grep for other files using this function)
819
+ 6. CITE: "Fix in [file]:[line] — [root cause] — [why fix works]"
820
+
821
+ ⛔ NEVER:
822
+ - "The error is probably because..." (guess without reading code)
823
+ - "Try changing X to Y" (without reading the file first)
824
+ - "This should fix it" (without verifying types match)
825
+ ```
826
+
827
+ ### Anti-Hallucination Checklist (run before EVERY response)
828
+
829
+ ```
830
+ Before responding, verify:
831
+ □ Did I READ the relevant files? (not just guess from file names)
832
+ □ Are all function/class names I mentioned REAL? (verified via Grep/Read)
833
+ □ Are all package names I mentioned INSTALLED? (checked package.json)
834
+ □ Are my API suggestions compatible with the project's SDK version?
835
+ □ Did I cite where my solution comes from?
836
+ □ If I'm unsure about something, did I flag it?
837
+
838
+ If ANY checkbox fails → go back and verify before responding.
839
+ ```
840
+
841
+ ---
842
+
843
+ ## Docs-First Protocol (Always Use Latest)
844
+
845
+ **When setting up, installing, or configuring ANY library/SDK/tool — ALWAYS search official docs FIRST.**
846
+
847
+ ### When This Triggers
848
+
849
+ ```
850
+ TRIGGERS:
851
+ - "Install X" / "Add X package" / "Setup X"
852
+ - "Configure X" / "Integrate X"
853
+ - "How to use X" / "What's the API for X"
854
+ - "Upgrade from X to Y"
855
+ - ANY new library, framework feature, or SDK API
856
+
857
+ ⛔ DO NOT answer from memory. Docs change. APIs change. Syntax changes.
858
+ ```
859
+
860
+ ### Docs-First Protocol
861
+
862
+ ```
863
+ STEP 1: CHECK PROJECT VERSION
864
+ Read package.json / pubspec.yaml → get exact version of:
865
+ - Framework (react-native, expo, flutter)
866
+ - Target library (if already installed)
867
+ - Related dependencies
868
+
869
+ STEP 2: SEARCH OFFICIAL DOCS (WebSearch)
870
+ Search: "[library name] [version] official documentation [current year]"
871
+ Examples:
872
+ - "react-navigation v7 installation guide 2026"
873
+ - "expo-camera SDK 52 setup documentation"
874
+ - "riverpod 2.0 getting started flutter"
875
+
876
+ ✅ ALWAYS search with the CURRENT YEAR to get latest docs
877
+ ⛔ NEVER rely on training data — it may be outdated
878
+
879
+ STEP 3: VERIFY API / SYNTAX
880
+ From the docs, confirm:
881
+ - Import path (packages rename, move, split)
882
+ - Function signatures (params change between versions)
883
+ - Configuration format (config files change)
884
+ - Peer dependencies (new requirements)
885
+ - Breaking changes (v6 → v7 migration)
886
+
887
+ STEP 4: APPLY WITH CITATION
888
+ "Per [library] v[X] docs ([URL]):
889
+ import { X } from '[correct-package]';"
890
+
891
+ ⛔ If docs not found → say "I couldn't find current docs, let me try..."
892
+ ⛔ If conflicting info → use the OFFICIAL source, not blog posts
893
+ ```
894
+
895
+ ### Common Outdated Patterns (AI memory traps)
896
+
897
+ ```
898
+ ⛔ AI OFTEN GETS WRONG:
899
+ - React Navigation: v5 syntax vs v6 vs v7 (changed significantly)
900
+ - Expo Router: file-based routing changed between SDK versions
901
+ - Firebase: modular v9+ syntax vs old v8 namespaced syntax
902
+ - Swift: async/await vs completion handlers (iOS 15+ only)
903
+ - Jetpack Compose: API surface changes rapidly between versions
904
+ - React Native: New Architecture (Fabric/TurboModules) vs Bridge
905
+
906
+ ✅ ALWAYS WebSearch for the exact version in the project:
907
+ "react-navigation v7 createStackNavigator" ← correct for v7
908
+ NOT "react-navigation createStackNavigator" ← could return v4/v5 syntax
909
+ ```
910
+
911
+ ### Package Installation Protocol
912
+
913
+ ```
914
+ BEFORE running npm install / flutter pub add / pod install:
915
+
916
+ 1. CHECK if the package exists:
917
+ → WebSearch "[package name] npm" or "[package name] pub.dev"
918
+ → Verify it's maintained (last publish date)
919
+ → Verify it's compatible with project SDK version
920
+
921
+ 2. CHECK the correct install command:
922
+ → WebSearch "[package name] installation [framework version]"
923
+ → Some packages need peer dependencies
924
+ → Some packages need native setup (pod install, gradle sync)
925
+ → Expo packages: use "npx expo install" NOT "npm install"
926
+
927
+ 3. CHECK for breaking changes:
928
+ → If upgrading: WebSearch "[package name] migration guide v[old] to v[new]"
929
+ → Read CHANGELOG for breaking changes
930
+ → Check if config format changed
931
+
932
+ 4. AFTER install:
933
+ → Verify import works (no red squiggles)
934
+ → Run build to check native linking
935
+ → Test on BOTH platforms (iOS + Android)
936
+
937
+ ⛔ NEVER:
938
+ - "npm install [package]" without checking version compatibility
939
+ - Copy import from memory (import paths change between versions)
940
+ - Assume the API is the same as 6 months ago
941
+ - Skip native setup steps (pod install, gradle sync)
942
+ ```
943
+
944
+ ---
945
+
946
+ ## Security Protocol
947
+
948
+ **Security is NOT optional. Every feature MUST pass security checks before completion.**
949
+
950
+ ### Security Scan (run on EVERY feature)
951
+
952
+ ```
953
+ BEFORE marking any feature as done, scan for:
954
+
955
+ 1. 🔴 SECRETS & CREDENTIALS
956
+ □ No hardcoded API keys, tokens, passwords, or secrets
957
+ □ No secrets in source code, comments, or config files
958
+ □ .env files in .gitignore (NEVER committed)
959
+ □ API keys loaded from environment variables or secure config
960
+
961
+ 2. 🔴 TOKEN & AUTH STORAGE
962
+ □ Auth tokens → SecureStore (Expo) / Keychain (iOS) / EncryptedSharedPreferences (Android)
963
+ □ ⛔ NEVER AsyncStorage / SharedPreferences / UserDefaults for tokens
964
+ □ ⛔ NEVER localStorage / sessionStorage for tokens
965
+ □ Refresh tokens stored separately from access tokens
966
+ □ Token cleared on logout (all storage locations)
967
+
968
+ 3. 🔴 INPUT VALIDATION
969
+ □ User input sanitized before display (prevent XSS)
970
+ □ User input validated before API calls (prevent injection)
971
+ □ Deep link parameters validated before navigation
972
+ □ File uploads: validate type, size, content (not just extension)
973
+ □ Search/filter inputs: debounced + length-limited
974
+
975
+ 4. 🔴 NETWORK SECURITY
976
+ □ All API calls over HTTPS (never HTTP)
977
+ □ Certificate pinning for sensitive endpoints (banking, health)
978
+ □ API responses validated (don't trust server blindly)
979
+ □ Timeout on all network requests (prevent hanging)
980
+ □ No sensitive data in URL query parameters (use POST body)
981
+
982
+ 5. 🟠 DATA PROTECTION
983
+ □ PII (name, email, phone, location) never in logs
984
+ □ PII never in analytics events without anonymization
985
+ □ Crash reports don't contain user data
986
+ □ Cache/temp files cleared on logout
987
+ □ Clipboard cleared after paste of sensitive data
988
+
989
+ 6. 🟠 AUTHENTICATION FLOW
990
+ □ Login: rate-limited (prevent brute force)
991
+ □ 401 response → auto-refresh token OR logout
992
+ □ Session timeout after inactivity
993
+ □ Biometric auth: use system APIs (Face ID / fingerprint)
994
+ □ OAuth: validate redirect URI, use PKCE
995
+
996
+ 7. 🟡 PLATFORM-SPECIFIC
997
+ iOS:
998
+ □ App Transport Security (ATS) enabled
999
+ □ Keychain access groups configured correctly
1000
+ □ Privacy manifest (PrivacyInfo.xcprivacy) for required APIs
1001
+ □ NSCameraUsageDescription / NSLocationUsageDescription set
1002
+
1003
+ Android:
1004
+ □ android:usesCleartextTraffic="false" in manifest
1005
+ □ ProGuard/R8 rules for obfuscation in release
1006
+ □ Exported activities/receivers properly restricted
1007
+ □ Backup rules exclude sensitive data (android:allowBackup)
1008
+ ```
1009
+
1010
+ ### Security Non-Negotiables (NEVER bypass)
1011
+
1012
+ ```
1013
+ ⛔ ABSOLUTE RULES — no exceptions, no workarounds:
1014
+
1015
+ 1. NEVER store tokens in plain storage
1016
+ AsyncStorage / SharedPreferences / UserDefaults = ❌ CRITICAL
1017
+ SecureStore / Keychain / EncryptedSharedPreferences = ✅ ONLY
1018
+
1019
+ 2. NEVER hardcode secrets
1020
+ const API_KEY = "sk-..." = ❌ CRITICAL
1021
+ process.env.API_KEY / Config.API_KEY = ✅ ONLY
1022
+
1023
+ 3. NEVER log sensitive data
1024
+ console.log(user.password) = ❌ CRITICAL
1025
+ console.log("Login attempt for user:", user.id) = ✅ OK (ID only)
1026
+
1027
+ 4. NEVER trust deep links
1028
+ navigation.navigate(params.screen) = ❌ CRITICAL (arbitrary navigation)
1029
+ if (ALLOWED_SCREENS.includes(params.screen)) navigate(params.screen) = ✅
1030
+
1031
+ 5. NEVER disable SSL verification
1032
+ rejectUnauthorized: false = ❌ CRITICAL
1033
+ Proper certificate handling = ✅ ONLY
1034
+
1035
+ 6. NEVER commit .env files
1036
+ .env in git = ❌ CRITICAL
1037
+ .env in .gitignore + .env.example committed = ✅
1038
+ ```
1039
+
1040
+ ### When User Asks to "Skip Security" or "Do It Quick"
1041
+
1042
+ ```
1043
+ ✅ Response: "I'll implement it correctly AND quickly. Security doesn't slow down development — it prevents emergency patches later."
1044
+
1045
+ ⛔ NEVER skip security checks because:
1046
+ - "It's just a prototype" → Prototypes become production
1047
+ - "We'll fix it later" → Technical debt compounds
1048
+ - "It's internal only" → Internal apps get attacked too
1049
+ - "Just hardcode it for now" → Secrets leak to git history permanently
1050
+ ```
1051
+
1052
+ ---
1053
+
731
1054
  ## Hard Bans
732
1055
 
733
1056
  **❌ These will CRASH, LEAK, or get REJECTED from app stores:**
package/bin/install.mjs CHANGED
@@ -18,7 +18,11 @@
18
18
  * npx @buivietphi/skill-mobile --init cursor # Generate .cursorrules
19
19
  * npx @buivietphi/skill-mobile --init copilot # Generate .github/copilot-instructions.md
20
20
  * npx @buivietphi/skill-mobile --init windsurf # Generate .windsurfrules
21
- * npx @buivietphi/skill-mobile --init all # Generate all project-level files
21
+ * npx @buivietphi/skill-mobile --init cline # Generate .clinerules/mobile-rules.md
22
+ * npx @buivietphi/skill-mobile --init roocode # Generate .roo/rules/mobile-rules.md
23
+ * npx @buivietphi/skill-mobile --init kilocode # Generate .kilocode/rules/mobile-rules.md
24
+ * npx @buivietphi/skill-mobile --init kiro # Generate .kiro/steering/mobile-rules.md
25
+ * npx @buivietphi/skill-mobile --init all # Generate all project-level files
22
26
  */
23
27
 
24
28
  import { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync } from 'node:fs';
@@ -44,12 +48,16 @@ const SUBFOLDERS = {
44
48
 
45
49
  const AGENTS = {
46
50
  claude: { name: 'Claude Code', dir: join(HOME, '.claude', 'skills'), detect: () => existsSync(join(HOME, '.claude')) },
51
+ cline: { name: 'Cline', dir: join(HOME, '.cline', 'skills'), detect: () => existsSync(join(HOME, '.cline')) },
52
+ roocode: { name: 'Roo Code', dir: join(HOME, '.roo', 'skills'), detect: () => existsSync(join(HOME, '.roo')) },
47
53
  cursor: { name: 'Cursor', dir: join(HOME, '.cursor', 'skills'), detect: () => existsSync(join(HOME, '.cursor')) },
48
54
  windsurf: { name: 'Windsurf', dir: join(HOME, '.windsurf', 'skills'), detect: () => existsSync(join(HOME, '.windsurf')) },
49
55
  copilot: { name: 'Copilot', dir: join(HOME, '.copilot', 'skills'), detect: () => existsSync(join(HOME, '.copilot')) },
50
56
  codex: { name: 'Codex', dir: join(HOME, '.codex', 'skills'), detect: () => existsSync(join(HOME, '.codex')) },
51
57
  gemini: { name: 'Gemini CLI', dir: join(HOME, '.gemini', 'skills'), detect: () => existsSync(join(HOME, '.gemini')) },
52
58
  kimi: { name: 'Kimi', dir: join(HOME, '.kimi', 'skills'), detect: () => existsSync(join(HOME, '.kimi')) },
59
+ kilocode: { name: 'Kilo Code', dir: join(HOME, '.kilocode', 'skills'), detect: () => existsSync(join(HOME, '.kilocode')) },
60
+ kiro: { name: 'Kiro', dir: join(HOME, '.kiro', 'skills'), detect: () => existsSync(join(HOME, '.kiro')) },
53
61
  antigravity: { name: 'Antigravity', dir: join(HOME, '.agents', 'skills'), detect: () => existsSync(join(HOME, '.agents')) },
54
62
  };
55
63
 
@@ -60,14 +68,15 @@ const info = m => log(` ${c.blue}ℹ${c.reset} ${m}`);
60
68
  const fail = m => log(` ${c.red}✗${c.reset} ${m}`);
61
69
 
62
70
  function banner() {
63
- log(`\n${c.bold}${c.cyan} ┌──────────────────────────────────────────────┐`);
64
- log(` │ 📱 @buivietphi/skill-mobile-mt v1.2.0 │`);
65
- log(` │ Master Senior Mobile Engineer │`);
66
- log(` │ │`);
67
- log(` │ Claude · Codex · Gemini · Kimi │`);
68
- log(` │ Antigravity · Cursor · Windsurf · Copilot │`);
69
- log(` │ React Native · Flutter · iOS · Android │`);
70
- log(` └──────────────────────────────────────────────┘${c.reset}\n`);
71
+ log(`\n${c.bold}${c.cyan} ┌──────────────────────────────────────────────────┐`);
72
+ log(` │ 📱 @buivietphi/skill-mobile-mt v1.3.0 │`);
73
+ log(` │ Master Senior Mobile Engineer │`);
74
+ log(` │ │`);
75
+ log(` │ Claude · Cline · Roo Code · Cursor · Windsurf │`);
76
+ log(` │ Copilot · Codex · Gemini · Kimi · Kilo · Kiro │`);
77
+ log(` │ Antigravity │`);
78
+ log(` │ React Native · Flutter · iOS · Android │`);
79
+ log(` └──────────────────────────────────────────────────┘${c.reset}\n`);
71
80
  }
72
81
 
73
82
  function tokenCount(filePath) {
@@ -319,6 +328,265 @@ Full skill with patterns from 30+ production repos: ~/.copilot/skills/skill-mobi
319
328
  `,
320
329
  },
321
330
 
331
+ cline: {
332
+ name: 'Cline',
333
+ file: 'mobile-rules.md',
334
+ dir: '.clinerules',
335
+ generate: (p) => `# ${p.framework} Project — Mobile Rules
336
+ # Generated by @buivietphi/skill-mobile-mt
337
+
338
+ ## Project
339
+ - Framework: ${p.framework}
340
+ - Language: ${p.language}
341
+ - State: ${p.state}
342
+ - Navigation: ${p.nav}
343
+ - API: ${p.api}
344
+ - Package Manager: ${p.pkgMgr}
345
+
346
+ ## Code Style
347
+ - PascalCase for screens and components
348
+ - camelCase for hooks, services, utils
349
+ - Absolute imports with @/ alias (if configured)
350
+
351
+ ## Auto-Check (before every completion)
352
+ - No console.log / print in production code
353
+ - No hardcoded secrets or API keys
354
+ - All async wrapped in try/catch
355
+ - All 4 states: loading / error / empty / success
356
+ - useEffect has cleanup (return () => ...)
357
+ - FlatList (not ScrollView) for dynamic lists > 20 items
358
+ - No implicit 'any' in TypeScript
359
+ - No force unwrap (! / !!) without null check
360
+ - New screens registered in navigator
361
+
362
+ ## Performance
363
+ - React.memo / const widget for expensive components
364
+ - useMemo/useCallback for stable references
365
+ - Images cached and resized
366
+ - No main thread blocking
367
+
368
+ ## Security (non-negotiable)
369
+ - Tokens → SecureStore / Keychain / EncryptedSharedPreferences
370
+ - API calls → HTTPS only
371
+ - Sensitive data → never in logs
372
+ - User input → sanitize before display
373
+ - Deep links → validate before navigation
374
+
375
+ ## Never
376
+ - Change framework or architecture
377
+ - Change state management library
378
+ - Add packages without checking SDK compatibility
379
+ - Mix package managers
380
+ - Use ScrollView for long lists
381
+ - Leave empty catch blocks
382
+ - Store tokens in AsyncStorage / SharedPreferences / UserDefaults
383
+
384
+ ## Architecture
385
+ - Dependencies flow inward: UI → Domain → Data
386
+ - Single responsibility per file (max 300 lines)
387
+ - Feature-based organization preferred
388
+
389
+ ## Reference
390
+ - Full skill: ~/.cline/skills/skill-mobile-mt/
391
+ - Patterns from 30+ production repos (200k+ GitHub stars)
392
+ `,
393
+ },
394
+
395
+ roocode: {
396
+ name: 'Roo Code',
397
+ file: 'mobile-rules.md',
398
+ dir: '.roo/rules',
399
+ generate: (p) => `# ${p.framework} Project — Mobile Rules
400
+ # Generated by @buivietphi/skill-mobile-mt
401
+
402
+ ## Project
403
+ - Framework: ${p.framework}
404
+ - Language: ${p.language}
405
+ - State: ${p.state}
406
+ - Navigation: ${p.nav}
407
+ - API: ${p.api}
408
+ - Package Manager: ${p.pkgMgr}
409
+
410
+ ## Code Style
411
+ - PascalCase for screens and components
412
+ - camelCase for hooks, services, utils
413
+ - Absolute imports with @/ alias (if configured)
414
+
415
+ ## Auto-Check (before every completion)
416
+ - No console.log / print in production code
417
+ - No hardcoded secrets or API keys
418
+ - All async wrapped in try/catch
419
+ - All 4 states: loading / error / empty / success
420
+ - useEffect has cleanup (return () => ...)
421
+ - FlatList (not ScrollView) for dynamic lists > 20 items
422
+ - No implicit 'any' in TypeScript
423
+ - No force unwrap (! / !!) without null check
424
+ - New screens registered in navigator
425
+
426
+ ## Performance
427
+ - React.memo / const widget for expensive components
428
+ - useMemo/useCallback for stable references
429
+ - Images cached and resized
430
+ - No main thread blocking
431
+
432
+ ## Security (non-negotiable)
433
+ - Tokens → SecureStore / Keychain / EncryptedSharedPreferences
434
+ - API calls → HTTPS only
435
+ - Sensitive data → never in logs
436
+ - User input → sanitize before display
437
+ - Deep links → validate before navigation
438
+
439
+ ## Never
440
+ - Change framework or architecture
441
+ - Change state management library
442
+ - Add packages without checking SDK compatibility
443
+ - Mix package managers
444
+ - Use ScrollView for long lists
445
+ - Leave empty catch blocks
446
+ - Store tokens in AsyncStorage / SharedPreferences / UserDefaults
447
+
448
+ ## Architecture
449
+ - Dependencies flow inward: UI → Domain → Data
450
+ - Single responsibility per file (max 300 lines)
451
+ - Feature-based organization preferred
452
+
453
+ ## Reference
454
+ - Full skill: ~/.roo/skills/skill-mobile-mt/
455
+ - Patterns from 30+ production repos (200k+ GitHub stars)
456
+ `,
457
+ },
458
+
459
+ kilocode: {
460
+ name: 'Kilo Code',
461
+ file: 'mobile-rules.md',
462
+ dir: '.kilocode/rules',
463
+ generate: (p) => `# ${p.framework} Project — Mobile Rules
464
+ # Generated by @buivietphi/skill-mobile-mt
465
+
466
+ ## Project
467
+ - Framework: ${p.framework}
468
+ - Language: ${p.language}
469
+ - State: ${p.state}
470
+ - Navigation: ${p.nav}
471
+ - API: ${p.api}
472
+ - Package Manager: ${p.pkgMgr}
473
+
474
+ ## Code Style
475
+ - PascalCase for screens and components
476
+ - camelCase for hooks, services, utils
477
+ - Absolute imports with @/ alias (if configured)
478
+
479
+ ## Auto-Check (before every completion)
480
+ - No console.log / print in production code
481
+ - No hardcoded secrets or API keys
482
+ - All async wrapped in try/catch
483
+ - All 4 states: loading / error / empty / success
484
+ - useEffect has cleanup (return () => ...)
485
+ - FlatList (not ScrollView) for dynamic lists > 20 items
486
+ - No implicit 'any' in TypeScript
487
+ - No force unwrap (! / !!) without null check
488
+ - New screens registered in navigator
489
+
490
+ ## Performance
491
+ - React.memo / const widget for expensive components
492
+ - useMemo/useCallback for stable references
493
+ - Images cached and resized
494
+ - No main thread blocking
495
+
496
+ ## Security (non-negotiable)
497
+ - Tokens → SecureStore / Keychain / EncryptedSharedPreferences
498
+ - API calls → HTTPS only
499
+ - Sensitive data → never in logs
500
+ - User input → sanitize before display
501
+ - Deep links → validate before navigation
502
+
503
+ ## Never
504
+ - Change framework or architecture
505
+ - Change state management library
506
+ - Add packages without checking SDK compatibility
507
+ - Mix package managers
508
+ - Use ScrollView for long lists
509
+ - Leave empty catch blocks
510
+ - Store tokens in AsyncStorage / SharedPreferences / UserDefaults
511
+
512
+ ## Architecture
513
+ - Dependencies flow inward: UI → Domain → Data
514
+ - Single responsibility per file (max 300 lines)
515
+ - Feature-based organization preferred
516
+
517
+ ## Reference
518
+ - Full skill: ~/.kilocode/skills/skill-mobile-mt/
519
+ - Patterns from 30+ production repos (200k+ GitHub stars)
520
+ `,
521
+ },
522
+
523
+ kiro: {
524
+ name: 'Kiro',
525
+ file: 'mobile-rules.md',
526
+ dir: '.kiro/steering',
527
+ generate: (p) => `---
528
+ inclusion: always
529
+ ---
530
+
531
+ # ${p.framework} Project — Mobile Rules
532
+ # Generated by @buivietphi/skill-mobile-mt
533
+
534
+ ## Project
535
+ - Framework: ${p.framework}
536
+ - Language: ${p.language}
537
+ - State: ${p.state}
538
+ - Navigation: ${p.nav}
539
+ - API: ${p.api}
540
+ - Package Manager: ${p.pkgMgr}
541
+
542
+ ## Code Style
543
+ - PascalCase for screens and components
544
+ - camelCase for hooks, services, utils
545
+ - Absolute imports with @/ alias (if configured)
546
+
547
+ ## Auto-Check (before every completion)
548
+ - No console.log / print in production code
549
+ - No hardcoded secrets or API keys
550
+ - All async wrapped in try/catch
551
+ - All 4 states: loading / error / empty / success
552
+ - useEffect has cleanup (return () => ...)
553
+ - FlatList (not ScrollView) for dynamic lists > 20 items
554
+ - No implicit 'any' in TypeScript
555
+ - No force unwrap (! / !!) without null check
556
+ - New screens registered in navigator
557
+
558
+ ## Performance
559
+ - React.memo / const widget for expensive components
560
+ - useMemo/useCallback for stable references
561
+ - Images cached and resized
562
+ - No main thread blocking
563
+
564
+ ## Security (non-negotiable)
565
+ - Tokens → SecureStore / Keychain / EncryptedSharedPreferences
566
+ - API calls → HTTPS only
567
+ - Sensitive data → never in logs
568
+ - User input → sanitize before display
569
+ - Deep links → validate before navigation
570
+
571
+ ## Never
572
+ - Change framework or architecture
573
+ - Change state management library
574
+ - Add packages without checking SDK compatibility
575
+ - Mix package managers
576
+ - Use ScrollView for long lists
577
+ - Leave empty catch blocks
578
+ - Store tokens in AsyncStorage / SharedPreferences / UserDefaults
579
+
580
+ ## Architecture
581
+ - Dependencies flow inward: UI → Domain → Data
582
+ - Single responsibility per file (max 300 lines)
583
+ - Feature-based organization preferred
584
+
585
+ ## Reference
586
+ - Patterns from 30+ production repos (200k+ GitHub stars)
587
+ `,
588
+ },
589
+
322
590
  windsurf: {
323
591
  name: 'Windsurf',
324
592
  file: '.windsurfrules',
@@ -380,7 +648,7 @@ Patterns from 30+ production repos (200k+ GitHub stars)
380
648
  };
381
649
 
382
650
  // Agents that need project-level files (don't just read from skills dir)
383
- const NEEDS_PROJECT_FILE = new Set(['cursor', 'copilot', 'windsurf']);
651
+ const NEEDS_PROJECT_FILE = new Set(['cursor', 'copilot', 'windsurf', 'cline', 'roocode', 'kilocode', 'kiro']);
384
652
 
385
653
  function initProjectFiles(dir, agents) {
386
654
  const project = detectProject(dir);
@@ -671,8 +939,8 @@ async function main() {
671
939
  log('');
672
940
  log(` ${c.cyan}npx @buivietphi/skill-mobile-mt --init${c.reset}`);
673
941
  log('');
674
- log(` This generates ${c.bold}.cursorrules${c.reset}, ${c.bold}.windsurfrules${c.reset}, ${c.bold}.github/copilot-instructions.md${c.reset}`);
675
- log(` with auto-detected project settings.\n`);
942
+ log(` This generates project-level rules files`);
943
+ log(` (${c.bold}.cursorrules${c.reset}, ${c.bold}.clinerules/${c.reset}, ${c.bold}.roo/rules/${c.reset}, etc.) with auto-detected settings.\n`);
676
944
  } else {
677
945
  log('');
678
946
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buivietphi/skill-mobile-mt",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Master Senior Mobile Engineer skill for AI agents. Pre-built patterns from 18 production apps + local project adaptation. React Native, Flutter, iOS, Android. Supports Claude, Gemini, Kimi, Cursor, Copilot, Antigravity.",
5
5
  "author": "buivietphi",
6
6
  "license": "MIT",
@@ -68,6 +68,18 @@
68
68
  ❌ Missing loading / error / empty state (blank screen)
69
69
  ```
70
70
 
71
+ ### Grounding Auto-Fail (AI-generated code)
72
+
73
+ **If the code was generated by AI, also check:**
74
+
75
+ ```
76
+ ❌ Import from a package NOT in package.json / pubspec.yaml
77
+ ❌ Function/method call that doesn't exist in the codebase
78
+ ❌ API endpoint or response shape not verified from actual service code
79
+ ❌ Library version syntax that doesn't match installed version
80
+ ❌ Platform API that doesn't exist in the project's min SDK
81
+ ```
82
+
71
83
  ---
72
84
 
73
85
  ## Review Comment Templates
@@ -66,6 +66,14 @@
66
66
  BUG: [description]
67
67
  FILE: [path]
68
68
 
69
+ <source_verification>
70
+ ⚠️ BEFORE analyzing — verify I have real data:
71
+ - [ ] Read the actual file (not guessing from error message)
72
+ - [ ] Verified function/class names exist (grep)
73
+ - [ ] Checked package versions in package.json/pubspec.yaml
74
+ - [ ] Identified data types from actual code (not assumed)
75
+ </source_verification>
76
+
69
77
  <context_needed>
70
78
  - Read [file] to understand current implementation
71
79
  - Grep for similar patterns: grep "[pattern]" src/
@@ -77,6 +85,7 @@ FILE: [path]
77
85
  - What code is executed?
78
86
  - What values are passed?
79
87
  - What conditions are checked?
88
+ SOURCE: [file:line where the bug is — cite exact location]
80
89
  </root_cause>
81
90
 
82
91
  <fix>
@@ -84,6 +93,7 @@ FILE: [path]
84
93
 
85
94
  WHY IT WORKS:
86
95
  [Explain the fix based on root cause]
96
+ SOURCE: [where this fix pattern comes from — project code / skill file / official docs]
87
97
  </fix>
88
98
 
89
99
  <side_effects>
@@ -165,6 +175,14 @@ BUG: App crashes when tapping product with no images
165
175
  FEATURE: [description]
166
176
  PLATFORM: [React Native / Flutter / iOS / Android]
167
177
 
178
+ <source_verification>
179
+ ⚠️ GROUNDING CHECK:
180
+ - [ ] Scanned actual project structure (not assumed)
181
+ - [ ] Found real reference feature (not imagined)
182
+ - [ ] Will read reference files before cloning pattern
183
+ - [ ] Will verify all imports/packages exist before using
184
+ </source_verification>
185
+
168
186
  STEP 1: SCAN PROJECT
169
187
  - List screens: ls src/screens/
170
188
  - Find similar features: grep -r "useState" src/screens/
@@ -620,6 +638,16 @@ Faster than reading documentation.
620
638
  "Create login screen following pattern in src/screens/ProductScreen
621
639
  using Redux slice from src/store/slices/authSlice
622
640
  with email/password fields + remember me checkbox"
641
+
642
+ ❌ Hallucinated answers (AI "intuition")
643
+ "Use react-native-awesome-picker for this" ← package may not exist
644
+ "Call the fetchUserData() method" ← function may not exist
645
+ "This API returns { data: [...] }" ← response shape may be wrong
646
+
647
+ ✅ Grounded answers (verified from source)
648
+ Read package.json → verify package exists → then suggest usage
649
+ Grep "fetchUser" src/ → find actual function → then reference it
650
+ Read API service file → check actual response shape → then use it
623
651
  ```
624
652
 
625
653
  ---
@@ -9,6 +9,23 @@
9
9
 
10
10
  ---
11
11
 
12
+ ## ⚠️ IMPORTANT: Always WebSearch for Latest
13
+
14
+ **The version matrix below is a SNAPSHOT and may be outdated.**
15
+ **Before installing ANY package or suggesting ANY version:**
16
+
17
+ ```
18
+ 1. WebSearch "[package] latest version [current year]"
19
+ 2. WebSearch "[package] [framework version] compatibility"
20
+ 3. Read the OFFICIAL changelog/migration guide
21
+ 4. Cross-reference with the matrix below
22
+
23
+ ⛔ NEVER rely solely on the matrix below — it was written at a point in time
24
+ ✅ ALWAYS verify with WebSearch for the most current information
25
+ ```
26
+
27
+ ---
28
+
12
29
  ## Version Matrix (React Native / Expo)
13
30
 
14
31
  ### Expo SDK Compatibility