vanilla-lynxlisted
Install: claude install-skill sehyun0518/agent
> **⚠️ Vanilla Lynx only (Element PAPI, JSX 없음).** 같은 Lynx라도 ReactLynx면
> `reactlynx-best-practices`, 웹 React/Next면 `react-best-practice`,
> React Native(Expo)면 `react-native-skills`를 쓰세요. 네 팩은 혼용하지 않습니다.
> 어느 팩인지는 저장소 의존성으로 판별합니다 — `@lynx-js/rspeedy`가 있고
> `@lynx-js/react`가 없음.
<!-- vendored:begin -->
# Build Vanilla Lynx Apps
Use this skill to build Lynx apps directly with Element PAPI and Lynx Runtime APIs, without ReactLynx or JSX.
## Core Rules
- Do not use ReactLynx, JSX, virtual DOM, or browser DOM APIs unless explicitly requested.
- Always pass all four required arguments to `__AddEventListener(element, eventName, handler, options)`; pass `{}` when no listener options are needed.
- Keep Element PAPI tree creation, mutation, lifecycle rendering, and UI updates in `main-thread.ts`. Never call Element PAPI APIs or `__FlushElementTree()` from `background.ts`; the background thread only sends serializable patches for the main thread to apply and flush.
- Rely on the SDK flush for initial render; call `__FlushElementTree()` after later UI mutations.
- Add `background.ts` only for heavier business logic, async work, timers, native calls, or data processing. Keep cross-thread payloads serializable.
- Use `lynx.getEngine()` only for engine-defined lifecycle events such as `__RenderPage`, `__UpdatePage`, and `__DestroyLifetime`; never use it for app-defined thread-local or cross-thread events. Lifecycle handlers may ignore their event payload when the implementation does no