Fold the agent harness under the colibri feature (drop FEATURE_ZOT) #43

Merged
clawdie merged 1 commit from fold-zot-agent-under-colibri into main 2026-06-13 18:43:18 +02:00
3 changed files with 29 additions and 20 deletions

View file

@ -7,7 +7,9 @@ A persistent operator USB with XFCE as the live-image baseline:
- bootable USB image
- stable XFCE desktop for the live operator environment
- browser available immediately
- `pi` agent harness available immediately (bundled npm global)
- Colibri's agent harness staged with the control plane (under the colibri
umbrella — no separate feature flag)
- `pi` retained as a spawnable agent backend (bundled npm global)
- Tailscale available immediately
- Colibri control-plane daemon staged and enabled as the live-USB rc.d service
(`service colibri_daemon`)
@ -50,7 +52,8 @@ Live operator USB
SDDM/XFCE desktop
└── colibri_daemon # lightweight control plane, enabled on USB
├── colibri CLI / colibri-tui
└── agent harness events (pi today; runtime adapters in Colibri)
└── agent harness # Colibri's bundled agent (staged with the
# daemon); pi available as a spawnable backend
Deployed disk/server system
service clawdie # target operator service name

View file

@ -104,20 +104,22 @@ COLIBRI_COST_MODE="${COLIBRI_COST_MODE:-smart}"
# lightweight `colibri_daemon` control plane directly. Add deployed-system
# service packaging only after that implementation is chosen.
# zot agent harness (the consolidation target — see colibri ADR
# docs/ADR-agent-harness-consolidation.md). zot is a single static Go binary
# (providers incl. DeepSeek, Telegram bot, json/rpc modes, SKILL.md, extensions).
# Opt-in (default NO) while Pi stays the default harness during migration.
# Pin a tag for reproducible images; zot has no FreeBSD release, so the build
# host compiles it: (cd $ZOT_REPO && git checkout $ZOT_VERSION &&
# Colibri's bundled agent harness (the consolidation target — see colibri ADR
# docs/ADR-agent-harness-consolidation.md). Shipped under the colibri umbrella as
# a single static Go binary (providers incl. DeepSeek, Telegram bot, json/rpc
# modes, SKILL.md, extensions), so it has NO separate feature flag: it stages
# automatically whenever FEATURE_COLIBRI=YES. Internal escape hatch only —
# COLIBRI_STAGE_AGENT=NO stages the daemon without the agent (debug builds).
# Pin a tag for reproducible images; the agent has no FreeBSD release, so the
# build host compiles it: (cd $ZOT_REPO && git checkout $ZOT_VERSION &&
# GOOS=freebsd GOARCH=amd64 go build -trimpath -o bin/zot ./cmd/zot)
FEATURE_ZOT="${FEATURE_ZOT:-NO}"
COLIBRI_STAGE_AGENT="${COLIBRI_STAGE_AGENT:-YES}"
ZOT_VERSION="${ZOT_VERSION:-v0.2.29}"
ZOT_REPO="${ZOT_REPO:-/home/clawdie/ai/zot}"
ZOT_ARTIFACT_DIR="${ZOT_ARTIFACT_DIR:-}"
# Optional: bake the operator's DeepSeek key into $ZOT_HOME/auth.json (0600).
# Optional: bake the operator's DeepSeek key into the agent's auth.json (0600).
# Leave blank to stage an auth.json.sample template the operator fills in, or
# to configure at runtime via `zot` env / `zot telegram-bot setup`.
# to configure at runtime via agent env / `zot telegram-bot setup`.
ZOT_DEEPSEEK_KEY="${ZOT_DEEPSEEK_KEY:-}"
# Local LLM runtime (optional)

View file

@ -121,8 +121,7 @@ echo " Pkg : ${DEFAULT_PKG_BRANCH}"
echo " GPU : ${GPU_DRIVER:-auto-detect}"
echo " NVIDIA universal : ${NVIDIA_UNIVERSAL:-NO}"
echo " Target : ${TARGET:-baremetal}"
echo " Colibri : ${FEATURE_COLIBRI:-NO}"
echo " zot agent : ${FEATURE_ZOT:-NO} (${ZOT_VERSION:-})"
echo " Colibri : ${FEATURE_COLIBRI:-NO} (agent ${ZOT_VERSION:-} / stage ${COLIBRI_STAGE_AGENT:-YES})"
echo ""
# Name the output for the thing we are actually building.
@ -354,16 +353,17 @@ resolve_zot_paths() {
}
preflight_zot_artifacts() {
[ "${FEATURE_ZOT:-NO}" = "YES" ] || return 0
[ "${FEATURE_COLIBRI:-NO}" = "YES" ] || return 0
[ "${COLIBRI_STAGE_AGENT:-YES}" = "YES" ] || return 0
[ "${FETCH_ONLY:-0}" -eq 0 ] || return 0
resolve_zot_paths
if [ ! -x "${_resolved_zot_artifact_dir}/zot" ]; then
echo "ERROR: zot binary missing: ${_resolved_zot_artifact_dir}/zot"
echo " zot has no FreeBSD release — build it first:"
echo "ERROR: Colibri agent binary missing: ${_resolved_zot_artifact_dir}/zot"
echo " The agent has no FreeBSD release — build it first:"
echo " (cd ${_resolved_zot_repo} && git checkout ${ZOT_VERSION:-v0.2.29} && \\"
echo " GOOS=freebsd GOARCH=amd64 go build -trimpath -o bin/zot ./cmd/zot)"
echo " Or set FEATURE_ZOT=NO to skip zot staging."
echo " Or set COLIBRI_STAGE_AGENT=NO to skip agent staging."
exit 1
fi
}
@ -852,12 +852,16 @@ install_colibri_service() {
}
install_zot_agent() {
[ "${FEATURE_ZOT:-NO}" = "YES" ] || {
echo " zot agent staging disabled (FEATURE_ZOT=${FEATURE_ZOT:-NO})"
[ "${FEATURE_COLIBRI:-NO}" = "YES" ] || {
echo " Colibri agent staging disabled (FEATURE_COLIBRI=${FEATURE_COLIBRI:-NO})"
return 0
}
[ "${COLIBRI_STAGE_AGENT:-YES}" = "YES" ] || {
echo " Colibri agent staging disabled (COLIBRI_STAGE_AGENT=${COLIBRI_STAGE_AGENT:-YES})"
return 0
}
echo " Staging zot agent (${ZOT_VERSION:-})..."
echo " Staging Colibri agent (${ZOT_VERSION:-})..."
resolve_zot_paths
env \