Install in Claude Code
Copygit clone --depth 1 https://github.com/Christian-Katzmann/app-it /tmp/app-it-static && cp -r /tmp/app-it-static/plugins/app-it-static/skills/app-it-static ~/.claude/skills/app-it-staticThen start a new Claude Code session; the skill loads automatically.
Definition
SKILL.md
# app-it-static - Make a finished build launchable from the Dock
`app-it-static` is the no-dev-server companion to `app-it`: it builds once,
serves the finished output, installs beside live apps in `~/Applications/App It/`,
and keeps the native Swift WebKit window and Dock identity.
## Non-Negotiables
1. Run `templates/inspect-static.sh` first and read the output before editing.
2. Confirm before the first project build. It can write files and take time.
3. Never run `npm run dev`. If the app needs a live dev server, route to
`app-it` and say why.
4. Serve a snapshot and say so. Source changes need `desktop:rebuild`.
5. Default to `serve_mode: "server"`. Use `file` only after proving the build is
file:// safe.
6. Copy shipped templates and customize through `scripts/app-it.config.json`.
Do not re-derive launcher patterns.
7. Verify the built output, app bundle, install path, runtime port, server
response, quit cleanup, and human-only GUI limits.
## Reference Map
Open only the files needed by the inspection result:
- `references/project-inspection.md` - static-servable tests, build/output
detection, package managers, monorepos, names, bundle IDs, and tools.
- `references/serve-modes.md` - server vs file decisions and the file:// safety
checklist.
- `references/generated-files.md` - template roster, shared-template rules,
allowed target-project files, config JSON, and package scripts.
- `references/verification.md` - smoke tests, app-bundle checks, runtime checks,
cleanup, and human/deferred buckets.
- `references/report-template.md` - exact final report format plus decision
history.
- `references/anti-patterns.md` - traps that cause broken static launchers.
## Templates
Templates live next to this file in `templates/`. Copy them into the target
project; do not rewrite them. See `references/generated-files.md` for the full
roster.
Shared templates are byte-identical to `app-it` and guarded by repo validation:
`wrapper.swift`, `native-run-stub.c`, `desktop-icons.sh`,
`desktop-icons-preview.sh`, `desktop-install.sh`, `info-plist-template.xml`, and
`placeholder-icon-gen.sh`. If launcher internals change, edit the `app-it` copy
and re-sync this plugin so marketplace installs stay self-contained.
## Workflow
### 1. Inspect
Run:
```bash
/path/to/plugins/app-it-static/skills/app-it-static/templates/inspect-static.sh
```
Use disk truth: `package.json`, config files, built output, and actual scripts.
Read `references/project-inspection.md` before deciding whether the app is
static-servable, which build command/output dir to use, or whether a monorepo
contains multiple apps.
### 2. Decide
For each user-facing app:
```text
Static build or hand-written index.html exists?
no -> route to app-it
yes -> needs http origin, routing fallback, fetch(), or service worker?
yes -> server mode (default)
no -> file mode candidate
```
When unsure, choose server mode. It costs a tiny Python process and is the safe
default for framework builds.
### 3. Build
Confirm with the user, run the project build once, then copy templates into the
target project and write `scripts/app-it.config.json`. `desktop:build` assembles
the `.app`; it must not run the project build. `desktop:rebuild` is the refresh
path that reruns the build command.
Read `references/generated-files.md` before editing package scripts, generated
docs, config JSON, icons, or install paths.
### 4. Verify
Verification is mandatory. Read `references/verification.md` and run the checks
that apply: built `index.html`, Mach-O `Contents/MacOS/run`, executable
`run.sh`, Mach-O wrapper, plist placeholders gone, `.icns`, installed-path
open, server response, and Cmd+Q cleanup for server mode.
Never claim GUI-only checks passed unless a display actually proves them. Put
window render and Dock icon identity in the human bucket when needed.
### 5. Report
Use `references/report-template.md` for both the chat reply and
`docs/desktop-launcher.app-it-static-report.md`. Include snapshot limitations,
refresh command, verification results, known limits, and decision history.
Stage files only when the local convention or user request asks for it. Do not
commit unless asked.
## Quick Defaults
- Install destination: `~/Applications/App It/`.
- Bundle ID prefix: `com.user.<slug>`.
- Serve mode: `server`, unless file:// safety is proven.
- Vite/CRA/Astro/SvelteKit static/Next export/Angular/Nuxt generate: usually
server mode.
- Hand-written `index.html` with relative assets and no routing/fetch/service
worker: file mode candidate.
- Missing `swiftc` or `python3`: stop and say `xcode-select --install`.
## Stop Signs
Stop and explain clearly when the app only works through a live dev server, the
build fails before launcher work, the output dir lacks `index.html`, required
tooling is missing, or the environment cannot verify a claim the report would
need.More from this repository