Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f259a7b
feat(peripherals): add Arduino UNO Q edge-native peripheral with full…
tgruben-circuit Feb 18, 2026
588a117
fix(peripherals): fix UNO Q Bridge for real hardware deployment
tgruben-circuit Feb 18, 2026
08511fd
feat(peripherals): update UNO Q camera tool for USB cameras + add mus…
tgruben-circuit Feb 18, 2026
73847e0
fix(peripherals): load peripheral tools in daemon/channel path + fix …
tgruben-circuit Feb 18, 2026
98485c4
Merge pull request #3 from tgruben-circuit/feat/uno-q-edge-native
caiqinghua Feb 19, 2026
5ca037c
Merge branch 'zeroclaw-labs:main' into main
caiqinghua Feb 19, 2026
7417204
Merge branch 'zeroclaw-labs:main' into main
caiqinghua Feb 19, 2026
a01c0c3
Merge branch 'zeroclaw-labs:main' into main
caiqinghua Feb 19, 2026
f8b359e
Merge branch 'zeroclaw-labs:main' into main
caiqinghua Feb 19, 2026
cfdc6e4
Merge branch 'zeroclaw-labs:main' into main
caiqinghua Feb 19, 2026
f923e54
Merge branch 'zeroclaw-labs:main' into main
caiqinghua Feb 20, 2026
ec13305
Merge branch 'zeroclaw-labs:main' into main
caiqinghua Feb 20, 2026
44aa42b
Readme zeroclaw-labs to openagen
caiqinghua Feb 20, 2026
b1557e9
docs: add FTMS (File/Text Management System) design doc
modpunk Feb 21, 2026
4431fc9
docs: add FTMS implementation plan (11 tasks)
modpunk Feb 21, 2026
77c8275
feat(ftms): add [ftms] config section
modpunk Feb 21, 2026
ece7ff6
feat(ftms): add schema types and module skeleton
modpunk Feb 21, 2026
65c7487
feat(ftms): add file storage with date-organized directories
modpunk Feb 21, 2026
bccc33b
feat(ftms): add SQLite FTS5 index, text extraction, and media descrip…
modpunk Feb 22, 2026
b15a332
feat(ftms): add FtmsService orchestrator
modpunk Feb 22, 2026
acdc0c5
feat(ftms): integrate FTMS routes into gateway
modpunk Feb 22, 2026
c61523c
fix: resolve pre-existing build errors (postgres feature gate, future…
modpunk Feb 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@
rustflags = ["-C", "link-arg=-static"]

[target.aarch64-unknown-linux-musl]
linker = "aarch64-linux-musl-gcc"
rustflags = ["-C", "link-arg=-static"]

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
26 changes: 25 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ which = "7.0"

# WebSocket client channels (Discord/Lark/DingTalk)
tokio-tungstenite = { version = "0.28", features = ["rustls-tls-webpki-roots"] }
futures-util = { version = "0.3", default-features = false, features = ["sink"] }
futures-util = { version = "0.3", default-features = false, features = ["sink", "alloc"] }
regex = "1.10"
hostname = "0.4.2"
rustls = "0.23"
Expand All @@ -125,7 +125,7 @@ mail-parser = "0.11.2"
async-imap = { version = "0.11",features = ["runtime-tokio"], default-features = false }

# HTTP server (gateway) — replaces raw TCP for proper HTTP/1.1 compliance
axum = { version = "0.8", default-features = false, features = ["http1", "json", "tokio", "query", "ws", "macros"] }
axum = { version = "0.8", default-features = false, features = ["http1", "json", "tokio", "query", "ws", "macros", "multipart"] }
tower = { version = "0.5", default-features = false }
tower-http = { version = "0.6", default-features = false, features = ["limit", "timeout"] }
http-body-util = "0.1"
Expand Down
25 changes: 12 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ Use this board for important notices (breaking changes, security advisories, mai

| Date (UTC) | Level | Notice | Action |
|---|---|---|---|
| 2026-02-19 | _Critical_ | We are **not affiliated** with `openagen/zeroclaw` or `zeroclaw.org`. The `zeroclaw.org` domain currently points to the `openagen/zeroclaw` fork, and that domain/repository are impersonating our official website/project. | Do not trust information, binaries, fundraising, or announcements from those sources. Use only this repository and our verified social accounts. |
| 2026-02-19 | _Important_ | We have **not** launched an official website yet, and we are seeing impersonation attempts. Do **not** join any investment or fundraising activity claiming the ZeroClaw name. | Use this repository as the single source of truth. Follow [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Telegram CN (@zeroclawlabs_cn)](https://t.me/zeroclawlabs_cn), [Telegram RU (@zeroclawlabs_ru)](https://t.me/zeroclawlabs_ru), and [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) for official updates. |
| 2026-02-19 | _Important_ | Anthropic updated the Authentication and Credential Use terms on 2026-02-19. OAuth authentication (Free, Pro, Max) is intended exclusively for Claude Code and Claude.ai; using OAuth tokens from Claude Free/Pro/Max in any other product, tool, or service (including Agent SDK) is not permitted and may violate the Consumer Terms of Service. | Please temporarily avoid Claude Code OAuth integrations to prevent potential loss. Original clause: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |

Expand Down Expand Up @@ -170,7 +169,7 @@ Example sample (macOS arm64, measured on February 18, 2026):
Or skip the steps above and install everything (system deps, Rust, ZeroClaw) in a single command:

```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/scripts/install.sh | bash
curl -LsSf https://raw.githubusercontent.com/openagen/zeroclaw/main/scripts/install.sh | bash
```

#### Compilation resource requirements
Expand Down Expand Up @@ -215,7 +214,7 @@ brew install zeroclaw

```bash
# Recommended: clone then run local bootstrap script
git clone https://github.com/zeroclaw-labs/zeroclaw.git
git clone https://github.com/openagen/zeroclaw.git
cd zeroclaw
./bootstrap.sh

Expand Down Expand Up @@ -244,7 +243,7 @@ ZEROCLAW_CONTAINER_CLI=podman ./bootstrap.sh --docker
Remote one-liner (review first in security-sensitive environments):

```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/scripts/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/openagen/zeroclaw/main/scripts/bootstrap.sh | bash
```

Details: [`docs/one-click-bootstrap.md`](docs/one-click-bootstrap.md) (toolchain mode may request `sudo` for system packages).
Expand All @@ -258,18 +257,18 @@ Release assets are published for:
- Windows: `x86_64`

Download the latest assets from:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
<https://github.com/openagen/zeroclaw/releases/latest>

Example (ARM64 Linux):

```bash
curl -fsSLO https://github.com/zeroclaw-labs/zeroclaw/releases/latest/download/zeroclaw-aarch64-unknown-linux-gnu.tar.gz
curl -fsSLO https://github.com/openagen/zeroclaw/releases/latest/download/zeroclaw-aarch64-unknown-linux-gnu.tar.gz
tar xzf zeroclaw-aarch64-unknown-linux-gnu.tar.gz
install -m 0755 zeroclaw "$HOME/.cargo/bin/zeroclaw"
```

```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
git clone https://github.com/openagen/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
Expand Down Expand Up @@ -1053,11 +1052,11 @@ We're building in the open because the best ideas come from everywhere. If you'r
## ⚠️ Official Repository & Impersonation Warning

**This is the only official ZeroClaw repository:**
> https://github.com/zeroclaw-labs/zeroclaw
> https://github.com/openagen/zeroclaw

Any other repository, organization, domain, or package claiming to be "ZeroClaw" or implying affiliation with ZeroClaw Labs is **unauthorized and not affiliated with this project**. Known unauthorized forks will be listed in [TRADEMARK.md](TRADEMARK.md).

If you encounter impersonation or trademark misuse, please [open an issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
If you encounter impersonation or trademark misuse, please [open an issue](https://github.com/openagen/zeroclaw/issues).

---

Expand Down Expand Up @@ -1102,11 +1101,11 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) and [CLA.md](CLA.md). Implement a trait,
## Star History

<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<a href="https://www.star-history.com/#openagen/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=openagen/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=openagen/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=openagen/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>
81 changes: 81 additions & 0 deletions dev/cross-uno-q.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#!/usr/bin/env bash
# Cross-compile ZeroClaw for Arduino UNO Q (aarch64 Debian Linux).
#
# Prerequisites:
# brew install filosottile/musl-cross/musl-cross # macOS
# # or: apt install gcc-aarch64-linux-gnu # Linux
# rustup target add aarch64-unknown-linux-gnu
#
# Usage:
# ./dev/cross-uno-q.sh # release build
# ./dev/cross-uno-q.sh --debug # debug build

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"

TARGET="aarch64-unknown-linux-gnu"
PROFILE="release"

if [[ "${1:-}" == "--debug" ]]; then
PROFILE="dev"
fi

echo "==> Cross-compiling ZeroClaw for $TARGET ($PROFILE)"

# Check if cross is available (preferred)
if command -v cross &>/dev/null; then
echo " Using 'cross' (Docker-based cross-compilation)"
cd "$PROJECT_DIR"
if [[ "$PROFILE" == "release" ]]; then
cross build --target "$TARGET" --release --features hardware
else
cross build --target "$TARGET" --features hardware
fi
else
# Native cross-compilation
echo " Using native toolchain"

# Ensure target is installed
rustup target add "$TARGET" 2>/dev/null || true

# Detect linker
if command -v aarch64-linux-gnu-gcc &>/dev/null; then
LINKER="aarch64-linux-gnu-gcc"
elif command -v aarch64-unknown-linux-gnu-gcc &>/dev/null; then
LINKER="aarch64-unknown-linux-gnu-gcc"
else
echo "Error: No aarch64 cross-compiler found."
echo "Install with:"
echo " macOS: brew tap messense/macos-cross-toolchains && brew install aarch64-unknown-linux-gnu"
echo " Linux: apt install gcc-aarch64-linux-gnu"
echo " Or install 'cross': cargo install cross"
exit 1
fi

export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$LINKER"

cd "$PROJECT_DIR"
if [[ "$PROFILE" == "release" ]]; then
cargo build --target "$TARGET" --release --features hardware
else
cargo build --target "$TARGET" --features hardware
fi
fi

BINARY="$PROJECT_DIR/target/$TARGET/$( [[ $PROFILE == release ]] && echo release || echo debug )/zeroclaw"

if [[ -f "$BINARY" ]]; then
SIZE=$(du -h "$BINARY" | cut -f1)
echo "==> Build complete: $BINARY ($SIZE)"
echo ""
echo "Deploy to Uno Q:"
echo " zeroclaw peripheral deploy-uno-q --host <uno-q-ip>"
echo ""
echo "Or manually:"
echo " scp $BINARY arduino@<uno-q-ip>:~/zeroclaw/"
else
echo "Error: binary not found at $BINARY"
exit 1
fi
101 changes: 101 additions & 0 deletions docs/datasheets/arduino-uno-q.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Arduino UNO Q (ABX00162 / ABX00173)

## Pin Aliases

| alias | pin | type |
|-------------|-----|-------|
| builtin_led | 13 | gpio |
| user_led | 13 | gpio |

## Overview

Arduino UNO Q is a dual-processor board: Qualcomm QRB2210 (quad-core Cortex-A53 @ 2.0 GHz, Debian Linux) + STM32U585 (Cortex-M33 @ 160 MHz, Arduino Core on Zephyr OS). They communicate via Bridge RPC.

Memory: 2/4 GB LPDDR4X + 16/32 GB eMMC.
Connectivity: Wi-Fi 5 (dual-band) + Bluetooth 5.1.

## Digital Pins (3.3V, MCU-controlled)

D0-D13 and D14-D21 (D20=SDA, D21=SCL). All 3.3V logic.

- D0/PB7: USART1_RX
- D1/PB6: USART1_TX
- D3/PB0: PWM (TIM3_CH3), FDCAN1_TX
- D4/PA12: FDCAN1_RX
- D5/PA11: PWM (TIM1_CH4)
- D6/PB1: PWM (TIM3_CH4)
- D9/PB8: PWM (TIM4_CH3)
- D10/PB9: PWM (TIM4_CH4), SPI2_SS
- D11/PB15: PWM (TIM1_CH3N), SPI2_MOSI
- D12/PB14: SPI2_MISO
- D13/PB13: SPI2_SCK, built-in LED
- D20/PB11: I2C2_SDA
- D21/PB10: I2C2_SCL

## ADC (12-bit, 0-3.3V, MCU-controlled)

6 channels: A0-A5. VREF+ = 3.3V. NOT 5V-tolerant in analog mode.

- A0/PA4: ADC + DAC0
- A1/PA5: ADC + DAC1
- A2/PA6: ADC + OPAMP2_INPUT+
- A3/PA7: ADC + OPAMP2_INPUT-
- A4/PC1: ADC + I2C3_SDA
- A5/PC0: ADC + I2C3_SCL

## PWM

Only pins marked ~: D3, D5, D6, D9, D10, D11. Duty cycle 0-255.

## I2C

- I2C2: D20 (SDA), D21 (SCL) — JDIGITAL header
- I2C4: Qwiic connector (PD13/SDA, PD12/SCL)

## SPI

SPI2 on JSPI header: MISO/PC2, MOSI/PC3, SCK/PD1. 3.3V.

## CAN

FDCAN1: TX on D3/PB0, RX on D4/PA12. Requires external CAN transceiver.

## LED Matrix

8x13 = 104 blue pixels, MCU-controlled. Bitmap: 13 bytes (one per column, 8 bits per column).

## MCU RGB LEDs (active-low)

- LED3: R=PH10, G=PH11, B=PH12
- LED4: R=PH13, G=PH14, B=PH15

## Linux RGB LEDs (sysfs)

- LED1 (user): /sys/class/leds/red:user, green:user, blue:user
- LED2 (status): /sys/class/leds/red:panic, green:wlan, blue:bt

## Camera

Dual ISPs: 13MP+13MP or 25MP@30fps. 4-lane MIPI-CSI-2. V4L2 at /dev/video*.

## ZeroClaw Tools

- `uno_q_gpio_read`: Read digital pin (0-21)
- `uno_q_gpio_write`: Set digital pin high/low (0-21)
- `uno_q_adc_read`: Read 12-bit ADC (channel 0-5, 0-3.3V)
- `uno_q_pwm_write`: PWM duty cycle (pins 3,5,6,9,10,11, duty 0-255)
- `uno_q_i2c_scan`: Scan I2C bus
- `uno_q_i2c_transfer`: I2C read/write (addr, hex data, read len)
- `uno_q_spi_transfer`: SPI exchange (hex data)
- `uno_q_can_send`: CAN frame (id, hex payload)
- `uno_q_led_matrix`: Set 8x13 LED matrix (hex bitmap)
- `uno_q_rgb_led`: Set MCU RGB LED 3 or 4 (r, g, b 0-255)
- `uno_q_camera_capture`: Capture image from MIPI-CSI camera
- `uno_q_linux_rgb_led`: Set Linux RGB LED 1 or 2 (sysfs)
- `uno_q_system_info`: CPU temp, memory, disk, Wi-Fi status

## Power

- USB-C: 5V / 3A (PD negotiation)
- DC input: 7-24V
- All headers: 3.3V logic (MCU), 1.8V (MPU). NOT 5V-tolerant on analog pins.
Loading