Skip to main content

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.

Try the finished app directly

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​

PrerequisiteDescription
Claude CodeInstall it on your local machine.
ne503 source repoClone 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/.
DockerInstall it on your local machine, for building app images.
NE503 devicePrepare 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, stream sub (publishes raw NV12 frames; main only 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.yaml declares the required video stream, model, event topics, and tunable env vars (dwell seconds LOITER_SECONDS, detection threshold DETECTION_THRESHOLD, grace seconds GRACE_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):