mobile-ai-agents 1.0.23 → 1.0.24
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 +15 -6
- package/cli/index.js +380 -0
- package/docs/getting-started.md +9 -1
- package/docs/installation.md +16 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -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
|
|
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';
|
|
@@ -484,6 +485,352 @@ async function fetchRemote(remotePath) {
|
|
|
484
485
|
return fetch(`${RAW}/${remotePath}`);
|
|
485
486
|
}
|
|
486
487
|
|
|
488
|
+
function normalizePlatform(input) {
|
|
489
|
+
const value = String(input || '').trim().toLowerCase();
|
|
490
|
+
if (['android', 'kotlin', 'compose', 'jetpack compose'].includes(value)) return 'Android';
|
|
491
|
+
if (['ios', 'swift', 'swiftui'].includes(value)) return 'iOS';
|
|
492
|
+
if (['flutter', 'dart'].includes(value)) return 'Flutter';
|
|
493
|
+
if (['rn', 'react native', 'react-native'].includes(value)) return 'React Native';
|
|
494
|
+
return input ? String(input).trim() : detectPlatform();
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
function defaultStackForPlatform(platform) {
|
|
498
|
+
const value = String(platform || '').toLowerCase();
|
|
499
|
+
if (value.includes('android')) return 'Kotlin + Jetpack Compose + ViewModel + local persistence';
|
|
500
|
+
if (value.includes('ios')) return 'Swift + SwiftUI + SwiftData or local persistence';
|
|
501
|
+
if (value.includes('flutter')) return 'Dart + Flutter + state management + local persistence';
|
|
502
|
+
if (value.includes('react')) return 'React Native + TypeScript + local persistence';
|
|
503
|
+
return 'Platform-native mobile stack';
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
function safeDocValue(value, fallback) {
|
|
507
|
+
const text = String(value || '').trim();
|
|
508
|
+
return text || fallback;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
function askQuestion(rl, label, fallback) {
|
|
512
|
+
const suffix = fallback ? ` (${fallback})` : '';
|
|
513
|
+
return new Promise((resolve) => {
|
|
514
|
+
rl.question(`${label}${suffix}: `, (answer) => {
|
|
515
|
+
resolve(safeDocValue(answer, fallback));
|
|
516
|
+
});
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
async function collectStartProfile(args) {
|
|
521
|
+
const opts = parseOptions(args);
|
|
522
|
+
const interactive = process.stdin.isTTY && process.stdout.isTTY && !opts.yes && !opts['non-interactive'];
|
|
523
|
+
|
|
524
|
+
const defaults = {
|
|
525
|
+
idea: safeDocValue(opts.idea || opts._.join(' '), 'Untitled mobile app'),
|
|
526
|
+
platform: normalizePlatform(opts.platform || detectPlatform()),
|
|
527
|
+
team: safeDocValue(opts.team, 'Solo developer'),
|
|
528
|
+
designs: safeDocValue(opts.designs, 'Create wireframes from scratch'),
|
|
529
|
+
monetization: safeDocValue(opts.monetization, 'Decide during PRD review'),
|
|
530
|
+
stack: safeDocValue(opts.stack, ''),
|
|
531
|
+
};
|
|
532
|
+
defaults.stack = safeDocValue(defaults.stack, defaultStackForPlatform(defaults.platform));
|
|
533
|
+
|
|
534
|
+
if (!interactive) {
|
|
535
|
+
return {
|
|
536
|
+
...defaults,
|
|
537
|
+
force: Boolean(opts.force),
|
|
538
|
+
createdAt: nowIso(),
|
|
539
|
+
projectName: detectProjectName(),
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
544
|
+
console.log('');
|
|
545
|
+
console.log(bold('Mobile AI Agents Start'));
|
|
546
|
+
console.log(dim('Answer a few questions. Press Enter to accept the default.'));
|
|
547
|
+
console.log('');
|
|
548
|
+
|
|
549
|
+
try {
|
|
550
|
+
const idea = await askQuestion(rl, '1. What app idea do you have?', defaults.idea);
|
|
551
|
+
const platform = normalizePlatform(await askQuestion(rl, '2. Which platform are you building for?', defaults.platform));
|
|
552
|
+
const team = await askQuestion(rl, '3. Are you building solo or with a team?', defaults.team);
|
|
553
|
+
const monetization = await askQuestion(rl, '4. AI features, ads, subscription, or one-time purchase?', defaults.monetization);
|
|
554
|
+
const designs = await askQuestion(rl, '5. Do you already have designs?', defaults.designs);
|
|
555
|
+
const stack = await askQuestion(rl, '6. Which tech stack do you want to use?', defaultStackForPlatform(platform));
|
|
556
|
+
return {
|
|
557
|
+
idea,
|
|
558
|
+
platform,
|
|
559
|
+
team,
|
|
560
|
+
designs,
|
|
561
|
+
monetization,
|
|
562
|
+
stack,
|
|
563
|
+
force: Boolean(opts.force),
|
|
564
|
+
createdAt: nowIso(),
|
|
565
|
+
projectName: detectProjectName(),
|
|
566
|
+
};
|
|
567
|
+
} finally {
|
|
568
|
+
rl.close();
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
function renderStarterDocs(profile) {
|
|
573
|
+
const productName = profile.projectName || 'Mobile App';
|
|
574
|
+
const appIdea = profile.idea;
|
|
575
|
+
const platform = profile.platform;
|
|
576
|
+
const stack = profile.stack;
|
|
577
|
+
|
|
578
|
+
return {
|
|
579
|
+
'PRD.md': `# PRD: ${productName}
|
|
580
|
+
|
|
581
|
+
## Product Overview
|
|
582
|
+
${appIdea}
|
|
583
|
+
|
|
584
|
+
## Target Audience
|
|
585
|
+
- Primary users: To be refined during idea discovery.
|
|
586
|
+
- Buyer or decision maker: To be confirmed.
|
|
587
|
+
- First launch market: To be confirmed.
|
|
588
|
+
|
|
589
|
+
## Problem Statement
|
|
590
|
+
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.
|
|
591
|
+
|
|
592
|
+
## Unique Value Proposition
|
|
593
|
+
Deliver the smallest useful version on ${platform}, with clear flows, reliable local behavior, and enough instrumentation to learn from real usage.
|
|
594
|
+
|
|
595
|
+
## Platform And Stack
|
|
596
|
+
- Platform: ${platform}
|
|
597
|
+
- Stack: ${stack}
|
|
598
|
+
- Team: ${profile.team}
|
|
599
|
+
- Designs: ${profile.designs}
|
|
600
|
+
- Monetization: ${profile.monetization}
|
|
601
|
+
|
|
602
|
+
## MVP Scope
|
|
603
|
+
- One primary user flow that demonstrates the app value.
|
|
604
|
+
- Home or dashboard screen.
|
|
605
|
+
- Create or edit flow for the core object.
|
|
606
|
+
- Detail or confirmation screen where useful.
|
|
607
|
+
- Empty, loading, error, and success states.
|
|
608
|
+
- Local persistence if the app needs state after restart.
|
|
609
|
+
|
|
610
|
+
## Non-Goals
|
|
611
|
+
- Complex social features.
|
|
612
|
+
- Payments before the MVP value is validated.
|
|
613
|
+
- Advanced AI automation before the base workflow is usable.
|
|
614
|
+
- Large admin dashboards unless required for launch.
|
|
615
|
+
|
|
616
|
+
## Core Features
|
|
617
|
+
| Feature | Goal | MVP Acceptance |
|
|
618
|
+
|---|---|---|
|
|
619
|
+
| App shell | Provide navigation and baseline theme | App opens to the main flow without dead ends |
|
|
620
|
+
| Core item flow | Let users create or complete the main action | User can finish the primary job in under 60 seconds |
|
|
621
|
+
| Persistence | Keep important user state | App restart does not lose MVP data |
|
|
622
|
+
| Feedback states | Make failures understandable | Empty, loading, and error states are visible and actionable |
|
|
623
|
+
| Basic analytics plan | Know whether the MVP works | Events are documented before release |
|
|
624
|
+
|
|
625
|
+
## User Flow
|
|
626
|
+
1. User opens the app.
|
|
627
|
+
2. User understands the main action from the first screen.
|
|
628
|
+
3. User creates, tracks, or completes the core item.
|
|
629
|
+
4. App saves state.
|
|
630
|
+
5. User can return later and continue.
|
|
631
|
+
|
|
632
|
+
## Functional Requirements
|
|
633
|
+
- The app must support the MVP flow on ${platform}.
|
|
634
|
+
- The app must keep UI state predictable across navigation.
|
|
635
|
+
- The app must avoid placeholder-only screens in the finished MVP.
|
|
636
|
+
- The app must include validation for required user input.
|
|
637
|
+
|
|
638
|
+
## Non-Functional Requirements
|
|
639
|
+
- Fast cold start for a small MVP.
|
|
640
|
+
- Accessible labels for tappable controls.
|
|
641
|
+
- Responsive layout for common phone sizes.
|
|
642
|
+
- No secrets committed to source control.
|
|
643
|
+
- Clear release build configuration.
|
|
644
|
+
|
|
645
|
+
## Analytics Events
|
|
646
|
+
| Event | When It Fires | Properties |
|
|
647
|
+
|---|---|---|
|
|
648
|
+
| app_opened | App becomes usable | platform, version |
|
|
649
|
+
| primary_action_started | User starts the main MVP flow | source_screen |
|
|
650
|
+
| primary_action_completed | User completes the main MVP flow | duration_bucket |
|
|
651
|
+
| error_seen | User sees a blocking error | screen, error_type |
|
|
652
|
+
|
|
653
|
+
## Risks
|
|
654
|
+
- Scope grows before the MVP proves value.
|
|
655
|
+
- Design decisions are too generic for the target audience.
|
|
656
|
+
- Persistence or API choices are made before constraints are clear.
|
|
657
|
+
- Release work is delayed until the end.
|
|
658
|
+
|
|
659
|
+
## Open Questions
|
|
660
|
+
- Who is the exact first user?
|
|
661
|
+
- What is the one action they must complete?
|
|
662
|
+
- Does the MVP need login?
|
|
663
|
+
- Does the MVP need offline support?
|
|
664
|
+
- What must be true before publishing a test build?
|
|
665
|
+
|
|
666
|
+
## Next Step
|
|
667
|
+
Review this PRD, answer the open questions, then run /mobile-harness and ask it to build only the first approved task.
|
|
668
|
+
`,
|
|
669
|
+
|
|
670
|
+
'DESIGN.md': `# Design Plan: ${productName}
|
|
671
|
+
|
|
672
|
+
## Design Direction
|
|
673
|
+
Design should be chosen before implementation. Pick one direction and keep the MVP consistent:
|
|
674
|
+
|
|
675
|
+
| Direction | Best For | Notes |
|
|
676
|
+
|---|---|---|
|
|
677
|
+
| Clean utility | Productivity, finance, habit, tracker, internal tools | Dense, calm, easy to scan |
|
|
678
|
+
| Consumer friendly | Wellness, education, lifestyle | Warmer copy, clearer onboarding |
|
|
679
|
+
| Premium minimal | Paid tools, pro users | Strong typography, restrained color, polished empty states |
|
|
680
|
+
| Game-like | Games, learning loops, motivation | More motion, stronger feedback, richer assets |
|
|
681
|
+
|
|
682
|
+
Selected direction: To be confirmed.
|
|
683
|
+
|
|
684
|
+
## Screen List
|
|
685
|
+
| Screen | Purpose | Required States |
|
|
686
|
+
|---|---|---|
|
|
687
|
+
| Home | Show the primary object or action | Empty, populated, loading, error |
|
|
688
|
+
| Create/Edit | Capture required input | Default, validation error, saving |
|
|
689
|
+
| Detail/Result | Show saved item or completion | Success, missing data |
|
|
690
|
+
| Settings/About | Basic app controls if needed | Default |
|
|
691
|
+
|
|
692
|
+
## Wireframe Notes
|
|
693
|
+
- Put the primary action in the first viewport.
|
|
694
|
+
- Avoid marketing copy inside the app experience.
|
|
695
|
+
- Keep the MVP flow reachable in one or two taps.
|
|
696
|
+
- Use platform-native navigation patterns unless the product has a strong reason not to.
|
|
697
|
+
|
|
698
|
+
## Design System
|
|
699
|
+
- Color: choose one primary action color, one surface color, one danger color, and neutral text colors.
|
|
700
|
+
- Typography: use system fonts unless brand requirements exist.
|
|
701
|
+
- Spacing: use an 8-point spacing rhythm.
|
|
702
|
+
- Components: buttons, text fields, list rows/cards, dialogs, snackbars/toasts, empty state, loading state, error state.
|
|
703
|
+
|
|
704
|
+
## Accessibility
|
|
705
|
+
- Every tappable control needs a clear label.
|
|
706
|
+
- Text should pass contrast checks against its background.
|
|
707
|
+
- Important actions should not rely on color alone.
|
|
708
|
+
- Screens must remain usable with larger text settings.
|
|
709
|
+
|
|
710
|
+
## Screenshot Plan
|
|
711
|
+
Capture these once the MVP exists:
|
|
712
|
+
|
|
713
|
+
| Screenshot | What To Prove |
|
|
714
|
+
|---|---|
|
|
715
|
+
| Home populated | The app value is visible |
|
|
716
|
+
| Create/Edit flow | The main action works |
|
|
717
|
+
| Empty state | New users are guided |
|
|
718
|
+
| Error or validation state | Failure is understandable |
|
|
719
|
+
`,
|
|
720
|
+
|
|
721
|
+
'TASKS.md': `# Tasks: ${productName}
|
|
722
|
+
|
|
723
|
+
## Implementation Rules
|
|
724
|
+
- Do not implement before PRD and design direction are reviewed.
|
|
725
|
+
- Build one task at a time.
|
|
726
|
+
- Compare each task against PRD.md and DESIGN.md before marking complete.
|
|
727
|
+
- Run available tests after each implementation task.
|
|
728
|
+
- Save important decisions with Mobile Memory.
|
|
729
|
+
|
|
730
|
+
## MVP Tasks
|
|
731
|
+
| ID | Title | Goal | Dependencies | Acceptance Criteria | QA Checklist | Complexity |
|
|
732
|
+
|---|---|---|---|---|---|---|
|
|
733
|
+
| T1 | Confirm MVP scope | Lock the first shippable flow | PRD.md | Open questions answered and one primary flow selected | PRD reviewed | S |
|
|
734
|
+
| T2 | Create design direction | Choose visual style and screen states | DESIGN.md | Direction selected and screen list finalized | Layout can be compared later | S |
|
|
735
|
+
| 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 |
|
|
736
|
+
| T4 | Build core flow | Implement the main user action | T3 | User can complete primary action | Manual flow test, restart test | M |
|
|
737
|
+
| T5 | Add persistence | Keep MVP data after restart | T4 | Data survives app restart | Create data, kill app, reopen | M |
|
|
738
|
+
| T6 | Add states and validation | Handle empty/loading/error/input errors | T4 | States match DESIGN.md | Trigger each state | M |
|
|
739
|
+
| 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 |
|
|
740
|
+
|
|
741
|
+
## Current Task
|
|
742
|
+
T1 - Confirm MVP scope.
|
|
743
|
+
`,
|
|
744
|
+
|
|
745
|
+
'ROADMAP.md': `# Roadmap: ${productName}
|
|
746
|
+
|
|
747
|
+
## Phase 0 - Product Clarity
|
|
748
|
+
- Review PRD.md.
|
|
749
|
+
- Answer open questions.
|
|
750
|
+
- Select design direction in DESIGN.md.
|
|
751
|
+
- Confirm the first MVP flow.
|
|
752
|
+
|
|
753
|
+
## Phase 1 - MVP Build
|
|
754
|
+
- App shell.
|
|
755
|
+
- Core flow.
|
|
756
|
+
- Persistence.
|
|
757
|
+
- Empty/loading/error states.
|
|
758
|
+
- Basic accessibility.
|
|
759
|
+
|
|
760
|
+
## Phase 2 - Verification Loop
|
|
761
|
+
- PRD verification.
|
|
762
|
+
- Clean-code audit.
|
|
763
|
+
- Security audit.
|
|
764
|
+
- Performance audit.
|
|
765
|
+
- UI match review.
|
|
766
|
+
- Device or simulator QA.
|
|
767
|
+
|
|
768
|
+
## Phase 3 - Release Prep
|
|
769
|
+
- Store listing draft.
|
|
770
|
+
- Screenshot plan.
|
|
771
|
+
- Privacy/data safety checklist.
|
|
772
|
+
- Release notes.
|
|
773
|
+
- Internal test build.
|
|
774
|
+
|
|
775
|
+
## Later
|
|
776
|
+
- Monetization experiments: ${profile.monetization}
|
|
777
|
+
- AI/API features only after MVP workflow is stable.
|
|
778
|
+
- Growth and ASO iteration.
|
|
779
|
+
`,
|
|
780
|
+
|
|
781
|
+
[MOBILE_MEMORY_FILE]: `# Mobile Memory
|
|
782
|
+
|
|
783
|
+
## Instant Resume
|
|
784
|
+
Project: ${productName}
|
|
785
|
+
Idea: ${appIdea}
|
|
786
|
+
Platform: ${platform}
|
|
787
|
+
Stack: ${stack}
|
|
788
|
+
Team: ${profile.team}
|
|
789
|
+
Created: ${profile.createdAt}
|
|
790
|
+
|
|
791
|
+
## Current State
|
|
792
|
+
Starter planning docs were generated by:
|
|
793
|
+
|
|
794
|
+
\`\`\`bash
|
|
795
|
+
npx mobile-ai-agents start
|
|
796
|
+
\`\`\`
|
|
797
|
+
|
|
798
|
+
Generated files:
|
|
799
|
+
- PRD.md
|
|
800
|
+
- DESIGN.md
|
|
801
|
+
- TASKS.md
|
|
802
|
+
- ROADMAP.md
|
|
803
|
+
- MOBILE_MEMORY.md
|
|
804
|
+
|
|
805
|
+
## Decisions
|
|
806
|
+
| Decision | Reason |
|
|
807
|
+
|---|---|
|
|
808
|
+
| Use ${platform} | User selected or project detection inferred this platform |
|
|
809
|
+
| Start with docs before code | Mobile Harness should verify work against PRD and design |
|
|
810
|
+
|
|
811
|
+
## Next Action
|
|
812
|
+
Review PRD.md and DESIGN.md, answer open questions, then run /mobile-harness to implement T1/T2 before code work starts.
|
|
813
|
+
|
|
814
|
+
## Resume Prompt
|
|
815
|
+
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.
|
|
816
|
+
`,
|
|
817
|
+
};
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
function writeStarterDocs(files, force) {
|
|
821
|
+
const results = [];
|
|
822
|
+
for (const [filename, content] of Object.entries(files)) {
|
|
823
|
+
const dest = path.join(process.cwd(), filename);
|
|
824
|
+
if (fs.existsSync(dest) && !force) {
|
|
825
|
+
results.push({ filename, status: 'skipped' });
|
|
826
|
+
continue;
|
|
827
|
+
}
|
|
828
|
+
fs.writeFileSync(dest, content);
|
|
829
|
+
results.push({ filename, status: 'created' });
|
|
830
|
+
}
|
|
831
|
+
return results;
|
|
832
|
+
}
|
|
833
|
+
|
|
487
834
|
// Collect all agent/skill/workflow names and their remote paths for a platform set
|
|
488
835
|
function collectItems(platforms) {
|
|
489
836
|
const agentNames = new Set();
|
|
@@ -722,6 +1069,34 @@ async function installForCodex(platforms) {
|
|
|
722
1069
|
|
|
723
1070
|
// ─── Commands ────────────────────────────────────────────────────────────────
|
|
724
1071
|
|
|
1072
|
+
async function cmdStart(args) {
|
|
1073
|
+
const profile = await collectStartProfile(args);
|
|
1074
|
+
const files = renderStarterDocs(profile);
|
|
1075
|
+
const results = writeStarterDocs(files, profile.force);
|
|
1076
|
+
|
|
1077
|
+
console.log('');
|
|
1078
|
+
console.log(bold('Mobile AI Agents Start'));
|
|
1079
|
+
console.log(dim(` Project : ${profile.projectName}`));
|
|
1080
|
+
console.log(dim(` Platform: ${profile.platform}`));
|
|
1081
|
+
console.log('');
|
|
1082
|
+
|
|
1083
|
+
for (const result of results) {
|
|
1084
|
+
if (result.status === 'created') {
|
|
1085
|
+
ok(`${result.filename} created`);
|
|
1086
|
+
} else {
|
|
1087
|
+
log(`${yellow('skipped')} ${result.filename} already exists (use --force to overwrite)`);
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
console.log('');
|
|
1092
|
+
console.log(bold('Next'));
|
|
1093
|
+
console.log(' 1. Review PRD.md and answer the open questions.');
|
|
1094
|
+
console.log(' 2. Choose one design direction in DESIGN.md.');
|
|
1095
|
+
console.log(' 3. Run /mobile-harness and ask it to continue from TASKS.md.');
|
|
1096
|
+
console.log(' 4. Save important decisions with npx mobile-ai-agents memory capture.');
|
|
1097
|
+
console.log('');
|
|
1098
|
+
}
|
|
1099
|
+
|
|
725
1100
|
async function cmdInstall(args) {
|
|
726
1101
|
let platform = 'all';
|
|
727
1102
|
let tool = 'claude';
|
|
@@ -1003,6 +1378,7 @@ function cmdList() {
|
|
|
1003
1378
|
|
|
1004
1379
|
console.log('');
|
|
1005
1380
|
console.log(bold(' INSTALL'));
|
|
1381
|
+
console.log(dim(' npx mobile-ai-agents start # guided starter docs'));
|
|
1006
1382
|
console.log(dim(' npx mobile-ai-agents install # everything (claude)'));
|
|
1007
1383
|
console.log(dim(' npx mobile-ai-agents install --platform android # android only'));
|
|
1008
1384
|
console.log(dim(' npx mobile-ai-agents install --tool cursor # cursor only'));
|
|
@@ -1022,6 +1398,7 @@ function cmdHelp() {
|
|
|
1022
1398
|
console.log(bold(' npx mobile-ai-agents <command> [options]'));
|
|
1023
1399
|
console.log('');
|
|
1024
1400
|
console.log(' Commands:');
|
|
1401
|
+
console.log(` ${bold('start')} Guided setup that creates PRD/design/tasks/roadmap`);
|
|
1025
1402
|
console.log(` ${bold('install')} Install agents, skills, and workflows`);
|
|
1026
1403
|
console.log(` ${bold('add')} agent|skill|workflow <name> Install a single item`);
|
|
1027
1404
|
console.log(` ${bold('memory')} init|capture|search|... Local Mobile Memory store`);
|
|
@@ -1048,6 +1425,8 @@ function cmdHelp() {
|
|
|
1048
1425
|
console.log(' codex All agents/skills/workflows → AGENTS.md');
|
|
1049
1426
|
console.log('');
|
|
1050
1427
|
console.log(' Examples:');
|
|
1428
|
+
console.log(dim(' npx mobile-ai-agents start'));
|
|
1429
|
+
console.log(dim(' npx mobile-ai-agents start --platform flutter --idea "Habit tracker"'));
|
|
1051
1430
|
console.log(dim(' npx mobile-ai-agents install'));
|
|
1052
1431
|
console.log(dim(' npx mobile-ai-agents install --platform android'));
|
|
1053
1432
|
console.log(dim(' npx mobile-ai-agents install --platform ios --tool cursor'));
|
|
@@ -1069,6 +1448,7 @@ async function main() {
|
|
|
1069
1448
|
|
|
1070
1449
|
try {
|
|
1071
1450
|
switch (cmd) {
|
|
1451
|
+
case 'start': await cmdStart(args); break;
|
|
1072
1452
|
case 'install': await cmdInstall(args); break;
|
|
1073
1453
|
case 'add': await cmdAdd(args); break;
|
|
1074
1454
|
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/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.24",
|
|
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"
|