<< All versions

Skill v1.0.0

currentAutomated scan100/100
aohp-os/aohp/aohp-uda
──Details
PublishedOctober 25, 2026 at 01:15 AM
Content Hashsha256:7c23047dd115471e...
Git SHAb8ab9e98a2bd
──Files
Files (1 file, 4.7 KB)
SKILL.md4.7 KBactive
SKILL.md · 162 lines · 4.7 KB

version: "1.0.0" name: aohp-uda description: Generate personalized HTML apps via UDAGen on AOHP — idea-only or with structured input (requirements, OpenAPI, schemas). metadata: {"openclaw":{"emoji":"✨","requires":{"bins":["aohp"]},"os":["linux"]}}


AOHP User Defined App (UDAGen)

Use this skill when the user wants a personalized mini-app (UDA / PUI) generated on the AOHP device.

Pair with `uda-app` after generation completes (hasApp: true) to install, pin, and launch.

Prerequisites

  1. LLM credentials on device (not baked into the image):

``bash aohp uda config-set \ --api-key "$UDA_API_KEY" \ --model "doubao-seed-2-0-pro-260215" \ --base-url "https://ark.cn-beijing.volces.com/api/v3" \ --provider openai ``

  1. The uda Alpine container is created automatically on first run.

Choose a workflow

A. Idea-only (fastest)

No custom input files. UDAGen auto-drafts mock API docs from --idea.

bash
aohp uda generate \
--app-name "Google Search" \
--idea "Google Search mini-app: search arbitrary keywords on a single mobile page; show Google results after submit"

Note the returned jobId, then poll aohp uda status -j <jobId> until status: completed and hasApp: true.

B. Structured input (richer apps)

Stage per-job input before uda.generate. When /opt/udagen/workspace/<jobId>/input/ contains supported files, generation uses that tree instead of the empty template.

1. Allocate input scaffold

bash
aohp uda input init
# → { "jobId": "job-1710000000000", "containerInputDir": "...", "hostInputDir": "..." }

2. Write input files (repeat as needed)

bash
JOB=job-1710000000000
aohp uda input write -j "$JOB" --path requirements/idea.md --content "$(cat <<'EOF'
# Google Search App
Single search field; submit runs a Google search for arbitrary keywords.
Mobile-first; pin-friendly launcher name: Google Search.
EOF
)"
aohp uda input write -j "$JOB" --path app/manifest.json --content '{
"name": "Google Search",
"short_name": "Search",
"theme_color": "#4285F4",
"background_color": "#FFFFFF",
"description": "Search Google with any keyword"
}'
aohp uda input write -j "$JOB" --path mock_docs/openapi.yaml --content "$(cat <<'EOF'
openapi: 3.0.3
info:
title: Google Search Proxy
version: 1.0.0
paths:
/search:
get:
summary: Search by keyword
parameters:
- name: q
in: query
required: true
schema: { type: string }
responses:
"200":
description: Redirect or embed URL for Google results
EOF
)"

3. Generate with the same job id

bash
aohp uda generate -j "$JOB" \
--app-name "Google Search" \
--idea "Google Search: arbitrary keywords"

Alternative: edit files via sandbox:

bash
aohp sandbox exec uda -- ls /opt/udagen/workspace/$JOB/input/

Host bind path: /data/aohp/shared/uda/<jobId>/input/

After generation

bash
aohp uda status -j <jobId> # poll until hasApp
aohp uda install -j <jobId> --pin
aohp uda launch -j <jobId>

See skill `uda-app` for install/launch details.

Input bundle reference

Supported extensions: .md, .txt, .json, .yaml, .yml, .csv, .tsv

PathRole
requirements/*.mdProduct brief / user stories
app/manifest.jsonLauncher name, theme, icon hint
mock_docs/openapi.yamlAPI contract for mock backend
mock_docs/assumptions.jsonPersonas, layout, action mapping
mock_docs/schemas/*.jsonEntity JSON Schemas

Baked template (device): /opt/udagen/template-input/ Per-job input: /opt/udagen/workspace/<jobId>/input/

RPC mapping

CLIJSON-RPC
aohp uda config-getuda.config.get
aohp uda config-setuda.config.set
aohp uda input inituda.input.init
aohp uda input writeuda.input.write
aohp uda generateuda.generate
aohp uda statusuda.status
aohp uda listuda.list
aohp uda deleteuda.delete
aohp uda previewuda.preview

uda.generate optional params: jobId, appName, idea, inputDir (container path override).

Output layout

/data/aohp/shared/uda/<jobId>/ (container: /opt/udagen/workspace/<jobId>/):

  • app/index.html — WebView app
  • mock/server.py — local API on 127.0.0.1:8787
  • prd.json, design_spec.json, udagen.log — pipeline artifacts

Tips

  • Generation runs in the background inside uda; poll uda.status (minutes).
  • Do not commit API keys into the image; use uda config-set.
  • For idea-only tasks, workflow A is enough; use B when the user supplies API shapes, data samples, or detailed requirements files.
All versions