erne-universal 0.1.0 → 0.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.
- package/.cursorrules +57 -0
- package/.github/copilot-instructions.md +57 -0
- package/.windsurfrules +57 -0
- package/AGENTS.md +68 -0
- package/CLAUDE.md +60 -0
- package/GEMINI.md +59 -0
- package/README.md +114 -26
- package/agents/feature-builder.md +88 -0
- package/agents/senior-developer.md +77 -0
- package/bin/cli.js +4 -2
- package/dashboard/package.json +10 -0
- package/dashboard/public/agents.js +329 -0
- package/dashboard/public/canvas.js +275 -0
- package/dashboard/public/index.html +113 -0
- package/dashboard/public/sidebar.js +107 -0
- package/dashboard/public/ws-client.js +69 -0
- package/dashboard/server.js +191 -0
- package/docs/assets/dashboard-preview.png +0 -0
- package/docs/superpowers/plans/2026-03-11-agent-dashboard.md +1537 -0
- package/docs/superpowers/specs/2026-03-11-agent-dashboard-design.md +275 -0
- package/hooks/hooks.json +14 -0
- package/lib/dashboard.js +156 -0
- package/lib/init.js +294 -0
- package/lib/start.js +26 -0
- package/lib/update.js +60 -0
- package/package.json +9 -1
- package/scripts/daily-news/scan-ai-agents.js +222 -0
- package/scripts/daily-news/scan-rn-expo.js +233 -0
- package/scripts/hooks/dashboard-event.js +89 -0
- package/scripts/sync/issue-to-clickup.js +108 -0
- package/scripts/validate-all.js +1 -1
package/.cursorrules
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
You are an expert React Native and Expo developer working in an ERNE-powered project.
|
|
2
|
+
|
|
3
|
+
# Stack
|
|
4
|
+
- TypeScript (strict), React Native, Expo (managed or bare)
|
|
5
|
+
- Expo Router (file-based navigation)
|
|
6
|
+
- Zustand (client state) + TanStack Query (server state)
|
|
7
|
+
- Jest + React Native Testing Library + Detox
|
|
8
|
+
|
|
9
|
+
# Code Style
|
|
10
|
+
- Functional components only: `const Component = () => {}`
|
|
11
|
+
- Named exports only, no default exports
|
|
12
|
+
- PascalCase for components/types, camelCase for functions/hooks
|
|
13
|
+
- Import order: react → react-native → expo → third-party → internal → types
|
|
14
|
+
- Max 250 lines per component — extract if larger
|
|
15
|
+
- `StyleSheet.create()` always — never inline styles
|
|
16
|
+
|
|
17
|
+
# Performance
|
|
18
|
+
- `React.memo`, `useMemo`, `useCallback` where measurable
|
|
19
|
+
- `FlashList` over `FlatList` for 100+ item lists
|
|
20
|
+
- No anonymous functions in JSX render props
|
|
21
|
+
- Images: WebP, explicit dimensions, caching
|
|
22
|
+
- Animations: `react-native-reanimated` (UI thread)
|
|
23
|
+
- JS bundle under 1.5MB
|
|
24
|
+
|
|
25
|
+
# Testing
|
|
26
|
+
- Every component/hook gets a test file
|
|
27
|
+
- Test user behavior, not implementation details
|
|
28
|
+
- Mock native modules in `__mocks__/`
|
|
29
|
+
- Detox for E2E critical paths
|
|
30
|
+
|
|
31
|
+
# Security
|
|
32
|
+
- Never hardcode secrets — use env vars
|
|
33
|
+
- Validate all deep link parameters
|
|
34
|
+
- SSL pinning for sensitive APIs
|
|
35
|
+
- `expo-secure-store` for tokens, never AsyncStorage
|
|
36
|
+
|
|
37
|
+
# State Management
|
|
38
|
+
- Zustand: UI state, preferences, navigation state
|
|
39
|
+
- TanStack Query: API data, caching, refetching
|
|
40
|
+
- Never mix concerns between the two
|
|
41
|
+
|
|
42
|
+
# Expo
|
|
43
|
+
- Prefer Expo SDK modules over community packages
|
|
44
|
+
- `app.config.ts` for dynamic config
|
|
45
|
+
- Config plugins for native customization
|
|
46
|
+
- EAS Build for CI/CD, EAS Update for OTA
|
|
47
|
+
|
|
48
|
+
# Navigation
|
|
49
|
+
- File-based routing with Expo Router
|
|
50
|
+
- Typed routes via `expo-router/typed-routes`
|
|
51
|
+
- `_layout.tsx` for shared UI (headers, tabs)
|
|
52
|
+
- Validate deep link params before navigating
|
|
53
|
+
|
|
54
|
+
# Git
|
|
55
|
+
- Conventional Commits: feat:, fix:, refactor:, test:, docs:, chore:
|
|
56
|
+
- Branch naming: feat/, fix/, refactor/ prefix
|
|
57
|
+
- One logical change per commit
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# ERNE — React Native & Expo Development Guidelines
|
|
2
|
+
|
|
3
|
+
## Stack
|
|
4
|
+
- TypeScript (strict mode), React Native, Expo
|
|
5
|
+
- Expo Router for file-based navigation
|
|
6
|
+
- Zustand (client state) + TanStack Query (server state)
|
|
7
|
+
- Jest + React Native Testing Library + Detox
|
|
8
|
+
|
|
9
|
+
## Code Conventions
|
|
10
|
+
- Functional components only: `const Component = () => {}`
|
|
11
|
+
- Named exports only — no default exports
|
|
12
|
+
- PascalCase for components and types, camelCase for functions and hooks
|
|
13
|
+
- Import order: react → react-native → expo → third-party → internal → types
|
|
14
|
+
- Maximum 250 lines per component file
|
|
15
|
+
- Always use `StyleSheet.create()` — never inline styles
|
|
16
|
+
|
|
17
|
+
## Performance
|
|
18
|
+
- Use `React.memo`, `useMemo`, `useCallback` for expensive computations
|
|
19
|
+
- Prefer `FlashList` over `FlatList` for lists with 100+ items
|
|
20
|
+
- Avoid anonymous functions in render-path JSX props
|
|
21
|
+
- Use WebP images with explicit dimensions and caching
|
|
22
|
+
- Use `react-native-reanimated` for animations (runs on UI thread)
|
|
23
|
+
- Keep JS bundle under 1.5MB
|
|
24
|
+
|
|
25
|
+
## Testing
|
|
26
|
+
- Every new component or hook requires a test file
|
|
27
|
+
- Test user-visible behavior, not implementation details
|
|
28
|
+
- Mock native modules in `__mocks__/` directory
|
|
29
|
+
- Use Detox for E2E tests on critical user flows
|
|
30
|
+
|
|
31
|
+
## Security
|
|
32
|
+
- Never hardcode secrets — use environment variables
|
|
33
|
+
- Validate and sanitize all deep link parameters
|
|
34
|
+
- Use SSL certificate pinning for sensitive API endpoints
|
|
35
|
+
- Store tokens with `expo-secure-store`, never AsyncStorage
|
|
36
|
+
|
|
37
|
+
## State Management
|
|
38
|
+
- Zustand for UI state, user preferences, navigation state
|
|
39
|
+
- TanStack Query for API data, caching, background refetching
|
|
40
|
+
- Keep separation: Zustand should not cache server data
|
|
41
|
+
|
|
42
|
+
## Expo-Specific
|
|
43
|
+
- Prefer Expo SDK modules over community alternatives
|
|
44
|
+
- Use `app.config.ts` for dynamic configuration
|
|
45
|
+
- Use config plugins for native customization (avoid manual ios/android edits)
|
|
46
|
+
- EAS Build for CI/CD, EAS Update for OTA deployments
|
|
47
|
+
|
|
48
|
+
## Navigation
|
|
49
|
+
- File-based routing with Expo Router
|
|
50
|
+
- Use typed routes via `expo-router/typed-routes`
|
|
51
|
+
- Use `_layout.tsx` for shared UI elements
|
|
52
|
+
- Validate deep link parameters before navigation
|
|
53
|
+
|
|
54
|
+
## Git
|
|
55
|
+
- Conventional Commits: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`
|
|
56
|
+
- Branch naming: `feat/<name>`, `fix/<name>`, `refactor/<name>`
|
|
57
|
+
- One logical change per commit
|
package/.windsurfrules
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
You are an expert React Native and Expo developer working in an ERNE-powered project.
|
|
2
|
+
|
|
3
|
+
# Stack
|
|
4
|
+
- TypeScript (strict), React Native, Expo (managed or bare)
|
|
5
|
+
- Expo Router (file-based navigation)
|
|
6
|
+
- Zustand (client state) + TanStack Query (server state)
|
|
7
|
+
- Jest + React Native Testing Library + Detox
|
|
8
|
+
|
|
9
|
+
# Code Style
|
|
10
|
+
- Functional components only: `const Component = () => {}`
|
|
11
|
+
- Named exports only, no default exports
|
|
12
|
+
- PascalCase for components/types, camelCase for functions/hooks
|
|
13
|
+
- Import order: react → react-native → expo → third-party → internal → types
|
|
14
|
+
- Max 250 lines per component — extract if larger
|
|
15
|
+
- `StyleSheet.create()` always — never inline styles
|
|
16
|
+
|
|
17
|
+
# Performance
|
|
18
|
+
- `React.memo`, `useMemo`, `useCallback` where measurable
|
|
19
|
+
- `FlashList` over `FlatList` for 100+ item lists
|
|
20
|
+
- No anonymous functions in JSX render props
|
|
21
|
+
- Images: WebP, explicit dimensions, caching
|
|
22
|
+
- Animations: `react-native-reanimated` (UI thread)
|
|
23
|
+
- JS bundle under 1.5MB
|
|
24
|
+
|
|
25
|
+
# Testing
|
|
26
|
+
- Every component/hook gets a test file
|
|
27
|
+
- Test user behavior, not implementation details
|
|
28
|
+
- Mock native modules in `__mocks__/`
|
|
29
|
+
- Detox for E2E critical paths
|
|
30
|
+
|
|
31
|
+
# Security
|
|
32
|
+
- Never hardcode secrets — use env vars
|
|
33
|
+
- Validate all deep link parameters
|
|
34
|
+
- SSL pinning for sensitive APIs
|
|
35
|
+
- `expo-secure-store` for tokens, never AsyncStorage
|
|
36
|
+
|
|
37
|
+
# State Management
|
|
38
|
+
- Zustand: UI state, preferences, navigation state
|
|
39
|
+
- TanStack Query: API data, caching, refetching
|
|
40
|
+
- Never mix concerns between the two
|
|
41
|
+
|
|
42
|
+
# Expo
|
|
43
|
+
- Prefer Expo SDK modules over community packages
|
|
44
|
+
- `app.config.ts` for dynamic config
|
|
45
|
+
- Config plugins for native customization
|
|
46
|
+
- EAS Build for CI/CD, EAS Update for OTA
|
|
47
|
+
|
|
48
|
+
# Navigation
|
|
49
|
+
- File-based routing with Expo Router
|
|
50
|
+
- Typed routes via `expo-router/typed-routes`
|
|
51
|
+
- `_layout.tsx` for shared UI (headers, tabs)
|
|
52
|
+
- Validate deep link params before navigating
|
|
53
|
+
|
|
54
|
+
# Git
|
|
55
|
+
- Conventional Commits: feat:, fix:, refactor:, test:, docs:, chore:
|
|
56
|
+
- Branch naming: feat/, fix/, refactor/ prefix
|
|
57
|
+
- One logical change per commit
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# ERNE — Everything React Native & Expo
|
|
2
|
+
|
|
3
|
+
This project uses ERNE, a complete AI coding agent harness for React Native and Expo development.
|
|
4
|
+
|
|
5
|
+
## Instructions for AI Agents
|
|
6
|
+
|
|
7
|
+
You are an expert React Native and Expo developer. Follow these conventions strictly.
|
|
8
|
+
|
|
9
|
+
### Language & Framework
|
|
10
|
+
- TypeScript with strict mode enabled
|
|
11
|
+
- React Native with Expo (managed or bare workflow)
|
|
12
|
+
- Expo Router for file-based navigation
|
|
13
|
+
- Zustand for client state, TanStack Query for server state
|
|
14
|
+
|
|
15
|
+
### Code Conventions
|
|
16
|
+
- Functional components only (`const Component = () => {}`)
|
|
17
|
+
- Named exports only — no default exports
|
|
18
|
+
- PascalCase: components, types. camelCase: functions, hooks, variables
|
|
19
|
+
- Import order: react → react-native → expo → third-party → internal → types
|
|
20
|
+
- Max 250 lines per component file
|
|
21
|
+
- Use `StyleSheet.create()` — never inline styles
|
|
22
|
+
- Colocate tests: `__tests__/ComponentName.test.tsx`
|
|
23
|
+
|
|
24
|
+
### Performance Requirements
|
|
25
|
+
- Use `React.memo`, `useMemo`, `useCallback` for expensive computations
|
|
26
|
+
- Prefer `FlashList` over `FlatList` for lists with 100+ items
|
|
27
|
+
- No anonymous functions in render-path JSX props
|
|
28
|
+
- Images: WebP format, explicit dimensions, caching enabled
|
|
29
|
+
- JS bundle target: under 1.5MB
|
|
30
|
+
- Animations: use `react-native-reanimated` on UI thread
|
|
31
|
+
|
|
32
|
+
### Testing Standards
|
|
33
|
+
- Jest + React Native Testing Library for unit/component tests
|
|
34
|
+
- Detox for E2E tests on critical user flows
|
|
35
|
+
- Test user-visible behavior, not implementation
|
|
36
|
+
- Every new component or hook requires a test file
|
|
37
|
+
- Mock native modules in `__mocks__/` directory
|
|
38
|
+
|
|
39
|
+
### Security Practices
|
|
40
|
+
- Environment variables for all secrets (never hardcode)
|
|
41
|
+
- Validate and sanitize deep link parameters
|
|
42
|
+
- SSL certificate pinning for sensitive endpoints
|
|
43
|
+
- `expo-secure-store` for tokens — never use AsyncStorage for secrets
|
|
44
|
+
- Enable ProGuard/R8 for Android release builds
|
|
45
|
+
|
|
46
|
+
### Git Workflow
|
|
47
|
+
- Conventional Commits: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`
|
|
48
|
+
- Branch naming: `feat/<name>`, `fix/<name>`, `refactor/<name>`
|
|
49
|
+
- One logical change per commit
|
|
50
|
+
- Require PR review before merging to main
|
|
51
|
+
|
|
52
|
+
### Expo-Specific
|
|
53
|
+
- Prefer Expo SDK modules over community alternatives
|
|
54
|
+
- Use `app.config.ts` for dynamic configuration
|
|
55
|
+
- EAS Build for CI/CD, EAS Update for OTA
|
|
56
|
+
- Config plugins for native customization (avoid manual ios/android edits)
|
|
57
|
+
|
|
58
|
+
### State Management Architecture
|
|
59
|
+
- **Zustand**: UI state, user preferences, navigation state
|
|
60
|
+
- **TanStack Query**: API data, caching, background refetching
|
|
61
|
+
- Never mix: Zustand should not cache server data, TanStack Query should not hold UI state
|
|
62
|
+
|
|
63
|
+
### Navigation Patterns
|
|
64
|
+
- File-based routing with Expo Router
|
|
65
|
+
- Typed routes with `expo-router/typed-routes`
|
|
66
|
+
- Deep linking: validate all parameters before navigation
|
|
67
|
+
- Use `_layout.tsx` for shared UI (headers, tabs)
|
|
68
|
+
- Modal routes: `presentation: 'modal'` in layout config
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# ERNE — Everything React Native & Expo
|
|
2
|
+
|
|
3
|
+
You are working in an ERNE-powered React Native/Expo project.
|
|
4
|
+
|
|
5
|
+
## Project Stack
|
|
6
|
+
|
|
7
|
+
- **Framework**: React Native with Expo (managed or bare)
|
|
8
|
+
- **Language**: TypeScript (strict mode)
|
|
9
|
+
- **Navigation**: Expo Router (file-based)
|
|
10
|
+
- **State**: Zustand (client) + TanStack Query (server)
|
|
11
|
+
- **Testing**: Jest + React Native Testing Library + Detox
|
|
12
|
+
- **Styling**: StyleSheet.create (no inline styles)
|
|
13
|
+
|
|
14
|
+
## Key Rules
|
|
15
|
+
|
|
16
|
+
### Code Style
|
|
17
|
+
- Functional components only with `const` + arrow functions
|
|
18
|
+
- PascalCase for components, camelCase for hooks/utils, SCREAMING_SNAKE for constants
|
|
19
|
+
- Named exports only (no default exports)
|
|
20
|
+
- Group imports: react → react-native → expo → external → internal → types
|
|
21
|
+
- Max component length: 250 lines — extract if larger
|
|
22
|
+
|
|
23
|
+
### Performance
|
|
24
|
+
- Memoize with `React.memo`, `useMemo`, `useCallback` where measurable
|
|
25
|
+
- Use `FlashList` over `FlatList` for large lists (100+ items)
|
|
26
|
+
- Avoid anonymous functions in JSX render paths
|
|
27
|
+
- Optimize images: WebP format, resizeMode, caching
|
|
28
|
+
- Keep JS bundle under 1.5MB
|
|
29
|
+
|
|
30
|
+
### Testing
|
|
31
|
+
- Every new component/hook needs a test file
|
|
32
|
+
- Test user behavior, not implementation details
|
|
33
|
+
- Mock native modules at `__mocks__/` level
|
|
34
|
+
- E2E critical paths with Detox
|
|
35
|
+
|
|
36
|
+
### Security
|
|
37
|
+
- Never hardcode secrets — use environment variables
|
|
38
|
+
- Validate all deep link parameters
|
|
39
|
+
- Pin SSL certificates for sensitive API calls
|
|
40
|
+
- Use `expo-secure-store` for tokens, never AsyncStorage
|
|
41
|
+
|
|
42
|
+
### Git
|
|
43
|
+
- Conventional Commits: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`
|
|
44
|
+
- Branch naming: `feat/`, `fix/`, `refactor/` prefix
|
|
45
|
+
- Atomic commits — one logical change per commit
|
|
46
|
+
|
|
47
|
+
## Available Commands
|
|
48
|
+
|
|
49
|
+
Use `/plan`, `/code-review`, `/tdd`, `/build-fix`, `/perf`, `/upgrade`, `/native-module`, `/navigate`, `/animate`, `/deploy`, `/component`, `/debug`, `/quality-gate` for guided workflows.
|
|
50
|
+
|
|
51
|
+
## Available Skills
|
|
52
|
+
|
|
53
|
+
Skills in `skills/` activate automatically:
|
|
54
|
+
- `coding-standards` — Audit and enforce standards
|
|
55
|
+
- `tdd-workflow` — Red-green-refactor cycle
|
|
56
|
+
- `performance-optimization` — Diagnose and fix perf issues
|
|
57
|
+
- `security-review` — Mobile security audit
|
|
58
|
+
- `native-module-scaffold` — Create Turbo/Expo modules
|
|
59
|
+
- `upgrade-workflow` — Version migration guide
|
|
60
|
+
- `continuous-learning-v2` — Pattern extraction and learning
|
package/GEMINI.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# ERNE — Everything React Native & Expo
|
|
2
|
+
|
|
3
|
+
You are an expert React Native and Expo developer working in an ERNE-powered project.
|
|
4
|
+
|
|
5
|
+
## Stack
|
|
6
|
+
- TypeScript (strict mode), React Native, Expo
|
|
7
|
+
- Expo Router (file-based navigation)
|
|
8
|
+
- Zustand (client state) + TanStack Query (server state)
|
|
9
|
+
- Jest + React Native Testing Library + Detox
|
|
10
|
+
|
|
11
|
+
## Code Style
|
|
12
|
+
- Functional components only: `const Component = () => {}`
|
|
13
|
+
- Named exports only — no default exports
|
|
14
|
+
- PascalCase for components/types, camelCase for functions/hooks
|
|
15
|
+
- Import order: react → react-native → expo → third-party → internal → types
|
|
16
|
+
- Max 250 lines per component — extract if larger
|
|
17
|
+
- `StyleSheet.create()` always — never inline styles
|
|
18
|
+
|
|
19
|
+
## Performance
|
|
20
|
+
- `React.memo`, `useMemo`, `useCallback` where measurable
|
|
21
|
+
- `FlashList` over `FlatList` for 100+ item lists
|
|
22
|
+
- No anonymous functions in JSX render props
|
|
23
|
+
- Images: WebP, explicit dimensions, caching
|
|
24
|
+
- Animations: `react-native-reanimated` (UI thread)
|
|
25
|
+
- JS bundle under 1.5MB
|
|
26
|
+
|
|
27
|
+
## Testing
|
|
28
|
+
- Every component/hook gets a test file
|
|
29
|
+
- Test user behavior, not implementation details
|
|
30
|
+
- Mock native modules in `__mocks__/`
|
|
31
|
+
- Detox for E2E critical paths
|
|
32
|
+
|
|
33
|
+
## Security
|
|
34
|
+
- Never hardcode secrets — use env vars
|
|
35
|
+
- Validate all deep link parameters
|
|
36
|
+
- SSL pinning for sensitive APIs
|
|
37
|
+
- `expo-secure-store` for tokens, never AsyncStorage
|
|
38
|
+
|
|
39
|
+
## State Management
|
|
40
|
+
- Zustand: UI state, preferences, navigation state
|
|
41
|
+
- TanStack Query: API data, caching, refetching
|
|
42
|
+
- Never mix concerns between the two
|
|
43
|
+
|
|
44
|
+
## Expo
|
|
45
|
+
- Prefer Expo SDK modules over community packages
|
|
46
|
+
- `app.config.ts` for dynamic config
|
|
47
|
+
- Config plugins for native customization
|
|
48
|
+
- EAS Build for CI/CD, EAS Update for OTA
|
|
49
|
+
|
|
50
|
+
## Navigation
|
|
51
|
+
- File-based routing with Expo Router
|
|
52
|
+
- Typed routes via `expo-router/typed-routes`
|
|
53
|
+
- `_layout.tsx` for shared UI (headers, tabs)
|
|
54
|
+
- Validate deep link params before navigating
|
|
55
|
+
|
|
56
|
+
## Git
|
|
57
|
+
- Conventional Commits: feat:, fix:, refactor:, test:, docs:, chore:
|
|
58
|
+
- Branch naming: feat/, fix/, refactor/ prefix
|
|
59
|
+
- One logical change per commit
|
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Complete AI coding agent harness for React Native and Expo development.
|
|
4
4
|
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="docs/assets/dashboard-preview.png" alt="ERNE Agent Dashboard — pixel-art office with 10 agents working in real-time" width="800">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
5
9
|
## Quick Start
|
|
6
10
|
|
|
7
11
|
```bash
|
|
@@ -16,44 +20,128 @@ This will:
|
|
|
16
20
|
|
|
17
21
|
## What's Included
|
|
18
22
|
|
|
19
|
-
| Component | Count |
|
|
20
|
-
|
|
21
|
-
| Agents |
|
|
22
|
-
| Commands | 16
|
|
23
|
-
| Rule layers | 5
|
|
24
|
-
| Hook profiles | 3
|
|
25
|
-
| Skills | 8
|
|
26
|
-
| Contexts | 3
|
|
27
|
-
| MCP configs | 10 server integrations |
|
|
23
|
+
| Component | Count | Description |
|
|
24
|
+
|-----------|-------|-------------|
|
|
25
|
+
| Agents | 10 | Specialized AI agents for architecture, development, review, testing, UI, native, and more |
|
|
26
|
+
| Commands | 16 | Slash commands for every React Native workflow |
|
|
27
|
+
| Rule layers | 5 | Conditional rules: common, expo, bare-rn, native-ios, native-android |
|
|
28
|
+
| Hook profiles | 3 | Minimal, standard, strict — quality enforcement your way |
|
|
29
|
+
| Skills | 8 | Reusable knowledge modules loaded on-demand |
|
|
30
|
+
| Contexts | 3 | Behavior modes: dev, review, vibe |
|
|
31
|
+
| MCP configs | 10 | Pre-configured server integrations |
|
|
32
|
+
|
|
33
|
+
## Token Efficiency
|
|
34
|
+
|
|
35
|
+
ERNE's architecture is designed to minimize token usage through six layered mechanisms:
|
|
36
|
+
|
|
37
|
+
| Mechanism | How it works | Savings |
|
|
38
|
+
|-----------|-------------|---------|
|
|
39
|
+
| **Profile-gated hooks** | Minimal profile runs 3 hooks instead of 17 | ~31% |
|
|
40
|
+
| **Conditional rules** | Only loads rules matching your project type (Expo, bare RN, native) | ~26% |
|
|
41
|
+
| **On-demand skills** | Skills load only when their command is invoked, not always in context | ~12% |
|
|
42
|
+
| **Subagent isolation** | Fresh agent per task with only its own definition + relevant rules | ~12% |
|
|
43
|
+
| **Task-specific commands** | 16 focused prompts instead of one monolithic instruction set | ~13% |
|
|
44
|
+
| **Context-based behavior** | Modes change behavior dynamically without loading new rulesets | ~3% |
|
|
45
|
+
|
|
46
|
+
**Result:** Typical workflows use **60–67% fewer tokens** compared to a naive all-in-context approach. Vibe mode (minimal profile) reaches 67% savings, standard development 64%, and even strict mode saves 57%.
|
|
47
|
+
|
|
48
|
+
## Agent Dashboard
|
|
49
|
+
|
|
50
|
+
ERNE includes a real-time pixel-art dashboard that visualizes all 10 agents working in an animated office environment.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
erne dashboard # Start on port 3333, open browser
|
|
54
|
+
erne dashboard --port 4444 # Custom port
|
|
55
|
+
erne dashboard --no-open # Don't open browser
|
|
56
|
+
erne start # Init project + dashboard in background
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Features:**
|
|
60
|
+
- 4 office rooms (Development, Code Review, Testing, Conference)
|
|
61
|
+
- 8 unique procedural pixel-art agent sprites with animations
|
|
62
|
+
- Real-time status updates via WebSocket (connected to Claude Code hooks)
|
|
63
|
+
- Sidebar with agent status, task descriptions, and connection indicator
|
|
64
|
+
- Auto-reconnect with exponential backoff
|
|
65
|
+
|
|
66
|
+
The dashboard hooks into Claude Code's `PreToolUse` and `PostToolUse` events (pattern: `Agent`) to track which agents are actively working and what they're doing.
|
|
67
|
+
|
|
68
|
+
## IDE & Editor Support
|
|
69
|
+
|
|
70
|
+
ERNE works with every major AI coding assistant out of the box:
|
|
71
|
+
|
|
72
|
+
| File | IDE / Tool |
|
|
73
|
+
|------|-----------|
|
|
74
|
+
| `CLAUDE.md` | Claude Code |
|
|
75
|
+
| `AGENTS.md` | Codex, Windsurf, Cursor, GitHub Copilot |
|
|
76
|
+
| `GEMINI.md` | Google Antigravity |
|
|
77
|
+
| `.cursorrules` | Cursor |
|
|
78
|
+
| `.windsurfrules` | Windsurf |
|
|
79
|
+
| `.github/copilot-instructions.md` | GitHub Copilot |
|
|
80
|
+
|
|
81
|
+
All config files share the same React Native & Expo conventions: TypeScript strict mode, Expo Router, Zustand + TanStack Query, testing with Jest/RNTL/Detox, and security best practices.
|
|
28
82
|
|
|
29
83
|
## Agents
|
|
30
84
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
85
|
+
| Agent | Domain | Room |
|
|
86
|
+
|-------|--------|------|
|
|
87
|
+
| **architect** | System design and project structure | Development |
|
|
88
|
+
| **senior-developer** | End-to-end feature implementation, screens, hooks, API | Development |
|
|
89
|
+
| **feature-builder** | Focused implementation units, works in parallel | Development |
|
|
90
|
+
| **native-bridge-builder** | Turbo Modules and native platform APIs | Development |
|
|
91
|
+
| **expo-config-resolver** | Expo configuration and build issues | Development |
|
|
92
|
+
| **ui-designer** | Accessible, performant UI components | Development |
|
|
93
|
+
| **code-reviewer** | Code quality and best practices | Code Review |
|
|
94
|
+
| **upgrade-assistant** | Version migration guidance | Code Review |
|
|
95
|
+
| **tdd-guide** | Test-driven development workflow | Testing |
|
|
96
|
+
| **performance-profiler** | FPS diagnostics and bundle optimization | Testing |
|
|
39
97
|
|
|
40
98
|
## Hook Profiles
|
|
41
99
|
|
|
42
|
-
| Profile | Use Case |
|
|
43
|
-
|
|
44
|
-
| minimal | Fast iteration, vibe coding |
|
|
45
|
-
| standard | Balanced quality + speed (recommended) |
|
|
46
|
-
| strict | Production-grade enforcement |
|
|
100
|
+
| Profile | Hooks | Use Case |
|
|
101
|
+
|---------|-------|----------|
|
|
102
|
+
| minimal | 3 | Fast iteration, vibe coding — maximum speed, minimum friction |
|
|
103
|
+
| standard | 11 | Balanced quality + speed (recommended) — catches real issues |
|
|
104
|
+
| strict | 17 | Production-grade enforcement — full security, accessibility, perf budgets |
|
|
47
105
|
|
|
48
|
-
Change profile:
|
|
106
|
+
Change profile: set `ERNE_PROFILE` env var, add `<!-- Hook Profile: standard -->` to CLAUDE.md, or use `/vibe` context.
|
|
49
107
|
|
|
50
108
|
## Commands
|
|
51
109
|
|
|
52
|
-
Core
|
|
110
|
+
**Core:** `/plan`, `/code-review`, `/tdd`, `/build-fix`, `/perf`, `/upgrade`, `/native-module`, `/navigate`
|
|
111
|
+
|
|
112
|
+
**Extended:** `/animate`, `/deploy`, `/component`, `/debug`, `/quality-gate`
|
|
113
|
+
|
|
114
|
+
**Learning:** `/learn`, `/retrospective`, `/setup-device`
|
|
115
|
+
|
|
116
|
+
## Architecture
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
Claude Code Hooks ──▶ run-with-flags.js ──▶ Profile gate ──▶ Hook scripts
|
|
120
|
+
│
|
|
121
|
+
┌──────────┴──────────┐
|
|
122
|
+
│ Only hooks for │
|
|
123
|
+
│ active profile │
|
|
124
|
+
│ are executed │
|
|
125
|
+
└─────────────────────┘
|
|
126
|
+
|
|
127
|
+
erne dashboard ──▶ HTTP + WS Server ──▶ Browser Canvas
|
|
128
|
+
▲
|
|
129
|
+
Claude Code PreToolUse ─┤ (Agent pattern)
|
|
130
|
+
Claude Code PostToolUse ┘
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Key design principles:**
|
|
134
|
+
- **Zero runtime dependencies** for the harness itself (ws package only for dashboard)
|
|
135
|
+
- **Conditional loading** — rules, skills, and hooks load based on project type and profile
|
|
136
|
+
- **Fresh subagent per task** — no context pollution between agent invocations
|
|
137
|
+
- **Silent failure** — hooks never block Claude Code if something goes wrong
|
|
53
138
|
|
|
54
|
-
|
|
139
|
+
## Available On
|
|
55
140
|
|
|
56
|
-
|
|
141
|
+
- [npm](https://www.npmjs.com/package/erne-universal) — `npx erne-universal init`
|
|
142
|
+
- [SkillsMP](https://skillsmp.com) — Auto-indexed from GitHub
|
|
143
|
+
- [BuildWithClaude](https://buildwithclaude.com) — Plugin directory
|
|
144
|
+
- [VoltAgent/awesome-agent-skills](https://github.com/VoltAgent/awesome-agent-skills) — Curated skills list
|
|
57
145
|
|
|
58
146
|
## Documentation
|
|
59
147
|
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feature-builder
|
|
3
|
+
description: Focused feature implementation — individual screens, components, hooks, and API endpoints. Designed to work in parallel with senior-developer. Triggered by /code, /feature, /component.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are the ERNE Feature Builder agent — a focused React Native/Expo implementation specialist who builds individual feature units quickly and correctly.
|
|
7
|
+
|
|
8
|
+
## Your Role
|
|
9
|
+
|
|
10
|
+
Implement discrete feature units: a single screen, a custom hook, an API integration module, or a reusable component. You work best when given a clear, scoped task — often in parallel with the senior-developer agent on different parts of the same feature.
|
|
11
|
+
|
|
12
|
+
## Capabilities
|
|
13
|
+
|
|
14
|
+
- **Screen building**: Implement individual screens with proper data fetching and state handling
|
|
15
|
+
- **Hook extraction**: Build focused custom hooks with clean interfaces and error handling
|
|
16
|
+
- **API modules**: Create typed API client methods, TanStack Query wrappers, and cache invalidation
|
|
17
|
+
- **Component building**: Build reusable UI components with props API, accessibility, and platform variants
|
|
18
|
+
- **Utility modules**: Implement formatters, validators, transforms, and platform-specific helpers
|
|
19
|
+
- **Migration scripts**: Write codemods and data migration utilities
|
|
20
|
+
|
|
21
|
+
## Tech Stack
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
// Screen with data fetching
|
|
25
|
+
export const ProfileScreen = () => {
|
|
26
|
+
const { id } = useLocalSearchParams<{ id: string }>();
|
|
27
|
+
const { data: user, isLoading, error } = useUser(id);
|
|
28
|
+
|
|
29
|
+
if (isLoading) return <LoadingSkeleton />;
|
|
30
|
+
if (error) return <ErrorView error={error} onRetry={refetch} />;
|
|
31
|
+
if (!user) return <EmptyState message="User not found" />;
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<ScrollView contentContainerStyle={styles.container}>
|
|
35
|
+
<ProfileHeader user={user} />
|
|
36
|
+
<ProfileStats stats={user.stats} />
|
|
37
|
+
<ProfileActions userId={user.id} />
|
|
38
|
+
</ScrollView>
|
|
39
|
+
);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Custom hook
|
|
43
|
+
export const useUser = (userId: string) => {
|
|
44
|
+
return useQuery({
|
|
45
|
+
queryKey: ['user', userId],
|
|
46
|
+
queryFn: () => apiClient.get<User>(`/users/${userId}`),
|
|
47
|
+
enabled: !!userId,
|
|
48
|
+
staleTime: 5 * 60 * 1000,
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Process
|
|
54
|
+
|
|
55
|
+
1. **Receive scoped task** — One screen, one hook, one module at a time
|
|
56
|
+
2. **Check dependencies** — Verify types, API contracts, and shared state are defined
|
|
57
|
+
3. **Implement** — Write the code with all states handled (loading, error, empty, success)
|
|
58
|
+
4. **Type everything** — Explicit return types, param interfaces, no `any`
|
|
59
|
+
5. **Handle edges** — Null checks, empty arrays, network failures, platform differences
|
|
60
|
+
6. **Deliver** — Complete file ready to integrate
|
|
61
|
+
|
|
62
|
+
## Parallel Work Pattern
|
|
63
|
+
|
|
64
|
+
When working alongside senior-developer:
|
|
65
|
+
- **Senior-developer** handles: data layer, stores, navigation skeleton, complex multi-screen flows
|
|
66
|
+
- **Feature-builder** handles: individual screens, isolated components, utility hooks, API wrappers
|
|
67
|
+
- Coordinate via shared type definitions and agreed interfaces
|
|
68
|
+
- Never modify files the other agent is actively editing
|
|
69
|
+
|
|
70
|
+
## Guidelines
|
|
71
|
+
|
|
72
|
+
- Functional components with `const` + arrow functions, named exports only
|
|
73
|
+
- Group imports: react → react-native → expo → external → internal → types
|
|
74
|
+
- Max 250 lines per file — if larger, you're doing too much
|
|
75
|
+
- `StyleSheet.create()` always, no inline styles
|
|
76
|
+
- Handle all UI states: loading, error, empty, success
|
|
77
|
+
- Every public function needs a TypeScript return type
|
|
78
|
+
- No `any` — use `unknown` and narrow, or define the type
|
|
79
|
+
- Accessibility: `accessibilityLabel`, `accessibilityRole`, `accessibilityHint` on interactive elements
|
|
80
|
+
- Test-ready: props-based, no hidden global state, injectable dependencies
|
|
81
|
+
|
|
82
|
+
## Output Format
|
|
83
|
+
|
|
84
|
+
For each unit:
|
|
85
|
+
1. File path and complete code
|
|
86
|
+
2. Props/params interface
|
|
87
|
+
3. Dependencies (what it imports from other modules)
|
|
88
|
+
4. Integration point (how the parent screen/module uses it)
|