erne-universal 0.10.25 → 0.11.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/.claude-plugin/plugin.json +6 -18
- package/README.md +113 -109
- package/bin/cli.js +4 -2
- package/install.sh +1 -1
- package/lib/uninstall.js +74 -0
- package/package.json +7 -3
- package/scripts/validate-all.js +21 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "erne-universal",
|
|
3
|
-
"version": "0.10.
|
|
4
|
-
"description": "Complete AI coding agent harness for React Native and Expo
|
|
3
|
+
"version": "0.10.25",
|
|
4
|
+
"description": "Complete AI coding agent harness for React Native and Expo — 13 agents, 22 commands, 7 skills, 10 MCP integrations, autonomous worker mode, visual debugging, smart routing",
|
|
5
5
|
"author": "JubaKitiashvili",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "https://github.com/JubaKitiashvili/everything-react-native-expo",
|
|
@@ -20,12 +20,7 @@
|
|
|
20
20
|
"autonomous-worker",
|
|
21
21
|
"visual-debugging"
|
|
22
22
|
],
|
|
23
|
-
"categories": [
|
|
24
|
-
"mobile-development",
|
|
25
|
-
"react-native",
|
|
26
|
-
"ai-agents",
|
|
27
|
-
"developer-tools"
|
|
28
|
-
],
|
|
23
|
+
"categories": ["mobile-development", "react-native", "ai-agents", "developer-tools"],
|
|
29
24
|
"components": {
|
|
30
25
|
"agents": [
|
|
31
26
|
"architect",
|
|
@@ -43,6 +38,7 @@
|
|
|
43
38
|
"visual-debugger"
|
|
44
39
|
],
|
|
45
40
|
"commands": [
|
|
41
|
+
"erne-init",
|
|
46
42
|
"erne-plan",
|
|
47
43
|
"erne-code-review",
|
|
48
44
|
"erne-tdd",
|
|
@@ -74,11 +70,7 @@
|
|
|
74
70
|
"tdd-workflow",
|
|
75
71
|
"upgrade-workflow"
|
|
76
72
|
],
|
|
77
|
-
"hooks": [
|
|
78
|
-
"minimal",
|
|
79
|
-
"standard",
|
|
80
|
-
"strict"
|
|
81
|
-
],
|
|
73
|
+
"hooks": ["minimal", "standard", "strict"],
|
|
82
74
|
"mcp-configs": [
|
|
83
75
|
"agent-device",
|
|
84
76
|
"appstore-connect",
|
|
@@ -91,11 +83,7 @@
|
|
|
91
83
|
"sentry",
|
|
92
84
|
"supabase"
|
|
93
85
|
],
|
|
94
|
-
"contexts": [
|
|
95
|
-
"dev",
|
|
96
|
-
"review",
|
|
97
|
-
"vibe"
|
|
98
|
-
]
|
|
86
|
+
"contexts": ["dev", "review", "vibe"]
|
|
99
87
|
},
|
|
100
88
|
"install": "npx erne-universal init",
|
|
101
89
|
"engines": {
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🏗️ ERNE — Everything React Native & Expo
|
|
2
2
|
|
|
3
|
-
> **
|
|
3
|
+
> **AI agent harness with 13 specialized agents, autonomous worker mode, visual debugging, and smart routing.** Adaptive stack detection, multi-agent orchestration, and a pixel-art dashboard. Every config is generated to match _your_ exact project setup.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/erne-universal)
|
|
6
6
|
[](https://github.com/JubaKitiashvili/everything-react-native-expo)
|
|
@@ -15,13 +15,14 @@
|
|
|
15
15
|
|
|
16
16
|
## ⚡ Quick Start
|
|
17
17
|
|
|
18
|
-
> **Prerequisite:** [Claude Code](https://claude.ai/claude-code) is required for the full experience (
|
|
18
|
+
> **Prerequisite:** [Claude Code](https://claude.ai/claude-code) is required for the full experience (13 agents, pipeline orchestration, dashboard, hooks). Other IDEs receive adaptive rules and configuration — see [IDE Support](#%EF%B8%8F-ide--editor-support).
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx erne-universal init
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
This will:
|
|
25
|
+
|
|
25
26
|
1. 🔍 **Deep-scan your project** — detects 15 stack dimensions (state management, navigation, styling, lists, images, forms, storage, testing, build system, component style, monorepo, New Architecture, and more)
|
|
26
27
|
2. 🎚️ Let you choose a hook profile (minimal / standard / strict)
|
|
27
28
|
3. 🔌 Select MCP integrations (simulator control, GitHub, etc.)
|
|
@@ -31,19 +32,19 @@ This will:
|
|
|
31
32
|
|
|
32
33
|
## 📦 What's Included
|
|
33
34
|
|
|
34
|
-
| Component
|
|
35
|
-
|
|
36
|
-
| 🤖 Agents
|
|
37
|
-
| 🔀 Agent variants
|
|
38
|
-
| ⚡ Commands
|
|
39
|
-
| 📏 Rule layers
|
|
40
|
-
| 🎯 Rule variants
|
|
41
|
-
| 🛡️ Hook profiles
|
|
42
|
-
| 📚 Skills
|
|
43
|
-
| 🎭 Contexts
|
|
44
|
-
| 🔌 MCP configs
|
|
45
|
-
| 📋 Workflow examples | 4
|
|
46
|
-
| 🤝 Handoff templates | 4
|
|
35
|
+
| Component | Count | Description |
|
|
36
|
+
| -------------------- | ----- | -------------------------------------------------------------------------------------------- |
|
|
37
|
+
| 🤖 Agents | 13 | Specialized AI agents incl. visual debugger, doc generator, smart routing |
|
|
38
|
+
| 🔀 Agent variants | 9 | Stack-adaptive agent configurations (StyleSheet vs NativeWind, Zustand vs Redux, etc.) |
|
|
39
|
+
| ⚡ Commands | 22 | Slash commands for every React Native workflow |
|
|
40
|
+
| 📏 Rule layers | 5 | Conditional rules: common, expo, bare-rn, native-ios, native-android |
|
|
41
|
+
| 🎯 Rule variants | 15 | Stack-specific rules selected by deep detection (state, navigation, styling, security, etc.) |
|
|
42
|
+
| 🛡️ Hook profiles | 3 | Minimal, standard, strict — quality enforcement your way |
|
|
43
|
+
| 📚 Skills | 7 | Reusable knowledge modules loaded on-demand |
|
|
44
|
+
| 🎭 Contexts | 3 | Behavior modes: dev, review, vibe |
|
|
45
|
+
| 🔌 MCP configs | 10 | Pre-configured server integrations |
|
|
46
|
+
| 📋 Workflow examples | 4 | End-to-end multi-agent workflow guides |
|
|
47
|
+
| 🤝 Handoff templates | 4 | Structured agent-to-agent context passing |
|
|
47
48
|
|
|
48
49
|
---
|
|
49
50
|
|
|
@@ -156,19 +157,21 @@ Features retry logic (max 3 attempts), escalation to user on persistent failures
|
|
|
156
157
|
|
|
157
158
|
Each agent has a distinct personality, quantified success metrics, and memory integration for cross-session learning.
|
|
158
159
|
|
|
159
|
-
| Agent
|
|
160
|
-
|
|
161
|
-
| **architect**
|
|
162
|
-
| **senior-developer**
|
|
163
|
-
| **feature-builder**
|
|
164
|
-
| **native-bridge-builder**
|
|
165
|
-
| **expo-config-resolver**
|
|
166
|
-
| **ui-designer**
|
|
167
|
-
| **code-reviewer**
|
|
168
|
-
| **upgrade-assistant**
|
|
169
|
-
| **tdd-guide**
|
|
170
|
-
| **performance-profiler**
|
|
171
|
-
| **pipeline-orchestrator**
|
|
160
|
+
| Agent | Emoji | Domain | Room |
|
|
161
|
+
| --------------------------- | ----- | ------------------------------------------------------ | ----------- |
|
|
162
|
+
| **architect** | 🏗️ | System design and project structure | Development |
|
|
163
|
+
| **senior-developer** | 👨💻 | End-to-end feature implementation, screens, hooks, API | Development |
|
|
164
|
+
| **feature-builder** | ⚡ | Focused implementation units, works in parallel | Development |
|
|
165
|
+
| **native-bridge-builder** | 🌉 | Turbo Modules and native platform APIs | Development |
|
|
166
|
+
| **expo-config-resolver** | ⚙️ | Expo configuration and build issues | Development |
|
|
167
|
+
| **ui-designer** | 🎨 | Accessible, performant UI components | Development |
|
|
168
|
+
| **code-reviewer** | 🔍 | Code quality with evidence-based approval | Code Review |
|
|
169
|
+
| **upgrade-assistant** | 📦 | Version migration guidance | Code Review |
|
|
170
|
+
| **tdd-guide** | 🚦 | Test-driven development workflow | Testing |
|
|
171
|
+
| **performance-profiler** | 🏎️ | FPS diagnostics and bundle optimization | Testing |
|
|
172
|
+
| **pipeline-orchestrator** | 🎯 | Multi-agent workflow coordination | Conference |
|
|
173
|
+
| **visual-debugger** | 🔬 | Screenshot-based UI debugging | Development |
|
|
174
|
+
| **documentation-generator** | 📝 | Auto-generate project documentation | Development |
|
|
172
175
|
|
|
173
176
|
---
|
|
174
177
|
|
|
@@ -182,11 +185,11 @@ erne dashboard # Context system starts automatically
|
|
|
182
185
|
|
|
183
186
|
### Benchmark-verified savings
|
|
184
187
|
|
|
185
|
-
| Layer
|
|
186
|
-
|
|
187
|
-
| **Summarizer**
|
|
188
|
-
| **Index + Search** | Chunks content by headings, indexes in FTS5 with BM25 ranking. Returns only relevant chunks — code examples preserved exactly
|
|
189
|
-
| **Full session**
|
|
188
|
+
| Layer | What it does | Savings |
|
|
189
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
190
|
+
| **Summarizer** | Auto-detects 14 content types (docs, JSON, logs, test output, build output, CSV, git history, etc.) and compresses to statistical summaries | **97–100%** |
|
|
191
|
+
| **Index + Search** | Chunks content by headings, indexes in FTS5 with BM25 ranking. Returns only relevant chunks — code examples preserved exactly | **80%** |
|
|
192
|
+
| **Full session** | Combined summarizer + search across a real debugging session (docs, snapshots, issues, tests, builds) | **99%** |
|
|
190
193
|
|
|
191
194
|
> **Real numbers:** 537 KB of tool outputs → 2.6 KB of context. That's **0.4%** of a 200K context window instead of 44.5%. See [BENCHMARK.md](BENCHMARK.md) for the full 21-scenario breakdown.
|
|
192
195
|
|
|
@@ -204,16 +207,16 @@ Knowledge ──▶ 3-Layer Search (FTS5 → Trigram → Levenshtein)
|
|
|
204
207
|
Session End ──▶ Snapshot (<2KB) ──▶ Next session restores context
|
|
205
208
|
```
|
|
206
209
|
|
|
207
|
-
| Feature
|
|
208
|
-
|
|
210
|
+
| Feature | What it does |
|
|
211
|
+
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
209
212
|
| **Content summarizer** | 14 auto-detected content types: markdown, HTML, JSON, test output, TypeScript errors, build output, logs, git history, CSV, and more. Each type gets a specialized summary format |
|
|
210
|
-
| **Content store**
|
|
211
|
-
| **Smart truncation**
|
|
212
|
-
| **Knowledge base**
|
|
213
|
-
| **Session continuity** | Snapshots capture active tasks, decisions, errors, and commits at session end. Next session restores context in <2KB
|
|
214
|
-
| **Budget manager**
|
|
215
|
-
| **Agent preloader**
|
|
216
|
-
| **Error→Fix tracking** | Correlates errors with subsequent file modifications to build fix patterns over time
|
|
213
|
+
| **Content store** | FTS5-powered index with Porter stemming. Markdown chunked by headings, code blocks never split or truncated. BM25 relevance ranking with byte budget management |
|
|
214
|
+
| **Smart truncation** | 4-tier fallback cascade: Structured → Pattern → Head/Tail → Hash. Handles anything the summarizer doesn't cover |
|
|
215
|
+
| **Knowledge base** | SQLite-backed with FTS5 full-text search, trigram fuzzy matching, and Levenshtein fallback. Entries scored by recency + access frequency |
|
|
216
|
+
| **Session continuity** | Snapshots capture active tasks, decisions, errors, and commits at session end. Next session restores context in <2KB |
|
|
217
|
+
| **Budget manager** | Set per-session and per-agent token limits. Throttles at 80%, supports aggressive truncation / warn / hard stop overflow strategies |
|
|
218
|
+
| **Agent preloader** | Tracks agent-to-agent transitions and predicts the next agent for parallel context warmup |
|
|
219
|
+
| **Error→Fix tracking** | Correlates errors with subsequent file modifications to build fix patterns over time |
|
|
217
220
|
|
|
218
221
|
### Dashboard sidebar panels
|
|
219
222
|
|
|
@@ -236,24 +239,24 @@ ERNE minimizes token usage through two complementary systems: **architecture-lev
|
|
|
236
239
|
|
|
237
240
|
### Architecture savings
|
|
238
241
|
|
|
239
|
-
| Mechanism
|
|
240
|
-
|
|
241
|
-
| **Profile-gated hooks**
|
|
242
|
-
| **Conditional rules**
|
|
243
|
-
| **On-demand skills**
|
|
244
|
-
| **Subagent isolation**
|
|
245
|
-
| **Task-specific commands** |
|
|
246
|
-
| **Context-based behavior** | Modes change behavior dynamically without loading new rulesets
|
|
242
|
+
| Mechanism | How it works | Savings |
|
|
243
|
+
| -------------------------- | --------------------------------------------------------------------- | ------- |
|
|
244
|
+
| **Profile-gated hooks** | Minimal profile runs 4 hooks instead of 16 | ~31% |
|
|
245
|
+
| **Conditional rules** | Only loads rules matching your project type (Expo, bare RN, native) | ~26% |
|
|
246
|
+
| **On-demand skills** | Skills load only when their command is invoked, not always in context | ~12% |
|
|
247
|
+
| **Subagent isolation** | Fresh agent per task with only its own definition + relevant rules | ~12% |
|
|
248
|
+
| **Task-specific commands** | 22 focused prompts instead of one monolithic instruction set | ~13% |
|
|
249
|
+
| **Context-based behavior** | Modes change behavior dynamically without loading new rulesets | ~3% |
|
|
247
250
|
|
|
248
251
|
### Runtime context optimization (benchmark-verified)
|
|
249
252
|
|
|
250
|
-
| Mechanism
|
|
251
|
-
|
|
252
|
-
| **Content summarizer** | Auto-detects 14 content types, produces statistical summaries
|
|
253
|
-
| **Index + Search**
|
|
254
|
-
| **Smart truncation**
|
|
255
|
-
| **Session snapshots**
|
|
256
|
-
| **Budget enforcement** | Throttling at 80% prevents runaway token usage
|
|
253
|
+
| Mechanism | How it works | Savings |
|
|
254
|
+
| ---------------------- | ------------------------------------------------------------------------ | ---------------------- |
|
|
255
|
+
| **Content summarizer** | Auto-detects 14 content types, produces statistical summaries | **97–100%** per output |
|
|
256
|
+
| **Index + Search** | FTS5 BM25 retrieval returns only relevant chunks, code preserved exactly | **80%** per search |
|
|
257
|
+
| **Smart truncation** | 4-tier fallback: Structured → Pattern → Head/Tail → Hash | 85–100% per output |
|
|
258
|
+
| **Session snapshots** | Captures full session state in <2KB | ~50% vs log replay |
|
|
259
|
+
| **Budget enforcement** | Throttling at 80% prevents runaway token usage | Prevents overflow |
|
|
257
260
|
|
|
258
261
|
**Result:** Architecture saves **60–67%** on what enters context. Runtime optimization achieves **97–100%** compression on tool outputs (verified across 21 benchmark scenarios with 537 KB of real data). In a full debugging session, **99% of tool output tokens are eliminated** — leaving 99.6% of your context window free for actual problem solving. See [BENCHMARK.md](BENCHMARK.md) for complete results.
|
|
259
262
|
|
|
@@ -261,11 +264,11 @@ ERNE minimizes token usage through two complementary systems: **architecture-lev
|
|
|
261
264
|
|
|
262
265
|
## 🛡️ Hook Profiles
|
|
263
266
|
|
|
264
|
-
| Profile
|
|
265
|
-
|
|
266
|
-
| `minimal`
|
|
267
|
-
| `standard` | 12
|
|
268
|
-
| `strict`
|
|
267
|
+
| Profile | Hooks | Use Case |
|
|
268
|
+
| ---------- | ----- | ---------------------------------------------------------------------------- |
|
|
269
|
+
| `minimal` | 4 | ⚡ Fast iteration, vibe coding — maximum speed, minimum friction |
|
|
270
|
+
| `standard` | 12 | ⚖️ Balanced quality + speed (recommended) — catches real issues |
|
|
271
|
+
| `strict` | 16 | 🔒 Production-grade enforcement — full security, accessibility, perf budgets |
|
|
269
272
|
|
|
270
273
|
Change profile: set `ERNE_PROFILE` env var, add `<!-- Hook Profile: standard -->` to CLAUDE.md, or use `/vibe` context.
|
|
271
274
|
|
|
@@ -273,12 +276,12 @@ Change profile: set `ERNE_PROFILE` env var, add `<!-- Hook Profile: standard -->
|
|
|
273
276
|
|
|
274
277
|
## ⚡ Commands
|
|
275
278
|
|
|
276
|
-
| Category
|
|
277
|
-
|
|
278
|
-
| **Core**
|
|
279
|
-
| **Extended**
|
|
280
|
-
| **Orchestration** | `/orchestrate`
|
|
281
|
-
| **Learning**
|
|
279
|
+
| Category | Commands |
|
|
280
|
+
| ----------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
281
|
+
| **Core** | `/plan`, `/code-review`, `/tdd`, `/build-fix`, `/perf`, `/upgrade`, `/native-module`, `/navigate`, `/code`, `/feature` |
|
|
282
|
+
| **Extended** | `/animate`, `/deploy`, `/component`, `/debug`, `/debug-visual`, `/quality-gate` |
|
|
283
|
+
| **Orchestration** | `/orchestrate`, `/worker` |
|
|
284
|
+
| **Learning** | `/learn`, `/retrospective`, `/setup-device` |
|
|
282
285
|
|
|
283
286
|
---
|
|
284
287
|
|
|
@@ -286,27 +289,27 @@ Change profile: set `ERNE_PROFILE` env var, add `<!-- Hook Profile: standard -->
|
|
|
286
289
|
|
|
287
290
|
ERNE generates adaptive config files for multiple IDEs, but the **full agent experience requires Claude Code**:
|
|
288
291
|
|
|
289
|
-
| Feature
|
|
290
|
-
|
|
291
|
-
| Adaptive rules & config
|
|
292
|
-
| Stack detection (15 dimensions) |
|
|
293
|
-
|
|
|
294
|
-
|
|
|
295
|
-
| Pipeline orchestration
|
|
296
|
-
| Hook profiles
|
|
297
|
-
| Agent dashboard
|
|
298
|
-
| Cross-session memory
|
|
292
|
+
| Feature | Claude Code | Cursor / Windsurf / Copilot / Codex |
|
|
293
|
+
| ------------------------------- | :---------: | :---------------------------------: |
|
|
294
|
+
| Adaptive rules & config | ✅ | ✅ |
|
|
295
|
+
| Stack detection (15 dimensions) | ✅ | ✅ |
|
|
296
|
+
| 22 slash commands | ✅ | ❌ |
|
|
297
|
+
| 13 specialized agents | ✅ | ❌ |
|
|
298
|
+
| Pipeline orchestration | ✅ | ❌ |
|
|
299
|
+
| Hook profiles | ✅ | ❌ |
|
|
300
|
+
| Agent dashboard | ✅ | ❌ |
|
|
301
|
+
| Cross-session memory | ✅ | ❌ |
|
|
299
302
|
|
|
300
303
|
**Generated config files:**
|
|
301
304
|
|
|
302
|
-
| File
|
|
303
|
-
|
|
304
|
-
| `CLAUDE.md`
|
|
305
|
-
| `AGENTS.md`
|
|
306
|
-
| `GEMINI.md`
|
|
307
|
-
| `.cursorrules`
|
|
308
|
-
| `.windsurfrules`
|
|
309
|
-
| `.github/copilot-instructions.md` | GitHub Copilot
|
|
305
|
+
| File | IDE / Tool |
|
|
306
|
+
| --------------------------------- | --------------------------------------- |
|
|
307
|
+
| `CLAUDE.md` | Claude Code (full experience) |
|
|
308
|
+
| `AGENTS.md` | Codex, Windsurf, Cursor, GitHub Copilot |
|
|
309
|
+
| `GEMINI.md` | Gemini CLI |
|
|
310
|
+
| `.cursorrules` | Cursor |
|
|
311
|
+
| `.windsurfrules` | Windsurf |
|
|
312
|
+
| `.github/copilot-instructions.md` | GitHub Copilot |
|
|
310
313
|
|
|
311
314
|
---
|
|
312
315
|
|
|
@@ -328,6 +331,7 @@ Claude Code PostToolUse ┘
|
|
|
328
331
|
```
|
|
329
332
|
|
|
330
333
|
**Key design principles:**
|
|
334
|
+
|
|
331
335
|
- 🪶 **Zero runtime dependencies** for the harness itself (ws package only for dashboard)
|
|
332
336
|
- 🎯 **Conditional loading** — rules, skills, and hooks load based on project type and profile
|
|
333
337
|
- 🧹 **Fresh subagent per task** — no context pollution between agent invocations
|
|
@@ -339,12 +343,12 @@ Claude Code PostToolUse ┘
|
|
|
339
343
|
|
|
340
344
|
We welcome contributions from everyone — from typo fixes to new agents and skills.
|
|
341
345
|
|
|
342
|
-
| I want to...
|
|
343
|
-
|
|
344
|
-
| 🐛 Report a bug
|
|
345
|
-
| 💡 Request a feature
|
|
346
|
-
| 📚 Propose a new skill | [Skill Proposal](https://github.com/JubaKitiashvili/everything-react-native-expo/issues/new?template=new_skill.md)
|
|
347
|
-
| 🔀 Submit a PR
|
|
346
|
+
| I want to... | Start here |
|
|
347
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
348
|
+
| 🐛 Report a bug | [Bug Report](https://github.com/JubaKitiashvili/everything-react-native-expo/issues/new?template=bug_report.md) |
|
|
349
|
+
| 💡 Request a feature | [Feature Request](https://github.com/JubaKitiashvili/everything-react-native-expo/issues/new?template=feature_request.md) |
|
|
350
|
+
| 📚 Propose a new skill | [Skill Proposal](https://github.com/JubaKitiashvili/everything-react-native-expo/issues/new?template=new_skill.md) |
|
|
351
|
+
| 🔀 Submit a PR | [Contributing Guide](CONTRIBUTING.md) |
|
|
348
352
|
|
|
349
353
|
```bash
|
|
350
354
|
git checkout -b feat/your-feature
|
|
@@ -357,12 +361,12 @@ npm run validate && npm test # Must pass before PR
|
|
|
357
361
|
|
|
358
362
|
Skills, agents, and MCP configs are open source — anyone can add them via PR. Partnerships are for deeper collaboration:
|
|
359
363
|
|
|
360
|
-
| Partnership Type
|
|
361
|
-
|
|
362
|
-
| **Co-Maintenance**
|
|
363
|
-
| **Early Access**
|
|
364
|
-
| **Joint Promotion**
|
|
365
|
-
| **Domain Expertise** | Co-develop specialized agents that require deep knowledge of your platform
|
|
364
|
+
| Partnership Type | What It Means |
|
|
365
|
+
| -------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
366
|
+
| **Co-Maintenance** | You keep your library's ERNE skill up to date as your API evolves |
|
|
367
|
+
| **Early Access** | We update ERNE before your breaking changes ship, so users never hit stale guidance |
|
|
368
|
+
| **Joint Promotion** | Your docs recommend ERNE for AI-assisted development, we feature you on [erne.dev](https://erne.dev) |
|
|
369
|
+
| **Domain Expertise** | Co-develop specialized agents that require deep knowledge of your platform |
|
|
366
370
|
|
|
367
371
|
If you maintain a React Native library, Expo tool, or developer service — [let's talk](https://github.com/JubaKitiashvili/everything-react-native-expo/issues/new?template=partnership.md).
|
|
368
372
|
|
|
@@ -379,17 +383,17 @@ If you maintain a React Native library, Expo tool, or developer service — [let
|
|
|
379
383
|
|
|
380
384
|
## 📖 Documentation
|
|
381
385
|
|
|
382
|
-
| Doc
|
|
383
|
-
|
|
384
|
-
| [Getting Started](docs/getting-started.md)
|
|
385
|
-
| [Agents Guide](docs/agents.md)
|
|
386
|
-
| [Commands Reference](docs/commands.md)
|
|
387
|
-
| [Hooks & Profiles](docs/hooks-profiles.md)
|
|
388
|
-
| [Creating Skills](docs/creating-skills.md)
|
|
389
|
-
| [Pipeline & Orchestration](docs/pipeline.md)
|
|
390
|
-
| [Memory Integration](docs/memory-integration.md) | Cross-session learning with MCP
|
|
391
|
-
| [Handoff Templates](docs/handoff-templates.md)
|
|
392
|
-
| [Contributing](CONTRIBUTING.md)
|
|
386
|
+
| Doc | Description |
|
|
387
|
+
| ------------------------------------------------ | ------------------------------------ |
|
|
388
|
+
| [Getting Started](docs/getting-started.md) | Installation and first run |
|
|
389
|
+
| [Agents Guide](docs/agents.md) | All 13 agents with domains and usage |
|
|
390
|
+
| [Commands Reference](docs/commands.md) | All 22 slash commands |
|
|
391
|
+
| [Hooks & Profiles](docs/hooks-profiles.md) | Hook system and 3 profiles |
|
|
392
|
+
| [Creating Skills](docs/creating-skills.md) | Author your own skills |
|
|
393
|
+
| [Pipeline & Orchestration](docs/pipeline.md) | Multi-agent workflow coordination |
|
|
394
|
+
| [Memory Integration](docs/memory-integration.md) | Cross-session learning with MCP |
|
|
395
|
+
| [Handoff Templates](docs/handoff-templates.md) | Structured agent-to-agent context |
|
|
396
|
+
| [Contributing](CONTRIBUTING.md) | How to contribute |
|
|
393
397
|
|
|
394
398
|
---
|
|
395
399
|
|
package/bin/cli.js
CHANGED
|
@@ -19,6 +19,7 @@ const COMMANDS = {
|
|
|
19
19
|
status: () => require('../lib/status'),
|
|
20
20
|
audit: () => require('../lib/audit-cli'),
|
|
21
21
|
worker: () => require('../lib/worker'),
|
|
22
|
+
uninstall: () => require('../lib/uninstall'),
|
|
22
23
|
'sync-configs': () => require('../lib/sync-configs'),
|
|
23
24
|
sync: () => require('../lib/sync-configs'),
|
|
24
25
|
version: () => {
|
|
@@ -43,6 +44,7 @@ const COMMANDS = {
|
|
|
43
44
|
doctor Check project health and ERNE setup
|
|
44
45
|
status Show current ERNE configuration
|
|
45
46
|
worker Run autonomous ticket execution agent
|
|
47
|
+
uninstall Remove all ERNE files from your project
|
|
46
48
|
sync-configs Sync IDE config files from CLAUDE.md (alias: sync)
|
|
47
49
|
version Show installed version
|
|
48
50
|
help Show this help message
|
|
@@ -76,7 +78,7 @@ const COMMANDS = {
|
|
|
76
78
|
Website: https://erne.dev
|
|
77
79
|
`);
|
|
78
80
|
process.exit(0);
|
|
79
|
-
}
|
|
81
|
+
},
|
|
80
82
|
};
|
|
81
83
|
|
|
82
84
|
let command = process.argv[2] || 'help';
|
|
@@ -95,7 +97,7 @@ if (!COMMANDS[command]) {
|
|
|
95
97
|
// Execute command module
|
|
96
98
|
const run = COMMANDS[command]();
|
|
97
99
|
if (typeof run === 'function') {
|
|
98
|
-
run().catch(err => {
|
|
100
|
+
run().catch((err) => {
|
|
99
101
|
console.error('Error:', err.message);
|
|
100
102
|
process.exit(1);
|
|
101
103
|
});
|
package/install.sh
CHANGED
package/lib/uninstall.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
|
|
5
|
+
module.exports = async function uninstall() {
|
|
6
|
+
const cwd = process.cwd();
|
|
7
|
+
console.log('\n erne — Removing ERNE from project\n');
|
|
8
|
+
|
|
9
|
+
const toRemove = [
|
|
10
|
+
'.claude/agents',
|
|
11
|
+
'.claude/skills',
|
|
12
|
+
'.claude/rules',
|
|
13
|
+
'.claude/contexts',
|
|
14
|
+
'.claude/hooks',
|
|
15
|
+
'.claude/hooks.json',
|
|
16
|
+
'.claude/mcp',
|
|
17
|
+
'.claude/mcp-configs',
|
|
18
|
+
'.claude/settings.json',
|
|
19
|
+
'.mcp.json',
|
|
20
|
+
'.erne',
|
|
21
|
+
'erne-docs',
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
let removed = 0;
|
|
25
|
+
for (const rel of toRemove) {
|
|
26
|
+
const full = path.join(cwd, rel);
|
|
27
|
+
if (fs.existsSync(full)) {
|
|
28
|
+
fs.rmSync(full, { recursive: true, force: true });
|
|
29
|
+
console.log(' ✓ Removed ' + rel);
|
|
30
|
+
removed++;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Remove ERNE hooks from settings.local.json
|
|
35
|
+
const settingsLocalPath = path.join(cwd, '.claude', 'settings.local.json');
|
|
36
|
+
if (fs.existsSync(settingsLocalPath)) {
|
|
37
|
+
try {
|
|
38
|
+
const settings = JSON.parse(fs.readFileSync(settingsLocalPath, 'utf8'));
|
|
39
|
+
if (settings.hooks) {
|
|
40
|
+
delete settings.hooks;
|
|
41
|
+
fs.writeFileSync(settingsLocalPath, JSON.stringify(settings, null, 2) + '\n');
|
|
42
|
+
console.log(' ✓ Removed hooks from settings.local.json');
|
|
43
|
+
removed++;
|
|
44
|
+
}
|
|
45
|
+
} catch {
|
|
46
|
+
/* skip */
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Restore CLAUDE.md backup
|
|
51
|
+
const backupPath = path.join(cwd, 'CLAUDE.md.pre-erne');
|
|
52
|
+
const claudeMdPath = path.join(cwd, 'CLAUDE.md');
|
|
53
|
+
if (fs.existsSync(backupPath)) {
|
|
54
|
+
if (fs.existsSync(claudeMdPath)) fs.unlinkSync(claudeMdPath);
|
|
55
|
+
fs.renameSync(backupPath, claudeMdPath);
|
|
56
|
+
console.log(' ✓ Restored original CLAUDE.md');
|
|
57
|
+
removed++;
|
|
58
|
+
} else if (fs.existsSync(claudeMdPath)) {
|
|
59
|
+
// Check if CLAUDE.md is ERNE-generated
|
|
60
|
+
const content = fs.readFileSync(claudeMdPath, 'utf8');
|
|
61
|
+
if (content.includes('ERNE-GENERATED') || content.includes('erne-profile:')) {
|
|
62
|
+
fs.unlinkSync(claudeMdPath);
|
|
63
|
+
console.log(' ✓ Removed ERNE-generated CLAUDE.md');
|
|
64
|
+
removed++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (removed === 0) {
|
|
69
|
+
console.log(' No ERNE files found.\n');
|
|
70
|
+
} else {
|
|
71
|
+
console.log('\n Removed ' + removed + ' items. ERNE has been uninstalled.');
|
|
72
|
+
console.log(' Restart Claude Code session to complete.\n');
|
|
73
|
+
}
|
|
74
|
+
};
|
package/package.json
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "erne-universal",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Complete AI coding agent harness for React Native and Expo
|
|
3
|
+
"version": "0.11.0",
|
|
4
|
+
"description": "Complete AI coding agent harness for React Native and Expo — 13 specialized agents, autonomous worker mode, visual debugging, smart routing",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
7
7
|
"expo",
|
|
8
8
|
"claude-code",
|
|
9
9
|
"ai-agents",
|
|
10
10
|
"mobile-development",
|
|
11
|
-
"coding-assistant"
|
|
11
|
+
"coding-assistant",
|
|
12
|
+
"autonomous-worker",
|
|
13
|
+
"visual-debugging",
|
|
14
|
+
"documentation-generator",
|
|
15
|
+
"smart-routing"
|
|
12
16
|
],
|
|
13
17
|
"license": "MIT",
|
|
14
18
|
"author": "Juba Kitiashvili",
|
package/scripts/validate-all.js
CHANGED
|
@@ -11,9 +11,17 @@ let errors = 0;
|
|
|
11
11
|
let warnings = 0;
|
|
12
12
|
let checked = 0;
|
|
13
13
|
|
|
14
|
-
function error(msg) {
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
function error(msg) {
|
|
15
|
+
errors++;
|
|
16
|
+
console.error(` ✗ ${msg}`);
|
|
17
|
+
}
|
|
18
|
+
function warn(msg) {
|
|
19
|
+
warnings++;
|
|
20
|
+
console.warn(` ⚠ ${msg}`);
|
|
21
|
+
}
|
|
22
|
+
function ok(msg) {
|
|
23
|
+
console.log(` ✓ ${msg}`);
|
|
24
|
+
}
|
|
17
25
|
|
|
18
26
|
// ─── Validate frontmatter in .md files ───
|
|
19
27
|
function validateFrontmatter(filePath, requiredFields) {
|
|
@@ -47,7 +55,7 @@ function validateJson(filePath) {
|
|
|
47
55
|
|
|
48
56
|
// ─── Validate directory file counts ───
|
|
49
57
|
function validateCount(dir, ext, expected, label) {
|
|
50
|
-
const files = fs.readdirSync(dir).filter(f => f.endsWith(ext));
|
|
58
|
+
const files = fs.readdirSync(dir).filter((f) => f.endsWith(ext));
|
|
51
59
|
if (files.length !== expected) {
|
|
52
60
|
error(`${label}: Expected ${expected} files, found ${files.length}`);
|
|
53
61
|
} else {
|
|
@@ -61,15 +69,15 @@ console.log('\n ERNE Content Validation\n');
|
|
|
61
69
|
// Agents
|
|
62
70
|
console.log(' Agents:');
|
|
63
71
|
validateCount('agents', '.md', 13, 'agents/');
|
|
64
|
-
const agentFiles = fs.readdirSync('agents').filter(f => f.endsWith('.md'));
|
|
72
|
+
const agentFiles = fs.readdirSync('agents').filter((f) => f.endsWith('.md'));
|
|
65
73
|
for (const f of agentFiles) {
|
|
66
74
|
validateFrontmatter(path.join('agents', f), ['name', 'description']);
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
// Commands
|
|
70
78
|
console.log(' Commands:');
|
|
71
|
-
validateCount('commands', '.md', 22, 'commands/');
|
|
72
|
-
const cmdFiles = fs.readdirSync('commands').filter(f => f.endsWith('.md'));
|
|
79
|
+
validateCount('commands', '.md', 22, 'commands/'); // 22 command files
|
|
80
|
+
const cmdFiles = fs.readdirSync('commands').filter((f) => f.endsWith('.md'));
|
|
73
81
|
for (const f of cmdFiles) {
|
|
74
82
|
validateFrontmatter(path.join('commands', f), ['name', 'description']);
|
|
75
83
|
}
|
|
@@ -83,7 +91,7 @@ for (const layer of ruleLayers) {
|
|
|
83
91
|
error(`rules/${layer}/: Missing directory`);
|
|
84
92
|
continue;
|
|
85
93
|
}
|
|
86
|
-
const ruleFiles = fs.readdirSync(layerDir).filter(f => f.endsWith('.md'));
|
|
94
|
+
const ruleFiles = fs.readdirSync(layerDir).filter((f) => f.endsWith('.md'));
|
|
87
95
|
ok(`rules/${layer}/: ${ruleFiles.length} files`);
|
|
88
96
|
for (const f of ruleFiles) {
|
|
89
97
|
validateFrontmatter(path.join(layerDir, f), ['description']);
|
|
@@ -99,7 +107,7 @@ for (const profile of ['minimal', 'standard', 'strict']) {
|
|
|
99
107
|
|
|
100
108
|
// MCP configs
|
|
101
109
|
console.log(' MCP Configs:');
|
|
102
|
-
const mcpFiles = fs.readdirSync('mcp-configs').filter(f => f.endsWith('.json'));
|
|
110
|
+
const mcpFiles = fs.readdirSync('mcp-configs').filter((f) => f.endsWith('.json'));
|
|
103
111
|
ok(`mcp-configs/: ${mcpFiles.length} files`);
|
|
104
112
|
for (const f of mcpFiles) {
|
|
105
113
|
validateJson(path.join('mcp-configs', f));
|
|
@@ -111,9 +119,10 @@ validateCount('contexts', '.md', 3, 'contexts/');
|
|
|
111
119
|
|
|
112
120
|
// Skills
|
|
113
121
|
console.log(' Skills:');
|
|
114
|
-
const skillDirs = fs
|
|
115
|
-
.
|
|
116
|
-
.
|
|
122
|
+
const skillDirs = fs
|
|
123
|
+
.readdirSync('skills', { withFileTypes: true })
|
|
124
|
+
.filter((d) => d.isDirectory())
|
|
125
|
+
.map((d) => d.name);
|
|
117
126
|
ok(`skills/: ${skillDirs.length} skill directories`);
|
|
118
127
|
for (const dir of skillDirs) {
|
|
119
128
|
const skillMd = path.join('skills', dir, 'SKILL.md');
|