noah-cursor 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +36 -36
  2. package/dist/commands/add.d.ts.map +1 -1
  3. package/dist/commands/add.js +3 -3
  4. package/dist/commands/add.js.map +1 -1
  5. package/dist/commands/browse.d.ts.map +1 -1
  6. package/dist/commands/browse.js +7 -5
  7. package/dist/commands/browse.js.map +1 -1
  8. package/dist/commands/list.d.ts.map +1 -1
  9. package/dist/commands/list.js +54 -15
  10. package/dist/commands/list.js.map +1 -1
  11. package/dist/commands/search.d.ts.map +1 -1
  12. package/dist/commands/search.js +2 -2
  13. package/dist/commands/search.js.map +1 -1
  14. package/dist/constants/index.d.ts +6 -0
  15. package/dist/constants/index.d.ts.map +1 -1
  16. package/dist/constants/index.js +6 -0
  17. package/dist/constants/index.js.map +1 -1
  18. package/dist/core/program.js +2 -2
  19. package/dist/core/program.js.map +1 -1
  20. package/dist/metadata/store.d.ts +12 -0
  21. package/dist/metadata/store.d.ts.map +1 -1
  22. package/dist/metadata/store.js +61 -2
  23. package/dist/metadata/store.js.map +1 -1
  24. package/dist/noah-registry/manifest.json +85 -0
  25. package/dist/noah-registry/mcp/.gitkeep +0 -0
  26. package/dist/noah-registry/presets/.gitkeep +0 -0
  27. package/dist/noah-registry/prompts/.gitkeep +0 -0
  28. package/dist/noah-registry/rules/laravel-api/RULE.md +62 -0
  29. package/dist/noah-registry/rules/nextjs-marketing/RULE.md +52 -0
  30. package/dist/noah-registry/rules/nuxt-marketing/RULE.md +50 -0
  31. package/dist/noah-registry/rules/react-spa-dashboard/RULE.md +75 -0
  32. package/dist/noah-registry/rules/stack-architecture/RULE.md +28 -0
  33. package/dist/noah-registry/rules/test/RULE.md +16 -0
  34. package/dist/noah-registry/skills/commit-push/SKILL.md +193 -0
  35. package/dist/noah-registry/skills/larastan-fix/SKILL.md +203 -0
  36. package/dist/noah-registry/skills/nestjs-knip-fix/SKILL.md +147 -0
  37. package/dist/noah-registry/skills/nestjs-knip-fix/config/knip.nestjs.json +29 -0
  38. package/dist/noah-registry/skills/node-doctor-fix/SKILL.md +146 -0
  39. package/dist/noah-registry/skills/node-doctor-fix/config/node-doctor.knip.json +22 -0
  40. package/dist/noah-registry/skills/node-doctor-fix/scripts/node-doctor.mjs +393 -0
  41. package/dist/noah-registry/skills/react-doctor-fix/SKILL.md +185 -0
  42. package/dist/noah-registry/skills/test/SKILL.md +14 -0
  43. package/dist/services/doctor-service.js +3 -3
  44. package/dist/services/doctor-service.js.map +1 -1
  45. package/dist/services/install-service.d.ts +9 -1
  46. package/dist/services/install-service.d.ts.map +1 -1
  47. package/dist/services/install-service.js +22 -7
  48. package/dist/services/install-service.js.map +1 -1
  49. package/dist/services/registry-loader.d.ts +7 -1
  50. package/dist/services/registry-loader.d.ts.map +1 -1
  51. package/dist/services/registry-loader.js +30 -11
  52. package/dist/services/registry-loader.js.map +1 -1
  53. package/dist/ui/banner.d.ts +1 -1
  54. package/dist/ui/banner.d.ts.map +1 -1
  55. package/dist/ui/banner.js +11 -8
  56. package/dist/ui/banner.js.map +1 -1
  57. package/dist/utils/registry.d.ts +22 -0
  58. package/dist/utils/registry.d.ts.map +1 -0
  59. package/dist/utils/registry.js +95 -0
  60. package/dist/utils/registry.js.map +1 -0
  61. package/package.json +4 -3
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "noah-registry",
3
+ "version": "1.1.0",
4
+ "description": "Noah Cursor registry — add your skills, rules, prompts, MCP configs, and presets here",
5
+ "author": "Noah Poli",
6
+ "skills": [
7
+ {
8
+ "id": "test",
9
+ "version": "1.0.0",
10
+ "description": "Sample skill for verifying noah-cursor installs",
11
+ "tags": ["test", "sample"]
12
+ },
13
+ {
14
+ "id": "commit-push",
15
+ "version": "1.0.0",
16
+ "description": "Stage all changes, group by category, draft a linepush-style commit, commit, and push",
17
+ "tags": ["git", "commit", "push", "conventional-commits"]
18
+ },
19
+ {
20
+ "id": "react-doctor-fix",
21
+ "version": "1.0.0",
22
+ "description": "Run react-doctor, fix all findings, and verify features still work",
23
+ "tags": ["react", "react-doctor", "lint", "refactor", "qa"]
24
+ },
25
+ {
26
+ "id": "larastan-fix",
27
+ "version": "1.0.0",
28
+ "description": "Run Larastan on Laravel, fix all findings, and verify features still work",
29
+ "tags": ["laravel", "php", "larastan", "phpstan", "qa"]
30
+ },
31
+ {
32
+ "id": "nestjs-knip-fix",
33
+ "version": "1.0.0",
34
+ "description": "Run Knip on NestJS, fix unused code/deps, and verify features still work",
35
+ "tags": ["nestjs", "knip", "node", "typescript", "qa"]
36
+ },
37
+ {
38
+ "id": "node-doctor-fix",
39
+ "version": "1.0.0",
40
+ "description": "Run bundled node-doctor (Knip + hygiene), fix findings, verify features still work",
41
+ "tags": ["node", "knip", "doctor", "qa", "cli"]
42
+ }
43
+ ],
44
+ "rules": [
45
+ {
46
+ "id": "test",
47
+ "version": "1.0.0",
48
+ "description": "Sample rule for verifying noah-cursor installs",
49
+ "tags": ["test", "sample"]
50
+ },
51
+ {
52
+ "id": "stack-architecture",
53
+ "version": "1.0.0",
54
+ "description": "When to use React SPA dashboards, Laravel APIs, and Next/Nuxt marketing sites",
55
+ "tags": ["architecture", "stack"]
56
+ },
57
+ {
58
+ "id": "react-spa-dashboard",
59
+ "version": "1.0.0",
60
+ "description": "React client-side SPA rules for dashboards consuming a Laravel API",
61
+ "tags": ["react", "spa", "dashboard", "typescript", "tanstack-query"]
62
+ },
63
+ {
64
+ "id": "laravel-api",
65
+ "version": "1.0.0",
66
+ "description": "Laravel API-only backend rules for headless SPA clients",
67
+ "tags": ["laravel", "php", "api", "sanctum"]
68
+ },
69
+ {
70
+ "id": "nextjs-marketing",
71
+ "version": "1.0.0",
72
+ "description": "Next.js App Router rules for marketing and branding websites",
73
+ "tags": ["nextjs", "marketing", "seo", "branding"]
74
+ },
75
+ {
76
+ "id": "nuxt-marketing",
77
+ "version": "1.0.0",
78
+ "description": "Nuxt 3+ rules for marketing and branding websites",
79
+ "tags": ["nuxt", "vue", "marketing", "seo", "branding"]
80
+ }
81
+ ],
82
+ "prompts": [],
83
+ "mcp": [],
84
+ "presets": []
85
+ }
File without changes
File without changes
File without changes
@@ -0,0 +1,62 @@
1
+ ---
2
+ description: Laravel API-only backend rules for SPA dashboards and headless clients
3
+ globs: "**/*.php"
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Laravel API
8
+
9
+ Use this rule when Laravel is an **API-only** backend serving a React SPA (or other clients). Prefer JSON APIs over Blade/Livewire/Inertia unless the user explicitly asks for them.
10
+
11
+ Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`laravel-php-83`) plus Laravel API conventions (Sanctum, Form Requests, Resources).
12
+
13
+ ## Role of this app
14
+
15
+ - Laravel exposes **REST/JSON endpoints** (or thin action controllers).
16
+ - The React dashboard is the primary UI client.
17
+ - Marketing sites (Next/Nuxt) may call public read-only endpoints when needed.
18
+ - Do not build admin UIs in Blade unless requested.
19
+
20
+ ## PHP & Laravel conventions
21
+
22
+ - PHP 8.2+ features where appropriate (typed properties, enums, readonly, constructor promotion).
23
+ - Follow PSR-12 and Laravel naming:
24
+ - Classes: PascalCase
25
+ - Methods: camelCase
26
+ - DB columns / request keys: snake_case (or consistently camelCase in API resources — pick one and stick to it)
27
+ - Prefer helpers when clearer; keep controllers thin.
28
+ - Pint for formatting.
29
+
30
+ ## HTTP layer
31
+
32
+ - Validate with **Form Request** classes — not ad-hoc `$request->validate()` in fat controllers.
33
+ - Return **API Resources** / Resource collections for JSON shaping.
34
+ - Use API route files (`routes/api.php`) and version when needed (`/api/v1/...`).
35
+ - Prefer invokable / single-action controllers for complex endpoints when it improves clarity.
36
+ - Consistent error JSON shape for `401`, `403`, `404`, `422`, `500`.
37
+
38
+ ## Auth
39
+
40
+ - Prefer **Laravel Sanctum** for SPA cookie auth (same-site) or token auth for mobile/third-party.
41
+ - Protect routes with `auth:sanctum` (or project guard).
42
+ - Authorize with Policies / Gates — never “check role in controller ad hoc” without a policy when domain rules grow.
43
+
44
+ ## Domain & data
45
+
46
+ - Eloquent models stay focused; push heavy workflows to Actions/Services.
47
+ - Use migrations for schema; factories/seeders for local data.
48
+ - Eager-load relations to avoid N+1 (`with`, `loadMissing`).
49
+ - Database transactions around multi-model writes.
50
+ - Queues for email, webhooks, and slow side effects.
51
+
52
+ ## Testing
53
+
54
+ - Feature tests for API endpoints (`postJson`, `getJson`, assert JSON structure).
55
+ - Cover auth boundaries and validation failures.
56
+ - Prefer Pest or PHPUnit per project norm.
57
+
58
+ ## Do not
59
+
60
+ - Do not default to Livewire / Inertia / Blade admin panels for this stack.
61
+ - Do not return unfiltered Eloquent models when a Resource is safer.
62
+ - Do not put React/Next/Nuxt frontend code into the Laravel repo unless the monorepo already does that by convention.
@@ -0,0 +1,52 @@
1
+ ---
2
+ description: Next.js rules for marketing and branding websites (SEO, App Router, content pages)
3
+ globs: "**/*.{tsx,ts,jsx,js,mdx}"
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Next.js Marketing / Branding
8
+
9
+ Use this rule for **marketing and branding websites** built with Next.js (App Router). Optimize for SEO, performance, and content-driven pages — not authenticated SPA dashboards.
10
+
11
+ Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`nextjs-app-router`, `nextjs-14-tailwind-seo`).
12
+
13
+ ## When to use Next.js here
14
+
15
+ - Marketing sites, landing pages, brand storytelling, blogs, campaigns.
16
+ - Prefer SSG/SSR and strong SEO.
17
+ - Dashboard/admin apps should use the **React SPA** rule + Laravel API instead.
18
+
19
+ ## App Router defaults
20
+
21
+ - Server Components by default; add `'use client'` only for interactivity.
22
+ - Use `layout.tsx`, `page.tsx`, `loading.tsx`, `error.tsx`, `not-found.tsx`.
23
+ - Colocate route UI under `app/`; keep shared UI in `components/`.
24
+ - Use `next/image` and `next/font`.
25
+ - Prefer Tailwind (or the project design system) over ad-hoc CSS.
26
+
27
+ ## SEO & content
28
+
29
+ - Define `metadata` / `generateMetadata` per page (title, description, Open Graph, Twitter).
30
+ - Semantic HTML (`main`, `header`, `nav`, `section`, `article`).
31
+ - Accessible landmarks, focus states, and image `alt` text.
32
+ - Static generation for mostly-static pages; revalidate when CMS/API content changes.
33
+ - Sitemap and `robots.txt` when the site is public.
34
+
35
+ ## Performance
36
+
37
+ - Avoid shipping large client bundles on marketing pages.
38
+ - Lazy-load below-the-fold interactive widgets.
39
+ - Keep third-party scripts minimal (analytics via Next script strategy).
40
+ - Optimize LCP: hero image priority, restrained font loading.
41
+
42
+ ## Data
43
+
44
+ - Fetch in Server Components with caching/`revalidate` as appropriate.
45
+ - If calling the Laravel API for public content, keep tokens server-side only.
46
+ - Do not expose admin credentials to the browser.
47
+
48
+ ## Do not
49
+
50
+ - Do not turn a marketing site into a full authenticated dashboard SPA inside Next unless explicitly requested.
51
+ - Do not use client components for purely static content.
52
+ - Do not skip metadata on public pages.
@@ -0,0 +1,50 @@
1
+ ---
2
+ description: Nuxt rules for marketing and branding websites (SEO, content, Vue Composition API)
3
+ globs: "**/*.{vue,ts,js,mjs}"
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Nuxt Marketing / Branding
8
+
9
+ Use this rule for **marketing and branding websites** built with Nuxt 3+. Optimize for SEO, content pages, and brand experiences — not authenticated SPA dashboards.
10
+
11
+ Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`vue-3-nuxt-3-typescript`, `vue3-composition-api`).
12
+
13
+ ## When to use Nuxt here
14
+
15
+ - Marketing sites, landings, brand sites, content-heavy Vue stacks.
16
+ - Prefer Nuxt's SSR/SSG and SEO utilities.
17
+ - Dashboard/admin apps should use the **React SPA** rule + Laravel API instead (unless the team explicitly chooses a Nuxt SPA dashboard).
18
+
19
+ ## Nuxt conventions
20
+
21
+ - Vue 3 **Composition API** with `<script setup lang="ts">`.
22
+ - Use Nuxt file-based routing, layouts, plugins, and middleware.
23
+ - Prefer auto-imported composables; keep shared logic in `composables/`.
24
+ - Runtime config for public/private env (`useRuntimeConfig`) — never hardcode secrets.
25
+ - Tailwind (or project design system) for styling; keep utility usage consistent.
26
+
27
+ ## SEO & content
28
+
29
+ - Use `useSeoMeta` / `useHead` (or Nuxt SEO module) on every public page.
30
+ - Semantic HTML and accessible navigation.
31
+ - Prefer SSG/ISR-style rendering for mostly static marketing pages.
32
+ - Optimize images (Nuxt Image) and fonts.
33
+
34
+ ## Data fetching
35
+
36
+ - Prefer `useAsyncData` / `useFetch` with clear keys.
37
+ - Cache and refresh intentionally; avoid waterfall client fetches for hero content.
38
+ - If consuming the Laravel API for public content, keep private credentials on the server.
39
+
40
+ ## Performance
41
+
42
+ - Lazy-load non-critical client islands.
43
+ - Keep marketing pages lean — minimize client-only plugins.
44
+ - Review payload size for route data.
45
+
46
+ ## Do not
47
+
48
+ - Do not default to a client-only SPA mode for public brand pages.
49
+ - Do not mix React dashboard patterns into Nuxt marketing code.
50
+ - Do not skip SEO meta on indexable pages.
@@ -0,0 +1,75 @@
1
+ ---
2
+ description: React client-side SPA rules for dashboards and admin apps that talk to a Laravel API
3
+ globs: "**/*.{tsx,ts,jsx,js}"
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # React SPA Dashboard
8
+
9
+ Use this rule for **client-side SPA dashboards** (Vite + React + TypeScript). The UI is a SPA; the backend is a separate **Laravel API**. Do not introduce Next.js App Router, SSR, or server components here.
10
+
11
+ Sources synthesized from [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) (`react.mdc`, `typescript-react`, `react-query`) and modern SPA practice.
12
+
13
+ ## Architecture
14
+
15
+ - Treat this app as a **browser SPA** only — no SSR, no `app/` router, no RSC.
16
+ - Call the Laravel API over HTTPS with a typed client (`fetch` / axios / ky).
17
+ - Prefer feature folders over dumping everything in `components/`.
18
+
19
+ Suggested structure:
20
+
21
+ ```text
22
+ src/
23
+ app/ # providers, router, layout shell
24
+ features/ # domain features (auth, users, billing…)
25
+ <feature>/
26
+ api/
27
+ components/
28
+ hooks/
29
+ types.ts
30
+ shared/ # ui primitives, utils, config
31
+ pages/ or routes/ # route-level screens
32
+ ```
33
+
34
+ ## Components & TypeScript
35
+
36
+ - Functional components only; keep them small and focused.
37
+ - Prefer explicit props interfaces; avoid `React.FC` unless needed.
38
+ - Extract reusable logic into custom hooks.
39
+ - Use composition over inheritance; co-locate feature UI with its hooks/api.
40
+ - Strict TypeScript; avoid `any`.
41
+
42
+ ## Data fetching (dashboard)
43
+
44
+ - Use **TanStack Query (React Query)** for server state.
45
+ - Put `QueryClientProvider` at the root.
46
+ - Custom hooks for queries/mutations (`useUsersQuery`, `useUpdateUserMutation`).
47
+ - Stable query keys; invalidate after mutations.
48
+ - Handle loading, empty, and error states explicitly.
49
+ - Prefer optimistic updates only when rollback is safe.
50
+
51
+ ## Auth & API boundary
52
+
53
+ - Store tokens/session per project convention (httpOnly cookie preferred when Laravel Sanctum SPA cookie auth is used; otherwise Bearer token with secure storage).
54
+ - Centralize API base URL via `import.meta.env`.
55
+ - Never hardcode secrets; never commit `.env`.
56
+ - Map Laravel validation errors (`422`) into form field errors.
57
+
58
+ ## UI & UX for dashboards
59
+
60
+ - Tables, filters, and forms should be keyboard-accessible.
61
+ - Use controlled forms; libraries (React Hook Form + Zod) for complex forms.
62
+ - Show skeleton/loading states for slow endpoints.
63
+ - Route-level code splitting with `React.lazy` / dynamic import when screens are heavy.
64
+
65
+ ## State
66
+
67
+ - Local UI state: `useState` / `useReducer`.
68
+ - Server state: TanStack Query — not Redux.
69
+ - Cross-cutting client UI state (theme, sidebar): lightweight store (Zustand) or context — only when props become painful.
70
+
71
+ ## Do not
72
+
73
+ - Do not add Next.js, Nuxt, or Laravel Blade into this SPA.
74
+ - Do not put business rules that belong on the API into the client.
75
+ - Do not fetch without caching strategy on list/detail dashboard screens.
@@ -0,0 +1,28 @@
1
+ ---
2
+ description: Stack selection rule for React SPA dashboards, Laravel APIs, and Next/Nuxt marketing sites
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Noah Stack Architecture
7
+
8
+ Use this when choosing or mixing frontends and backends in Noah Poli projects.
9
+
10
+ ## Default split
11
+
12
+ | Surface | Stack | Rule to apply |
13
+ |---------|-------|---------------|
14
+ | Dashboard / admin (authenticated SPA) | **React** client-side SPA (Vite) | `react-spa-dashboard` |
15
+ | Backend API | **Laravel** API-only | `laravel-api` |
16
+ | Marketing / branding / content site | **Next.js** *or* **Nuxt** | `nextjs-marketing` / `nuxt-marketing` |
17
+
18
+ ## Principles
19
+
20
+ 1. Dashboards are **SPAs** talking to Laravel over JSON — not Inertia/Livewire unless requested.
21
+ 2. Marketing sites prioritize **SEO and content**; pick Next or Nuxt per team preference, not both in one site.
22
+ 3. Keep API contracts stable; version when breaking.
23
+ 4. Do not force dashboard auth patterns onto public marketing pages.
24
+ 5. Share design tokens/brand guidelines across marketing and dashboard when possible, but keep codebases/boundaries clear.
25
+
26
+ ## Sources
27
+
28
+ Curated from community Cursor rules (notably [PatrickJS/awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules)) and adapted to this architecture.
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Sample rule for verifying noah-cursor installs
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Test Rule
7
+
8
+ This is a sample Cursor rule used to verify `noah-cursor` installation.
9
+
10
+ Replace this with your own rules when you are ready.
11
+
12
+ ## Guidelines
13
+
14
+ - Prefer clear, direct answers
15
+ - Keep changes focused on the requested task
16
+ - Do not invent requirements that were not asked for
@@ -0,0 +1,193 @@
1
+ ---
2
+ name: commit-push
3
+ description: >-
4
+ Stages all changes, groups files by category, drafts a linepush-style
5
+ conventional commit message, commits, and pushes. Use when the user runs
6
+ /commit-push, asks to commit and push, or wants an AI-generated commit from
7
+ the current working tree.
8
+ disable-model-invocation: true
9
+ ---
10
+
11
+ # /commit-push
12
+
13
+ Stage everything, categorize the changeset, write a **linepush-style** commit
14
+ message, commit, then push.
15
+
16
+ ## Workflow
17
+
18
+ Copy this checklist and track progress:
19
+
20
+ ```
21
+ Commit-Push Progress:
22
+ - [ ] 1. Inspect repo state
23
+ - [ ] 2. Stage all changes
24
+ - [ ] 3. Categorize / group files
25
+ - [ ] 4. Draft commit message
26
+ - [ ] 5. Commit
27
+ - [ ] 6. Push
28
+ ```
29
+
30
+ ### 1. Inspect repo state
31
+
32
+ Run in parallel:
33
+
34
+ ```bash
35
+ git status --short
36
+ git diff
37
+ git diff --cached
38
+ git log -5 --oneline
39
+ git branch -vv
40
+ ```
41
+
42
+ Abort early if:
43
+
44
+ - Not a git repository
45
+ - No changes to commit (clean working tree and empty index)
46
+ - Secrets are about to be committed (`.env`, credentials, private keys, tokens) — warn and exclude them unless the user explicitly insists
47
+
48
+ ### 2. Stage all changes
49
+
50
+ ```bash
51
+ git add -A
52
+ ```
53
+
54
+ Re-check:
55
+
56
+ ```bash
57
+ git status --short
58
+ git diff --cached --stat
59
+ ```
60
+
61
+ Do **not** use `--no-verify`, amend, force-push, or rewrite history unless the user explicitly asks.
62
+
63
+ ### 3. Categorize / group files
64
+
65
+ Group every staged path into one or more of these buckets (a file may only belong to one primary bucket):
66
+
67
+ | Bucket | Match hints |
68
+ |--------|-------------|
69
+ | `feat` | New user-facing capability, new modules/commands |
70
+ | `fix` | Bug fixes, regressions, error handling corrections |
71
+ | `refactor` | Restructures with no intended behavior change |
72
+ | `docs` | README, markdown, comments-only docs |
73
+ | `test` | `*.test.*`, `*.spec.*`, `__tests__`, `src/tests` |
74
+ | `style` | Formatting, lint autofix, whitespace-only |
75
+ | `chore` | Tooling, configs, ignore files, housekeeping |
76
+ | `ci` | `.github/`, workflows, CI scripts |
77
+ | `build` | `package.json`, lockfiles, tsconfig, bundler config |
78
+ | `perf` | Performance-only changes |
79
+ | `ui` | TUI/CLI presentation, banners, styling assets |
80
+ | `assets` | Images, static media |
81
+
82
+ Also infer a **scope** from paths when clear, e.g.:
83
+
84
+ - `src/commands/` → `cli`
85
+ - `src/ui/` → `ui`
86
+ - `src/services/` → `services`
87
+ - `skills/` → `skills`
88
+ - `rules/` → `rules`
89
+ - root config / package → `repo`
90
+
91
+ Present a short grouping summary to the user before committing, for example:
92
+
93
+ ```text
94
+ Grouped changes
95
+ feat (cli): src/commands/browse.ts, src/ui/*
96
+ docs: README.md
97
+ assets: assets/noah-cursor-banner.png
98
+ build: package.json, package-lock.json
99
+ ```
100
+
101
+ ### 4. Draft commit message (linepush style)
102
+
103
+ Use **Conventional Commits**, inspired by [linepush](https://www.npmjs.com/package/linepush):
104
+
105
+ ```text
106
+ type(scope): imperative summary
107
+
108
+ - grouped change bullet
109
+ - grouped change bullet
110
+ ```
111
+
112
+ Rules:
113
+
114
+ 1. Pick the **primary** `type` from the dominant bucket (or the highest-impact user-facing change).
115
+ 2. `scope` is optional but preferred when one area dominates; omit rather than invent noise.
116
+ 3. Summary: imperative, ≤72 chars, no trailing period, focus on **why/impact** not file lists.
117
+ 4. Body: bullets grouped by category when multiple buckets exist.
118
+ 5. Match the repository’s recent `git log` tone when possible.
119
+ 6. Never commit secrets.
120
+
121
+ **Examples:**
122
+
123
+ Single-focus:
124
+
125
+ ```text
126
+ feat(browse): add interactive registry browse TUI
127
+
128
+ - add category and asset multi-select menus
129
+ - wire installFromSelections into browse flow
130
+ ```
131
+
132
+ Multi-group:
133
+
134
+ ```text
135
+ feat(cli): ship browse TUI and README branding
136
+
137
+ - feat: interactive browse command and UI modules
138
+ - docs: document browse usage in README
139
+ - assets: add NOAH Cursor README banner
140
+ - build: add figlet, boxen, and gradient-string
141
+ ```
142
+
143
+ ### 5. Commit
144
+
145
+ Show the drafted message, then commit with a HEREDOC:
146
+
147
+ ```bash
148
+ git commit -m "$(cat <<'EOF'
149
+ type(scope): summary
150
+
151
+ - bullet
152
+ - bullet
153
+ EOF
154
+ )"
155
+ ```
156
+
157
+ If a pre-commit hook fails, fix the issue and create a **new** commit (do not amend unless the user explicitly asks and amend rules allow it).
158
+
159
+ Verify:
160
+
161
+ ```bash
162
+ git status
163
+ ```
164
+
165
+ ### 6. Push
166
+
167
+ Push the current branch to its upstream:
168
+
169
+ ```bash
170
+ git push -u origin HEAD
171
+ ```
172
+
173
+ If upstream already tracks the branch:
174
+
175
+ ```bash
176
+ git push
177
+ ```
178
+
179
+ Do **not** `push --force` unless the user explicitly requests it.
180
+
181
+ On success, report:
182
+
183
+ - commit hash / subject
184
+ - grouping summary
185
+ - remote branch URL if available (`gh` / remote)
186
+
187
+ ## Safety
188
+
189
+ - Never update git config
190
+ - Never skip hooks unless explicitly requested
191
+ - Never force-push `main` / `master`
192
+ - Warn before committing `.env`, key files, or credential JSON
193
+ - If push needs auth, stop and tell the user what to run locally