mover-os 4.4.2 → 4.4.3

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.
Files changed (2) hide show
  1. package/install.js +226 -169
  2. package/package.json +1 -1
package/install.js CHANGED
@@ -182,7 +182,17 @@ async function printHeader(animate = IS_TTY) {
182
182
  }
183
183
  } catch {}
184
184
 
185
- ln(` ${dim(`v${VERSION}`)} ${gray("the agentic operating system for obsidian")}${infoRight ? ` ${infoRight}` : ""}`);
185
+ const pkgVer = require("./package.json").version;
186
+ ln(` ${dim(`v${pkgVer}`)} ${gray("the agentic operating system for obsidian")}${infoRight ? ` ${infoRight}` : ""}`);
187
+
188
+ // Non-blocking update check
189
+ try {
190
+ const latest = execSync("npm view mover-os version", { encoding: "utf8", timeout: 5000 }).trim();
191
+ if (latest && latest !== pkgVer && compareVersions(latest, pkgVer) > 0) {
192
+ ln(` ${yellow(`Update available: v${pkgVer} → v${latest}`)} ${dim(`run ${bold("moveros update")}`)}`);
193
+ }
194
+ } catch {}
195
+
186
196
  ln();
187
197
  ln(gray(" ─────────────────────────────────────────────"));
188
198
  ln();
@@ -3847,230 +3857,270 @@ async function cmdRestore(opts) {
3847
3857
 
3848
3858
  // ─── moveros help ──────────────────────────────────────────────────────────
3849
3859
  async function cmdHelp(opts) {
3850
- // Interactive animated guide — paginated walkthrough of Mover OS
3860
+ // Animated typing helper
3861
+ const typeOut = async (text, speed = 12) => {
3862
+ if (!IS_TTY) { ln(text); return; }
3863
+ const raw = strip(text);
3864
+ let rawIdx = 0, ansiIdx = 0;
3865
+ // Build mapping of raw char positions to the styled string slices
3866
+ while (rawIdx < raw.length) {
3867
+ w(text[ansiIdx] || "");
3868
+ if (text[ansiIdx] && text[ansiIdx] !== "\x1b" && !text.slice(Math.max(0, ansiIdx - 10), ansiIdx).match(/\x1b\[[^m]*$/)) {
3869
+ rawIdx++;
3870
+ }
3871
+ ansiIdx++;
3872
+ if (rawIdx % 2 === 0) await sleep(speed);
3873
+ }
3874
+ // flush remaining ANSI codes
3875
+ while (ansiIdx < text.length) { w(text[ansiIdx]); ansiIdx++; }
3876
+ w("\n");
3877
+ };
3878
+
3879
+ const typeLine = async (text, speed = 8) => {
3880
+ if (!IS_TTY) { ln(` ${text}`); return; }
3881
+ w(" ");
3882
+ for (let i = 0; i < text.length; i++) {
3883
+ w(text[i]);
3884
+ if (text[i] !== "\x1b" && i % 3 === 0) await sleep(speed);
3885
+ }
3886
+ w("\n");
3887
+ };
3888
+
3851
3889
  const pages = [
3852
3890
  {
3853
- title: "Welcome to Mover OS",
3891
+ title: "What is Mover OS?",
3854
3892
  body: [
3855
- `${bold("The agentic operating system for Obsidian.")}`,
3893
+ `${bold("Your second brain, but it actually works.")}`,
3856
3894
  "",
3857
- "Mover OS turns your Obsidian vault into an AI-powered execution engine.",
3858
- "It works across 16 AI coding agents Claude Code, Cursor, Gemini,",
3859
- "Copilot, Codex, and more. Same brain, every editor.",
3895
+ "Most productivity systems fail because you have to maintain them.",
3896
+ "Mover OS is different — your AI agents maintain it for you.",
3860
3897
  "",
3861
- `${dim("How it works:")}`,
3862
- ` ${cyan("1.")} Your ${bold("Engine")} stores who you are — identity, strategy, goals`,
3863
- ` ${cyan("2.")} ${bold("Workflows")} run your day — plan, execute, log, analyse, repeat`,
3864
- ` ${cyan("3.")} ${bold("Skills")} give your AI agents deep domain knowledge`,
3865
- ` ${cyan("4.")} The system ${bold("learns")} from your behavior and adapts`,
3898
+ "You tell your AI who you are, what you're building, and where",
3899
+ "you're going. It remembers across every session, every editor.",
3866
3900
  "",
3867
- `${dim("This guide walks through everything. Use ← → to navigate.")}`,
3901
+ `${dim("Three things make it work:")}`,
3902
+ ` ${cyan("1.")} The ${bold("Engine")} — files that store your identity, strategy, goals`,
3903
+ ` ${cyan("2.")} ${bold("Workflows")} — 23 commands that run your day (plan, build, log, repeat)`,
3904
+ ` ${cyan("3.")} ${bold("Skills")} — 61 packs that make your AI genuinely useful`,
3905
+ "",
3906
+ `Works across 16 agents. Claude Code, Cursor, Gemini, all of them.`,
3907
+ `Same context, every editor. ${dim("Press → to continue.")}`,
3868
3908
  ],
3869
3909
  },
3870
3910
  {
3871
- title: "The Engine — Your Brain",
3911
+ title: "The Engine",
3872
3912
  body: [
3873
- `${dim("Location:")} 02_Areas/Engine/`,
3913
+ `${dim("Your identity, stored as markdown. Read by every AI session.")}`,
3874
3914
  "",
3875
- `${bold("Core files that define you:")}`,
3915
+ ` ${cyan("Identity_Prime.md")} Who you are values, strengths, anti-patterns`,
3916
+ ` ${cyan("Strategy.md")} What you're betting on right now`,
3917
+ ` ${cyan("Active_Context.md")} What's happening today — focus, blockers, energy`,
3918
+ ` ${cyan("Goals.md")} Where you're heading — 90 days to 10 years`,
3919
+ ` ${cyan("Mover_Dossier.md")} What you've got — skills, audience, assets`,
3920
+ ` ${cyan("Auto_Learnings.md")} What the AI has noticed about your behavior`,
3876
3921
  "",
3877
- ` ${cyan("Identity_Prime.md")} Who you are values, psychology, anti-identity`,
3878
- ` ${cyan("Strategy.md")} What you're testing current hypothesis`,
3879
- ` ${cyan("Active_Context.md")} What's happening NOW — blockers, focus, state`,
3880
- ` ${cyan("Goals.md")} Where you're going — 90d, 1yr, 10yr targets`,
3881
- ` ${cyan("Mover_Dossier.md")} What you have — skills, capital, network`,
3882
- ` ${cyan("Auto_Learnings.md")} What the AI notices — behavioral patterns`,
3922
+ "These files are yours. The system never overwrites them.",
3923
+ "Every workflow reads them. They evolve as you do.",
3883
3924
  "",
3884
- `These files are ${bold("irreplaceable")}. The system never overwrites them.`,
3885
- "Every AI session reads them. Every workflow updates them.",
3886
- `Your Engine ${bold("evolves")} as you do.`,
3925
+ `${dim("Location:")} 02_Areas/Engine/`,
3887
3926
  ],
3888
3927
  },
3889
3928
  {
3890
- title: "Daily Rhythm — The Loop",
3929
+ title: "Your Daily Loop",
3891
3930
  body: [
3892
- `${bold("The daily execution cycle:")}`,
3931
+ `${dim("The rhythm that makes it stick:")}`,
3893
3932
  "",
3894
- ` ${green("→")} ${bold("/morning")} Start your day energy check, set focus`,
3895
- ` ${green("→")} ${bold("[WORK]")} Build, ship, create`,
3896
- ` ${green("→")} ${bold("/log")} Capture what happened syncs plan + state`,
3897
- ` ${green("→")} ${bold("/analyse-day")} Brutal daily audit patterns + verdict`,
3898
- ` ${green("→")} ${bold("/plan-tomorrow")} Generate tomorrow's battle plan`,
3933
+ ` ${green("→")} ${bold("/morning")} Check in. Set your one thing for the day.`,
3934
+ ` ${green("→")} ${bold("[WORK]")} Build, ship, create.`,
3935
+ ` ${green("→")} ${bold("/log")} Capture what happened. Plan syncs automatically.`,
3936
+ ` ${green("→")} ${bold("/analyse-day")} Honest audit. What worked, what didn't.`,
3937
+ ` ${green("→")} ${bold("/plan-tomorrow")} Set up tomorrow before you close the laptop.`,
3899
3938
  "",
3900
- `${dim("Weekly:")}`,
3901
- ` ${green("→")} ${bold("/review-week")} Sunday deep review + strategy validation`,
3939
+ ` ${dim("Sundays:")} ${bold("/review-week")} — zoom out, validate strategy, clean the system.`,
3902
3940
  "",
3903
- `${dim("The rhythm is the system.")} Miss a day, patterns detect it.`,
3904
- "Miss three, /reboot triggers recovery protocol.",
3905
- `Every workflow hands off to the next — ${bold("no dead ends")}.`,
3941
+ "Miss a day, the system notices. Miss three, /reboot kicks in.",
3942
+ "Each workflow hands off to the next. No dead ends.",
3906
3943
  ],
3907
3944
  },
3908
3945
  {
3909
- title: "Workflows — 23 Commands",
3946
+ title: "23 Workflows",
3910
3947
  body: [
3911
- `${bold("Daily:")} /morning /log /analyse-day /plan-tomorrow /review-week`,
3912
- `${bold("Build:")} /ignite /overview /refactor-plan /capture /debrief`,
3913
- `${bold("Think:")} /debug-resistance /pivot-strategy /mover-ideas /screenshot`,
3914
- `${bold("Grow:")} /harvest /history /reboot`,
3915
- `${bold("Meta:")} /setup /update /walkthrough /migrate /mover-check /mover-report`,
3948
+ `${dim("Slash commands inside your AI agent. Type / and go.")}`,
3916
3949
  "",
3917
- `${dim("Key concepts:")}`,
3918
- ` ${cyan("")} ${bold("/ignite")} creates projects — brief + plan in one workflow`,
3919
- ` ${cyan("")} ${bold("/debug-resistance")} diagnoses WHY you're avoiding something`,
3920
- ` ${cyan("")} ${bold("/pivot-strategy")} formally changes direction with logging`,
3921
- ` ${cyan("")} ${bold("/harvest")} extracts permanent knowledge to your Library`,
3922
- ` ${cyan("•")} ${bold("/screenshot")} does meta-analysis of your AI session patterns`,
3950
+ `${bold("Daily:")} /morning /log /analyse-day /plan-tomorrow /review-week`,
3951
+ `${bold("Projects:")} /ignite /overview /refactor-plan /capture /debrief`,
3952
+ `${bold("Strategy:")} /debug-resistance /pivot-strategy /mover-ideas /screenshot`,
3953
+ `${bold("Growth:")} /harvest /history /reboot`,
3954
+ `${bold("System:")} /setup /update /walkthrough /migrate /mover-check`,
3923
3955
  "",
3924
- "Every command reads your Engine context and adapts to your state.",
3956
+ `${dim("Highlights:")}`,
3957
+ ` ${bold("/ignite")} Starts any project — interrogation, brief, plan`,
3958
+ ` ${bold("/debug-resistance")} Figures out WHY you're avoiding something`,
3959
+ ` ${bold("/harvest")} Turns conversations into permanent knowledge`,
3960
+ ` ${bold("/screenshot")} Meta-analysis of how you actually use AI`,
3925
3961
  ],
3926
3962
  },
3927
3963
  {
3928
- title: "Skills Domain Intelligence",
3964
+ title: "61 Skill Packs",
3929
3965
  body: [
3930
- `${bold("Skills give your AI agents specialized knowledge.")}`,
3966
+ `${dim("Specialized knowledge your AI loads automatically.")}`,
3931
3967
  "",
3932
- `${dim("Categories:")}`,
3933
- ` ${cyan("dev")} Debugging, TDD, refactoring, error handling, React`,
3934
- ` ${cyan("marketing")} Copywriting, SEO, CRO, social content, email`,
3935
- ` ${cyan("cro")} Page optimization, forms, popups, paywalls, onboarding`,
3936
- ` ${cyan("strategy")} Pricing, launch, competitors, referrals, analytics`,
3937
- ` ${cyan("seo")} Audits, schema markup, programmatic SEO, content`,
3938
- ` ${cyan("design")} UI/UX, frontend design, Obsidian markdown/canvas`,
3939
- ` ${cyan("obsidian")} JSON Canvas, Bases, Obsidian CLI, markdown`,
3968
+ ` ${cyan("dev")} TDD, debugging, refactoring, error handling, React`,
3969
+ ` ${cyan("marketing")} Copywriting, SEO, CRO, social media, email sequences`,
3970
+ ` ${cyan("strategy")} Pricing, launch strategy, competitor analysis`,
3971
+ ` ${cyan("design")} UI/UX, frontend patterns, accessibility`,
3972
+ ` ${cyan("obsidian")} Canvas, Bases, markdown, CLI automation`,
3940
3973
  "",
3941
- `${dim("System skills (always active):")}`,
3942
- ` friction-enforcer pattern-detector plan-md-guardian`,
3943
- ` mover-os-context workflow-router daily-note-writer`,
3974
+ `${dim("System skills (always watching):")}`,
3975
+ ` ${bold("friction-enforcer")} Pushes back when you drift from your plan`,
3976
+ ` ${bold("pattern-detector")} Spots recurring behavior across sessions`,
3977
+ ` ${bold("plan-md-guardian")} Protects your roadmap from corruption`,
3978
+ ` ${bold("workflow-router")} Suggests the right workflow for the moment`,
3944
3979
  "",
3945
- "Skills trigger automatically based on what you're doing.",
3980
+ "You choose categories during install. Skills activate on context.",
3946
3981
  ],
3947
3982
  },
3948
3983
  {
3949
3984
  title: "The Friction System",
3950
3985
  body: [
3951
- `${bold("Your AI pushes back when you drift from your plan.")}`,
3986
+ `${dim("Your AI has opinions. That's the point.")}`,
3952
3987
  "",
3953
- ` ${dim("Level 1")} ${cyan("Surface")} \"Your plan says X. You're working on Y.\"`,
3954
- ` ${dim("Level 2")} ${yellow("Justify")} \"Why is this more important than your Single Test?\"`,
3955
- ` ${dim("Level 3")} ${red("Earn It")} AI stops helping with off-plan work.`,
3956
- ` ${dim("Level 4")} ${red("Hard Block")} Destructive actions require explicit reason.`,
3988
+ ` ${dim("Level 1")} ${cyan("Surface")} "Your plan says X. You're doing Y. Intentional?"`,
3989
+ ` ${dim("Level 2")} ${yellow("Justify")} "Why is this more important than your Single Test?"`,
3990
+ ` ${dim("Level 3")} ${red("Earn It")} Stops helping with off-plan work entirely.`,
3991
+ ` ${dim("Level 4")} ${red("Hard Block")} Won't delete Engine files without a reason.`,
3957
3992
  "",
3958
- `You can always push through Levels 1-3. Friction creates`,
3959
- `${bold("awareness")}, not walls. But the AI won't silently comply`,
3960
- "when you're avoiding the hard thing.",
3993
+ "You can always push through. It's awareness, not a wall.",
3994
+ "But if you're avoiding the hard thing, the AI won't pretend.",
3961
3995
  "",
3962
- `${dim("Pre-Escalation Gate:")} If the work is exploration or compound`,
3963
- `value (not avoidance), it logs as ${dim("[COMPOUND]")} and doesn't escalate.`,
3996
+ `${dim("Smart gate:")} If the work is genuinely useful (compound value,`,
3997
+ `exploration), it logs ${dim("[COMPOUND]")} and doesn't escalate.`,
3964
3998
  ],
3965
3999
  },
3966
4000
  {
3967
- title: "Pattern Detection",
4001
+ title: "What is this CLI?",
3968
4002
  body: [
3969
- `${bold("The system watches your behavior across sessions.")}`,
4003
+ `${bold("Terminal utilities that don't need an AI session.")}`,
3970
4004
  "",
3971
- `${dim("How it works:")}`,
3972
- ` ${cyan("1.")} AI observes recurring behavior (3+ data points)`,
3973
- ` ${cyan("2.")} Logs to Auto_Learnings.md with confidence score (1-5)`,
3974
- ` ${cyan("3.")} Patterns surface proactively in workflows`,
3975
- ` ${cyan("4.")} You confirm or dismiss — the system adapts`,
4005
+ "Your AI agents handle the complex stuff — planning, analysis,",
4006
+ "writing. This CLI handles everything else: quick lookups, status",
4007
+ "checks, maintenance, things you want instantly.",
3976
4008
  "",
3977
- `${dim("Pattern types:")}`,
3978
- ` ${yellow("Avoidance")} Dodging specific tasks repeatedly`,
3979
- ` ${yellow("Time Drift")} Working past shutdown, skipping rest`,
3980
- ` ${yellow("System Spree")} Building tools instead of shipping`,
3981
- ` ${yellow("Scope Creep")} Tasks growing beyond plan boundaries`,
3982
- ` ${yellow("Energy Cycles")} Performance tied to sleep/food/time`,
4009
+ `${dim("How it fits together:")}`,
4010
+ ` ${cyan("Workflows")} Run inside AI agents (/morning, /log, /ignite)`,
4011
+ ` ${cyan("Skills")} Loaded by AI agents automatically`,
4012
+ ` ${cyan("CLI")} Runs in your terminal, no AI needed`,
3983
4013
  "",
3984
- `Confidence 3+ patterns route to the workflow that fixes them.`,
4014
+ "The CLI supplements your agents. It never replaces them.",
4015
+ `Think of it as ${bold("htop for your productivity")} — instant, free, always there.`,
3985
4016
  ],
3986
4017
  },
3987
4018
  {
3988
- title: "16 AI Agents One Brain",
4019
+ title: "CLI Status & Insight",
3989
4020
  body: [
3990
- `${bold("Mover OS installs to every major AI coding agent.")}`,
4021
+ `${dim("See what's happening without opening an AI session.")}`,
3991
4022
  "",
3992
- `${dim("Full tier (rules + skills + commands + hooks):")}`,
3993
- ` Claude Code Cursor Cline Windsurf Gemini CLI`,
3994
- ` Copilot Amazon Q OpenCode Kilo Code`,
4023
+ ` ${cyan("pulse")} Dashboard tasks, streaks, energy, blockers`,
4024
+ ` ${dim("Like htop for your day. One glance.")}`,
3995
4025
  "",
3996
- `${dim("Enhanced tier (rules + skills):")}`,
3997
- ` Codex Amp Roo Code Antigravity`,
4026
+ ` ${cyan("replay")} Session replay what you did, when, drift analysis`,
4027
+ ` ${dim("\"You planned 4 tasks, completed 2, drifted into 3.\"")}`,
3998
4028
  "",
3999
- `${dim("Basic tier (rules only):")}`,
4000
- ` Continue Aider`,
4029
+ ` ${cyan("diff")} Engine evolution how your strategy changed over time`,
4030
+ ` ${dim("Git-powered. Shows exactly when and why.")}`,
4031
+ "",
4032
+ ` ${cyan("context")} What each agent sees — loaded rules, skills, token count`,
4033
+ ` ${dim("Debug why an agent is behaving differently.")}`,
4034
+ "",
4035
+ ` ${cyan("doctor")} Health check — are all agents configured correctly?`,
4036
+ ],
4037
+ },
4038
+ {
4039
+ title: "CLI — Quick Actions",
4040
+ body: [
4041
+ `${dim("Do things fast without starting a session.")}`,
4042
+ "",
4043
+ ` ${cyan("capture")} Quick capture — task, idea, link, brain dump`,
4044
+ ` ${dim("moveros capture --task \"Fix the login bug\"")}`,
4001
4045
  "",
4002
- "Switch editors freely. Your identity, strategy, and patterns",
4003
- `follow you everywhere. The ${bold("Engine is the constant")}.`,
4004
- `Run ${cyan("moveros sync")} to update all agents at once.`,
4046
+ ` ${cyan("who")} Entity lookup search People, Orgs, Places`,
4047
+ ` ${dim("moveros who \"Ishaaq\" → everything you know about them")}`,
4048
+ "",
4049
+ ` ${cyan("warm")} Pre-warm an AI session with fresh context`,
4050
+ ` ${dim("Run before opening Claude/Cursor. Eliminates cold start.")}`,
4051
+ "",
4052
+ ` ${cyan("prayer")} Mosque timetable — next prayer in your status line`,
4053
+ ` ${dim("Paste or fetch. Shows countdown. Optional.")}`,
4005
4054
  ],
4006
4055
  },
4007
4056
  {
4008
- title: "CLI Commands",
4057
+ title: "CLI — Maintenance",
4009
4058
  body: [
4010
- `${bold("Terminal utilities no AI session needed.")}`,
4059
+ `${dim("Keep everything in sync without thinking about it.")}`,
4060
+ "",
4061
+ ` ${cyan("sync")} Update all agents to latest rules and skills`,
4062
+ ` ${dim("One command updates 16 agents. Shows what changed.")}`,
4011
4063
  "",
4012
- ` ${cyan("moveros pulse")} Dashboard — energy, tasks, streaks, blockers`,
4013
- ` ${cyan("moveros doctor")} Health check across all installed agents`,
4014
- ` ${cyan("moveros capture")} Quick capture — tasks, links, ideas from terminal`,
4015
- ` ${cyan("moveros who")} Entity memory lookuppeople, orgs, places`,
4016
- ` ${cyan("moveros sync")} Update all agents to latest rules/skills`,
4017
- ` ${cyan("moveros context")} See what each agent loads — rules, skills, tokens`,
4018
- ` ${cyan("moveros diff")} Engine file evolution via git history`,
4019
- ` ${cyan("moveros replay")} Session replay from Daily Notes`,
4020
- ` ${cyan("moveros settings")} View/edit config — ${dim("settings set <key> <val>")}`,
4021
- ` ${cyan("moveros backup")} Manual backup wizard (engine, areas, agents)`,
4022
- ` ${cyan("moveros restore")} Restore from backup`,
4023
- ` ${cyan("moveros warm")} Pre-warm an AI session with context`,
4064
+ ` ${cyan("backup")} Backup Engine, Areas, or agent configs`,
4065
+ ` ${dim("With manifest. Knows what's in each backup.")}`,
4066
+ "",
4067
+ ` ${cyan("restore")} Restore from any backup selective, safe`,
4068
+ ` ${dim("Creates a safety backup before restoring.")}`,
4069
+ "",
4070
+ ` ${cyan("settings")} View/edit config from terminal`,
4071
+ ` ${dim("moveros settings set review_day sunday")}`,
4072
+ "",
4073
+ ` ${cyan("update")} Update CLI + workflows + skills in one go`,
4074
+ ` ${dim("Self-updates the CLI, then pulls latest payload.")}`,
4024
4075
  ],
4025
4076
  },
4026
4077
  {
4027
- title: "The Status Line",
4078
+ title: "16 Agents, One Brain",
4028
4079
  body: [
4029
- `${bold("Your life, glanceable. Always visible in Claude Code.")}`,
4080
+ `${dim("Install once. Every agent gets the same context.")}`,
4030
4081
  "",
4031
- ` ${dim("Line 1:")} Model · Context% · Project(branch) · Lines · Time · Cost`,
4032
- ` ${dim("Line 2:")} Next task · Progress · Vitality · Prayer · Last log`,
4033
- ` ${dim("Line 3:")} Rate limits (5hr + 7day + extra usage)`,
4082
+ `${dim("Full tier")} ${dim("(rules + skills + commands + hooks):")}`,
4083
+ ` Claude Code Cursor Cline Windsurf Gemini CLI`,
4084
+ ` Copilot Amazon Q OpenCode Kilo Code`,
4034
4085
  "",
4035
- `${dim("Features:")}`,
4036
- ` ${cyan("•")} Next unchecked task from today's Daily Note`,
4037
- ` ${cyan("•")} Strategic task count (vitality excluded)`,
4038
- ` ${cyan("•")} Vitality slot machine — rotates reminders every minute`,
4039
- ` ${cyan("•")} Next prayer time (if ${dim("show_prayer_times: true")} in settings)`,
4040
- ` ${cyan("•")} Time since last /log — so you never forget`,
4041
- ` ${cyan("•")} Rate limit bars with reset times`,
4086
+ `${dim("Enhanced tier")} ${dim("(rules + skills):")}`,
4087
+ ` Codex Amp Roo Code Antigravity`,
4042
4088
  "",
4043
- `All data from your vault. ${bold("No API calls")} except rate limits.`,
4089
+ `${dim("Basic tier")} ${dim("(rules only):")}`,
4090
+ ` Continue Aider`,
4091
+ "",
4092
+ "Switch editors whenever. Your Engine follows you.",
4093
+ `${cyan("moveros sync")} keeps them all current.`,
4044
4094
  ],
4045
4095
  },
4046
4096
  {
4047
- title: "Getting Started",
4097
+ title: "Get Started",
4048
4098
  body: [
4049
- `${bold("You're ready.")}`,
4099
+ `${bold("Five minutes to a system that remembers everything.")}`,
4050
4100
  "",
4051
- ` ${cyan("1.")} Run ${bold("/setup")} in any AI agent to build your Engine`,
4101
+ ` ${cyan("1.")} Run ${bold("/setup")} in your AI agent it'll interview you`,
4052
4102
  ` ${cyan("2.")} Run ${bold("/morning")} to start your first session`,
4053
4103
  ` ${cyan("3.")} Work. Build. Ship.`,
4054
- ` ${cyan("4.")} Run ${bold("/log")} to capture what happened`,
4104
+ ` ${cyan("4.")} Run ${bold("/log")} when you're done — captures everything`,
4055
4105
  ` ${cyan("5.")} Run ${bold("/plan-tomorrow")} before bed`,
4056
4106
  "",
4057
- `${dim("Quick tips:")}`,
4058
- ` ${cyan("•")} ${bold("Single Test")} — one thing that makes the day a win`,
4059
- ` ${cyan("•")} ${bold("Sacrifice")} — what you won't do today (as important as what you will)`,
4060
- ` ${cyan("")} The system gets smarter the more you use it`,
4061
- ` ${cyan("•")} Trust the Engine files they're your memory between sessions`,
4107
+ `${dim("Two things to know:")}`,
4108
+ ` ${bold("Single Test")} the one thing that makes today a win`,
4109
+ ` ${bold("Sacrifice")} — what you won't do (just as important)`,
4110
+ "",
4111
+ "The system learns from you. The more you use it, the sharper it gets.",
4062
4112
  "",
4063
- `${dim("moveros.dev")} ${dim("·")} ${dim("$49 one-time")} ${dim("·")} ${dim("updates included")}`,
4113
+ `${dim("moveros.dev")}`,
4064
4114
  ],
4065
4115
  },
4066
4116
  ];
4067
4117
 
4068
4118
  // Paginated display with keyboard navigation
4069
4119
  let page = 0;
4120
+ const seen = new Set();
4070
4121
 
4071
- function renderPage() {
4122
+ async function renderPage(animate) {
4072
4123
  const p = pages[page];
4073
- // Clear screen area
4074
4124
  w("\x1b[2J\x1b[H"); // clear screen, cursor to top
4075
4125
  ln();
4076
4126
 
@@ -4086,9 +4136,14 @@ async function cmdHelp(opts) {
4086
4136
  ln(` ${S.cyan}└${"─".repeat(56)}┘${S.reset}`);
4087
4137
  ln();
4088
4138
 
4089
- // Body
4090
- for (const line of p.body) {
4091
- ln(` ${line}`);
4139
+ // Body — animate on first visit, instant on revisit
4140
+ if (animate && !seen.has(page)) {
4141
+ for (const line of p.body) {
4142
+ await typeLine(line, 6);
4143
+ }
4144
+ seen.add(page);
4145
+ } else {
4146
+ for (const line of p.body) ln(` ${line}`);
4092
4147
  }
4093
4148
  ln();
4094
4149
  ln();
@@ -4103,7 +4158,6 @@ async function cmdHelp(opts) {
4103
4158
 
4104
4159
  return new Promise((resolve) => {
4105
4160
  if (!IS_TTY) {
4106
- // Non-interactive: dump all pages
4107
4161
  for (const p of pages) {
4108
4162
  ln(bold(`\n## ${p.title}\n`));
4109
4163
  for (const line of p.body) ln(` ${line}`);
@@ -4118,22 +4172,32 @@ async function cmdHelp(opts) {
4118
4172
  stdin.setEncoding("utf8");
4119
4173
  w(S.hide);
4120
4174
 
4121
- renderPage();
4175
+ let navigating = false;
4176
+ const go = async (newPage) => {
4177
+ if (navigating) return;
4178
+ navigating = true;
4179
+ page = newPage;
4180
+ await renderPage(true);
4181
+ navigating = false;
4182
+ };
4183
+
4184
+ go(0); // initial render with animation
4122
4185
 
4123
4186
  const handler = (data) => {
4187
+ if (navigating) return; // ignore input during animation
4124
4188
  if (data === "\x1b[C" || data === "l" || data === " ") {
4125
- if (page < pages.length - 1) { page++; renderPage(); }
4189
+ if (page < pages.length - 1) go(page + 1);
4126
4190
  } else if (data === "\x1b[D" || data === "h") {
4127
- if (page > 0) { page--; renderPage(); }
4191
+ if (page > 0) go(page - 1);
4128
4192
  } else if (data === "q" || data === "\x1b" || data === "\x03") {
4129
4193
  stdin.removeListener("data", handler);
4130
4194
  stdin.setRawMode(false);
4131
4195
  stdin.pause();
4132
4196
  w(S.show);
4133
- w("\x1b[2J\x1b[H"); // clear
4197
+ w("\x1b[2J\x1b[H");
4134
4198
  resolve();
4135
4199
  } else if (data === "\r" || data === "\n") {
4136
- if (page < pages.length - 1) { page++; renderPage(); }
4200
+ if (page < pages.length - 1) go(page + 1);
4137
4201
  else {
4138
4202
  stdin.removeListener("data", handler);
4139
4203
  stdin.setRawMode(false);
@@ -4154,27 +4218,20 @@ async function cmdTest(opts) { barLn(yellow("moveros test — not yet implemente
4154
4218
 
4155
4219
  // ─── Interactive Main Menu ────────────────────────────────────────────────────
4156
4220
  async function cmdMainMenu() {
4157
- const categories = [
4158
- { header: "Setup", cmds: ["install", "update"] },
4159
- { header: "Dashboard", cmds: ["pulse", "replay", "diff"] },
4160
- { header: "Agents", cmds: ["doctor", "sync", "context", "warm"] },
4161
- { header: "Capture", cmds: ["capture", "who"] },
4162
- { header: "System", cmds: ["settings", "prayer", "backup", "restore", "help"] },
4221
+ const menuOrder = [
4222
+ "install", "update",
4223
+ "pulse", "replay", "diff",
4224
+ "doctor", "sync", "context", "warm",
4225
+ "capture", "who",
4226
+ "settings", "prayer", "backup", "restore", "help",
4163
4227
  ];
4164
4228
 
4165
- const menuItems = [];
4166
- for (const cat of categories) {
4167
- menuItems.push({ id: `_sep_${cat.header}`, name: `── ${cat.header}`, _separator: true });
4168
- for (const cmd of cat.cmds) {
4169
- const meta = CLI_COMMANDS[cmd];
4170
- if (!meta || meta.hidden) continue;
4171
- menuItems.push({
4172
- id: cmd,
4173
- name: `${cmd.padEnd(12)} ${dim(meta.desc)}`,
4174
- tier: `${cat.header}`,
4175
- });
4176
- }
4177
- }
4229
+ const menuItems = menuOrder
4230
+ .filter(cmd => { const m = CLI_COMMANDS[cmd]; return m && !m.hidden; })
4231
+ .map(cmd => ({
4232
+ id: cmd,
4233
+ name: `${cmd.padEnd(12)} ${dim(CLI_COMMANDS[cmd].desc)}`,
4234
+ }));
4178
4235
 
4179
4236
  question(`${bold("moveros")} ${dim("— choose a command")}`);
4180
4237
  barLn();
@@ -5020,9 +5077,9 @@ async function main() {
5020
5077
  } else if (method === "fetch") {
5021
5078
  barLn();
5022
5079
  const city = await textInput({ label: "City (e.g. London, Watford, Istanbul)", placeholder: "London" });
5023
- if (city === null) break;
5080
+ if (city === null) return;
5024
5081
  const country = await textInput({ label: "Country", placeholder: "United Kingdom" });
5025
- if (country === null) break;
5082
+ if (country === null) return;
5026
5083
  barLn();
5027
5084
 
5028
5085
  if (city && country) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mover-os",
3
- "version": "4.4.2",
3
+ "version": "4.4.3",
4
4
  "description": "The self-improving OS for AI agents. Turns Obsidian into an execution engine.",
5
5
  "bin": {
6
6
  "moveros": "install.js"