@codyswann/lisa 2.286.12 → 2.287.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/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +25 -1
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/strategies/package-lisa.d.ts.map +1 -1
- package/dist/strategies/package-lisa.js +51 -1
- package/dist/strategies/package-lisa.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +14 -2
- package/plugins/lisa-expo/.codex-plugin/hooks.json +15 -0
- package/plugins/lisa-expo/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-maestro-mcp-setup/SKILL.md +12 -0
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-maestro-mcp-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/maestro-mcp-setup/SKILL.md +144 -0
- package/plugins/lisa-expo/.codex-plugin/skills/maestro-mcp-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/THIRD-PARTY-NOTICES.md +17 -5
- package/plugins/lisa-expo/commands/maestro-mcp-setup.md +7 -0
- package/plugins/lisa-expo/hooks/register-maestro-mcp.sh +84 -0
- package/plugins/lisa-expo/skills/maestro-mcp-setup/SKILL.md +144 -0
- package/plugins/lisa-expo/skills/maestro-mcp-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-expo-agy/THIRD-PARTY-NOTICES.md +17 -5
- package/plugins/lisa-expo-agy/commands/lisa/maestro-mcp-setup.md +7 -0
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/maestro-mcp-setup/SKILL.md +144 -0
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +14 -1
- package/plugins/lisa-expo-copilot/THIRD-PARTY-NOTICES.md +17 -5
- package/plugins/lisa-expo-copilot/commands/lisa/maestro-mcp-setup.md +7 -0
- package/plugins/lisa-expo-copilot/hooks/register-maestro-mcp.sh +84 -0
- package/plugins/lisa-expo-copilot/skills/maestro-mcp-setup/SKILL.md +144 -0
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/THIRD-PARTY-NOTICES.md +17 -5
- package/plugins/lisa-expo-cursor/commands/lisa/maestro-mcp-setup.md +7 -0
- package/plugins/lisa-expo-cursor/hooks/hooks.json +10 -0
- package/plugins/lisa-expo-cursor/hooks/register-maestro-mcp.sh +84 -0
- package/plugins/lisa-expo-cursor/skills/maestro-mcp-setup/SKILL.md +144 -0
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/expo/.claude-plugin/plugin.json +13 -2
- package/plugins/src/expo/THIRD-PARTY-NOTICES.md +17 -5
- package/plugins/src/expo/commands/maestro-mcp-setup.md +7 -0
- package/plugins/src/expo/hooks/register-maestro-mcp.sh +84 -0
- package/plugins/src/expo/skills/maestro-mcp-setup/SKILL.md +144 -0
|
@@ -35,15 +35,27 @@ NOT registered in `.mcp.json`. Coding agents spawn stdio servers with a
|
|
|
35
35
|
non-login PATH, so an always-on entry fails visibly (Claude Code shows a
|
|
36
36
|
"Failed to reconnect … -32000" error every session) on any machine missing the
|
|
37
37
|
Maestro CLI or a resolvable Java runtime — which is most of the fleet. Opt in
|
|
38
|
-
per machine instead
|
|
38
|
+
per machine instead.
|
|
39
|
+
|
|
40
|
+
The supported path is the **`/lisa-expo:maestro-mcp-setup`** skill (Codex:
|
|
41
|
+
`$maestro-mcp-setup`), which detects the Maestro CLI and a usable Java runtime,
|
|
42
|
+
installs or guides whatever is missing, and registers `maestro mcp` at
|
|
43
|
+
**local/per-machine scope** with an absolute command path and injected
|
|
44
|
+
`JAVA_HOME`/`PATH` — so the spawn works even under a non-login PATH.
|
|
45
|
+
|
|
46
|
+
To register by hand instead, keep it at local scope and inject the toolchain,
|
|
47
|
+
e.g.:
|
|
39
48
|
|
|
40
49
|
```
|
|
41
|
-
|
|
50
|
+
# Resolve a real JAVA_HOME from the JVM (robust when `java` is a shim/symlink):
|
|
51
|
+
JAVA_HOME="$(java -XshowSettings:properties -version 2>&1 | sed -n 's/^[[:space:]]*java\.home = //p' | head -n1)"
|
|
52
|
+
claude mcp add --scope local maestro \
|
|
53
|
+
--env "JAVA_HOME=$JAVA_HOME" --env "PATH=$JAVA_HOME/bin:$HOME/.maestro/bin:$PATH" \
|
|
54
|
+
-- "$HOME/.maestro/bin/maestro" mcp
|
|
42
55
|
```
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
from a directory where Java is active).
|
|
57
|
+
Never register at `--scope project` / a committed `.mcp.json` — that is the
|
|
58
|
+
always-on form that reds out every other machine in the fleet.
|
|
47
59
|
|
|
48
60
|
### MIT License
|
|
49
61
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Enable the Maestro CLI's MCP server (maestro mcp, STDIO) for this machine, robustly. Detects the Maestro CLI + a usable Java runtime (honoring mise/asdf/sdkman), installs or guides what is missing, and registers the server at LOCAL/per-machine scope with an absolute command path and injected JAVA_HOME/PATH so the spawn never dies on a non-login PATH. Never registers at committed/project scope, which would reintroduce the fleet-wide -32000 failure."
|
|
3
|
+
allowed-tools: ["Skill"]
|
|
4
|
+
argument-hint: ""
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use the /lisa-expo:maestro-mcp-setup skill to enable the Maestro MCP server for this machine: detect the Maestro CLI and a usable Java runtime, install or guide whatever is missing (preferring the project's version manager), and register `maestro mcp` at local/per-machine scope with an absolute command path plus injected JAVA_HOME/PATH env. Local scope only — never a committed project `.mcp.json`. $ARGUMENTS
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
##
|
|
3
|
+
# SessionStart hook: register the Maestro MCP server for THIS machine — but only
|
|
4
|
+
# when the toolchain is already present.
|
|
5
|
+
#
|
|
6
|
+
# The Maestro stdio server is intentionally NOT in the distributed .mcp.json: an
|
|
7
|
+
# always-on entry reds out ("Failed to reconnect ... -32000") every session on
|
|
8
|
+
# any machine lacking the Maestro CLI or a login-PATH Java runtime (see
|
|
9
|
+
# THIRD-PARTY-NOTICES and the expo plugin history b12d5d3 -> b1f3efd, where the
|
|
10
|
+
# always-on entry broke the whole fleet). This hook is the SAFE inverse: it
|
|
11
|
+
# registers at LOCAL scope, with an ABSOLUTE command path and injected
|
|
12
|
+
# JAVA_HOME/PATH, ONLY when both `maestro` and a usable `java` resolve — and
|
|
13
|
+
# stays completely silent otherwise. Machines without the toolchain are never
|
|
14
|
+
# touched, so they never red. The registration takes effect on the NEXT session
|
|
15
|
+
# (MCP servers connect at startup), exactly like the other setup hooks.
|
|
16
|
+
#
|
|
17
|
+
# Fast + idempotent: unequipped machines (most of the fleet) exit after a couple
|
|
18
|
+
# of `command -v` probes; equipped machines re-register only if not already set.
|
|
19
|
+
#
|
|
20
|
+
# Parity note: this auto-register hook is Claude-specific — it uses SessionStart
|
|
21
|
+
# semantics and the `claude mcp add` verb. Other harnesses (Codex, Cursor,
|
|
22
|
+
# OpenCode, Antigravity, Copilot) enable Maestro MCP via the vendor-agnostic
|
|
23
|
+
# `maestro-mcp-setup` skill, which registers the same absolute-command +
|
|
24
|
+
# injected-env server at each agent's local/user scope. Extending automatic
|
|
25
|
+
# registration to those agents' native session hooks is deliberate follow-up, not
|
|
26
|
+
# a silent drop.
|
|
27
|
+
##
|
|
28
|
+
|
|
29
|
+
set -euo pipefail
|
|
30
|
+
|
|
31
|
+
# Drain the hook envelope so the caller's pipe closes cleanly.
|
|
32
|
+
cat >/dev/null 2>&1 || true
|
|
33
|
+
|
|
34
|
+
# A hook must never interrupt the session; swallow any unexpected failure.
|
|
35
|
+
trap 'exit 0' ERR
|
|
36
|
+
|
|
37
|
+
# Need the Claude CLI to register at all.
|
|
38
|
+
command -v claude >/dev/null 2>&1 || exit 0
|
|
39
|
+
|
|
40
|
+
# 1. Resolve the Maestro CLI to an ABSOLUTE path (a bare `maestro` relies on the
|
|
41
|
+
# very PATH that is missing when the agent spawns the stdio server).
|
|
42
|
+
MAESTRO_BIN="$(command -v maestro 2>/dev/null || true)"
|
|
43
|
+
if [ -z "${MAESTRO_BIN}" ] && [ -x "${HOME}/.maestro/bin/maestro" ]; then
|
|
44
|
+
MAESTRO_BIN="${HOME}/.maestro/bin/maestro"
|
|
45
|
+
fi
|
|
46
|
+
[ -n "${MAESTRO_BIN}" ] || exit 0 # CLI absent -> stay silent, never register.
|
|
47
|
+
|
|
48
|
+
# 2. Resolve a usable Java, honoring the project's version manager before any
|
|
49
|
+
# ambient java. No Java -> stay silent (the spawn would die without it).
|
|
50
|
+
JAVA_BIN=""
|
|
51
|
+
if command -v mise >/dev/null 2>&1 && JAVA_BIN="$(mise which java 2>/dev/null)"; then
|
|
52
|
+
:
|
|
53
|
+
elif command -v asdf >/dev/null 2>&1 && JAVA_BIN="$(asdf which java 2>/dev/null)"; then
|
|
54
|
+
:
|
|
55
|
+
elif [ -x "${SDKMAN_DIR:-${HOME}/.sdkman}/candidates/java/current/bin/java" ]; then
|
|
56
|
+
# SDKMAN's `sdk` is a shell function absent here; use its stable symlink.
|
|
57
|
+
JAVA_BIN="${SDKMAN_DIR:-${HOME}/.sdkman}/candidates/java/current/bin/java"
|
|
58
|
+
elif command -v java >/dev/null 2>&1; then
|
|
59
|
+
JAVA_BIN="$(command -v java)"
|
|
60
|
+
fi
|
|
61
|
+
[ -n "${JAVA_BIN}" ] && [ -x "${JAVA_BIN}" ] || exit 0
|
|
62
|
+
|
|
63
|
+
# Derive JAVA_HOME from the JVM itself, robust when `java` is a shim/symlink whose
|
|
64
|
+
# parent is not a JDK root; fall back to bin/.. only if the query yields nothing.
|
|
65
|
+
JAVA_HOME_DIR="$("${JAVA_BIN}" -XshowSettings:properties -version 2>&1 \
|
|
66
|
+
| sed -n 's/^[[:space:]]*java\.home = //p' | head -n 1)"
|
|
67
|
+
if [ -z "${JAVA_HOME_DIR}" ] || [ ! -x "${JAVA_HOME_DIR}/bin/java" ]; then
|
|
68
|
+
JAVA_HOME_DIR="$(cd "$(dirname "${JAVA_BIN}")/.." && pwd)"
|
|
69
|
+
fi
|
|
70
|
+
JBIN_DIR="${JAVA_HOME_DIR}/bin"
|
|
71
|
+
MBIN_DIR="$(dirname "${MAESTRO_BIN}")"
|
|
72
|
+
|
|
73
|
+
# 3. Already registered (any scope)? Nothing to do.
|
|
74
|
+
claude mcp get maestro >/dev/null 2>&1 && exit 0
|
|
75
|
+
|
|
76
|
+
# 4. Register at LOCAL scope (per-machine, uncommitted) with the absolute command
|
|
77
|
+
# and injected toolchain env, so the stdio spawn finds Java regardless of the
|
|
78
|
+
# inherited PATH. Failure is non-fatal and silent.
|
|
79
|
+
claude mcp add --scope local maestro \
|
|
80
|
+
--env "JAVA_HOME=${JAVA_HOME_DIR}" \
|
|
81
|
+
--env "PATH=${JBIN_DIR}:${MBIN_DIR}:${PATH}" \
|
|
82
|
+
-- "${MAESTRO_BIN}" mcp >/dev/null 2>&1 || true
|
|
83
|
+
|
|
84
|
+
exit 0
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maestro-mcp-setup
|
|
3
|
+
description: Enable the Maestro CLI's built-in MCP server (`maestro mcp`, STDIO) for this machine, robustly. Detects the Maestro CLI and a usable Java runtime, installs/guides what is missing, and registers the MCP server at LOCAL (per-machine, uncommitted) scope with an absolute command path and injected JAVA_HOME/PATH so the spawn never dies on a non-login PATH. Use when an Expo project needs Maestro device-automation tools (list_devices, inspect_screen, take_screenshot, run flows). Never registers at project/committed scope — that reintroduces the fleet-wide "-32000" failure.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Maestro MCP Setup
|
|
10
|
+
|
|
11
|
+
Wire the Maestro CLI's built-in MCP server (`maestro mcp`, STDIO) into the
|
|
12
|
+
current coding agent for **this machine only**, in a way that actually works.
|
|
13
|
+
|
|
14
|
+
## Why this skill exists (read before changing it)
|
|
15
|
+
|
|
16
|
+
The Maestro MCP server is intentionally **NOT** in the distributed plugin
|
|
17
|
+
`.mcp.json`. A static, committed entry always attempts to spawn, and coding
|
|
18
|
+
agents spawn stdio servers with a **non-login PATH**. So an always-on entry
|
|
19
|
+
fails visibly — Claude Code shows `Failed to reconnect … -32000` **every
|
|
20
|
+
session** — on any machine missing the Maestro CLI *or* a resolvable Java
|
|
21
|
+
runtime, which is most of a typical fleet (CI runners, unattended QA/intake
|
|
22
|
+
agent boxes). That exact regression shipped once (expo plugin commit b12d5d3)
|
|
23
|
+
and was reverted (b1f3efd).
|
|
24
|
+
|
|
25
|
+
This skill fixes both failure modes without poisoning the fleet:
|
|
26
|
+
|
|
27
|
+
1. **Missing CLI / Java** → detect, and install or guide install.
|
|
28
|
+
2. **Installed but PATH-less spawn** → register with an **absolute `command`
|
|
29
|
+
path** plus injected **`JAVA_HOME` / `PATH`** env, so the server finds Java
|
|
30
|
+
regardless of the spawn's inherited PATH.
|
|
31
|
+
|
|
32
|
+
Registration is always **`--scope local`** (per-machine, uncommitted). Never use
|
|
33
|
+
`--scope project` / a committed `.mcp.json` entry — that is the always-on form
|
|
34
|
+
that reds out every other machine.
|
|
35
|
+
|
|
36
|
+
## Steps
|
|
37
|
+
|
|
38
|
+
### 1. Locate the Maestro CLI
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
MAESTRO_BIN="$(command -v maestro || true)"
|
|
42
|
+
[ -z "$MAESTRO_BIN" ] && [ -x "$HOME/.maestro/bin/maestro" ] && MAESTRO_BIN="$HOME/.maestro/bin/maestro"
|
|
43
|
+
echo "maestro: ${MAESTRO_BIN:-NOT FOUND}"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
If not found, install it (official installer — confirm with the user first,
|
|
47
|
+
since it writes to `~/.maestro`):
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
curl -fsSL "https://get.maestro.mobile.dev" | bash
|
|
51
|
+
MAESTRO_BIN="$HOME/.maestro/bin/maestro"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Resolve to an **absolute** path — a bare `maestro` in the registration relies on
|
|
55
|
+
the very PATH that is missing at spawn time.
|
|
56
|
+
|
|
57
|
+
### 2. Locate a usable Java runtime
|
|
58
|
+
|
|
59
|
+
Maestro needs a JDK (8+). Resolve `JAVA_HOME` **honoring the project's version
|
|
60
|
+
manager** — do not install a parallel global JDK when one is already managed:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Prefer an already-active/managed Java before installing anything. Covers the
|
|
64
|
+
# common version managers (mise, asdf, SDKMAN) plus an ambient install.
|
|
65
|
+
if command -v mise >/dev/null 2>&1 && mise which java >/dev/null 2>&1; then
|
|
66
|
+
JAVA_BIN="$(mise which java)"
|
|
67
|
+
elif command -v asdf >/dev/null 2>&1 && asdf which java >/dev/null 2>&1; then
|
|
68
|
+
JAVA_BIN="$(asdf which java)"
|
|
69
|
+
elif [ -x "${SDKMAN_DIR:-$HOME/.sdkman}/candidates/java/current/bin/java" ]; then
|
|
70
|
+
# SDKMAN's `sdk` is a shell function absent in non-login shells; use its stable
|
|
71
|
+
# `candidates/java/current` symlink directly instead.
|
|
72
|
+
JAVA_BIN="${SDKMAN_DIR:-$HOME/.sdkman}/candidates/java/current/bin/java"
|
|
73
|
+
elif command -v java >/dev/null 2>&1; then
|
|
74
|
+
JAVA_BIN="$(command -v java)"
|
|
75
|
+
fi
|
|
76
|
+
echo "java: ${JAVA_BIN:-NOT FOUND}"
|
|
77
|
+
|
|
78
|
+
# Derive JAVA_HOME by asking the JVM itself — NOT `dirname "$JAVA_BIN"/..`, which
|
|
79
|
+
# is wrong when `java` is a mise/asdf shim or a symlink whose parent is not a JDK
|
|
80
|
+
# root. Fall back to the bin/.. parent only if the JVM query yields nothing usable.
|
|
81
|
+
if [ -n "$JAVA_BIN" ]; then
|
|
82
|
+
JAVA_HOME="$("$JAVA_BIN" -XshowSettings:properties -version 2>&1 \
|
|
83
|
+
| sed -n 's/^[[:space:]]*java\.home = //p' | head -n 1)"
|
|
84
|
+
{ [ -z "$JAVA_HOME" ] || [ ! -x "$JAVA_HOME/bin/java" ]; } &&
|
|
85
|
+
JAVA_HOME="$(cd "$(dirname "$JAVA_BIN")/.." && pwd)"
|
|
86
|
+
fi
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
If no Java is found: install through the project's version manager when present
|
|
90
|
+
(`mise use -g java@21`, `asdf install java …`, or `sdk install java`), or guide
|
|
91
|
+
the user to install a JDK. Prefer the managed path; only fall back to a global
|
|
92
|
+
install with explicit consent. Re-resolve `JAVA_HOME` afterward.
|
|
93
|
+
|
|
94
|
+
### 3. Register at local scope with injected env
|
|
95
|
+
|
|
96
|
+
Build a `PATH` that puts the Maestro and Java `bin` dirs first, then register for
|
|
97
|
+
the **current** coding agent. `$JAVA_BIN`/`$MAESTRO_BIN` are absolute.
|
|
98
|
+
|
|
99
|
+
Claude Code:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Refuse to register a broken server — both toolchain paths must resolve and be
|
|
103
|
+
# executable, or `claude mcp add` would create the exact -32000 entry this skill
|
|
104
|
+
# exists to avoid.
|
|
105
|
+
[ -n "$MAESTRO_BIN" ] && [ -x "$MAESTRO_BIN" ] || { echo "Maestro CLI unresolved — abort"; exit 1; }
|
|
106
|
+
[ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ] || { echo "Java runtime unresolved — abort"; exit 1; }
|
|
107
|
+
|
|
108
|
+
# Use the real JDK bin (from JAVA_HOME), not the shim dir, on PATH.
|
|
109
|
+
JBIN_DIR="$JAVA_HOME/bin"; MBIN_DIR="$(dirname "$MAESTRO_BIN")"
|
|
110
|
+
claude mcp add --scope local maestro \
|
|
111
|
+
--env "JAVA_HOME=$JAVA_HOME" \
|
|
112
|
+
--env "PATH=$JBIN_DIR:$MBIN_DIR:$PATH" \
|
|
113
|
+
-- "$MAESTRO_BIN" mcp
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Parity — same intent on other harnesses (local/per-machine scope, absolute
|
|
117
|
+
command, injected `JAVA_HOME`/`PATH`); translate the registration verb only:
|
|
118
|
+
|
|
119
|
+
- **Codex** — `codex mcp add maestro --env JAVA_HOME=… --env PATH=… -- "$MAESTRO_BIN" mcp` (writes `~/.codex/config.toml`; keep it out of the committed project config).
|
|
120
|
+
- **Cursor** — add the server to the user-scope `~/.cursor/mcp.json` (not the project `.cursor/mcp.json`) with `command`, `args: ["mcp"]`, and `env: { JAVA_HOME, PATH }`.
|
|
121
|
+
- **OpenCode** — add to the user config (`~/.config/opencode/opencode.json`) `mcp` block with the absolute command and `environment`.
|
|
122
|
+
- **Antigravity (agy) / Copilot** — add to the per-user MCP config with the absolute command + `env`; Copilot uses `type: "local"` for stdio servers.
|
|
123
|
+
|
|
124
|
+
In every case: **local/user scope, never the committed project file.**
|
|
125
|
+
|
|
126
|
+
### 4. Verify
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
claude mcp list # or the harness equivalent
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Confirm `maestro` shows connected. If it still fails, the usual cause is
|
|
133
|
+
`JAVA_HOME` pointing at a JRE without `bin/java`, or a Maestro path that moved —
|
|
134
|
+
re-resolve both and re-register. Do not "fix" it by dropping to a bare
|
|
135
|
+
`maestro mcp` command; that reintroduces the PATH-less failure.
|
|
136
|
+
|
|
137
|
+
## Guardrails
|
|
138
|
+
|
|
139
|
+
- **Local scope only.** If you catch yourself typing `--scope project` or editing
|
|
140
|
+
a committed `.mcp.json`, stop — that is the reverted fleet-wide regression.
|
|
141
|
+
- **Absolute paths + injected env are mandatory**, not optional — they are the
|
|
142
|
+
whole reason this is a skill and not a one-line doc.
|
|
143
|
+
- Installing the CLI or a JDK mutates the machine — confirm before installing,
|
|
144
|
+
and prefer the project's version manager over a parallel global install.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.287.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.287.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.287.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.287.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.287.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -4,6 +4,17 @@
|
|
|
4
4
|
"description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
|
|
5
5
|
"author": { "name": "Cody Swann" },
|
|
6
6
|
"dependencies": ["lisa-typescript"],
|
|
7
|
-
"hooks": {
|
|
8
|
-
|
|
7
|
+
"hooks": {
|
|
8
|
+
"SessionStart": [
|
|
9
|
+
{
|
|
10
|
+
"matcher": "",
|
|
11
|
+
"hooks": [
|
|
12
|
+
{
|
|
13
|
+
"type": "command",
|
|
14
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/register-maestro-mcp.sh"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
9
20
|
}
|