Local Expo / React Native app builder runner for my OpenClaw server.
This skill is a controlled runner that only executes an allowlisted script:
/home/patron/apps/_bin/appctl and that script is restricted to operate under:
/home/patron/apps/<project>.
What it does
This skill wraps appctl to provide a safe, repeatable workflow:
Create a new Expo app scaffold under /home/patron/apps/<name>
Add a screen file under /home/patron/apps/<name>/app/<Screen>.tsx
Start a web preview (expo start --web) bound to 127.0.0.1 on a chosen port
EXPO_PORT (optional): override preview port Default: 19006
Example:
preview demoapp
EXPO_PORT=19010 preview demoapp
Result:
Starts npx expo start --web --port <port>
Writes logs to: /home/patron/apps/_logs/<name>.preview.log
Writes pid to: /home/patron/apps/_state/<name>.pid
Writes port to: /home/patron/apps/_state/<name>.port
4) Status
Command:
status <name>
Example:
status demoapp
Result:
Prints RUNNING with URL if process is alive
Otherwise prints STOPPED
Safety / Guardrails
The runner is allowlisted: only node, npm, npx, git, bash, python3 can be invoked.
All project paths are constrained to /home/patron/apps.
Preview binds to 127.0.0.1 (loopback). Expose it externally only via explicit SSH tunnel if desired.
Telemetry is disabled for Expo in preview (EXPO_NO_TELEMETRY=1).
Troubleshooting
If preview says running but page doesn’t load: check the log file in /home/patron/apps/_logs/.
If a port is busy: set EXPO_PORT to a free port and re-run preview.
To stop preview: kill $(cat /home/patron/apps/_state/<name>.pid) (if pid exists).
1---2name: cancorteaw-app3description: cancorteaw-app4---5# cancorteaw-app67Local **Expo / React Native** app builder runner for my OpenClaw server.89This skill is a **controlled runner** that only executes an allowlisted script:10`/home/patron/apps/_bin/appctl` 11and that script is restricted to operate under:12`/home/patron/apps/<project>`.1314## What it does1516This skill wraps `appctl` to provide a safe, repeatable workflow:1718- **Create** a new Expo app scaffold under `/home/patron/apps/<name>`19- **Add a screen** file under `/home/patron/apps/<name>/app/<Screen>.tsx`20- **Start a web preview** (`expo start --web`) bound to `127.0.0.1` on a chosen port21- **Check status** of the preview process2223## Commands2425### 1) Create a new app26**Command:**27- `new <name>`2829**Example:**30- `new demoapp`3132**Result:**33- Creates `/home/patron/apps/demoapp`34- Initializes git (best-effort)35- Uses `npx create-expo-app` in non-interactive mode3637---3839### 2) Add a screen40**Command:**41- `add-screen <name> <screenName> <title>`4243**Example:**44- `add-screen demoapp Settings "Settings"`4546**Result:**47- Writes: `/home/patron/apps/demoapp/app/Settings.tsx`48- Makes a git commit (best-effort)4950---5152### 3) Start web preview53**Command:**54- `preview <name>`5556**Environment:**57- `EXPO_PORT` (optional): override preview port 58 Default: `19006`5960**Example:**61- `preview demoapp`62- `EXPO_PORT=19010 preview demoapp`6364**Result:**65- Starts `npx expo start --web --port <port>`66- Writes logs to: `/home/patron/apps/_logs/<name>.preview.log`67- Writes pid to: `/home/patron/apps/_state/<name>.pid`68- Writes port to: `/home/patron/apps/_state/<name>.port`6970---7172### 4) Status73**Command:**74- `status <name>`7576**Example:**77- `status demoapp`7879**Result:**80- Prints RUNNING with URL if process is alive81- Otherwise prints STOPPED8283## Safety / Guardrails8485- The runner is **allowlisted**: only `node`, `npm`, `npx`, `git`, `bash`, `python3` can be invoked.86- All project paths are constrained to `/home/patron/apps`.87- Preview binds to `127.0.0.1` (loopback). Expose it externally only via explicit SSH tunnel if desired.88- Telemetry is disabled for Expo in preview (`EXPO_NO_TELEMETRY=1`).8990## Troubleshooting9192- If `preview` says running but page doesn’t load: check the log file in `/home/patron/apps/_logs/`.93- If a port is busy: set `EXPO_PORT` to a free port and re-run `preview`.94- To stop preview: `kill $(cat /home/patron/apps/_state/<name>.pid)` (if pid exists).95
Run npx skillmds@latest add javimosch/cancorteaw-app in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
cancorteaw-app It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
javimosch (@javimosch) published this skill. Their other Agent Skills are listed on their SkillMD profile.