# Skald Circle โ€” SKALD ## Current status New application with agents and chatbots to help families and small groups collaborate, with supervised chat for children and vulnerable people. ### Agent icons โ€” completed โœ… All 11 agents now have **Vector Paintings** icons (painterly vector, warm and family-friendly), generated via ComfyUI: | Agent | Animal | Status | |-------|--------|--------| | Main Assistant | ๐ŸฆŠ Fox | โœ… | | Project Coordinator | ๐Ÿฆก Badger | โœ… | | Researcher | ๐Ÿฟ๏ธ Squirrel | โœ… | | Generalist | ๐Ÿฆซ Beaver | โœ… | | Code Explorer | ๐Ÿ•ต๏ธ Meerkat | โœ… | | Software Architect | ๐Ÿ—๏ธ Heron | โœ… | | Software Engineer | ๐Ÿ”ง Bear | โœ… | | Spec Writer | ๐Ÿ“ Owl | โœ… | | Tech Lead | ๐Ÿ‘‘ Deer | โœ… | | TIC | ๐Ÿ‘๏ธ Cat | โœ… | | Business Analyst | ๐Ÿ’ผ Magpie | โœ… | ### Refactoring โ€” completed โœ… - Removed Tauri/desktop dependency (`tauri.conf.json`, `src/desktop/`, `icons/`, `docs/desktop.md`, gen schemas/) - Removed `build.rs` (no longer needed) - New i18n system (core-api + plugin-mobile-connector + web) - Configuration system refactoring ### Auto-build CI/CD โœ… Automatic build on NiPoGi with Gitea Actions (native runner v2.1.0): | Component | File | Status | |---|---|---| | `ci/package.sh` | Creates distribution tarballs from compiled binaries | โœ… | | `ci/verify-version.sh` | Verifies that a release hasn't been built yet | โœ… | | `.gitea/workflows/nightly.yml` | Push to `main` โ†’ build amd64+arm64 โ†’ nightly/ | โœ… | | `.gitea/workflows/release.yml` | PR check `verify-version` + merge โ†’ build โ†’ releases/v{ver}/ | โœ… | | **Native runner** on NiPoGi | v2.1.0, host-mode systemd service, label `linux-amd64` | โœ… | | **Cross toolchain** (arm64) | `gcc-aarch64-linux-gnu` + `rustup target add` | โœ… | | **Caddy `builds.skaldagent.net`** | file_server browse (directory listing) | โœ… | | **Route53 `builds.skaldagent.net`** | A record โ†’ 145.40.169.107 | โœ… | | **CI cache** | Persistent `CARGO_TARGET_DIR` at `/home/dguiducci/.cache/skald-ci/target` | โœ… | | **`install.sh`** | One-liner script `curl ... | bash` โ€” Linux (systemd) + macOS ARM64 (launchd) | โœ… | | **`install-nightly.sh`** | One-liner script for nightly builds โ€” same OS support | โœ… | | **`uninstall.sh`** | Bundled in tarball โ€” stops service/agent, removes everything | โœ… | | **`releases/LATEST`** | Auto-updated by release workflow to track latest version | โœ… | ### Technical notes - `scripts/` in `.gitignore` โ€” CI scripts moved to `ci/` (tracked by git) - Build without `whisper-local` on Linux (`--no-default-features`) - `aarch64-linux-gnu-strip` for ARM64 binaries - `actions/checkout@v4` works (native runner has Node.js) - macOS ARM64 supported via `install.sh` / `install-nightly.sh` (auto-detects OS, uses launchd) ### Next steps - Create `release` branch on Gitea with branch protection (PR via UI) - Test release workflow with a PR - Build first macOS ARM64 binary on MacBook, upload to `builds.skaldagent.net` ### macOS support **Supported**: macOS ARM64 (Apple Silicon M1+), Intel not supported. | Aspect | Status | Notes | |--------|--------|-------| | **Install script** (`install.sh`) | โœ… | Auto-detects macOS, uses launchd | | **Nightly install** (`install-nightly.sh`) | โœ… | Same logic | | **Uninstall script** (`uninstall.sh`) | โœ… | Handles launchctl | | **Package script** (`ci/package.sh`) | โœ… | Accepts `--os darwin`, strips best-effort | | **Binary** | โณ Not yet built | Build natively on MacBook, deploy to builds.skaldagent.net | #### How to build for macOS (on MacBook) ```sh cargo build --release -p skald-setup -p skald # includes whisper ./ci/package.sh --version v0.1.0 --os darwin --arch arm64 \ --target-dir target/release --output dist/ ``` Upload the resulting `dist/skald-circle-v0.1.0-darwin-arm64.tar.gz` to the NiPoGi's `builds.skaldagent.net/releases/v0.1.0/` directory. #### Cross-compilation from NiPoGi (research notes ๐Ÿงช) Cross-compiling for `aarch64-apple-darwin` from the NiPoGi using **zig** + **cargo-zigbuild** was attempted but hit blockers. | Component | Location | Notes | |-----------|----------|-------| | **Zig** | `~/.local/bin/zig` (symlink to `/tmp/zig-linux-x86_64-0.14.0/zig`) | v0.14.0, installed manually | | **macOS SDK** | `/opt/MacOSX/MacOSX11.3.sdk` | From `phracker/MacOSX-SDKs` (GitHub) | | **Rust targets** | `aarch64-apple-darwin` | via `rustup target add` | | **`cargo-zigbuild`** | `~/.cargo/bin/cargo-zigbuild` | v0.23.0 | | **zig wrapper scripts** | `/tmp/zig-wrap-cxx.sh`, `/tmp/zig-ar-wrap.sh` | Handle OpenSSL/Clang flags + SDK paths | **What works:** - โœ… Rust std compilation for macOS target - โœ… OpenSSL compilation from source (via wrapper that remaps `--target=` and provides SDK headers) - โœ… Rust dependency compilation (tree-sitter, sqlx, tokio, etc.) - โœ… Single-file C programs compile and link correctly **What's blocked:** - โŒ `zig cc` segfaults with `-F` (framework search path) on Linux โ†’ can't link against macOS frameworks (CoreFoundation, Security) - โŒ `zig cc` can't find frameworks without `-F` - โŒ `libsqlite3-sys` build.rs bug: `is_apple` checks `host.contains("apple") && target.contains("apple")` โ†’ forces OpenSSL linkage instead of CommonCrypto on cross-compile (needs upstream fix or `OPENSSL_DIR` workaround) **The fix would be:** 1. Upstream fix to `libsqlite3-sys` build.rs (`target.contains("apple")` only) 2. Zig fix for `-F` segfault, or use `ld64` instead of zig's linker **Conclusion**: Cross-compilation is fragile. Build natively on MacBook for now.