AI-Assisted Development
This page demonstrates AI-assisted development: describe the requirement in one sentence of natural language, and Claude (using the ne503-dev skill) takes care of the app's development, deployment, and verification β with no manual command execution.
The demo app is a loitering alert (Loitering Detection): when a person stays in frame continuously for 10 seconds, it fires an alert; when they leave, it resets.
Want to skip development and deploy the finished app right away? Download the prebuilt package lingering-detection.tar, unzip it to get app.yaml and image.tar, and follow the steps in Hello World Β§4 to deploy to the device.
1. Prerequisitesβ
| Prerequisite | Description |
|---|---|
| Claude Code | Install it on your local machine. |
| ne503 source repo | Clone locally (bundled with the NE503 SDK); the ne503-dev skill resides at .claude/skills/ne503-dev/. Alternatively, download the skill zip and extract it into .claude/skills/. |
| Docker | Install it on your local machine, for building app images. |
| NE503 device | Prepare a ready device: note its IP + admin password, and confirm the platform is initialized (HALv2 installed, ai-runtime healthy, detection model scanned + loaded). |
2. From One Sentence to a New Appβ
Traditional development requires writing the app.py business logic, configuring app.yaml permissions, discovering the device's available models and video streams, building the image, deploying, and verifying β AI-assisted development hands all of this to Claude; the developer only describes the requirement in natural language. Below is a real on-device session (2026-06-22) where the only input was a single sentence.
2.1 Input requirementβ
In Claude Code, invoke the ne503-dev skill and describe the requirement in natural language:
Build an app: fire an alert after someone is detected lingering for 10 seconds. Deploy to
<device-IP>.
Claude reads the skill, starts planning on its own, and β after confirming a few details with the developer β gets to work:
2.2 Claude develops the app (the core)β
Once the requirement is confirmed, Claude develops the app autonomously, starting from the SDK's apps/template/ app template. Three key decisions shape the app:
- Placeholder fixes: the template's sample model and stream don't run on a real device; Claude queries the device and substitutes the real values β model
hailo_yolov8n_384_640, streamsub(publishes raw NV12 frames;mainonly publishes encoded H264 and cannot be used for inference). - Dwell state machine: the app's core logic. A timer starts when a person enters the frame; an alert fires once they linger continuously for 10 seconds; if no person is detected for 3 seconds, they're deemed to have left and the state resets. A 3-second grace window (
GRACE_SECONDS) tolerates brief detection drops from turning or occlusion. - Manifest config:
app.yamldeclares the required video stream, model, event topics, and tunable env vars (dwell secondsLOITER_SECONDS, detection thresholdDETECTION_THRESHOLD, grace secondsGRACE_SECONDS, etc.).
The full development process (template selection β placeholder fixing β state machine implementation) is below:
2.3 Claude deploys and verifiesβ
With the code written, deployment is likewise handled by Claude β the skill's bundled script chains "build β upload β install β start β verify" into one fully-automatic pass, and the app enters running.
After deployment, Claude verifies three things: inference is actually live (logs confirm the model is loaded and the first frame has arrived); the platform-injected permissions match app.yaml; and a person entering the frame triggers a complete detection cycle. The verification from the Web Console's perspective is below:
The cycle repeated many times on-device; every alert landed at 10.1 s, totaling 3 independent alerts β no false alarms, no missed ones.
A single sentence of input produces a live loitering-alert app on the device β with no manual step in between.
Full end-to-end process (watch on demand):