Install
openclaw skills install clawapp-creatorBuild or adapt static front-end apps and mini-games so they match the Nima Tech Space upload format, optionally wire the platform LLM API, package a compliant zip, and upload it to the site. Use when Codex needs to help OpenClaw users create, retrofit, package, validate, or publish an app/game for the platform.
openclaw skills install clawapp-creatorBuild the smallest working app package that can be uploaded to Nima Tech Space, then upload it if the user wants.
This skill can also search public apps on CLAWSPACE and download app packages from the site.
Treat the following requests as a direct publish workflow:
In publish mode:
For a first-time uploader with no saved credentials, start by offering two clear paths:
Prefer asking this before you attempt upload-related commands.
scripts/check_environment.py first when the user is unsure whether the skill is ready to use.scripts/check_clawspace_account.py.manifest.json, optional README.md, and assets/.scripts/scaffold_mini_game.py.scripts/preview_clawspace_app.py when the user wants a browser check before package or upload.scripts/build_nima_package.py.scripts/diagnose_nima_package.py before upload when helpful.scripts/upload_nima_package.py when the user wants publishing.For discovery and reuse:
scripts/search_clawspace_apps.pyscripts/download_clawspace_app.pyOnly apply this section when the user is building a game, mini-game, or playful interactive experience. Do not force these rules onto utilities, visual experiments, AI tools, or other non-game apps.
When the project is clearly a game:
Useful game-specific suggestions:
When a game needs local persistence, prefer app/lib/clawspace-game-storage.js instead of ad-hoc localStorage keys.
For game polish, prefer checking for:
Again, use these as genre-aware completion prompts. Do not flatten every game into the same structure.
Read references/platform-contract.md before packaging.
Always enforce these minimum rules:
app/.app/, usually app/index.html.manifest.json, optional README.md, optional assets/, required app/.thumbnail.png and icon.png without automatically duplicating them into screenshots.app/lib/clawspace-game-storage.js for reusable local best-score / best-run persistence via browser storage.modelCategory to none unless the app truly needs AI.25MB.If the app does not need AI, keep modelCategory as none.
If the app needs AI, prefer the platform API instead of any user-supplied API key:
POST /api/llm/chatappIdtext, multimodal, codeRead references/model-api.md when wiring AI.
Tell the user the platform can provide a free shared model path when they choose a model category during upload.
Do not embed third-party model keys in client code.
For OCR, screenshot analysis, chart reading, or any app that sends images, use modelCategory = multimodal and send OpenAI-compatible content arrays with text and image_url parts.
Use assets/manifest.example.json as the starting template.
Use assets/README.template.md as the starting template when the app needs a basic product readme.
If the user wants to start from zero instead of retrofitting an existing app, copy one of these starter assets first:
assets/starter-mini-game/ for a no-model static gameassets/starter-ocr/ for a multimodal OCR and image-analysis appassets/platform-llm-client.js for a minimal platform model clientOr scaffold directly:
python3 scripts/scaffold_mini_game.py \
--name "Orbit Tap" \
--slug orbit-tap \
--description "点击轨道行星的轻量小游戏。"
If --out is omitted, default to the OpenClaw workspace app directory:
~/.openclaw/workspace/projects/apps/<slug>
Prefer this default for first-time users, so OpenClaw-generated apps live in a predictable place under its own workspace.
After scaffolding, encourage the user to add:
assets/If they skip custom cover assets, the site can still publish the app with a default generated cover, but custom art makes the listing look much better. For mobile shells such as WeChat Mini Program, PNG/JPG/WebP cover art is recommended. If creators only provide SVG or skip custom art, the mobile experience can fall back to default PNG covers.
Use:
python3 scripts/preview_clawspace_app.py /path/to/project --open
This starts a lightweight local static server from the project root, reads manifest.json, and opens the packaged entry in the browser.
Use:
python3 scripts/build_nima_package.py \
--app-dir /path/to/dist \
--manifest /path/to/manifest.json \
--out /path/to/output.zip \
--readme /path/to/README.md \
--assets-dir /path/to/assets
The script validates the structure, checks the required fields, checks the size limit, and builds the final zip.
It also warns about high-risk asset references like root-absolute /assets/... paths or remote http/https URLs inside the packaged front-end.
For project diagnosis, use:
python3 scripts/diagnose_nima_package.py \
--app-dir /path/to/app-or-dist \
--manifest /path/to/manifest.json
This checks:
modelCategory looks more suitable as none, text, multimodal, or codeEnvironment check:
python3 scripts/check_environment.py
Use this first on a new machine, or when the user is not sure whether Python, browser preview, network access, or Keychain support are ready.
Production site:
https://www.nima-tech.spacehttps://www.nima-tech.spaceTo confirm which saved CLAWSPACE account will be used for upload:
python3 scripts/check_clawspace_account.py
Use upload-config.json in the skill folder as the default reusable credential file. Ask the user once, then store:
siteUrlemailpasswordLeave the file empty by default. Reuse it on later uploads unless the user wants to override it.
When saving credentials, prefer file permission 600.
On macOS, prefer saving the password to Keychain and keeping upload-config.json as site metadata plus fallback config.
Keep the original plaintext-password config flow available as a backup option for users who prefer simple portability.
For the first-time setup, prefer:
python3 scripts/register_clawspace_account.py
for a brand-new user who does not have a CLAWSPACE account yet.
Use:
python3 scripts/setup_upload_config.py
for an existing user who already has an account and only needs to save or refresh credentials.
Or in non-interactive mode:
python3 scripts/setup_upload_config.py \
--site-url https://www.nima-tech.space \
--email user@example.com \
--password 'password' \
--password-store keychain \
--non-interactive
This setup script verifies the credentials by calling the real login endpoint before saving them. It now validates:
Supported password stores are:
config: store the password in upload-config.jsonkeychain: store the password in macOS Keychain and keep config file password emptyboth: store in both placesThe registration script can create a new website account and save the reusable upload config in one step. Prefer this when the user says they do not have a CLAWSPACE account yet.
Use:
python3 scripts/upload_nima_package.py \
--package /path/to/output.zip \
--model-category none \
--site-url https://www.nima-tech.space \
--email user@example.com \
--password 'password' \
--save-config
If you want to validate everything except the final upload, use:
python3 scripts/upload_nima_package.py \
--package /path/to/output.zip \
--dry-run
If the package includes oversized PNG/JPG/WebP cover art, the uploader now warns before publish.
If there are obviously broken assets such as zero-byte screenshots, it will stop before upload.
On macOS, when a package has huge thumbnail.png or icon.png files, prefer:
python3 scripts/upload_nima_package.py \
--package /path/to/output.zip \
--model-category none \
--optimize-images
Use none unless the app truly needs the platform model.
The upload script reads missing values from upload-config.json, logs in, sends the package to /api/import-app, and prints the resulting detail and launch URLs.
After upload, it also prints plain-text app links so the user can open the detail page immediately.
If useKeychain is enabled in the config and no explicit password was passed, the upload script will try macOS Keychain before failing.
During upload, report progress in stages:
Before uploading, check whether the slug is available:
If the package is too large for a direct Vercel function upload, use the site's Blob client-upload flow instead of failing early.
Only auto-upload after the user has provided valid site credentials or already has them stored in upload-config.json. If credentials are unavailable, stop after packaging and tell the user they need to register, log in once, and save or provide their credentials.
For first-time users with no upload config, prefer this decision order:
scripts/register_clawspace_account.pyhttps://www.nima-tech.space/registerscripts/setup_upload_config.pyIf login fails, tell the user to rerun:
python3 scripts/setup_upload_config.py
and refresh the stored credentials.
Use these flows when the user wants to browse CLAWSPACE, find reference apps, or download a package to inspect locally.
Search:
python3 scripts/search_clawspace_apps.py "ocr"
Search with JSON:
python3 scripts/search_clawspace_apps.py "space game" --json
Download by slug:
python3 scripts/download_clawspace_app.py orbit-heist --out-dir /path/to/downloads
Download by detail URL:
python3 scripts/download_clawspace_app.py https://www.nima-tech.space/apps/orbit-heist
Use this for prompts such as:
After packaging or uploading:
http/https resources, bundle those assets locally when possible instead of depending on third-party URLs./assets/... paths, rewrite them to relative paths such as ./assets/....entry, root structure, and zip size first.manifest.json and rebuild the zip.modelCategory matches the app’s actual use case.messages[].content[] shape instead of plain text only.modelCategory as none.assets/starter-mini-game/ instead of inventing files from scratch.