mobile-ai-agents 1.0.23 → 1.0.25
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.
- package/README.md +19 -9
- package/cli/index.js +381 -0
- package/docs/getting-started.md +9 -1
- package/docs/index.html +6 -2
- package/docs/installation.md +16 -1
- package/package.json +4 -4
- package/workflows/issue-to-agent.md +204 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**The complete AI dev team for mobile engineers.**
|
|
4
4
|
|
|
5
|
-
19 personality-driven agents · 52 composable skills ·
|
|
5
|
+
19 personality-driven agents · 52 composable skills · 14 end-to-end workflows
|
|
6
6
|
Android · iOS · Flutter · React Native · Kotlin Multiplatform · Unity · Unreal
|
|
7
7
|
|
|
8
8
|
[](https://www.npmjs.com/package/mobile-ai-agents)
|
|
@@ -30,7 +30,15 @@ Mobile AI Agents is built around **Loop Engineering** and a **mobile-karpathy**
|
|
|
30
30
|
|
|
31
31
|
New to AI coding tools? Start with the step-by-step [Installation Guide](docs/installation.md).
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Starting from a fresh app idea? Generate the starter docs first:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx mobile-ai-agents start
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This asks a few beginner-friendly questions and creates `PRD.md`, `DESIGN.md`, `TASKS.md`, `ROADMAP.md`, and `MOBILE_MEMORY.md` in your project.
|
|
40
|
+
|
|
41
|
+
Fast install path:
|
|
34
42
|
|
|
35
43
|
```bash
|
|
36
44
|
npx mobile-ai-agents install
|
|
@@ -72,11 +80,12 @@ Mobile AI Agents turns AI coding from one-off prompts into a repeatable mobile e
|
|
|
72
80
|
|
|
73
81
|
| Step | What Happens | Command |
|
|
74
82
|
|---|---|---|
|
|
75
|
-
| 1.
|
|
76
|
-
| 2.
|
|
77
|
-
| 3.
|
|
78
|
-
| 4.
|
|
79
|
-
| 5.
|
|
83
|
+
| 1. Start | Turn a raw idea into starter PRD, design, task, roadmap, and memory docs. | `npx mobile-ai-agents start` |
|
|
84
|
+
| 2. Install | Add the agents, skills, and workflows to your AI coding tool. | `npx mobile-ai-agents install` |
|
|
85
|
+
| 3. Open your app | Use it inside an Android, iOS, Flutter, React Native, KMP, Unity, or Unreal project. | Claude Code · Cursor · Windsurf · Copilot · Codex |
|
|
86
|
+
| 4. Run the loop | Tell Mobile Harness to continue from the generated docs. It asks clarification questions before building. | `/mobile-harness` |
|
|
87
|
+
| 5. Build with gates | The loop plans, implements, reviews architecture, checks security, audits performance, verifies UI, and runs QA. | `@MOBILE-HARNESS` |
|
|
88
|
+
| 6. Continue later | Project context, decisions, reports, and next tasks are saved so work can continue across sessions. | Mobile Memory |
|
|
80
89
|
|
|
81
90
|
For focused work, use a specialist directly:
|
|
82
91
|
|
|
@@ -204,7 +213,7 @@ Not sure where to begin? Pick your situation:
|
|
|
204
213
|
|---|---|---|
|
|
205
214
|
| Platform knowledge | Generic | Android · iOS · Flutter · React Native · Unity · Unreal |
|
|
206
215
|
| Agent personalities | None | 19 named specialists with opinions |
|
|
207
|
-
| Real workflows | No |
|
|
216
|
+
| Real workflows | No | 14 end-to-end processes |
|
|
208
217
|
| Real examples | Toy pseudocode | Production code input/output pairs |
|
|
209
218
|
| Installable | Copy-paste | `npx mobile-ai-agents install` |
|
|
210
219
|
| Severity levels | None | CRITICAL · WARNING · INFO |
|
|
@@ -316,7 +325,7 @@ Not sure where to begin? Pick your situation:
|
|
|
316
325
|
|
|
317
326
|
## Workflows
|
|
318
327
|
|
|
319
|
-
|
|
328
|
+
14 end-to-end processes that chain agents and skills together.
|
|
320
329
|
|
|
321
330
|
| Workflow | What It Covers |
|
|
322
331
|
|---|---|
|
|
@@ -330,6 +339,7 @@ Not sure where to begin? Pick your situation:
|
|
|
330
339
|
| `game-level` | Design doc → FORGE/UNREAL → /shader-gen → /game-perf → /unity-tdd → playtest |
|
|
331
340
|
| `new-project-setup` | /grill-mobile → architecture → CI → security baseline → test infrastructure |
|
|
332
341
|
| `mobile-memory-workflow` | Mobile Memory: restore context → capture decisions → generate `MOBILE_MEMORY.md` → hand off across AI tools |
|
|
342
|
+
| `issue-to-agent` | GitHub issue → classify → route to agents/skills → implementation and verification plan |
|
|
333
343
|
| `appforge-workflow` | App idea → PRD → design plan → tasks → implementation gates → QA → Play Store |
|
|
334
344
|
| `mobile-mcp-qa` | Install/launch app → inspect UI → run flows → capture screenshots → QA report |
|
|
335
345
|
| `mobile-harness` | Approved task → implementation → tests → UI match → Mobile MCP QA → report |
|
package/cli/index.js
CHANGED
|
@@ -5,6 +5,7 @@ const https = require('https');
|
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const path = require('path');
|
|
7
7
|
const os = require('os');
|
|
8
|
+
const readline = require('readline');
|
|
8
9
|
|
|
9
10
|
const REPO = 'salmanashraf/mobile-agency';
|
|
10
11
|
const BRANCH = 'main';
|
|
@@ -134,6 +135,7 @@ const WORKFLOWS = {
|
|
|
134
135
|
'app-launch': { file: 'workflows/app-launch.md' },
|
|
135
136
|
'perf-sprint': { file: 'workflows/perf-sprint.md' },
|
|
136
137
|
'mobile-memory-workflow': { file: 'workflows/mobile-memory-workflow.md' },
|
|
138
|
+
'issue-to-agent': { file: 'workflows/issue-to-agent.md' },
|
|
137
139
|
'appforge-workflow': { file: 'workflows/appforge-workflow.md' },
|
|
138
140
|
'mobile-mcp-qa': { file: 'workflows/mobile-mcp-qa.md' },
|
|
139
141
|
'mobile-harness': { file: 'workflows/mobile-harness.md' },
|
|
@@ -484,6 +486,352 @@ async function fetchRemote(remotePath) {
|
|
|
484
486
|
return fetch(`${RAW}/${remotePath}`);
|
|
485
487
|
}
|
|
486
488
|
|
|
489
|
+
function normalizePlatform(input) {
|
|
490
|
+
const value = String(input || '').trim().toLowerCase();
|
|
491
|
+
if (['android', 'kotlin', 'compose', 'jetpack compose'].includes(value)) return 'Android';
|
|
492
|
+
if (['ios', 'swift', 'swiftui'].includes(value)) return 'iOS';
|
|
493
|
+
if (['flutter', 'dart'].includes(value)) return 'Flutter';
|
|
494
|
+
if (['rn', 'react native', 'react-native'].includes(value)) return 'React Native';
|
|
495
|
+
return input ? String(input).trim() : detectPlatform();
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
function defaultStackForPlatform(platform) {
|
|
499
|
+
const value = String(platform || '').toLowerCase();
|
|
500
|
+
if (value.includes('android')) return 'Kotlin + Jetpack Compose + ViewModel + local persistence';
|
|
501
|
+
if (value.includes('ios')) return 'Swift + SwiftUI + SwiftData or local persistence';
|
|
502
|
+
if (value.includes('flutter')) return 'Dart + Flutter + state management + local persistence';
|
|
503
|
+
if (value.includes('react')) return 'React Native + TypeScript + local persistence';
|
|
504
|
+
return 'Platform-native mobile stack';
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
function safeDocValue(value, fallback) {
|
|
508
|
+
const text = String(value || '').trim();
|
|
509
|
+
return text || fallback;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
function askQuestion(rl, label, fallback) {
|
|
513
|
+
const suffix = fallback ? ` (${fallback})` : '';
|
|
514
|
+
return new Promise((resolve) => {
|
|
515
|
+
rl.question(`${label}${suffix}: `, (answer) => {
|
|
516
|
+
resolve(safeDocValue(answer, fallback));
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
async function collectStartProfile(args) {
|
|
522
|
+
const opts = parseOptions(args);
|
|
523
|
+
const interactive = process.stdin.isTTY && process.stdout.isTTY && !opts.yes && !opts['non-interactive'];
|
|
524
|
+
|
|
525
|
+
const defaults = {
|
|
526
|
+
idea: safeDocValue(opts.idea || opts._.join(' '), 'Untitled mobile app'),
|
|
527
|
+
platform: normalizePlatform(opts.platform || detectPlatform()),
|
|
528
|
+
team: safeDocValue(opts.team, 'Solo developer'),
|
|
529
|
+
designs: safeDocValue(opts.designs, 'Create wireframes from scratch'),
|
|
530
|
+
monetization: safeDocValue(opts.monetization, 'Decide during PRD review'),
|
|
531
|
+
stack: safeDocValue(opts.stack, ''),
|
|
532
|
+
};
|
|
533
|
+
defaults.stack = safeDocValue(defaults.stack, defaultStackForPlatform(defaults.platform));
|
|
534
|
+
|
|
535
|
+
if (!interactive) {
|
|
536
|
+
return {
|
|
537
|
+
...defaults,
|
|
538
|
+
force: Boolean(opts.force),
|
|
539
|
+
createdAt: nowIso(),
|
|
540
|
+
projectName: detectProjectName(),
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
545
|
+
console.log('');
|
|
546
|
+
console.log(bold('Mobile AI Agents Start'));
|
|
547
|
+
console.log(dim('Answer a few questions. Press Enter to accept the default.'));
|
|
548
|
+
console.log('');
|
|
549
|
+
|
|
550
|
+
try {
|
|
551
|
+
const idea = await askQuestion(rl, '1. What app idea do you have?', defaults.idea);
|
|
552
|
+
const platform = normalizePlatform(await askQuestion(rl, '2. Which platform are you building for?', defaults.platform));
|
|
553
|
+
const team = await askQuestion(rl, '3. Are you building solo or with a team?', defaults.team);
|
|
554
|
+
const monetization = await askQuestion(rl, '4. AI features, ads, subscription, or one-time purchase?', defaults.monetization);
|
|
555
|
+
const designs = await askQuestion(rl, '5. Do you already have designs?', defaults.designs);
|
|
556
|
+
const stack = await askQuestion(rl, '6. Which tech stack do you want to use?', defaultStackForPlatform(platform));
|
|
557
|
+
return {
|
|
558
|
+
idea,
|
|
559
|
+
platform,
|
|
560
|
+
team,
|
|
561
|
+
designs,
|
|
562
|
+
monetization,
|
|
563
|
+
stack,
|
|
564
|
+
force: Boolean(opts.force),
|
|
565
|
+
createdAt: nowIso(),
|
|
566
|
+
projectName: detectProjectName(),
|
|
567
|
+
};
|
|
568
|
+
} finally {
|
|
569
|
+
rl.close();
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
function renderStarterDocs(profile) {
|
|
574
|
+
const productName = profile.projectName || 'Mobile App';
|
|
575
|
+
const appIdea = profile.idea;
|
|
576
|
+
const platform = profile.platform;
|
|
577
|
+
const stack = profile.stack;
|
|
578
|
+
|
|
579
|
+
return {
|
|
580
|
+
'PRD.md': `# PRD: ${productName}
|
|
581
|
+
|
|
582
|
+
## Product Overview
|
|
583
|
+
${appIdea}
|
|
584
|
+
|
|
585
|
+
## Target Audience
|
|
586
|
+
- Primary users: To be refined during idea discovery.
|
|
587
|
+
- Buyer or decision maker: To be confirmed.
|
|
588
|
+
- First launch market: To be confirmed.
|
|
589
|
+
|
|
590
|
+
## Problem Statement
|
|
591
|
+
Users need a simple, reliable mobile experience for the problem described in the app idea. The MVP should prove the core value before adding advanced features.
|
|
592
|
+
|
|
593
|
+
## Unique Value Proposition
|
|
594
|
+
Deliver the smallest useful version on ${platform}, with clear flows, reliable local behavior, and enough instrumentation to learn from real usage.
|
|
595
|
+
|
|
596
|
+
## Platform And Stack
|
|
597
|
+
- Platform: ${platform}
|
|
598
|
+
- Stack: ${stack}
|
|
599
|
+
- Team: ${profile.team}
|
|
600
|
+
- Designs: ${profile.designs}
|
|
601
|
+
- Monetization: ${profile.monetization}
|
|
602
|
+
|
|
603
|
+
## MVP Scope
|
|
604
|
+
- One primary user flow that demonstrates the app value.
|
|
605
|
+
- Home or dashboard screen.
|
|
606
|
+
- Create or edit flow for the core object.
|
|
607
|
+
- Detail or confirmation screen where useful.
|
|
608
|
+
- Empty, loading, error, and success states.
|
|
609
|
+
- Local persistence if the app needs state after restart.
|
|
610
|
+
|
|
611
|
+
## Non-Goals
|
|
612
|
+
- Complex social features.
|
|
613
|
+
- Payments before the MVP value is validated.
|
|
614
|
+
- Advanced AI automation before the base workflow is usable.
|
|
615
|
+
- Large admin dashboards unless required for launch.
|
|
616
|
+
|
|
617
|
+
## Core Features
|
|
618
|
+
| Feature | Goal | MVP Acceptance |
|
|
619
|
+
|---|---|---|
|
|
620
|
+
| App shell | Provide navigation and baseline theme | App opens to the main flow without dead ends |
|
|
621
|
+
| Core item flow | Let users create or complete the main action | User can finish the primary job in under 60 seconds |
|
|
622
|
+
| Persistence | Keep important user state | App restart does not lose MVP data |
|
|
623
|
+
| Feedback states | Make failures understandable | Empty, loading, and error states are visible and actionable |
|
|
624
|
+
| Basic analytics plan | Know whether the MVP works | Events are documented before release |
|
|
625
|
+
|
|
626
|
+
## User Flow
|
|
627
|
+
1. User opens the app.
|
|
628
|
+
2. User understands the main action from the first screen.
|
|
629
|
+
3. User creates, tracks, or completes the core item.
|
|
630
|
+
4. App saves state.
|
|
631
|
+
5. User can return later and continue.
|
|
632
|
+
|
|
633
|
+
## Functional Requirements
|
|
634
|
+
- The app must support the MVP flow on ${platform}.
|
|
635
|
+
- The app must keep UI state predictable across navigation.
|
|
636
|
+
- The app must avoid placeholder-only screens in the finished MVP.
|
|
637
|
+
- The app must include validation for required user input.
|
|
638
|
+
|
|
639
|
+
## Non-Functional Requirements
|
|
640
|
+
- Fast cold start for a small MVP.
|
|
641
|
+
- Accessible labels for tappable controls.
|
|
642
|
+
- Responsive layout for common phone sizes.
|
|
643
|
+
- No secrets committed to source control.
|
|
644
|
+
- Clear release build configuration.
|
|
645
|
+
|
|
646
|
+
## Analytics Events
|
|
647
|
+
| Event | When It Fires | Properties |
|
|
648
|
+
|---|---|---|
|
|
649
|
+
| app_opened | App becomes usable | platform, version |
|
|
650
|
+
| primary_action_started | User starts the main MVP flow | source_screen |
|
|
651
|
+
| primary_action_completed | User completes the main MVP flow | duration_bucket |
|
|
652
|
+
| error_seen | User sees a blocking error | screen, error_type |
|
|
653
|
+
|
|
654
|
+
## Risks
|
|
655
|
+
- Scope grows before the MVP proves value.
|
|
656
|
+
- Design decisions are too generic for the target audience.
|
|
657
|
+
- Persistence or API choices are made before constraints are clear.
|
|
658
|
+
- Release work is delayed until the end.
|
|
659
|
+
|
|
660
|
+
## Open Questions
|
|
661
|
+
- Who is the exact first user?
|
|
662
|
+
- What is the one action they must complete?
|
|
663
|
+
- Does the MVP need login?
|
|
664
|
+
- Does the MVP need offline support?
|
|
665
|
+
- What must be true before publishing a test build?
|
|
666
|
+
|
|
667
|
+
## Next Step
|
|
668
|
+
Review this PRD, answer the open questions, then run /mobile-harness and ask it to build only the first approved task.
|
|
669
|
+
`,
|
|
670
|
+
|
|
671
|
+
'DESIGN.md': `# Design Plan: ${productName}
|
|
672
|
+
|
|
673
|
+
## Design Direction
|
|
674
|
+
Design should be chosen before implementation. Pick one direction and keep the MVP consistent:
|
|
675
|
+
|
|
676
|
+
| Direction | Best For | Notes |
|
|
677
|
+
|---|---|---|
|
|
678
|
+
| Clean utility | Productivity, finance, habit, tracker, internal tools | Dense, calm, easy to scan |
|
|
679
|
+
| Consumer friendly | Wellness, education, lifestyle | Warmer copy, clearer onboarding |
|
|
680
|
+
| Premium minimal | Paid tools, pro users | Strong typography, restrained color, polished empty states |
|
|
681
|
+
| Game-like | Games, learning loops, motivation | More motion, stronger feedback, richer assets |
|
|
682
|
+
|
|
683
|
+
Selected direction: To be confirmed.
|
|
684
|
+
|
|
685
|
+
## Screen List
|
|
686
|
+
| Screen | Purpose | Required States |
|
|
687
|
+
|---|---|---|
|
|
688
|
+
| Home | Show the primary object or action | Empty, populated, loading, error |
|
|
689
|
+
| Create/Edit | Capture required input | Default, validation error, saving |
|
|
690
|
+
| Detail/Result | Show saved item or completion | Success, missing data |
|
|
691
|
+
| Settings/About | Basic app controls if needed | Default |
|
|
692
|
+
|
|
693
|
+
## Wireframe Notes
|
|
694
|
+
- Put the primary action in the first viewport.
|
|
695
|
+
- Avoid marketing copy inside the app experience.
|
|
696
|
+
- Keep the MVP flow reachable in one or two taps.
|
|
697
|
+
- Use platform-native navigation patterns unless the product has a strong reason not to.
|
|
698
|
+
|
|
699
|
+
## Design System
|
|
700
|
+
- Color: choose one primary action color, one surface color, one danger color, and neutral text colors.
|
|
701
|
+
- Typography: use system fonts unless brand requirements exist.
|
|
702
|
+
- Spacing: use an 8-point spacing rhythm.
|
|
703
|
+
- Components: buttons, text fields, list rows/cards, dialogs, snackbars/toasts, empty state, loading state, error state.
|
|
704
|
+
|
|
705
|
+
## Accessibility
|
|
706
|
+
- Every tappable control needs a clear label.
|
|
707
|
+
- Text should pass contrast checks against its background.
|
|
708
|
+
- Important actions should not rely on color alone.
|
|
709
|
+
- Screens must remain usable with larger text settings.
|
|
710
|
+
|
|
711
|
+
## Screenshot Plan
|
|
712
|
+
Capture these once the MVP exists:
|
|
713
|
+
|
|
714
|
+
| Screenshot | What To Prove |
|
|
715
|
+
|---|---|
|
|
716
|
+
| Home populated | The app value is visible |
|
|
717
|
+
| Create/Edit flow | The main action works |
|
|
718
|
+
| Empty state | New users are guided |
|
|
719
|
+
| Error or validation state | Failure is understandable |
|
|
720
|
+
`,
|
|
721
|
+
|
|
722
|
+
'TASKS.md': `# Tasks: ${productName}
|
|
723
|
+
|
|
724
|
+
## Implementation Rules
|
|
725
|
+
- Do not implement before PRD and design direction are reviewed.
|
|
726
|
+
- Build one task at a time.
|
|
727
|
+
- Compare each task against PRD.md and DESIGN.md before marking complete.
|
|
728
|
+
- Run available tests after each implementation task.
|
|
729
|
+
- Save important decisions with Mobile Memory.
|
|
730
|
+
|
|
731
|
+
## MVP Tasks
|
|
732
|
+
| ID | Title | Goal | Dependencies | Acceptance Criteria | QA Checklist | Complexity |
|
|
733
|
+
|---|---|---|---|---|---|---|
|
|
734
|
+
| T1 | Confirm MVP scope | Lock the first shippable flow | PRD.md | Open questions answered and one primary flow selected | PRD reviewed | S |
|
|
735
|
+
| T2 | Create design direction | Choose visual style and screen states | DESIGN.md | Direction selected and screen list finalized | Layout can be compared later | S |
|
|
736
|
+
| T3 | Build app shell | Create baseline navigation/theme | T1, T2 | App opens to Home with no placeholder dead ends | Launch app, rotate if supported | M |
|
|
737
|
+
| T4 | Build core flow | Implement the main user action | T3 | User can complete primary action | Manual flow test, restart test | M |
|
|
738
|
+
| T5 | Add persistence | Keep MVP data after restart | T4 | Data survives app restart | Create data, kill app, reopen | M |
|
|
739
|
+
| T6 | Add states and validation | Handle empty/loading/error/input errors | T4 | States match DESIGN.md | Trigger each state | M |
|
|
740
|
+
| T7 | Audit and verify | Run clean code, security, performance, UI, and PRD checks | T3-T6 | Findings are fixed or documented | Tests and screenshots captured | M |
|
|
741
|
+
|
|
742
|
+
## Current Task
|
|
743
|
+
T1 - Confirm MVP scope.
|
|
744
|
+
`,
|
|
745
|
+
|
|
746
|
+
'ROADMAP.md': `# Roadmap: ${productName}
|
|
747
|
+
|
|
748
|
+
## Phase 0 - Product Clarity
|
|
749
|
+
- Review PRD.md.
|
|
750
|
+
- Answer open questions.
|
|
751
|
+
- Select design direction in DESIGN.md.
|
|
752
|
+
- Confirm the first MVP flow.
|
|
753
|
+
|
|
754
|
+
## Phase 1 - MVP Build
|
|
755
|
+
- App shell.
|
|
756
|
+
- Core flow.
|
|
757
|
+
- Persistence.
|
|
758
|
+
- Empty/loading/error states.
|
|
759
|
+
- Basic accessibility.
|
|
760
|
+
|
|
761
|
+
## Phase 2 - Verification Loop
|
|
762
|
+
- PRD verification.
|
|
763
|
+
- Clean-code audit.
|
|
764
|
+
- Security audit.
|
|
765
|
+
- Performance audit.
|
|
766
|
+
- UI match review.
|
|
767
|
+
- Device or simulator QA.
|
|
768
|
+
|
|
769
|
+
## Phase 3 - Release Prep
|
|
770
|
+
- Store listing draft.
|
|
771
|
+
- Screenshot plan.
|
|
772
|
+
- Privacy/data safety checklist.
|
|
773
|
+
- Release notes.
|
|
774
|
+
- Internal test build.
|
|
775
|
+
|
|
776
|
+
## Later
|
|
777
|
+
- Monetization experiments: ${profile.monetization}
|
|
778
|
+
- AI/API features only after MVP workflow is stable.
|
|
779
|
+
- Growth and ASO iteration.
|
|
780
|
+
`,
|
|
781
|
+
|
|
782
|
+
[MOBILE_MEMORY_FILE]: `# Mobile Memory
|
|
783
|
+
|
|
784
|
+
## Instant Resume
|
|
785
|
+
Project: ${productName}
|
|
786
|
+
Idea: ${appIdea}
|
|
787
|
+
Platform: ${platform}
|
|
788
|
+
Stack: ${stack}
|
|
789
|
+
Team: ${profile.team}
|
|
790
|
+
Created: ${profile.createdAt}
|
|
791
|
+
|
|
792
|
+
## Current State
|
|
793
|
+
Starter planning docs were generated by:
|
|
794
|
+
|
|
795
|
+
\`\`\`bash
|
|
796
|
+
npx mobile-ai-agents start
|
|
797
|
+
\`\`\`
|
|
798
|
+
|
|
799
|
+
Generated files:
|
|
800
|
+
- PRD.md
|
|
801
|
+
- DESIGN.md
|
|
802
|
+
- TASKS.md
|
|
803
|
+
- ROADMAP.md
|
|
804
|
+
- MOBILE_MEMORY.md
|
|
805
|
+
|
|
806
|
+
## Decisions
|
|
807
|
+
| Decision | Reason |
|
|
808
|
+
|---|---|
|
|
809
|
+
| Use ${platform} | User selected or project detection inferred this platform |
|
|
810
|
+
| Start with docs before code | Mobile Harness should verify work against PRD and design |
|
|
811
|
+
|
|
812
|
+
## Next Action
|
|
813
|
+
Review PRD.md and DESIGN.md, answer open questions, then run /mobile-harness to implement T1/T2 before code work starts.
|
|
814
|
+
|
|
815
|
+
## Resume Prompt
|
|
816
|
+
Read MOBILE_MEMORY.md, PRD.md, DESIGN.md, TASKS.md, and ROADMAP.md. Continue from the Next Action and do not implement code until PRD and design direction are approved.
|
|
817
|
+
`,
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
function writeStarterDocs(files, force) {
|
|
822
|
+
const results = [];
|
|
823
|
+
for (const [filename, content] of Object.entries(files)) {
|
|
824
|
+
const dest = path.join(process.cwd(), filename);
|
|
825
|
+
if (fs.existsSync(dest) && !force) {
|
|
826
|
+
results.push({ filename, status: 'skipped' });
|
|
827
|
+
continue;
|
|
828
|
+
}
|
|
829
|
+
fs.writeFileSync(dest, content);
|
|
830
|
+
results.push({ filename, status: 'created' });
|
|
831
|
+
}
|
|
832
|
+
return results;
|
|
833
|
+
}
|
|
834
|
+
|
|
487
835
|
// Collect all agent/skill/workflow names and their remote paths for a platform set
|
|
488
836
|
function collectItems(platforms) {
|
|
489
837
|
const agentNames = new Set();
|
|
@@ -722,6 +1070,34 @@ async function installForCodex(platforms) {
|
|
|
722
1070
|
|
|
723
1071
|
// ─── Commands ────────────────────────────────────────────────────────────────
|
|
724
1072
|
|
|
1073
|
+
async function cmdStart(args) {
|
|
1074
|
+
const profile = await collectStartProfile(args);
|
|
1075
|
+
const files = renderStarterDocs(profile);
|
|
1076
|
+
const results = writeStarterDocs(files, profile.force);
|
|
1077
|
+
|
|
1078
|
+
console.log('');
|
|
1079
|
+
console.log(bold('Mobile AI Agents Start'));
|
|
1080
|
+
console.log(dim(` Project : ${profile.projectName}`));
|
|
1081
|
+
console.log(dim(` Platform: ${profile.platform}`));
|
|
1082
|
+
console.log('');
|
|
1083
|
+
|
|
1084
|
+
for (const result of results) {
|
|
1085
|
+
if (result.status === 'created') {
|
|
1086
|
+
ok(`${result.filename} created`);
|
|
1087
|
+
} else {
|
|
1088
|
+
log(`${yellow('skipped')} ${result.filename} already exists (use --force to overwrite)`);
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
console.log('');
|
|
1093
|
+
console.log(bold('Next'));
|
|
1094
|
+
console.log(' 1. Review PRD.md and answer the open questions.');
|
|
1095
|
+
console.log(' 2. Choose one design direction in DESIGN.md.');
|
|
1096
|
+
console.log(' 3. Run /mobile-harness and ask it to continue from TASKS.md.');
|
|
1097
|
+
console.log(' 4. Save important decisions with npx mobile-ai-agents memory capture.');
|
|
1098
|
+
console.log('');
|
|
1099
|
+
}
|
|
1100
|
+
|
|
725
1101
|
async function cmdInstall(args) {
|
|
726
1102
|
let platform = 'all';
|
|
727
1103
|
let tool = 'claude';
|
|
@@ -1003,6 +1379,7 @@ function cmdList() {
|
|
|
1003
1379
|
|
|
1004
1380
|
console.log('');
|
|
1005
1381
|
console.log(bold(' INSTALL'));
|
|
1382
|
+
console.log(dim(' npx mobile-ai-agents start # guided starter docs'));
|
|
1006
1383
|
console.log(dim(' npx mobile-ai-agents install # everything (claude)'));
|
|
1007
1384
|
console.log(dim(' npx mobile-ai-agents install --platform android # android only'));
|
|
1008
1385
|
console.log(dim(' npx mobile-ai-agents install --tool cursor # cursor only'));
|
|
@@ -1022,6 +1399,7 @@ function cmdHelp() {
|
|
|
1022
1399
|
console.log(bold(' npx mobile-ai-agents <command> [options]'));
|
|
1023
1400
|
console.log('');
|
|
1024
1401
|
console.log(' Commands:');
|
|
1402
|
+
console.log(` ${bold('start')} Guided setup that creates PRD/design/tasks/roadmap`);
|
|
1025
1403
|
console.log(` ${bold('install')} Install agents, skills, and workflows`);
|
|
1026
1404
|
console.log(` ${bold('add')} agent|skill|workflow <name> Install a single item`);
|
|
1027
1405
|
console.log(` ${bold('memory')} init|capture|search|... Local Mobile Memory store`);
|
|
@@ -1048,6 +1426,8 @@ function cmdHelp() {
|
|
|
1048
1426
|
console.log(' codex All agents/skills/workflows → AGENTS.md');
|
|
1049
1427
|
console.log('');
|
|
1050
1428
|
console.log(' Examples:');
|
|
1429
|
+
console.log(dim(' npx mobile-ai-agents start'));
|
|
1430
|
+
console.log(dim(' npx mobile-ai-agents start --platform flutter --idea "Habit tracker"'));
|
|
1051
1431
|
console.log(dim(' npx mobile-ai-agents install'));
|
|
1052
1432
|
console.log(dim(' npx mobile-ai-agents install --platform android'));
|
|
1053
1433
|
console.log(dim(' npx mobile-ai-agents install --platform ios --tool cursor'));
|
|
@@ -1069,6 +1449,7 @@ async function main() {
|
|
|
1069
1449
|
|
|
1070
1450
|
try {
|
|
1071
1451
|
switch (cmd) {
|
|
1452
|
+
case 'start': await cmdStart(args); break;
|
|
1072
1453
|
case 'install': await cmdInstall(args); break;
|
|
1073
1454
|
case 'add': await cmdAdd(args); break;
|
|
1074
1455
|
case 'memory': cmdMemory(args); break;
|
package/docs/getting-started.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Getting Started
|
|
2
2
|
|
|
3
|
-
This guide walks you through using
|
|
3
|
+
This guide walks you through using Mobile AI Agents for the first time.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -8,6 +8,14 @@ This guide walks you through using your first agent from the Mobile Dev Skill Ag
|
|
|
8
8
|
|
|
9
9
|
Mobile AI Agents works best when you choose the engineering loop before choosing an agent.
|
|
10
10
|
|
|
11
|
+
If you are starting from a raw app idea, run this inside your project folder first:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx mobile-ai-agents start
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This creates `PRD.md`, `DESIGN.md`, `TASKS.md`, `ROADMAP.md`, and `MOBILE_MEMORY.md`. After reviewing those files, install the agents and run `/mobile-harness` to continue from the approved plan.
|
|
18
|
+
|
|
11
19
|
| I need to... | Start with this loop | Good first tool |
|
|
12
20
|
|---|---|---|
|
|
13
21
|
| Plan an app or feature | Planning | `@APPFORGE` |
|
package/docs/index.html
CHANGED
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
<div class="stats">
|
|
338
338
|
<div class="stat"><div class="stat-num">19</div><div class="stat-label">Agents</div></div>
|
|
339
339
|
<div class="stat"><div class="stat-num">35</div><div class="stat-label">Skills</div></div>
|
|
340
|
-
<div class="stat"><div class="stat-num">
|
|
340
|
+
<div class="stat"><div class="stat-num">14</div><div class="stat-label">Workflows</div></div>
|
|
341
341
|
<div class="stat"><div class="stat-num">7</div><div class="stat-label">Plugin Tracks</div></div>
|
|
342
342
|
</div>
|
|
343
343
|
</div>
|
|
@@ -549,7 +549,7 @@
|
|
|
549
549
|
<section id="workflows">
|
|
550
550
|
<div class="container">
|
|
551
551
|
<div class="section-label">Workflows</div>
|
|
552
|
-
<h2>
|
|
552
|
+
<h2>14 end-to-end processes.</h2>
|
|
553
553
|
<p class="section-sub">The differentiator. No other mobile AI toolkit has these — full sequences that chain agents and skills from ticket to store.</p>
|
|
554
554
|
|
|
555
555
|
<div class="workflow-list">
|
|
@@ -589,6 +589,10 @@
|
|
|
589
589
|
<div class="workflow-name">new-project-setup</div>
|
|
590
590
|
<div class="workflow-desc">/grill-mobile → architecture → CI from day one → SENTINEL baseline → test infrastructure</div>
|
|
591
591
|
</div>
|
|
592
|
+
<div class="workflow-item">
|
|
593
|
+
<div class="workflow-name">issue-to-agent</div>
|
|
594
|
+
<div class="workflow-desc">GitHub issue → classify → route to agents/skills → implementation and verification plan</div>
|
|
595
|
+
</div>
|
|
592
596
|
</div>
|
|
593
597
|
</div>
|
|
594
598
|
</section>
|
package/docs/installation.md
CHANGED
|
@@ -6,7 +6,21 @@ This guide is for first-time users who want Mobile AI Agents installed in their
|
|
|
6
6
|
|
|
7
7
|
## Quick Start
|
|
8
8
|
|
|
9
|
-
If you are
|
|
9
|
+
If you are starting from only an app idea, create the starter project docs first:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx mobile-ai-agents start
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
It asks for your idea, platform, team, design status, monetization plan, and stack. Then it creates:
|
|
16
|
+
|
|
17
|
+
- `PRD.md`
|
|
18
|
+
- `DESIGN.md`
|
|
19
|
+
- `TASKS.md`
|
|
20
|
+
- `ROADMAP.md`
|
|
21
|
+
- `MOBILE_MEMORY.md`
|
|
22
|
+
|
|
23
|
+
If you already have a project and just want the AI tools installed, use the default install:
|
|
10
24
|
|
|
11
25
|
```bash
|
|
12
26
|
npx mobile-ai-agents install
|
|
@@ -22,6 +36,7 @@ This installs Mobile AI Agents for Claude Code. It adds agents, skills, and work
|
|
|
22
36
|
After install, open Claude Code in your app project and try:
|
|
23
37
|
|
|
24
38
|
```text
|
|
39
|
+
/mobile-harness
|
|
25
40
|
/flutter-review
|
|
26
41
|
/android-tdd
|
|
27
42
|
/crasher
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mobile-ai-agents",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.25",
|
|
4
4
|
"description": "AI agents, skills, and Loop Engineering workflows for building, testing, auditing, and releasing mobile apps.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"mobile-ai-agents": "cli/index.js",
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
"license": "MIT",
|
|
46
46
|
"repository": {
|
|
47
47
|
"type": "git",
|
|
48
|
-
"url": "git+https://github.com/salmanashraf/mobile-
|
|
48
|
+
"url": "git+https://github.com/salmanashraf/mobile-ai-agents.git"
|
|
49
49
|
},
|
|
50
|
-
"homepage": "https://github.com/salmanashraf/mobile-
|
|
50
|
+
"homepage": "https://github.com/salmanashraf/mobile-ai-agents",
|
|
51
51
|
"bugs": {
|
|
52
|
-
"url": "https://github.com/salmanashraf/mobile-
|
|
52
|
+
"url": "https://github.com/salmanashraf/mobile-ai-agents/issues"
|
|
53
53
|
},
|
|
54
54
|
"engines": {
|
|
55
55
|
"node": ">=18.0.0"
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Workflow - Issue to Agent
|
|
2
|
+
|
|
3
|
+
**Type:** GitHub issue execution planning
|
|
4
|
+
**Agents Used:** APPFORGE, CRASHER, FREEZE, RETAINER, AXIOM / SWIFT / DART / BRIDGE, SENTINEL, PERF, MOBILE-HARNESS, PIPELINE, LAUNCHPAD, SCRIBE
|
|
5
|
+
**Skills Used:** /crash-triage, /anr-investigation, /memory-leak-investigation, /perf-audit, /security-audit, /security-scan, /clean-code-audit, /prd-verification, /mobile-mcp-qa, /release-prep, /store-listing
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to Use
|
|
10
|
+
|
|
11
|
+
Use this when a GitHub issue should become an executable Mobile AI Agents plan.
|
|
12
|
+
|
|
13
|
+
The workflow accepts feature requests, crashes, ANRs, memory leaks, UI bugs, security issues, release work, store listing tasks, CI/CD work, and documentation tasks.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Inputs
|
|
18
|
+
|
|
19
|
+
- Issue title
|
|
20
|
+
- Issue body
|
|
21
|
+
- Labels
|
|
22
|
+
- Comments or maintainer notes
|
|
23
|
+
- Linked PRD, design, logs, crash reports, screenshots, or source files
|
|
24
|
+
- Target platform, if known
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Classification
|
|
29
|
+
|
|
30
|
+
Choose exactly one primary issue type:
|
|
31
|
+
|
|
32
|
+
| Issue Type | Signals | Recommended Start |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| New feature | User story, acceptance criteria, screens | APPFORGE or MOBILE-HARNESS |
|
|
35
|
+
| Crash | Stacktrace, exception, crash monitor link | /crash-triage then CRASHER |
|
|
36
|
+
| ANR | Main thread blocked, Play Console ANR | /anr-investigation then FREEZE |
|
|
37
|
+
| Memory leak | LeakCanary, retained object, heap growth | /memory-leak-investigation then RETAINER |
|
|
38
|
+
| UI bug | Screenshot mismatch, layout, accessibility | Platform reviewer plus /mobile-mcp-qa |
|
|
39
|
+
| Performance issue | Startup, jank, slow screen, battery, size | /perf-audit then PERF |
|
|
40
|
+
| Security issue | Secrets, auth, storage, network, WebView | /security-scan or /security-audit then SENTINEL |
|
|
41
|
+
| Release task | Signing, rollout, release readiness | /release-prep then PIPELINE or SCRIBE |
|
|
42
|
+
| Store listing | ASO, copy, screenshots, metadata | /store-listing then LAUNCHPAD |
|
|
43
|
+
| CI/CD task | GitHub Actions, Bitrise, Fastlane | PIPELINE |
|
|
44
|
+
| Documentation | Guide, README, integration docs | MOBILE-HARNESS with docs scope |
|
|
45
|
+
|
|
46
|
+
If the issue has multiple types, pick the one that blocks delivery first and list secondary types under `Risks`.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Steps
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
1. LOAD ISSUE
|
|
54
|
+
-> Read title, body, labels, comments, linked artifacts, and acceptance criteria.
|
|
55
|
+
|
|
56
|
+
2. CLASSIFY
|
|
57
|
+
-> Choose one primary issue type from the classification table.
|
|
58
|
+
-> Identify platform: Android, iOS, Flutter, React Native, Kotlin Multiplatform, Unity, Unreal, or Cross-platform.
|
|
59
|
+
|
|
60
|
+
3. ROUTE
|
|
61
|
+
-> Select the smallest agent and skill set that can solve the issue.
|
|
62
|
+
-> Prefer specialist agents for evidence-heavy bugs.
|
|
63
|
+
|
|
64
|
+
4. PLAN
|
|
65
|
+
-> Identify likely files, required evidence, implementation steps, verification, and risks.
|
|
66
|
+
-> If product or credential decisions are missing, mark the plan BLOCKED.
|
|
67
|
+
|
|
68
|
+
5. EXECUTE ONE TASK
|
|
69
|
+
-> Implement the smallest safe change.
|
|
70
|
+
-> Do not expand scope beyond the issue acceptance criteria.
|
|
71
|
+
|
|
72
|
+
6. VERIFY
|
|
73
|
+
-> Run tests, lint, build, or documentation checks that match the changed files.
|
|
74
|
+
-> For UI/device bugs, use /mobile-mcp-qa when a target is available.
|
|
75
|
+
|
|
76
|
+
7. REPORT
|
|
77
|
+
-> Produce ISSUE EXECUTION PLAN before coding or ISSUE EXECUTION REPORT after coding.
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Output Format
|
|
83
|
+
|
|
84
|
+
Use this before implementation:
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
ISSUE EXECUTION PLAN
|
|
88
|
+
====================
|
|
89
|
+
Issue:
|
|
90
|
+
Issue type:
|
|
91
|
+
Platform:
|
|
92
|
+
Recommended agent:
|
|
93
|
+
Recommended skills:
|
|
94
|
+
Files likely involved:
|
|
95
|
+
- <path or area>
|
|
96
|
+
|
|
97
|
+
Implementation plan:
|
|
98
|
+
1. <step>
|
|
99
|
+
2. <step>
|
|
100
|
+
3. <step>
|
|
101
|
+
|
|
102
|
+
Verification plan:
|
|
103
|
+
1. <check>
|
|
104
|
+
2. <check>
|
|
105
|
+
|
|
106
|
+
Risks:
|
|
107
|
+
- <risk or "None">
|
|
108
|
+
|
|
109
|
+
Definition of done:
|
|
110
|
+
- <specific acceptance criterion>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Use this after implementation:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
ISSUE EXECUTION REPORT
|
|
117
|
+
======================
|
|
118
|
+
Issue:
|
|
119
|
+
Issue type:
|
|
120
|
+
Platform:
|
|
121
|
+
Agent route used:
|
|
122
|
+
Skills used:
|
|
123
|
+
|
|
124
|
+
Changes made:
|
|
125
|
+
- <file>: <change>
|
|
126
|
+
|
|
127
|
+
Verification:
|
|
128
|
+
- <command or check>: PASS | FAIL | NOT RUN
|
|
129
|
+
|
|
130
|
+
Remaining risks:
|
|
131
|
+
- <risk or "None">
|
|
132
|
+
|
|
133
|
+
Definition of done:
|
|
134
|
+
- <met criterion>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Example
|
|
140
|
+
|
|
141
|
+
### Input
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
Issue #142
|
|
145
|
+
Title: [BUG] Checkout crashes when coupon response has no discount
|
|
146
|
+
Labels: bug, android
|
|
147
|
+
|
|
148
|
+
Body:
|
|
149
|
+
Crashlytics shows a NullPointerException in CheckoutViewModel.applyCoupon.
|
|
150
|
+
Stacktrace points to coupon.discount.amount.
|
|
151
|
+
Expected behavior: invalid or empty discounts should show a message and keep checkout open.
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Output
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
ISSUE EXECUTION PLAN
|
|
158
|
+
====================
|
|
159
|
+
Issue: #142 - Checkout crashes when coupon response has no discount
|
|
160
|
+
Issue type: Crash
|
|
161
|
+
Platform: Android
|
|
162
|
+
Recommended agent: CRASHER
|
|
163
|
+
Recommended skills: /crash-triage, /android-tdd, /clean-code-audit
|
|
164
|
+
Files likely involved:
|
|
165
|
+
- CheckoutViewModel
|
|
166
|
+
- CouponRepository
|
|
167
|
+
- CheckoutViewModelTest
|
|
168
|
+
|
|
169
|
+
Implementation plan:
|
|
170
|
+
1. Use /crash-triage to confirm the first app-owned crashing frame.
|
|
171
|
+
2. Update coupon mapping so missing discounts become a typed failure state.
|
|
172
|
+
3. Add a regression test for a coupon response with no discount.
|
|
173
|
+
|
|
174
|
+
Verification plan:
|
|
175
|
+
1. Run CheckoutViewModelTest.
|
|
176
|
+
2. Re-run /clean-code-audit on checkout files.
|
|
177
|
+
|
|
178
|
+
Risks:
|
|
179
|
+
- API contract may need backend confirmation.
|
|
180
|
+
|
|
181
|
+
Definition of done:
|
|
182
|
+
- Missing coupon discounts no longer crash checkout.
|
|
183
|
+
- User sees a recoverable error message.
|
|
184
|
+
- Regression test passes.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Tool Fit
|
|
190
|
+
|
|
191
|
+
- Codex: Use this workflow after fetching a GitHub issue. Let Codex inspect the local checkout, choose the route, implement the smallest safe change, run verification, and summarize the pushed branch or PR.
|
|
192
|
+
- GitHub Copilot coding agent: Attach the issue to the coding agent with the `ISSUE EXECUTION PLAN` as the task brief so the agent has deterministic scope, files, and verification.
|
|
193
|
+
- Manual GitHub workflow: Paste the plan into the issue or PR description, then assign the recommended specialist agent or skill to each implementation step.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Stop Conditions
|
|
198
|
+
|
|
199
|
+
Stop and ask for a maintainer decision when:
|
|
200
|
+
|
|
201
|
+
- The issue lacks enough reproduction evidence for a crash, ANR, leak, or security report.
|
|
202
|
+
- The fix requires credentials, store owner access, paid service access, or production data.
|
|
203
|
+
- The requested change is destructive or changes public API behavior without acceptance criteria.
|
|
204
|
+
- The issue mixes unrelated work that should be split before implementation.
|