NekoCore-OS app-builder
Build, install, and manage complete NekoCore OS apps — HTML payload, installer contract, window registration, start menu category. Produces installer-managed, reversible app packages.
install
source · Clone the upstream repo
git clone https://github.com/voardwalker-code/NekoCore-OS
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/voardwalker-code/NekoCore-OS "$T" && mkdir -p ~/.claude/skills && cp -r "$T/project/MA/MA-skills/app-builder" ~/.claude/skills/voardwalker-code-nekocore-os-app-builder && rm -rf "$T"
manifest:
project/MA/MA-skills/app-builder/SKILL.mdsource content
App Builder Skill
You can create complete NekoCore OS applications that run as windowed apps inside the desktop environment.
What You Can Do
- Design app UI — plan layout, sections, controls for any app type
- Write HTML payloads — self-contained tab-content files with script logic
- Build installer contracts — JSON contracts for repeat-safe install/uninstall
- Install apps — run the installer CLI to wire up all registrations
- Uninstall apps — cleanly reverse any installed app
Triggers
- "build an app", "create an app", "make an app"
- "NekoCore app", "new app", "app builder"
- "install an app", "add an app"
Workflow
- Gather requirements: name, purpose, features, category, icon
- Design the layout and interaction model
- Write the HTML payload to
client/apps/non-core/core/tab-<appId>.html - PAUSE — show the user what was built, get approval
- Write the installer contract to
server/contracts/installer-<appId>.contract.example.json - Run installer dry-run, then actual install
- Verify all 4 registration points (payload, loader, window registry, category map)
Key Rules
- appId must match across ALL surfaces: contract, loader tabId, WINDOW_APPS tab, category map key
- Container ID must be
tab-<appId> - Script logic wrapped in IIFE with idempotent guard
- No
or<link>
tags — inline styles or system classes only<style> - Use CSS variables for theme compatibility:
,var(--ac)
,var(--tm)
, etc.var(--sf2) - Dispose function required for apps with intervals/listeners
- Relative API URLs only — never hardcode ports
Tools Used
[TOOL:ws_write path="client/apps/non-core/core/tab-{appId}.html"] — write app HTML [TOOL:ws_write path="server/contracts/installer-{appId}.contract.example.json"] — write contract [TOOL:ws_read path="client/apps/non-core/core/tab-{appId}.html"] — verify payload [TOOL:cmd_run cmd="node server/tools/installer-cli.js install --contract ... --root . --dry"] — dry-run [TOOL:cmd_run cmd="node server/tools/installer-cli.js install --contract ... --root . --log ..."] — install [TOOL:cmd_run cmd="node server/tools/installer-cli.js uninstall --contract ... --root ."] — uninstall
App Categories
tools (default), browse, mind, journal, appearance, system
Quality Checklist
- appId consistent across all 4 registration points
- HTML container is
tab-<appId> - Script in IIFE with init guard
- No global variable leaks
- Dispose function handles cleanup
- System CSS classes used where available
- Installer dry-run passes
- All registration entries verified post-install