aayushus-skills 1.1.0 → 1.2.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.
package/README.md CHANGED
@@ -4,23 +4,42 @@ A zero-dependency interactive CLI to install custom AI agent configurations, des
4
4
 
5
5
  ## Installation / Usage
6
6
 
7
- Run the following command in your target project directory:
7
+ Run the following command in your target project directory to open the interactive checklist menu:
8
8
 
9
9
  ```bash
10
10
  npx aayushus-skills
11
11
  ```
12
12
 
13
- Or to bypass the interactive menu and install everything automatically:
14
-
13
+ ### Options & Subcommands
14
+ You can bypass the interactive menu to install specific components directly:
15
+
16
+ - **All Components**: `npx aayushus-skills all`
17
+ - **Prism Design System**: `npx aayushus-skills design`
18
+ - **Development Guidelines**: `npx aayushus-skills guidelines`
19
+ - **Solo Developer AI SOP**: `npx aayushus-skills sop`
20
+ - **Cursor Rules**: `npx aayushus-skills cursor`
21
+ - **Antigravity Rules**: `npx aayushus-skills antigravity`
22
+ - **Devin Rules**: `npx aayushus-skills devin`
23
+ - **Claude Rules**: `npx aayushus-skills claude`
24
+ - **Codex/Copilot Rules**: `npx aayushus-skills codex`
25
+
26
+ ### Preview changes (Dry Run)
27
+ Add `-d` or `--dry-run` to preview the files that would be installed without making any modifications to disk:
15
28
  ```bash
16
- npx aayushus-skills all
29
+ npx aayushus-skills --dry-run
30
+ npx aayushus-skills design --dry-run
17
31
  ```
18
32
 
19
33
  ## Included Components
20
34
 
21
- - **AI Agent Configurations**: Configures `.claudecoderc` (for global rules/prompts), `.windsurfrules`, `.windsurfrules-global`, `CLAUDE.md`, and `.github/copilot-instructions.md`.
35
+ - **AI Agent Configurations**: Custom-tailored rule files matching your selected editor:
36
+ - **Antigravity**: `.antigravityrules`
37
+ - **Devin**: `.devin/rules/rules.md` & `AGENTS.md`
38
+ - **Cursor**: `.cursorrules`
39
+ - **Claude**: `CLAUDE.md`
40
+ - **Codex/Copilot**: `.github/copilot-instructions.md`
22
41
  - **Prism Design System**: Copies zero-decision B2B/SaaS design components and styling tokens (CSS/TSX) to `./src/design/` or `./design/`.
23
- - **Development Guidelines**: Copies standard development docs (API Design, Architecture, Code Quality, Container Guidelines, Performance, Security, etc.) to `./docs/guidelines/`.
42
+ - **Development Guidelines**: Copies standard stack-agnostic development reference docs (API Design, Architecture, Code Quality, Security, Performance, etc.) to `./docs/guidelines/`.
24
43
  - **Solo Developer AI SOP**: Installs the `Solo-Developer-AI-SOP.md` file in the project root containing guidelines for budget management and AI escalation.
25
44
 
26
45
  ---
@@ -1,94 +1,51 @@
1
1
  # Codebase rules — read before every response
2
2
 
3
+ > [!IMPORTANT]
4
+ > **CUSTOMIZATION NOTICE**: This rules file contains guidelines for development. Update the Stack and Hard Rules sections in your local project rules file to match your project's actual stack.
5
+
3
6
  ## Stack
4
- TypeScript (strict) + Node.js + Express + Prisma + PostgreSQL + Redis + BullMQ.
5
- AI service: Python 3.12 + FastAPI (separate process).
6
- Frontend: Next.js + React.
7
- Design system: Prism (tokens.css + components.tsx — see design/ skill folder).
7
+ <!-- CUSTOMIZE: Replace this section with your project's actual stack -->
8
+ - **Frontend/Backend**: [e.g., Next.js 14 App Router, React + Vite, Express, FastAPI]
9
+ - **Database/ORM**: [e.g., Drizzle ORM, Prisma, SQLAlchemy]
10
+ - **Primary Database**: [e.g., PostgreSQL, SQLite, MySQL]
11
+ - **Async Queue**: [e.g., BullMQ, Celery, None/Direct Background Streaming]
12
+ - **Design System**: Prism (tokens.css + components.tsx)
8
13
 
9
14
  ---
10
15
 
11
16
  ## HARD RULES — never violate these
12
17
 
13
- ### Data & multi-tenancy (existential)
14
- - Every Prisma query that touches tenant data MUST filter by `tenantId` enforced by middleware, but always verify
15
- - Never use `$queryRaw` or `$executeRaw` unless explicitly reviewed use parameterised Prisma queries only
16
- - Shared database, shared schema, `tenantId` column never schema-per-tenant
17
- - Soft deletes only never hard-delete tenant data (`deletedAt` timestamp)
18
- - No `ON DELETE CASCADE` on tenant-scoped tables
19
- - Unauthorised reads return 404, not 403 — prevents existence leak
20
- - `tenantId` comes from the session, never from URL params or request body
21
-
22
- ### IDs & pagination
23
- - ULIDs for all primary keys — not auto-increment integers, not UUIDs
24
- - Cursor-based pagination only never offset/limit on large tables
25
- - Max page size: 100 items, default: 25
26
-
27
- ### Async & queuing
28
- - Any operation > 1 second must be async via BullMQ never block an HTTP handler
29
- - Only queue: BullMQ on Redis not Kafka, SQS, RabbitMQ
30
- - Use outbox pattern for events (write to DB first, worker publishes) never `queue.add()` directly from HTTP handlers
31
- - Idempotency keys on every mutation that has external side effects
32
- - Every async job: 5 retries max, exponential backoff (2s base), idempotent
33
-
34
- ### Network & timeouts
35
- - Every network call has a timeout: 10s (internal HTTP), 5s (fast external APIs), 30s (slow), 60s (AI — async only)
36
- - Retries only on 5xx and network errors — NEVER retry 4xx
37
- - Circuit breaker: open after 5 failures in 10s, stay open 30s
38
-
39
- ### Auth & security
40
- - Passwords: Argon2id only (`time=3, memory=64MB, parallelism=4`) — never bcrypt, never MD5, never SHA-1
41
- - API keys: Argon2id hashed before storage, displayed once only
42
- - Sessions: opaque 256-bit random tokens stored in Redis — NOT JWTs for user sessions
43
- - Session rotation on: login, logout, MFA completion, role change
44
- - Password reset does NOT log the user in — they re-authenticate after
45
- - Never reveal whether an email exists — always respond `200 RESET_EMAIL_SENT_IF_EXISTS`
46
- - Failed logins: lock account after 10 failures, rate-limit 5/hour per account
47
- - MFA required for `owner` and `admin` roles (TOTP, RFC 6238)
48
- - Role changes require dedicated endpoint — never via generic PATCH, user cannot change own role
49
- - Admin impersonation TTL: 1 hour max
50
-
51
- ### Input & output
52
- - Validate every input at every boundary with Zod (TypeScript) or Pydantic `.strict()` (Python)
53
- - All strings must have max length — prevents DoS
54
- - File uploads: magic-number type validation, ClamAV virus scan, re-encode images (strips EXIF), store on object storage only (signed URLs)
55
- - Never use `dangerouslySetInnerHTML` without DOMPurify + explicit code-review tag
56
- - AI output: validate with Zod schema before use, never trust for authorisation decisions
57
- - SSRF: DNS-resolve before fetching, reject private IPs
58
-
59
- ### Secrets & config
60
- - All secrets in Doppler or AWS Secrets Manager — never in code, never in `.env` files committed to git
61
- - One place reads `process.env`: `shared/config.ts` with Zod schema — nowhere else
62
- - No secrets in logs, errors, or API responses
63
- - Secrets rotated quarterly — dual-key rotation window
64
-
65
- ### Logging & observability
66
- - Structured JSON logs only — required fields: `timestamp`, `level`, `service`, `correlationId`, `tenantId`, `userId`, `message`
67
- - Correlation ID propagates through all logs, queue jobs, cross-service calls, and audit entries
68
- - Audit log is append-only — 7-year retention, no UPDATE/DELETE at DB role level
69
- - Every route emits: `http_requests_total`, `http_request_duration_seconds`
70
-
71
- ### API design
72
- - REST + JSON — no GraphQL unless multiple first-party clients with wildly different data needs
73
- - URL versioning: `/api/v1/`, `/api/v2/` — not header-based
74
- - Standard error envelope: `{ code, message, correlationId, details }`
75
- - Rate limits: 100 req/60s per user (default), 5/60s for login and password-reset
18
+ ### Data & Tenancy (Database Rules)
19
+ - **Tenancy**: If the project is multi-tenant, every database query touching tenant data MUST filter by `tenantId` (typically enforced via query middleware/middleware helpers). If single-tenant, ignore tenant constraints.
20
+ - **ORM & Raw Queries**: Prefer parameterized query builder/ORM methods. Never use raw SQL statements unless parameterized, type-safe, and explicitly reviewed.
21
+ - **Deletes**: Default to soft deletes (`deletedAt` timestamp) for business-critical data; avoid hard deletion unless explicitly requested.
22
+ - **Primary Keys**: Align with the project database design (e.g., ULIDs for distributed/multi-tenant systems, UUIDs, or Serial Auto-Incrementing Integers for standard/monolithic tables).
23
+
24
+ ### Async & Queuing
25
+ - **Long-Running Operations**: Any operation taking > 1 second should run asynchronously in a background worker (e.g., BullMQ, Celery, or background threads depending on the stack) so the main HTTP thread remains responsive.
26
+ - **Reliability**: Ensure background tasks have maximum retries (e.g., 5 retries with exponential backoff) and are designed to be idempotent.
27
+
28
+ ### Network & Timeouts
29
+ - **Timeouts**: Every external network call must have a timeout configured (e.g., 10s for internal services, 5s for fast APIs, 30s-60s for slow/AI APIs).
30
+ - **Retries**: Retry only on 5xx server errors and network dropouts. Never retry client-side 4xx errors.
31
+
32
+ ### Auth & Security
33
+ - **Passwords & Hashing**: Use secure modern hashing algorithms (e.g., Argon2id or equivalent standard platform hashing library) for passwords and API keys.
34
+ - **Sessions**: Prefer secure session storage (e.g., server-side session stores) over JWTs for user sessions where revocability is needed.
35
+ - **Input Validation**: Validate 100% of inputs at all system boundaries using schema validators (e.g., Zod, Pydantic) with strict checks.
36
+
37
+ ### Observability & Logging
38
+ - **Structured Logs**: Use structured JSON logging output containing standard metadata (`timestamp`, `level`, `correlationId`, `message`).
39
+ - **Correlation**: Propagate correlation IDs across system boundaries (HTTP request, queue worker, database query).
76
40
 
77
41
  ---
78
42
 
79
43
  ## CODE QUALITY RULES
80
44
 
81
- - TypeScript `strict: true` + `noUncheckedIndexedAccess` + `noImplicitOverride` — no exceptions
82
- - Never use `any` — use `unknown` with type narrowing
83
- - Never use TypeScript `enum` use string literal unions or `as const` objects
84
- - Functions 80 lines (aim 30), files 500 lines (aim 300)
85
- - No `console.log` — use the structured logger
86
- - No commented-out code — delete it or put it in a ticket
87
- - Boolean variables: `is/has/can/should` prefix
88
- - No N+1 queries — always use Prisma `include/select` or a JOIN
89
- - Error handling: throw exceptions for programming errors, return Result types for expected failures (validation, not-found, rate-limit)
90
- - Async/await always — never raw `.then()` chains
91
- - PR size: ≤ 400 lines unless generated code — split larger changes
45
+ - **Type Safety**: Enforce strict type checking in your language of choice (e.g., `strict: true` and `noUncheckedIndexedAccess` in TypeScript).
46
+ - **Narrowing**: Never bypass type safety with `any` — use `unknown` or union type narrowing.
47
+ - **Readability**: Keep functions concise (aim under 40 lines) and files focused (aim under 300 lines).
48
+ - **Error Handling**: Throw exceptions for programming/unexpected errors; return structured success/failure wrappers (e.g., Result/Either patterns) for expected business logic path failures.
92
49
 
93
50
  ---
94
51
 
@@ -100,56 +57,30 @@ Design system: Prism (tokens.css + components.tsx — see design/ skill folder).
100
57
  | API read (cached, single) | p95 < 200ms |
101
58
  | API read (list, paginated) | p95 < 300ms |
102
59
  | API write | p95 < 300ms |
103
- | LCP | ≤ 2.5s (p75) |
104
- | INP | 200ms (p75) |
105
- | CLS | ≤ 0.1 (p75) |
106
- | JS bundle (gzipped) | ≤ 170KB |
107
- | CSS bundle (gzipped) | ≤ 30KB |
60
+ | LCP / INP | ≤ 2.5s / ≤ 200ms |
61
+ | JS / CSS bundle (gzipped) | ≤ 170KB / ≤ 30KB |
108
62
  | DB query (indexed lookup) | ≤ 10ms |
109
- | DB query (list with joins) | ≤ 200ms |
110
63
 
111
64
  ---
112
65
 
113
66
  ## PRISM DESIGN SYSTEM RULES
114
67
 
115
- - Never hardcode colours, radii, or font names — use CSS tokens (`var(--token-name)`)
116
- - Never use pure `#000` or `#fff` as text use `rgb(55, 53, 47)` (off-black) via `var(--text-default)`
117
- - Three colour layers: neutrals (90% of pixels), product accent (`--accent`), AI gradient (`--ai-grad`) — never mix them
118
- - Sparkle star is the ONLY AI glyph no robots, brains, lightbulbs, or wands
119
- - Never import Tailwind, Radix defaults, or shadcn themes — use components.tsx from the design system
120
- - Touch targets: 44×44px minimum on mobile
121
- - Never use `font-size` < 16px on mobile inputs — iOS Safari zooms on focus
122
- - Dark mode: use `[data-theme="dark"]` selector overrides — never `@media (prefers-color-scheme: dark)` in component CSS
123
- - Every component must work in light AND dark mode
124
- - Spacing: multiples of 4px only — allowed values: 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64
68
+ - **Tokens**: Never hardcode colors, radii, or fontsalways use CSS design tokens (`var(--token-name)`).
69
+ - **Themes**: Implement dark/light mode switches via data attributes (e.g. `[data-theme="dark"]`) rather than media queries where theme switching is required.
70
+ - **Consistency**: Keep spacing aligned to the project grid system (e.g., multiples of 4px).
71
+ - **AI Glyphs**: Use only the Prism Sparkle/Prism icon as the visual representation for AI-generated assets.
125
72
 
126
73
  ---
127
74
 
128
75
  ## WHEN TO CHECK FULL DOCS
129
76
 
130
- Full guidelines live in the Skills folder. Load them when:
77
+ Detailed guidelines live in the Docs/Guidelines folder. Refer to them when working on core modules:
131
78
 
132
- | Situation | Read |
79
+ | Topic | Reference Document |
133
80
  |---|---|
134
- | Building any UI component or screen | `design/SKILL.md` then the relevant `patterns-*.md` |
135
- | Adding auth, tenant logic, or a new service | `guidelines/architecture-guidelines.md` |
136
- | Adding file upload, external API, or AI feature | `guidelines/security-guidelines.md` |
137
- | Writing tests or refactoring | `guidelines/code-quality-guidelines.md` |
138
- | Slow queries, caching, bundle size | `guidelines/performance-guidelines.md` |
139
- | Writing an ADR or README | `guidelines/documentation-guidelines.md` |
140
- | Building a new component from scratch | `design/implementation-guide.md` |
141
-
142
- ---
143
-
144
- ## ARCHITECTURE DECISIONS ALREADY MADE (don't re-litigate)
145
-
146
- | Decision | Choice | Reason |
147
- |---|---|---|
148
- | DB access | Prisma only | Parameterised by default, tenant middleware |
149
- | Queue | BullMQ on Redis | Single system, battle-tested at this scale |
150
- | Sessions | Opaque tokens in Redis | Revocable, no JWT signature key management |
151
- | Search | PostgreSQL FTS | Sufficient to 100k users; extract to Typesense at scale |
152
- | DB topology | Shared Postgres, tenant_id column | Schema-per-tenant impossible at scale for migrations |
153
- | API style | REST + JSON | Debuggable, works across Node + Python |
154
- | Passwords | Argon2id | bcrypt is deprecated for this use case |
155
- | Deployment | Fly Machines (preferred) → ECS → K8s (only with SRE) | Operational complexity ladder |
81
+ | Building any UI component or screen | `design/SKILL.md` (or `src/design/SKILL.md`) |
82
+ | Adding auth, tenant logic, or architecture choices | `docs/guidelines/Architecture.md` |
83
+ | Adding security controls, file uploads, API endpoints | `docs/guidelines/Security.md` |
84
+ | Writing tests or performing large refactoring | `docs/guidelines/Code-Quality.md` |
85
+ | Performance optimizations, database indexing | `docs/guidelines/Performance.md` |
86
+ | Writing an ADR, design documentation, or README | `docs/guidelines/Documentation.md` |
package/cli.js CHANGED
@@ -18,21 +18,16 @@ const styles = {
18
18
  };
19
19
 
20
20
  const options = [
21
- { name: 'AI Agent Configurations (rules files, CLAUDE.md, etc.)', value: 'agent-config', checked: true },
21
+ { name: 'Antigravity Rules (.antigravityrules)', value: 'antigravity', checked: true },
22
+ { name: 'Devin Rules (.devin/rules/rules.md & AGENTS.md)', value: 'devin', checked: true },
23
+ { name: 'Cursor Rules (.cursorrules)', value: 'cursor', checked: true },
24
+ { name: 'Claude Rules (CLAUDE.md)', value: 'claude', checked: true },
25
+ { name: 'Codex/Copilot Rules (.github/copilot-instructions.md)', value: 'codex', checked: true },
22
26
  { name: 'Prism Design System (tokens, components CSS/TSX)', value: 'design', checked: true },
23
27
  { name: 'Development Guidelines (Architecture, Quality, Security)', value: 'guidelines', checked: true },
24
28
  { name: 'Solo Developer AI SOP (Standard Operating Procedure)', value: 'sop', checked: true }
25
29
  ];
26
30
 
27
- const toolOptions = [
28
- { name: 'Antigravity (.antigravityrules)', value: 'antigravity', checked: true },
29
- { name: 'Devin (.devin/rules/rules.md & AGENTS.md)', value: 'devin', checked: true },
30
- { name: 'Cursor (.cursorrules)', value: 'cursor', checked: true },
31
- { name: 'Claude (CLAUDE.md)', value: 'claude', checked: true },
32
- { name: 'Codex/Copilot (.github/copilot-instructions.md)', value: 'codex', checked: true }
33
- ];
34
-
35
- let currentStep = 0; // 0 = Component selection, 1 = AI Tool selection
36
31
  let cursorIndex = 0;
37
32
 
38
33
  const args = process.argv.slice(2);
@@ -49,29 +44,16 @@ function printMenu() {
49
44
  }
50
45
  console.log(`${styles.cyan}${styles.bold}=========================================${styles.reset}\n`);
51
46
 
52
- if (currentStep === 0) {
53
- console.log(`${styles.dim}Step 1: What would you like to install?${styles.reset}`);
54
- console.log(`${styles.dim}Use ${styles.bold}↑/↓${styles.reset}${styles.dim} to navigate, ${styles.bold}space${styles.reset}${styles.dim} to toggle, and ${styles.bold}enter${styles.reset}${styles.dim} to continue.\n${styles.reset}`);
47
+ console.log(`${styles.dim}Select components and tools to install/configure:${styles.reset}`);
48
+ console.log(`${styles.dim}Use ${styles.bold}↑/↓${styles.reset}${styles.dim} to navigate, ${styles.bold}space${styles.reset}${styles.dim} to toggle, and ${styles.bold}enter${styles.reset}${styles.dim} to install.\n${styles.reset}`);
55
49
 
56
- options.forEach((opt, idx) => {
57
- const isCursor = idx === cursorIndex;
58
- const checkbox = opt.checked ? `[${styles.green}x${styles.reset}]` : '[ ]';
59
- const prefix = isCursor ? `${styles.cyan}❯ ` : ' ';
60
- const styledName = isCursor ? `${styles.cyan}${styles.bold}${opt.name}${styles.reset}` : opt.name;
61
- console.log(`${prefix}${checkbox} ${styledName}`);
62
- });
63
- } else {
64
- console.log(`${styles.dim}Step 2: Which AI coding tools do you use?${styles.reset}`);
65
- console.log(`${styles.dim}Use ${styles.bold}↑/↓${styles.reset}${styles.dim} to navigate, ${styles.bold}space${styles.reset}${styles.dim} to toggle, and ${styles.bold}enter${styles.reset}${styles.dim} to install.\n${styles.reset}`);
66
-
67
- toolOptions.forEach((opt, idx) => {
68
- const isCursor = idx === cursorIndex;
69
- const checkbox = opt.checked ? `[${styles.green}x${styles.reset}]` : '[ ]';
70
- const prefix = isCursor ? `${styles.cyan}❯ ` : ' ';
71
- const styledName = isCursor ? `${styles.cyan}${styles.bold}${opt.name}${styles.reset}` : opt.name;
72
- console.log(`${prefix}${checkbox} ${styledName}`);
73
- });
74
- }
50
+ options.forEach((opt, idx) => {
51
+ const isCursor = idx === cursorIndex;
52
+ const checkbox = opt.checked ? `[${styles.green}x${styles.reset}]` : '[ ]';
53
+ const prefix = isCursor ? `${styles.cyan}❯ ` : ' ';
54
+ const styledName = isCursor ? `${styles.cyan}${styles.bold}${opt.name}${styles.reset}` : opt.name;
55
+ console.log(`${prefix}${checkbox} ${styledName}`);
56
+ });
75
57
 
76
58
  console.log('\n');
77
59
  }
@@ -118,47 +100,53 @@ function runInstallation() {
118
100
  const targetRoot = process.cwd();
119
101
 
120
102
  const selected = options.filter(opt => opt.checked).map(opt => opt.value);
121
- const selectedTools = toolOptions.filter(opt => opt.checked).map(opt => opt.value);
122
103
 
123
104
  if (selected.length === 0) {
124
105
  console.log(`${styles.red}No options selected. Aborting.${styles.reset}\n`);
125
106
  process.exit(0);
126
107
  }
127
108
 
128
- // 1. Agent Configs
129
- if (selected.includes('agent-config')) {
130
- console.log(`${styles.blue} Installing AI Agent Configurations...${styles.reset}`);
131
- const srcAgentDir = path.join(packageRoot, 'agent-config');
109
+ const srcAgentDir = path.join(packageRoot, 'agent-config');
110
+ const hasAgentConfigs = fs.existsSync(srcAgentDir);
132
111
 
133
- if (fs.existsSync(srcAgentDir)) {
134
- const genericRulesFile = path.join(srcAgentDir, 'rules.md');
135
- const claudeFile = path.join(srcAgentDir, 'CLAUDE.md');
136
- const copilotFile = path.join(srcAgentDir, 'copilot-instructions.md');
112
+ if (hasAgentConfigs) {
113
+ const genericRulesFile = path.join(srcAgentDir, 'rules.md');
114
+ const claudeFile = path.join(srcAgentDir, 'CLAUDE.md');
115
+ const copilotFile = path.join(srcAgentDir, 'copilot-instructions.md');
137
116
 
138
- if (selectedTools.includes('antigravity')) {
139
- copyFileSync(genericRulesFile, path.join(targetRoot, '.antigravityrules'));
140
- }
141
- if (selectedTools.includes('devin')) {
142
- copyFileSync(genericRulesFile, path.join(targetRoot, '.devin', 'rules', 'rules.md'));
143
- copyFileSync(genericRulesFile, path.join(targetRoot, 'AGENTS.md'));
144
- }
145
- if (selectedTools.includes('cursor')) {
146
- copyFileSync(genericRulesFile, path.join(targetRoot, '.cursorrules'));
147
- }
148
- if (selectedTools.includes('claude')) {
149
- copyFileSync(claudeFile, path.join(targetRoot, 'CLAUDE.md'));
150
- }
151
- if (selectedTools.includes('codex')) {
152
- copyFileSync(copilotFile, path.join(targetRoot, '.github', 'copilot-instructions.md'));
153
- }
117
+ // 1. Antigravity
118
+ if (selected.includes('antigravity')) {
119
+ console.log(`${styles.blue} Configuring Antigravity rules...${styles.reset}`);
120
+ copyFileSync(genericRulesFile, path.join(targetRoot, '.antigravityrules'));
121
+ }
154
122
 
155
- console.log(`${styles.green} ✓ Configured selected AI rules files.${styles.reset}`);
156
- } else {
157
- console.log(`${styles.red} Source agent-config directory not found.${styles.reset}`);
123
+ // 2. Devin
124
+ if (selected.includes('devin')) {
125
+ console.log(`${styles.blue} Configuring Devin rules...${styles.reset}`);
126
+ copyFileSync(genericRulesFile, path.join(targetRoot, '.devin', 'rules', 'rules.md'));
127
+ copyFileSync(genericRulesFile, path.join(targetRoot, 'AGENTS.md'));
128
+ }
129
+
130
+ // 3. Cursor
131
+ if (selected.includes('cursor')) {
132
+ console.log(`${styles.blue} Configuring Cursor rules...${styles.reset}`);
133
+ copyFileSync(genericRulesFile, path.join(targetRoot, '.cursorrules'));
134
+ }
135
+
136
+ // 4. Claude
137
+ if (selected.includes('claude')) {
138
+ console.log(`${styles.blue} Configuring Claude CLAUDE.md...${styles.reset}`);
139
+ copyFileSync(claudeFile, path.join(targetRoot, 'CLAUDE.md'));
140
+ }
141
+
142
+ // 5. Codex/Copilot
143
+ if (selected.includes('codex')) {
144
+ console.log(`${styles.blue} Configuring Codex/Copilot rules...${styles.reset}`);
145
+ copyFileSync(copilotFile, path.join(targetRoot, '.github', 'copilot-instructions.md'));
158
146
  }
159
147
  }
160
148
 
161
- // 2. Design System
149
+ // 6. Design System
162
150
  if (selected.includes('design')) {
163
151
  console.log(`${styles.blue} Installing Prism Design System...${styles.reset}`);
164
152
  const srcDesignDir = path.join(packageRoot, 'design');
@@ -174,7 +162,7 @@ function runInstallation() {
174
162
  }
175
163
  }
176
164
 
177
- // 3. Development Guidelines
165
+ // 7. Development Guidelines
178
166
  if (selected.includes('guidelines')) {
179
167
  console.log(`${styles.blue} Installing Development Guidelines...${styles.reset}`);
180
168
  const srcGuidelinesDir = path.join(packageRoot, 'guidelines');
@@ -188,7 +176,7 @@ function runInstallation() {
188
176
  }
189
177
  }
190
178
 
191
- // 4. SOP
179
+ // 8. SOP
192
180
  if (selected.includes('sop')) {
193
181
  console.log(`${styles.blue} Installing Solo Developer AI SOP...${styles.reset}`);
194
182
  const srcSopFile = path.join(packageRoot, 'Solo Developer AI SOP.md');
@@ -217,9 +205,13 @@ Usage:
217
205
  npx aayushus-skills Interactive installation menu (default)
218
206
  npx aayushus-skills all Install everything directly
219
207
  npx aayushus-skills design Install Prism Design System only
220
- npx aayushus-skills agent-config Install all AI Agent Configurations
221
208
  npx aayushus-skills guidelines Install Development Guidelines only
222
209
  npx aayushus-skills sop Install Solo Developer AI SOP only
210
+ npx aayushus-skills cursor Install Cursor rules only
211
+ npx aayushus-skills antigravity Install Antigravity rules only
212
+ npx aayushus-skills devin Install Devin rules only
213
+ npx aayushus-skills claude Install Claude rules only
214
+ npx aayushus-skills codex Install Codex/Copilot rules only
223
215
 
224
216
  Flags:
225
217
  -d, --dry-run Preview installation without making actual changes
@@ -229,9 +221,13 @@ Flags:
229
221
 
230
222
  // Check for direct subcommands
231
223
  const argMap = {
224
+ 'antigravity': 'antigravity',
225
+ 'devin': 'devin',
226
+ 'cursor': 'cursor',
227
+ 'claude': 'claude',
228
+ 'codex': 'codex',
229
+ 'copilot': 'codex',
232
230
  'design': 'design',
233
- 'agent-config': 'agent-config',
234
- 'agent': 'agent-config',
235
231
  'guidelines': 'guidelines',
236
232
  'sop': 'sop'
237
233
  };
@@ -247,7 +243,6 @@ if (hasDirectCommand) {
247
243
  opt.checked = directArgs.some(arg => argMap[arg] === opt.value);
248
244
  });
249
245
  }
250
- // If non-interactive, default to configuring rules for all AI tools
251
246
  runInstallation();
252
247
  }
253
248
 
@@ -271,41 +266,25 @@ process.stdin.on('keypress', (str, key) => {
271
266
  process.exit(0);
272
267
  }
273
268
 
274
- const currentList = currentStep === 0 ? options : toolOptions;
275
-
276
269
  switch (key.name) {
277
270
  case 'up':
278
- cursorIndex = (cursorIndex - 1 + currentList.length) % currentList.length;
271
+ cursorIndex = (cursorIndex - 1 + options.length) % options.length;
279
272
  printMenu();
280
273
  break;
281
274
  case 'down':
282
- cursorIndex = (cursorIndex + 1) % currentList.length;
275
+ cursorIndex = (cursorIndex + 1) % options.length;
283
276
  printMenu();
284
277
  break;
285
278
  case 'space':
286
- currentList[cursorIndex].checked = !currentList[cursorIndex].checked;
279
+ options[cursorIndex].checked = !options[cursorIndex].checked;
287
280
  printMenu();
288
281
  break;
289
282
  case 'return':
290
283
  case 'enter':
291
- if (currentStep === 0) {
292
- const isAgentSelected = options.find(o => o.value === 'agent-config').checked;
293
- if (isAgentSelected) {
294
- currentStep = 1;
295
- cursorIndex = 0;
296
- printMenu();
297
- } else {
298
- if (process.stdin.isTTY) {
299
- process.stdin.setRawMode(false);
300
- }
301
- runInstallation();
302
- }
303
- } else {
304
- if (process.stdin.isTTY) {
305
- process.stdin.setRawMode(false);
306
- }
307
- runInstallation();
284
+ if (process.stdin.isTTY) {
285
+ process.stdin.setRawMode(false);
308
286
  }
287
+ runInstallation();
309
288
  break;
310
289
  }
311
290
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aayushus-skills",
3
- "version": "1.1.0",
3
+ "version": "1.2.3",
4
4
  "description": "Interactive CLI tool to install developer agent configurations, design system tokens, guidelines, and SOPs.",
5
5
  "main": "cli.js",
6
6
  "bin": {