erne-universal 0.10.17 → 0.10.19

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.
@@ -1,54 +1,58 @@
1
1
  ---
2
2
  name: erne-init
3
- description: ERNE — Initialize the AI agent harness in this project. Sets up 13 agents, hooks, rules, MCP servers, and dashboard. Use when user says "set up erne", "initialize erne", "install erne", or first time setup.
3
+ description: Initialize ERNE — the AI agent harness for React Native & Expo projects. Sets up 13 specialized agents, hook-based code quality enforcement, MCP server integrations, and a visual dashboard. Triggers on "set up erne", "initialize erne", "install erne", "configure agents", "add erne to project", or any first-time ERNE setup request. Always use this skill when the user wants to set up ERNE, even if they don't say "init" explicitly.
4
4
  ---
5
5
 
6
- # /erne-init — Initialize ERNE
6
+ # Initialize ERNE
7
7
 
8
- You are executing the `/erne-init` command. This sets up ERNE in the current project.
8
+ ERNE is an AI agent harness for React Native and Expo. Setting it up involves choosing a few preferences and then running a single CLI command. The reason you need to ask the user before running is that the CLI's interactive prompts don't work reliably in Claude Code — so you handle the interaction here in conversation instead.
9
9
 
10
- ## Before Running
10
+ ## Step 1: Ask preferences
11
11
 
12
- You MUST ask the user these questions before proceeding. Do NOT skip this step. Do NOT default silently.
12
+ Before running anything, ask the user two things in a single message:
13
13
 
14
- ### Question 1: Hook Profile
14
+ **Profile:** ERNE uses hook profiles to control how much code quality checking happens automatically. Ask which one they'd like:
15
+ - **minimal** — Almost no automated checks. Good for quick prototyping or when you just want the agents without guardrails.
16
+ - **standard** — Catches common issues (formatting, console.logs, platform-specific bugs) without slowing things down. This is what most people pick.
17
+ - **strict** — Adds security scanning, accessibility checks, and test gates. Good for production apps or teams.
15
18
 
16
- Ask the user:
19
+ **MCP servers:** ERNE can configure agent-device (controls iOS Simulator and Android Emulator for screenshots, taps, navigation) and GitHub integration. Ask if they want these set up now or later.
17
20
 
18
- > Which hook profile would you like?
19
- >
20
- > **a) minimal** — Fast iteration, minimal checks. For rapid prototyping.
21
- > **b) standard** (recommended) — Balanced quality and speed. For most projects.
22
- > **c) strict** — Production-grade enforcement. For teams requiring CI-level quality.
21
+ Wait for the user to respond before continuing.
23
22
 
24
- Wait for their response.
23
+ ## Step 2: Run the init command
25
24
 
26
- ### Question 2: MCP Servers
25
+ Once you have their preferences, run this in Bash:
27
26
 
28
- Ask the user:
27
+ ```bash
28
+ npx erne-universal@latest init --yes --profile <profile> [--no-mcp]
29
+ ```
29
30
 
30
- > ERNE can configure MCP servers for device control and GitHub integration. Configure now?
31
- >
32
- > **a) Yes** — Set up agent-device (simulator/emulator control) + GitHub
33
- > **b) No** — Skip MCP setup, configure later
31
+ Replace `<profile>` with their choice (minimal, standard, or strict). Add `--no-mcp` only if they said no to MCP servers.
34
32
 
35
- Wait for their response.
33
+ The `--yes` flag is important — it tells the CLI to skip its own interactive prompts since you already gathered the preferences.
36
34
 
37
- ## Run Init
35
+ ## Step 3: Launch the dashboard
38
36
 
39
- Based on their answers, construct and run the command:
37
+ After init completes, start the dashboard:
40
38
 
41
39
  ```bash
42
- npx erne-universal init --yes --profile <chosen-profile> [--no-mcp if they chose no]
40
+ npx erne-universal dashboard &
43
41
  ```
44
42
 
45
- Examples:
46
- - User chose standard + yes to MCP: `npx erne-universal init --yes --profile standard`
47
- - User chose strict + no to MCP: `npx erne-universal init --yes --profile strict --no-mcp`
48
- - User chose minimal + yes to MCP: `npx erne-universal init --yes --profile minimal`
43
+ The dashboard runs in the background. Read the output to find which port it started on (usually 3333, but it auto-selects a free port if 3333 is taken).
44
+
45
+ If the dashboard needs to install dependencies on first run (takes about 2 minutes), tell the user it's installing and will open in the browser when ready.
49
46
 
50
- ## After Init
47
+ ## Step 4: Tell the user what happened
51
48
 
52
- 1. Tell the user to **restart the Claude Code session** to activate MCP servers and hooks
53
- 2. Mention they can run `npx erne-universal dashboard` to launch the visual dashboard
54
- 3. List available commands: `/erne-plan`, `/erne-perf`, `/erne-doctor`, etc.
49
+ Summarize in a clear message:
50
+ - What was set up (agents, hooks, rules, skills, MCP servers)
51
+ - The dashboard URL (e.g., http://localhost:3333)
52
+ - That they need to **restart this Claude Code session** for MCP servers and hooks to activate
53
+ - A few commands they can try after restart:
54
+ - `/erne-plan` — plan a new feature
55
+ - `/erne-perf` — profile performance issues
56
+ - `/erne-doctor` — check project health
57
+ - `/erne-code-review` — review code quality
58
+ - Type `/erne-` and press Tab to see all commands
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erne-universal",
3
- "version": "0.10.17",
3
+ "version": "0.10.19",
4
4
  "description": "Complete AI coding agent harness for React Native and Expo development",
5
5
  "keywords": [
6
6
  "react-native",
@@ -68,7 +68,41 @@ if (hasAndroidDir && findFilesWithExt('android', '.kt')) {
68
68
 
69
69
  const hasSignals = layers.length > 1;
70
70
 
71
- console.log(`ERNE: Project layers: ${layers.join(', ')}`);
71
+ // Read ERNE settings for richer session info
72
+ let profile = 'unknown';
73
+ let agentCount = 0;
74
+ let version = '';
75
+ try {
76
+ const settings = JSON.parse(fs.readFileSync(path.join(projectDir, '.claude', 'settings.json'), 'utf8'));
77
+ profile = settings.profile || 'standard';
78
+ version = settings.erneVersion || '';
79
+ } catch { /* no settings */ }
80
+
81
+ // Count agents
82
+ try {
83
+ const agentDir = path.join(projectDir, '.claude', 'agents');
84
+ if (fs.existsSync(agentDir)) {
85
+ agentCount = fs.readdirSync(agentDir).filter(f => f.endsWith('.md')).length;
86
+ }
87
+ } catch { /* skip */ }
88
+
89
+ // Find dashboard port
90
+ let dashboardInfo = '';
91
+ try {
92
+ const { resolveDashboardPort } = require('./lib/port-registry');
93
+ const port = resolveDashboardPort(projectDir);
94
+ if (port) dashboardInfo = ` | Dashboard: http://localhost:${port}`;
95
+ } catch { /* no registry */ }
96
+
97
+ // Build status line
98
+ const parts = [];
99
+ if (version) parts.push(`v${version}`);
100
+ parts.push(`${profile} profile`);
101
+ if (agentCount > 0) parts.push(`${agentCount} agents`);
102
+ parts.push(`layers: ${layers.join(', ')}`);
103
+
104
+ console.log(`ERNE ${parts.join(' | ')}${dashboardInfo}`);
105
+ console.log(`Use /erne- commands (e.g. /erne-plan, /erne-perf, /erne-doctor)`);
72
106
 
73
107
  if (!hasSignals) {
74
108
  process.exit(2); // warn