Skip to content

feat(plugin): Claude Code plugin skeleton — generate-app orchestration skill#100

Merged
dadachi merged 1 commit into
epic/claude-code-pluginfrom
feat/plugin-skeleton
May 24, 2026
Merged

feat(plugin): Claude Code plugin skeleton — generate-app orchestration skill#100
dadachi merged 1 commit into
epic/claude-code-pluginfrom
feat/plugin-skeleton

Conversation

@dadachi
Copy link
Copy Markdown
Contributor

@dadachi dadachi commented May 24, 2026

First cut of the Claude Code plugin, targeting the epic branch. Minimal end-to-end per the agreed scope: generate → validate → explain. The mobile-mcp home-screen walkthrough is deferred to phase 2.

What's here (plugin/)

File Purpose
.claude-plugin/plugin.json Manifest. Skill surfaces as /nativeapptemplate-agent:generate-app.
skills/generate-app/SKILL.md The orchestration skill — resolves the spec, runs the CLI (--report-format=both --exit-zero), parses out/<slug>/report.json, summarizes per-platform Layer 1/2(/3) + reviewer parity + domain mapping, and on failure surfaces the specific findings (layer1.findings, layer2.stderrTail, reviewer.diffs) plus the next move (--rename, NATIVEAPPTEMPLATE_REPAIR, NATIVEAPPTEMPLATE_VISUAL).
.mcp.json Bundles the generator MCP server.
README.md Local install (claude --plugin-dir ./plugin) + usage.

Plugin format verified against current Claude Code docs (.claude-plugin/plugin.json, skills/<name>/SKILL.md, .mcp.json, --plugin-dir local testing).

Bug fixed in passing

There is no npm package nativeapptemplate-agent-mcp — it's a bin of the nativeapptemplate-agent package — so the long-documented npx -y nativeapptemplate-agent-mcp 404s. Corrected to npx -y -p nativeapptemplate-agent nativeapptemplate-agent-mcp, verified against published 0.2.1 with a real MCP initialize handshake from a clean dir (returns serverInfo: nativeapptemplate-agent 0.2.1).

Note: this same wrong invocation was propagated into README.md / CLAUDE.md / ROADMAP.md / docs/SPEC.md by #99 (now on main). That's fixed separately in a bugfix PR to main, not here.

Test plan

  • plugin.json / .mcp.json parse; SKILL.md frontmatter has name + description; structure matches verified format.
  • Corrected MCP invocation runs from a clean dir (handshake OK).
  • Interactive: claude --plugin-dir ./plugin/help shows the skill, /mcp shows the server connect, run /nativeapptemplate-agent:generate-app a walk-in queue for a barbershop end-to-end. (manual — over to you)

Not in this PR (phase 2 on the epic)

  • mobile-mcp chaining: boot the app, walk the home screen, inline screenshots.
  • Guided-repair loop hooked into the conversation.
  • Bundling @mobilenext/mobile-mcp in .mcp.json.

🤖 Generated with Claude Code

…n skill

First cut of the Claude Code plugin (ROADMAP Post-v0.1 backlog → in progress on
epic/claude-code-plugin). Minimal end-to-end: generate → validate → explain.

- plugin/.claude-plugin/plugin.json — manifest (name nativeapptemplate-agent).
- plugin/skills/generate-app/SKILL.md — orchestration skill: resolve spec,
  run the CLI (local dist or npx) with --report-format=both --exit-zero, parse
  out/<slug>/report.json, and summarize per-platform layer1/2(/3) + reviewer
  parity + domain mapping; on failure surface the specific findings and the next
  move (--rename, NATIVEAPPTEMPLATE_REPAIR, NATIVEAPPTEMPLATE_VISUAL). The
  mobile-mcp home-screen walk-through is explicitly deferred to phase 2.
- plugin/.mcp.json — bundles the generator MCP server.
- plugin/README.md — local install (claude --plugin-dir ./plugin) + usage.

Fix a propagated invocation bug: there is no npm package
`nativeapptemplate-agent-mcp` (it's a *bin* of `nativeapptemplate-agent`), so
`npx -y nativeapptemplate-agent-mcp` 404s. Correct form, verified against the
published 0.2.1 with a real MCP initialize handshake from a clean dir:
`npx -y -p nativeapptemplate-agent nativeapptemplate-agent-mcp`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dadachi dadachi merged commit e776070 into epic/claude-code-plugin May 24, 2026
1 check passed
@dadachi dadachi deleted the feat/plugin-skeleton branch May 24, 2026 06:52
dadachi added a commit that referenced this pull request May 24, 2026
…ion surface (#105)

* feat(plugin): Claude Code plugin skeleton — generate-app orchestration skill (#100)

First cut of the Claude Code plugin (ROADMAP Post-v0.1 backlog → in progress on
epic/claude-code-plugin). Minimal end-to-end: generate → validate → explain.

- plugin/.claude-plugin/plugin.json — manifest (name nativeapptemplate-agent).
- plugin/skills/generate-app/SKILL.md — orchestration skill: resolve spec,
  run the CLI (local dist or npx) with --report-format=both --exit-zero, parse
  out/<slug>/report.json, and summarize per-platform layer1/2(/3) + reviewer
  parity + domain mapping; on failure surface the specific findings and the next
  move (--rename, NATIVEAPPTEMPLATE_REPAIR, NATIVEAPPTEMPLATE_VISUAL). The
  mobile-mcp home-screen walk-through is explicitly deferred to phase 2.
- plugin/.mcp.json — bundles the generator MCP server.
- plugin/README.md — local install (claude --plugin-dir ./plugin) + usage.

Fix a propagated invocation bug: there is no npm package
`nativeapptemplate-agent-mcp` (it's a *bin* of `nativeapptemplate-agent`), so
`npx -y nativeapptemplate-agent-mcp` 404s. Correct form, verified against the
published 0.2.1 with a real MCP initialize handshake from a clean dir:
`npx -y -p nativeapptemplate-agent nativeapptemplate-agent-mcp`.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(plugin): phase 2 — walk-app skill (mobile-mcp UI walkthrough) (#102)

Second skill on the plugin epic: launch a generated app on a booted iOS sim /
Android emulator and walk its UI conversationally via mobile-mcp — capture the
home screen, list elements, tap through a flow, screenshots inline.

- plugin/skills/walk-app/SKILL.md — resolve out/<slug> + platform; get the app
  onto a device (recommended: a NATIVEAPPTEMPLATE_VISUAL=1 generate run does the
  build+install+launch; manual xcodebuild/gradlew path documented); connect
  mobile-mcp; capture + walk; stay interactive; diagnose the known device-layer
  failure modes. Honest about the booted-device + installed-build prerequisites
  (the flakiest link).
- plugin/.mcp.json — bundle @mobilenext/mobile-mcp alongside the generator server.
- generate-app SKILL.md — hand-off now points at walk-app instead of "not wired".
- plugin/README.md — document both skills + both MCP servers.
- plugin.json — 0.1.0 → 0.2.0.

Android emulator guidance follows the house rule: boot via Android Studio Device
Manager, not CLI `emulator -avd` (Studio owns adb here). Device-dependent paths
are untested from here by design — needs a booted sim/emulator on the dev machine.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(plugin): pin generator MCP server to @latest (cwd-shadow resolution bug) (#103)

The bundled generator MCP server failed to start with
`sh: nativeapptemplate-agent-mcp: command not found` (confirmed in Claude's
mcp-logs). MCP servers spawn with cwd = the project root; when that root is the
`nativeapptemplate-agent` package's own repo, `npx -p nativeapptemplate-agent`
resolves the *local* package and the bin isn't on the path it expects. Pinning
`nativeapptemplate-agent@latest` forces registry resolution regardless of cwd —
verified with a live MCP initialize handshake from inside the repo.

README updated to document why both `-p` and `@latest` are required.

Note: the `mobile-mcp` "✘ failed" seen alongside is unrelated — it's the user's
identical global mobile-mcp config (a standalone third-party package, no cwd
shadowing), whose connection closed during first-run npx download; it stays alive
when run standalone.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(plugin): pin bundled mobile-mcp to 0.0.54 (0.0.55+ closes stdio) (#104)

The bundled mobile-mcp server (and the user's identical global one) showed
✘ failed in /mcp: mobile-mcp 0.0.55+ closes the stdio connection on startup
(observed: "Connection closed" ~6s in, zero output), so `@latest` (now 0.0.56)
never completes the MCP handshake. 0.0.54 starts cleanly ("mobile-mcp server
running on stdio" + valid initialize response) — verified with a live handshake.

This is the same conclusion the agent core already reached: src/mobile.ts pins
DEFAULT_ARGS to @mobilenext/mobile-mcp@0.0.54 "(was @latest). mobile-mcp 0.0.55+
closes the stdio …". The plugin now matches that pin.

Side benefit: pinning makes the bundled command differ from a typical global
`@latest` mobile-mcp config, so Claude won't dedup the broken global over our
working bundled one.

Note (out of scope, separate): CLAUDE.md's Stack section still lists
`npx -y @mobilenext/mobile-mcp@latest`, which is stale/misleading given this pin.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: flip Claude Code plugin to shipped (3 surfaces) + fix mobile-mcp pin

The plugin epic is built and verified end-to-end (generate-app + walk-app), so
update the docs from "deferred/planned" to shipped:

- README: plugin section now documents both skills + `claude --plugin-dir ./plugin`.
- CLAUDE.md: Packaging → three surfaces (CLI + MCP + plugin), with the load-bearing
  .mcp.json pins noted. Stack: mobile-mcp `@latest` → `@0.0.54` (the stale advice
  that 0.0.55+ closes stdio — the bug that cost real debugging).
- ROADMAP: Track 1 third surface = plugin; Post-v0.1 "Claude Code plugin" section
  flipped to Status: shipped, recording that the skill carried the value without
  dispatch() streaming (as predicted).
- SPEC addendum: §8 row + structural bullet → CLI + MCP + plugin (three).
- walk-app SKILL.md: add the iOS WebDriverAgent (:8100) prerequisite; Android
  needs none (adb-direct), confirmed on the Pixel emulator walk.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant