The canonical, authoritative home of this project is GitLab — always:
This GitHub repository is a frozen, read-only mirror. All development, issues, and releases happen on GitLab. Please open issues and merge requests there. The full history of this stub is preserved on GitLab.
Yocto layer for building minimal embedded Linux images with the ZeroClaw AI agent runtime and NemoClaw sandbox framework.
Repo path note (2026-04-26 reorg): this layer lives at
gitlab.com/nclawzero/meta(canonical) /github.com/nclawzero/meta(mirror) /argonas:/mnt/datapool/git/nclawzero/meta.git(fleet backup). The previous flatperlowja/meta-nclawzeroURL auto-redirects on both forges. The on-disk directory name in working trees is stillmeta-nclawzero/— that's a working-tree convenience, the project path isnclawzero/meta.
Current
mainis the canary track. Upstream-sourced recipes (nemoclaw-core,llama-cpp, etc.) useSRCREV = "${AUTOREV}"and pull whatevermain/masterof the upstream repo resolves to at the moment of the build. Every build is a snapshot of fast-moving upstreams; breakage between builds is expected.This layer makes no claims about system stability, feature completeness, or fitness for any purpose. Treat every build as pre-alpha — a rolling investigation of what's in upstream HEAD right now, not a deliverable product.
A companion conservative track (see
conservative/*branches) pins upstream-sourced recipes to the latest tagged upstream releases. Still not LTS-grade — no backport SLAs, no release promises — just pinned-to-releases rather than tracking HEAD, updated on a slower cadence thanmain. See STATUS.md for the full canary-vs-conservative model.
Pulls upstream NemoClaw and ZeroClaw at build time. Applies a small patchset (~430 lines across 3 patches). Copies overlay files (ZeroClaw agent definition, security tests, deployment scripts). Produces a flashable SD card image.
No fork. No copied upstream code in this repo. Just patches, overlays, configs, and recipes.
Current public support:
- x86_64 + macOS via Docker/Podman containers:
ghcr.io/perlowja/nclawzero-demo,ghcr.io/perlowja/nclawzero-agent - ARM Raspberry Pi family (Pi 4, Pi 5, Pi Zero 2 W, Pi 3 64-bit) via
Yocto-built flashable images (
meta-nclawzero-base) or pre-built SD images (pi-gen-nclawzero)
NVIDIA Jetson family support is deferred pending hardware validation. A maintainer-tested Orin Nano dev kit suffered a brick-class firmware failure that has not been recovered through software. Public docs should not treat that workflow as supported until a known-good replacement unit validates it end to end.
ZeroClaw on Raspberry Pi 4B (2GB):
- Daemon RSS: ~17MB
- Three daemon processes: <63MB total
- InvestorClaw skill (607 positions, 12 tools): passes full V7.1 test battery
- Available memory after boot: 1.4GB+
- Yocto 5.0 Scarthgap (LTS)
- poky (scarthgap)
- meta-openembedded (scarthgap) — meta-oe, meta-python
- meta-raspberrypi (scarthgap) — for Pi targets
# Clone layers
git clone -b scarthgap git://git.yoctoproject.org/poky
git clone -b scarthgap git://git.openembedded.org/meta-openembedded
git clone -b scarthgap https://github.com/agherber/meta-raspberrypi.git
# Initialize build
source poky/oe-init-build-env build-rpi
# Add layers to conf/bblayers.conf, set MACHINE in conf/local.conf
# See conf/ directory for examples
# Build
bitbake nclawzero-image
# Flash
bmaptool copy tmp/deploy/images/raspberrypi4-64/nclawzero-image-raspberrypi4-64.wic.gz /dev/sdXmeta-nclawzero/
conf/layer.conf — layer configuration
recipes-zeroclaw/zeroclaw/ — ZeroClaw binary + systemd service
recipes-nemoclaw/nemoclaw/ — NemoClaw + patches + overlays
recipes-core/images/ — Raspberry Pi image recipes
recipes-core/nclawzero-ssh-keys/ — production rootfs authorized_keys bake
recipes-core/nclawzero-system-config/ — sudoers, networkd, logind, thermal
recipes-core/packagegroups/ — package groups
recipes-connectivity/ — network configuration
wic/ — SD card partition layout
Two user accounts created via extrausers on every flashed image:
ncz— operator (interactive sudo, NOPASSWD via sudoers drop-in). Locked password; SSH-only access via the baked authorized_keys.jasonperlow— defense-in-depth backup user. Same authorized_keys, same NOPASSWD sudo. Exists so a disrupted operator account (e.g., the 2026-04-26 Pi OS Trixie userconfig stripping incident) doesn't lock the fleet out.
authorized_keys content is fleet-internal (the comment fields disclose access topology). Real keys live at /mnt/datapool/secrets/nclawzero-fleet-keys/authorized_keys on ARGONAS and are pulled into the gitignored build-time path before each build via ~/sync-fleet-keys.sh. The committed .example files document the format. Per-line strict validation rejects malformed lines (including [options] key-type shapes that ssh-keygen accepts but sshd refuses).
See feedback_auth_local_only_keys.md in the operator's MNEMOS for the full policy.
OpenZaurus (2002) -> OpenEmbedded -> Yocto Project
Apache-2.0