@p_tipso/agentive 1.0.1 → 1.0.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
@@ -1,158 +1,116 @@
1
1
  <div align="center">
2
2
 
3
- # 🤖 agentive
3
+ # Agentive
4
4
 
5
5
  **A universal, framework-agnostic AI agent workspace CLI.**
6
6
 
7
- [![npm version](https://img.shields.io/npm/v/@p_tipso/agentive.svg?style=flat-square)](https://www.npmjs.com/package/@p_tipso/agentive)
8
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
9
- [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=flat-square)](https://nodejs.org)
7
+ <p align="center">
8
+ <a href="https://www.npmjs.com/package/@p_tipso/agentive"><img src="https://img.shields.io/npm/v/@p_tipso/agentive?style=for-the-badge&color=blue" alt="npm version"></a>
9
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=for-the-badge&logo=nodedotjs" alt="Node.js"></a>
10
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge" alt="License: MIT"></a>
11
+ </p>
12
+
13
+ <p align="center">
14
+ <a href="https://www.npmjs.com/package/@p_tipso/agentive"><img src="https://img.shields.io/npm/dm/@p_tipso/agentive?style=flat-square&label=downloads" alt="npm downloads"></a>
15
+ <a href="https://github.com/TiPS0/agentive/stargazers"><img src="https://img.shields.io/github/stars/TiPS0/agentive?style=flat-square&logo=github" alt="GitHub stars"></a>
16
+ <a href="https://github.com/TiPS0/agentive/issues"><img src="https://img.shields.io/github/issues/TiPS0/agentive?style=flat-square" alt="GitHub issues"></a>
17
+ </p>
10
18
 
11
19
  </div>
12
20
 
13
21
  ---
14
22
 
15
- Stop maintaining separate rule files for every AI tool. **agentive** scaffolds a universal `.agents/` directory and an `AGENTS.md` file in your project — your single source of truth for agent commands, skills, and rules.
23
+ Stop maintaining separate rule files for every AI tool. **agentive** scaffolds a universal `.agents/` directory, an `AGENTS.md` file, and an `.aiignore` file in your project — providing a **single source of truth** for all your agent commands, skills, and rules, while significantly saving token usage.
24
+
25
+ ## ✨ Why Agentive?
26
+
27
+ | Feature | Description |
28
+ | :---------------------------- | :------------------------------------------------------------------- |
29
+ | 🚀 **Interactive Setup** | Select your environment (General, Expo, React Native) to get tailored rules. |
30
+ | 🌍 **Universal** | Framework-agnostic setup. Works with React, Python, Go, you name it. |
31
+ | 🧠 **Single Source of Truth** | Centralize skills and rules for _all_ your AI agents in one place. |
32
+ | ⚡ **Dynamic Layering** | Scaffolds base rules and safely merges framework-specific guardrails. |
33
+
34
+ ---
16
35
 
17
- ## What it does
36
+ ## 📦 Installation & Usage
18
37
 
19
- Run one command, get a fully structured AI agent workspace:
38
+ Run one command, get a fully structured AI agent workspace instantly:
20
39
 
21
40
  ```bash
22
41
  npx @p_tipso/agentive
23
42
  ```
24
43
 
25
- No prompts. No config. Just run it and it scaffolds everything instantly into the folder your terminal is currently in.
44
+ If you prefer to install it globally for frequent usage:
45
+
46
+ ```bash
47
+ npm install -g @p_tipso/agentive
48
+ agentive
49
+ ```
26
50
 
27
- ### What happens when you run it
51
+ ### CLI Commands
28
52
 
29
- 1. Detects your current directory and project name
30
- 2. Creates an `AGENTS.md` file at your project root (top-level agent instructions)
31
- 3. Creates a `.agents/` folder with the full workspace structure:
32
- - `settings.json` project config (committed to git)
33
- - `settings.local.json` local machine overrides (auto-gitignored)
34
- - `commands/` — reusable prompt commands (e.g. code review, fix errors)
35
- - `skills/` — skill definitions for agent roles
36
- - `rules/` — project-wide rules all agents must follow
37
- 4. If `.agents/` already exists, it skips to avoid overwriting your customisations
53
+ | Command | Description |
54
+ | :-------------------------------- | :----------------------------------------------------------- |
55
+ | `npx @p_tipso/agentive` | Scaffold `.agents/` workspace instantly in current directory |
56
+ | `npx @p_tipso/agentive --version` | Print the current CLI version |
57
+ | `npx @p_tipso/agentive --help` | Show available commands and options |
38
58
 
39
59
  ---
40
60
 
41
- ## 📁 Output Structure
61
+ ## 🏗 What Happens Under the Hood?
42
62
 
43
- ```
63
+ When you run `agentive`, it launches an interactive wizard asking about your project environment (e.g., General, Mobile > Expo, React Native). It then intelligently scaffolds a tailored workspace:
64
+
65
+ ```text
44
66
  your-project/
45
- ├── AGENTS.md ← root agent instructions
67
+ ├── AGENTS.md ← Root agent instructions
68
+ ├── .aiignore ← Hides irrelevant files from AI to save tokens
46
69
  ├── .agents/
47
- │ ├── settings.json ← project config
48
- │ ├── settings.local.json ← local overrides (auto-gitignored)
70
+ │ ├── settings.json ← Project config
71
+ │ ├── settings.local.json ← Local machine overrides (auto-gitignored)
49
72
  │ ├── commands/
50
- │ │ ├── README.md ← guide: how to add commands
51
- │ │ ├── review.md ← code review command
52
- │ │ └── fix-issue.md ← zero-error fix command
73
+ │ │ ├── README.md ← Guide: how to add commands
74
+ │ │ ├── review.md ← Example code review command
75
+ │ │ └── fix-issue.md ← Example zero-error fix command
53
76
  │ ├── skills/
54
- │ │ └── README.md ← guide: how to add skills
77
+ │ │ └── README.md ← Guide: how to add skills
55
78
  │ └── rules/
56
- │ └── README.md ← guide: how to add rules
57
- ```
58
-
59
- ### `settings.json`
60
-
61
- ```json
62
- {
63
- "projectName": "my-app",
64
- "agentiveVersion": "1.1.0",
65
- "createdAt": "2026-07-05T12:00:00.000Z"
66
- }
79
+ │ └── README.md ← Guide: how to add rules
67
80
  ```
68
81
 
69
- ---
70
-
71
- ## 🏗 Package Architecture
82
+ ### 📂 File & Folder Guide
72
83
 
73
- This is the source code structure of the `agentive` npm package itself:
84
+ - **`.aiignore`**: Prevents context pollution and saves tokens by hiding files (like `node_modules` or build outputs) from your AI agents.
85
+ - **`commands/`**: Reusable prompt instructions that agents can execute on demand (e.g. `review.md`).
86
+ - **`skills/`**: Skill definitions that teach agents how to behave in specific roles.
87
+ - **`rules/`**: Project-wide rules that all agents must follow strictly.
74
88
 
75
- ```
76
- agentive/
77
- ├── bin/
78
- │ └── index.js ← CLI entry point (shebang + commander)
79
- ├── src/
80
- │ ├── commands/
81
- │ │ └── init.js ← scaffolding logic (no prompts, auto-install)
82
- │ ├── templates/ ← files copied into the user's project
83
- │ │ ├── AGENTS.md ← → copied to project root
84
- │ │ ├── commands/
85
- │ │ │ ├── README.md
86
- │ │ │ ├── review.md
87
- │ │ │ └── fix-issue.md
88
- │ │ ├── skills/
89
- │ │ │ └── README.md
90
- │ │ └── rules/
91
- │ │ └── README.md
92
- │ └── utils/
93
- │ ├── fileSystem.js ← async fs helpers, directory creation, settings
94
- │ └── compilers.js ← sync to Cursor / Claude / Windsurf formats
95
- ├── .github/
96
- │ └── workflows/
97
- │ └── publish.yml ← auto-publish to npm on git tag push
98
- ├── .gitignore
99
- ├── LICENSE
100
- ├── README.md
101
- └── package.json
102
- ```
89
+ ### 🌟 Framework-Specific Guardrails
90
+ By selecting a specific framework (like **Expo** or **React Native**), `agentive` overlays expertly crafted rules into your `.agents/` folder. This ensures your AI understands nuances like *Expo Router*, *Native Modules*, or *Unitless Pixels* right out of the box—preventing common hallucinations.
103
91
 
104
92
  ---
105
93
 
106
- ## 📂 Folder Guide
107
-
108
- ### Commands (`commands/`)
109
-
110
- Reusable prompt instructions that agents can execute on demand.
111
-
112
- | File | Purpose |
113
- |------|---------|
114
- | `review.md` | Structured code review for bugs, performance, and security |
115
- | `fix-issue.md` | Diagnose and fix errors with zero tolerance |
116
-
117
- ### Skills (`skills/`)
118
-
119
- Skill definitions that teach agents how to behave in specific roles. Add `.md` files to define new capabilities.
120
-
121
- ### Rules (`rules/`)
122
-
123
- Project-wide rules that all agents must follow. Add `.md` files for coding standards, architecture rules, etc.
124
-
125
- ---
126
-
127
- ## 📦 Commands
128
-
129
- | Command | Description |
130
- |---|---|
131
- | `npx @p_tipso/agentive` | Scaffold `.agents/` workspace instantly |
132
- | `npx @p_tipso/agentive --version` | Print the current version |
133
- | `npx @p_tipso/agentive --help` | Show available commands |
94
+ ## 🤝 Contributing
134
95
 
135
- ---
96
+ We love contributions! Whether it's adding new built-in skills, fixing bugs, or improving documentation, your help is appreciated.
136
97
 
137
- ## 🛠 Install Globally (optional)
138
-
139
- ```bash
140
- npm install -g @p_tipso/agentive
141
- agentive
142
- ```
98
+ Please read our [Contributing Guide](CONTRIBUTING.md) to get started with setting up your local environment and submitting a Pull Request.
143
99
 
144
100
  ---
145
101
 
146
- ## 🤝 Contributing
102
+ ## Star History
147
103
 
148
- 1. Fork the repo: [github.com/TiPS0/agentive](https://github.com/TiPS0/agentive)
149
- 2. Clone your fork
150
- 3. `npm install`
151
- 4. `npm link` (to use `agentive` locally while developing)
152
- 5. Make your changes and open a pull request!
104
+ <a href="https://star-history.com/#TiPS0/agentive&Date">
105
+ <picture>
106
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=TiPS0/agentive&type=Date&theme=dark" />
107
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=TiPS0/agentive&type=Date" />
108
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=TiPS0/agentive&type=Date" />
109
+ </picture>
110
+ </a>
153
111
 
154
112
  ---
155
113
 
156
114
  ## 📄 License
157
115
 
158
- MIT © [Pakawat Tipso](https://github.com/TiPS0)
116
+ This project is licensed under the [MIT License](./LICENSE).
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@p_tipso/agentive",
3
- "version": "1.0.1",
4
- "description": "A universal, framework-agnostic AI agent repository setup CLI. Scaffold a .agent/ workspace and sync to Cursor, Claude, and Windsurf.",
3
+ "version": "1.0.3",
4
+ "description": "A universal, framework-agnostic AI agent repository setup CLI. Scaffold a .agents/ workspace, AGENTS.md, and .aiignore to sync and optimize context for Cursor, Claude, and Windsurf.",
5
5
  "license": "MIT",
6
6
  "author": "Pakawat Tipso",
7
7
  "type": "commonjs",
@@ -27,7 +27,8 @@
27
27
  "scaffold",
28
28
  "init",
29
29
  "rules",
30
- "context"
30
+ "context",
31
+ "aiignore"
31
32
  ],
32
33
  "repository": {
33
34
  "type": "git",
@@ -2,6 +2,7 @@
2
2
 
3
3
  const path = require('path');
4
4
  const chalk = require('chalk');
5
+ const prompts = require('prompts');
5
6
  const { version } = require('../../package.json');
6
7
  const {
7
8
  createAgentDirectory,
@@ -31,19 +32,63 @@ async function runInit() {
31
32
  console.log(chalk.gray(' Installing to: ') + chalk.white(cwd));
32
33
  console.log('');
33
34
 
35
+ // --- Prompt User for Project Type ---
36
+ const typeResponse = await prompts({
37
+ type: 'select',
38
+ name: 'projectType',
39
+ message: 'What type of project are you building?',
40
+ choices: [
41
+ { title: 'General / Universal', value: 'general' },
42
+ { title: 'Web Development', value: 'web', disabled: true },
43
+ { title: 'Mobile Development', value: 'mobile' },
44
+ ],
45
+ initial: 0,
46
+ });
47
+
48
+ if (!typeResponse.projectType) {
49
+ console.log(chalk.red(' ✖ ') + 'Setup cancelled.');
50
+ process.exit(1);
51
+ }
52
+
53
+ let framework = null;
54
+ if (typeResponse.projectType === 'mobile') {
55
+ const fwResponse = await prompts({
56
+ type: 'select',
57
+ name: 'framework',
58
+ message: 'Which framework are you using?',
59
+ choices: [
60
+ { title: 'Expo (Recommended)', value: 'expo' },
61
+ { title: 'React Native', value: 'react-native' },
62
+ ],
63
+ initial: 0,
64
+ });
65
+
66
+ if (!fwResponse.framework) {
67
+ console.log(chalk.red(' ✖ ') + 'Setup cancelled.');
68
+ process.exit(1);
69
+ }
70
+ framework = fwResponse.framework;
71
+ }
72
+
73
+ const projectType = typeResponse.projectType;
74
+ console.log('');
75
+
34
76
  // --- Scaffold .agents/ directory ---
35
77
  const templatesDir = path.join(__dirname, '..', 'templates');
36
78
  const agentsDir = await createAgentDirectory(cwd, false);
37
- await copyTemplates(templatesDir, agentsDir, projectName);
79
+ await copyTemplates(templatesDir, agentsDir, projectName, projectType, framework);
38
80
 
39
81
  // --- Write settings.json and settings.local.json ---
40
82
  await writeSettings(agentsDir, {
41
83
  projectName,
84
+ projectType,
85
+ framework,
42
86
  agentiveVersion: version,
43
87
  createdAt: new Date().toISOString(),
44
88
  });
45
89
 
46
90
  console.log(chalk.green(' ✔ ') + chalk.white('Created ') + chalk.cyan('AGENTS.md'));
91
+ console.log(chalk.green(' ✔ ') + chalk.white('Created ') + chalk.cyan('.aiignore'));
47
92
  console.log(chalk.green(' ✔ ') + chalk.white('Scaffolded ') + chalk.cyan('.agents/') + chalk.white(' workspace'));
48
93
 
49
94
  // --- Done ---
@@ -53,6 +98,7 @@ async function runInit() {
53
98
  console.log(chalk.white(' Your AI workspace is ready:'));
54
99
  console.log('');
55
100
  console.log(chalk.gray(' AGENTS.md ← root agent instructions'));
101
+ console.log(chalk.gray(' .aiignore ← hides files from AI to save tokens'));
56
102
  console.log(chalk.gray(' .agents/'));
57
103
  console.log(chalk.gray(' ├── settings.json ← project config'));
58
104
  console.log(chalk.gray(' ├── settings.local.json ← local overrides (gitignored)'));
@@ -19,6 +19,11 @@ All agent configuration lives inside the `.agents/` directory:
19
19
  | `.agents/skills/` | Skill definitions that teach agents how to behave |
20
20
  | `.agents/rules/` | Project-wide rules all agents must follow |
21
21
 
22
+ ## Context Management
23
+
24
+ When exploring, reading, or searching this repository, you **MUST** respect the exclusion rules defined in `.aiignore`.
25
+ Additionally, you must also read and respect any rules defined in `.gitignore`, `.cursorignore`, or `.aiexclude` if they exist in the repository to prevent context pollution and save token usage.
26
+
22
27
  ## Getting Started
23
28
 
24
29
  1. Edit the markdown files inside `.agents/` to customise agent behaviour
@@ -0,0 +1,48 @@
1
+ # Standard AI Ignore file - prevents context pollution & saves tokens
2
+ # Learn more: https://github.com/TiPS0/agentive
3
+
4
+ # Dependencies
5
+ node_modules/
6
+ .pnp
7
+ .pnp.js
8
+ vendor/
9
+
10
+ # Environment variables
11
+ .env
12
+ .env.local
13
+ .env.development.local
14
+ .env.test.local
15
+ .env.production.local
16
+
17
+ # Build outputs & generated files
18
+ dist/
19
+ build/
20
+ out/
21
+ coverage/
22
+ .next/
23
+ .nuxt/
24
+ .vuepress/
25
+ .cache/
26
+
27
+ # Logs
28
+ logs
29
+ *.log
30
+ npm-debug.log*
31
+ yarn-debug.log*
32
+ yarn-error.log*
33
+ pnpm-debug.log*
34
+ lerna-debug.log*
35
+
36
+ # Version control & OS files
37
+ .git/
38
+ .DS_Store
39
+ *.pem
40
+
41
+ # Editor directories and files
42
+ .idea/
43
+ .vscode/
44
+ *.suo
45
+ *.ntvs*
46
+ *.njsproj
47
+ *.sln
48
+ *.sw?
@@ -0,0 +1,17 @@
1
+ # Rule: Expo Components & Libraries
2
+
3
+ When building UI or accessing device features in an Expo project, you MUST adhere to the following rules:
4
+
5
+ 1. **Strictly Prefer Expo SDK Packages**:
6
+ - For images, ALWAYS use `expo-image` instead of React Native's `<Image>` or `react-native-fast-image`.
7
+ - For icons, prefer `expo-symbols` or `@expo/vector-icons`.
8
+ - For fonts, use `expo-font`.
9
+ - For device features (camera, location, file system), ALWAYS check if an official `expo-*` package exists before reaching for a third-party React Native package.
10
+
11
+ 2. **No Web Primitives**:
12
+ - NEVER use `<div>`, `<span>`, `<button>`, `<p>`, `<a>`, or `<input>`.
13
+ - You MUST use `<View>`, `<Text>`, `<Pressable>`, `<TextInput>`, etc., from `react-native`.
14
+
15
+ 3. **Avoid Bare Native Modules**:
16
+ - Do NOT recommend installing libraries that require manual `pod install` or manual Android Gradle changes unless they are explicitly Expo-compatible (e.g., they provide a Config Plugin).
17
+ - If a library requires native code changes, remind the user that they must use a Custom Development Client (`npx expo run:ios` or `npx expo run:android`) rather than Expo Go.
@@ -0,0 +1,16 @@
1
+ # Rule: Expo Styling
2
+
3
+ 1. **Flexbox Defaults**:
4
+ - Remember that in React Native, `flexDirection` defaults to `"column"`, NOT `"row"`.
5
+ - `display: "flex"` is the default and only display type for Views.
6
+
7
+ 2. **Unitless Values**:
8
+ - NEVER use string values with `px` for dimensions (e.g., `width: "100px"`). ALWAYS use unitless numbers (e.g., `width: 100`).
9
+ - Percentages are allowed as strings (e.g., `width: "100%"`).
10
+
11
+ 3. **StyleSheet Priority**:
12
+ - Unless NativeWind (Tailwind) is explicitly set up in the project, ALWAYS use `StyleSheet.create({ ... })` from `react-native` to define styles.
13
+ - Avoid inline object styles except for dynamic values (e.g., `style={{ width: dynamicWidth }}`).
14
+
15
+ 4. **SafeAreaView**:
16
+ - In Expo Router, do NOT use `react-native`'s `SafeAreaView`. Use `react-native-safe-area-context` and its `useSafeAreaInsets` hook or `<SafeAreaView>` component to handle notches properly across all platforms.
@@ -0,0 +1,16 @@
1
+ # Rule: Expo Router
2
+
3
+ 1. **File-Based Routing Architecture**:
4
+ - You MUST use Expo Router (`expo-router`) exclusively. Do NOT install or use `@react-navigation/native` directly.
5
+ - All screens must be placed inside the `app/` directory (or `src/app/` if a `src` folder is used).
6
+
7
+ 2. **Layouts and Navigation**:
8
+ - Use `_layout.tsx` files to define shared UI (like Stack or Tabs) across multiple screens in a directory.
9
+ - NEVER use `<NavigationContainer>`. Expo Router handles this automatically.
10
+
11
+ 3. **Links and Dynamic Routes**:
12
+ - ALWAYS use the `<Link>` component from `expo-router` for navigation between screens, or the `useRouter()` hook for programmatic navigation.
13
+ - Dynamic routes use square brackets (e.g., `app/user/[id].tsx`). Retrieve parameters using the `useLocalSearchParams()` hook from `expo-router`.
14
+
15
+ 4. **Not-Found Screens**:
16
+ - Use `+not-found.tsx` to handle 404 routes.
@@ -0,0 +1,19 @@
1
+ # Skill: Create Expo App
2
+
3
+ ## Context
4
+ When a user asks to start a new Expo project from scratch, follow these modern initialization standards based on the latest Expo documentation.
5
+
6
+ ## Execution Steps
7
+ 1. **Initialize Command**:
8
+ - Propose running `npx create-expo-app@latest` in the terminal. This uses the default template which includes Expo Router and modern defaults.
9
+ - If a specific template is requested, use `npx create-expo-app@latest --template <template-name>`.
10
+
11
+ 2. **Start the Development Server**:
12
+ - Propose running `npx expo start` to start the Metro bundler.
13
+ - Explain to the user that they can press `i` to open the iOS simulator, or `a` to open the Android emulator.
14
+
15
+ 3. **Resetting Cache**:
16
+ - If the user reports weird bundling errors or missing modules, propose running `npx expo start --clear` (or `-c`) to clear the Metro cache.
17
+
18
+ 4. **Dependencies**:
19
+ - ALWAYS use `npx expo install <package>` instead of `npm install` or `yarn add` when installing native packages. This ensures the version installed is compatible with the current Expo SDK.
@@ -0,0 +1,10 @@
1
+ # Skill: Expo SDK Migration Expert
2
+
3
+ ## Operational Objective
4
+ Safely upgrade the local codebase's native wrappers and library versions to the targeted modern Expo SDK layout without generating cascade system failures.
5
+
6
+ ## Step-by-Step Execution Protocol
7
+ 1. **Context Extraction:** Check `package.json` and `.agents/settings.json` to confirm current project dependencies and target thresholds.
8
+ 2. **Reference Audit:** Compare existing components against any files found in `.agents/reference/`. Identify breaking changes, deprecated hooks, and required config plugins before making code mutations.
9
+ 3. **Strict Live Verification:** Do not guess method arguments. If internet permissions are active, query `site:docs.expo.dev/versions/` appending the target SDK code to verify exact API shifts.
10
+ 4. **Isolated Incremental Assembly:** Modify files sequentially. Complete dependency resolution inside configuration files first, verify type parameters, and fix breaking interface adjustments step-by-step.
@@ -0,0 +1,18 @@
1
+ # Rule: React Native Primitives
2
+
3
+ 1. **NO HTML Elements**:
4
+ - NEVER use HTML DOM elements like `<div>`, `<span>`, `<button>`, `<p>`, `<a>`, `<ul>`, `<li>`, or `<input>`.
5
+ - React Native does not use the browser DOM. Using web elements will crash the app instantly.
6
+
7
+ 2. **Core Components**:
8
+ - ALWAYS use React Native core components imported from `react-native`.
9
+ - Use `<View>` instead of `<div>`.
10
+ - Use `<Text>` instead of `<span>` or `<p>`. All strings MUST be wrapped in a `<Text>` component.
11
+ - Use `<Pressable>` or `<TouchableOpacity>` instead of `<button>`.
12
+ - Use `<TextInput>` instead of `<input>`.
13
+ - Use `<Image>` instead of `<img>` (and note that local images require `source={require('./path')}`, while remote require `source={{ uri: '...' }}`).
14
+ - Use `<ScrollView>` or `<FlatList>` for scrollable areas.
15
+
16
+ 3. **Event Handlers**:
17
+ - Do NOT use `onClick`. The correct prop for `<Pressable>` is `onPress`.
18
+ - Do NOT use `onChange` for text inputs. The correct prop for `<TextInput>` is `onChangeText`.
@@ -0,0 +1,29 @@
1
+ # Rule: Native Styling
2
+
3
+ 1. **No Web CSS Attributes**:
4
+ - Do NOT use web-specific CSS properties like `grid`, `float`, `display: block`, etc.
5
+ - Do NOT use string styles for dimensions like `width: "100px"`.
6
+
7
+ 2. **Unitless Pixels**:
8
+ - Layout dimensions and font sizes must use unitless values (e.g., `width: 100`, `fontSize: 16`). These represent logical pixels.
9
+ - Percentages are allowed as strings (e.g., `width: "100%"`).
10
+
11
+ 3. **Flexbox Architecture**:
12
+ - In React Native, `flexDirection` defaults to `"column"`. If you want items side-by-side, you MUST explicitly set `flexDirection: "row"`.
13
+ - `display: "flex"` is the default and only display type for Views.
14
+ - Use `justifyContent` and `alignItems` heavily for positioning.
15
+
16
+ 4. **StyleSheet**:
17
+ - ALWAYS use `StyleSheet.create` for defining component styles to ensure performance and avoid inline object recreation on every render.
18
+ - Example:
19
+ ```javascript
20
+ const styles = StyleSheet.create({
21
+ container: {
22
+ flex: 1,
23
+ justifyContent: 'center',
24
+ alignItems: 'center',
25
+ backgroundColor: '#fff',
26
+ }
27
+ });
28
+ ```
29
+ - Only use inline styles for values that change dynamically during render.
@@ -0,0 +1,14 @@
1
+ # Rule: Native iOS & Android Builds
2
+
3
+ In a bare React Native project, you must manage native dependencies meticulously.
4
+
5
+ 1. **iOS Dependencies (`pod install`)**:
6
+ - ANY time you install a new NPM package that includes native code (e.g., `react-native-device-info`, `react-native-reanimated`), you MUST remind the user to run `cd ios && pod install` (or `npx pod-install`).
7
+ - If an iOS build fails with a "module not found" error for a native module, the most likely solution is to run `pod install`.
8
+
9
+ 2. **Android Gradle Sync**:
10
+ - If a new native module is added, the Android project must be rebuilt.
11
+ - If weird caching issues occur in Android, propose running `cd android && ./gradlew clean`.
12
+
13
+ 3. **Avoid Manual Native Edits Unless Requested**:
14
+ - Do not manually edit `ios/Podfile`, `android/app/build.gradle`, `MainApplication.java`, or `AppDelegate.mm` unless the library's official documentation explicitly requires manual linking (which is rare in modern React Native due to autolinking).
@@ -0,0 +1,27 @@
1
+ # Skill: Native Module Linking & Troubleshooting
2
+
3
+ ## Context
4
+ Use this skill when a user encounters build errors, native module crashes, or needs help installing a library with deep native hooks in a bare React Native app.
5
+
6
+ ## Execution Steps
7
+
8
+ 1. **Verify Autolinking**:
9
+ - React Native uses Autolinking by default for iOS and Android.
10
+ - Check the `package.json` to ensure the library is installed.
11
+ - For iOS: Propose running `cd ios && pod install`. If the user is on an Apple Silicon Mac and encounters FFI errors, propose `arch -x86_64 pod install`.
12
+ - For Android: Propose running `cd android && ./gradlew clean`.
13
+
14
+ 2. **Manual Linking (Only if Autolinking Fails)**:
15
+ - Only propose manual changes to `settings.gradle` and `MainApplication.java` (Android) or `Podfile` (iOS) if the specific library documentation states that it does not support autolinking.
16
+
17
+ 3. **Clearing Caches**:
18
+ - The React Native packager (Metro) often caches aggressively. If JS changes aren't reflecting or weird module resolution errors occur, propose:
19
+ `npx react-native start --reset-cache`
20
+ - For a deeper clean, propose clearing Watchman watches:
21
+ `watchman watch-del-all`
22
+ `rm -rf node_modules && npm install`
23
+ `rm -rf $TMPDIR/metro-*`
24
+
25
+ 4. **Rebuilding**:
26
+ - Remind the user that after installing a native module, they CANNOT simply rely on fast refresh. They MUST recompile the app:
27
+ `npx react-native run-ios` OR `npx react-native run-android`
@@ -72,6 +72,8 @@ async function writeSettings(agentsDir, settings) {
72
72
  // settings.json — committed to git
73
73
  const settingsJson = {
74
74
  projectName: settings.projectName,
75
+ projectType: settings.projectType || 'general',
76
+ framework: settings.framework || null,
75
77
  agentiveVersion: settings.agentiveVersion,
76
78
  createdAt: settings.createdAt,
77
79
  };
@@ -120,31 +122,49 @@ async function writeSettings(agentsDir, settings) {
120
122
  * @param {string} templatesDir - Absolute path to src/templates/
121
123
  * @param {string} agentsDir - Absolute path to .agents/
122
124
  * @param {string} projectName - The user's project name
125
+ * @param {string} projectType - e.g., 'general', 'web', 'mobile'
126
+ * @param {string} framework - e.g., 'expo', 'react-native'
123
127
  */
124
- async function copyTemplates(templatesDir, agentsDir, projectName) {
128
+ async function copyTemplates(templatesDir, agentsDir, projectName, projectType = 'general', framework = null) {
125
129
  const cwd = path.dirname(agentsDir);
126
130
 
127
- // Copy AGENTS.md to project root
128
- const agentMdSrc = path.join(templatesDir, 'AGENTS.md');
131
+ // 1. Copy AGENTS.md from base to project root
132
+ const agentMdSrc = path.join(templatesDir, 'base', 'AGENTS.md');
129
133
  try {
130
134
  let content = await fs.readFile(agentMdSrc, 'utf-8');
131
135
  content = replacePlaceholders(content, projectName);
132
136
  await fs.writeFile(path.join(cwd, 'AGENTS.md'), content, 'utf-8');
133
137
  } catch { /* template may not exist */ }
134
138
 
135
- // Copy folder templates into .agents/
139
+ // 1.5 Copy aiignore from base to project root as .aiignore
140
+ const aiignoreSrc = path.join(templatesDir, 'base', 'aiignore');
141
+ try {
142
+ let content = await fs.readFile(aiignoreSrc, 'utf-8');
143
+ await fs.writeFile(path.join(cwd, '.aiignore'), content, 'utf-8');
144
+ } catch { /* template may not exist */ }
145
+
136
146
  const foldersToInclude = ['commands', 'skills', 'rules'];
137
- for (const folder of foldersToInclude) {
138
- const srcFolder = path.join(templatesDir, folder);
139
- const destFolder = path.join(agentsDir, folder);
140
-
141
- try {
142
- await fs.access(srcFolder);
143
- } catch {
144
- continue;
147
+
148
+ // Helper to copy a specific template layer
149
+ const copyLayer = async (layerPath) => {
150
+ for (const folder of foldersToInclude) {
151
+ const srcFolder = path.join(layerPath, folder);
152
+ const destFolder = path.join(agentsDir, folder);
153
+ try {
154
+ await fs.access(srcFolder);
155
+ await copyDirectoryRecursive(srcFolder, destFolder, projectName);
156
+ } catch {
157
+ continue;
158
+ }
145
159
  }
160
+ };
161
+
162
+ // 2. Copy Base Layer
163
+ await copyLayer(path.join(templatesDir, 'base'));
146
164
 
147
- await copyDirectoryRecursive(srcFolder, destFolder, projectName);
165
+ // 3. Copy Framework Layer (if applicable)
166
+ if (projectType !== 'general' && framework) {
167
+ await copyLayer(path.join(templatesDir, projectType, framework));
148
168
  }
149
169
  }
150
170
 
File without changes
File without changes