Three new projects, all running one operator-driven agent over Claude Code Remote Control: - cc-ci-orchestrator-backup — self-contained standby for the cc-ci orchestrator on the claude backend + Fable (claude-fable-5); isolated from the live loops (own dir/state/prefix) and must not drive them without deliberate promotion. - emily-lichen — plans/builds a sandboxed opencode UI at emily.commoninternet.net for editing a lichen.page site with GLM 5.2. Planning only: the sandbox is not built and nothing serves that hostname yet. - gateway-coop — the tunnel gateway (upstream codeberg notplants/tunnel-gateway-server) that emily-lichen depends on. Pre-existing repo, not scaffolded by the PO, and its harness is deliberately NOT vendored: engine/, agents.toml, prompts/ and .ao-state/ are excluded via the project's .git/info/exclude so nothing about the harness reaches the public upstream. `ref` is therefore a plain-clone checkout, not a submodule pin. Registry validates at 8 projects, schema v1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016L6nYYwkCWnrEFKTnKAfet
130 lines
12 KiB
TOML
130 lines
12 KiB
TOML
# fleet.toml — the project-orchestrator's fleet registry.
|
|
#
|
|
# THE authoritative, PO-only record of every project the fleet manages. This is the ONLY place where
|
|
# project ↔ harness ↔ ref ↔ location lives. Projects themselves carry none of this (one-directional
|
|
# knowledge: PO → projects, never the reverse). Full schema + field reference: docs/fleet-registry.md
|
|
#
|
|
# Validate / inspect this file with: python3 scripts/fleet.py list (or `status`).
|
|
|
|
# ─────────────────────────── registry metadata (optional) ───────────────────────────
|
|
[fleet]
|
|
version = 1 # registry schema version (integer; bump on breaking changes)
|
|
|
|
# ─────────────────────────── one [[project]] block per project ───────────────────────────
|
|
# Required fields: name, location, harness, ref, enabled, secrets.
|
|
# See docs/fleet-registry.md for the meaning and allowed values of each.
|
|
|
|
# Sample entry (a representative project; not started by the PO unless an operator asks).
|
|
[[project]]
|
|
name = "example-recipe-ci" # unique fleet id (kebab-case)
|
|
location = "https://git.autonomic.zone/recipe-maintainers/example-recipe-ci.git" # git url or local path
|
|
harness = "agent-orchestrator" # which harness runs it
|
|
ref = "v0.1.0" # pinned harness ref (submodule pin)
|
|
enabled = true # is this project part of the active fleet?
|
|
secrets = ".env" # where the project's creds live (path/ref; never in git)
|
|
config = "agents.toml" # the project's harness config file (relative to the project root)
|
|
notes = "Sample fleet entry — replace with a real project, or remove."
|
|
|
|
# cc-ci modeled as a project (poe2e staging). enabled=false: the PO must NOT start it — the live
|
|
# cc-ci still runs under /srv/cc-ci/cc-ci-plan/agents.py in the cc-ci- tmux namespace. Taking it
|
|
# live on the new system is an operator-supervised cutover (see the project's docs/cutover-runbook.md).
|
|
[[project]]
|
|
name = "cc-ci"
|
|
location = "/home/loops/poe2e/cc-ci" # local staging repo (git, engine submodule pinned)
|
|
harness = "agent-orchestrator"
|
|
ref = "v0.1.0"
|
|
enabled = false # STAGING — never started by the PO (would collide with live)
|
|
secrets = "/srv/cc-ci/.testenv" # live cc-ci creds (Gitea bot, etc.); never in git
|
|
config = "agents.toml"
|
|
notes = "cc-ci as project #1 (staging). Migrated from live cc-ci-plan/agents.toml. Parity verified in poe2e. Cutover is operator-supervised."
|
|
|
|
# ARCHIVED (2026-08-01) — no longer active. This was the Phase-1 bootstrap SHELL; its repo was
|
|
# consolidated into the real lichen-orchestrator project in the 2026-07-10 cutover, and the leftover
|
|
# shell was moved to /srv/archive/p-lichen-orchestrator-shell (its agents.toml is now a symlink into
|
|
# the real project). The real project lives at /srv/lichen-orchestrator and runs live under the
|
|
# lichen-* tmux sessions — those are NOT this entry; the PO must not start this or touch those sessions.
|
|
[[project]]
|
|
name = "p-lichen-orchestrator"
|
|
location = "/srv/archive/p-lichen-orchestrator-shell" # archived shell (repo consolidated into /srv/lichen-orchestrator)
|
|
harness = "agent-orchestrator"
|
|
ref = "98d198baa9a89c8a5955b8af55c0a64fca9436e5" # engine pin at time of archival
|
|
enabled = false # ARCHIVED — not part of the active fleet; PO must never start it
|
|
secrets = ".env"
|
|
config = "agents.toml"
|
|
notes = "ARCHIVED 2026-08-01 — no longer active. Superseded by the real lichen-orchestrator project (/srv/lichen-orchestrator, live under the lichen-* tmux sessions). Was the Phase-1 bootstrap shell (Python reimpl of lichen.page); consolidated into the real project in the 2026-07-10 cutover, shell moved to /srv/archive/p-lichen-orchestrator-shell. Kept as a historical record."
|
|
|
|
# The real, active lichen-orchestrator project (supersedes the archived p-lichen-orchestrator above).
|
|
# Runs live under the lichen-* tmux sessions. Engine URL: Tangled (notplants-bot/agent-orchestrator).
|
|
[[project]]
|
|
name = "lichen-orchestrator"
|
|
location = "/srv/lichen-orchestrator"
|
|
harness = "agent-orchestrator"
|
|
ref = "26d93c1eda36dd68d1f59e5bec5e4cea9bc0d761" # running engine (v0.1.0-33-g26d93c1); NOTE: ahead of the superproject's committed submodule pin 5a993aa — bump the submodule commit to reconcile
|
|
enabled = true # RUNNING — live under the lichen-* tmux sessions
|
|
secrets = ".env"
|
|
config = "agents.toml"
|
|
notes = "Reimplement lichen.page in Python — the real project (succeeded the p-lichen-orchestrator bootstrap after the 2026-07-10 cutover). Live under lichen-* tmux sessions (lichen-orchestrator, lichen-watchdog, lichen-feature-completeness, lichen-cleanlogs, lichen-disk-reclaim). Engine submodule drift: working tree at 26d93c1, committed pin at 5a993aa."
|
|
|
|
# Operator's atproto workspace. One remote-control agent (`analyst`) the operator drives directly.
|
|
# ENGINE SOURCE (operator's choice, 2026-08-01): the bot's Tangled repo —
|
|
# git@tangled.org:notplants-bot.bsky.social/agent-orchestrator (did:plc:qfngkejlw4ghji2myc73hbdh)
|
|
# Pull engine updates for this project from there, NOT from git.autonomic.zone. Note there is a
|
|
# SECOND, STALE agent-orchestrator on Tangled under a different account (did:plc:3nogfd4smhmbrv4wo6kl7zg2,
|
|
# main at 98d198b) — not this one; always use the notplants-bot repo above.
|
|
[[project]]
|
|
name = "notplants-atproto"
|
|
location = "/srv/project-orchestrator/projects/notplants-atproto"
|
|
harness = "agent-orchestrator"
|
|
ref = "26d93c1eda36dd68d1f59e5bec5e4cea9bc0d761" # latest engine (v0.1.0-33-g26d93c1) from the bot's Tangled repo
|
|
enabled = true # RUNNING — operator-driven via Remote Control
|
|
secrets = ".env" # atproto creds; gitignored, not yet populated
|
|
config = "agents.toml"
|
|
notes = "Created 2026-08-01. Analysis of the operator's atproto data, and possibly custom feeds; the operator sets direction interactively. Single persistent agent 'analyst' (claude-opus-5, watch=heal, resume=true) exposed over Claude Code Remote Control as session notplants-atproto-analyst. Engine sourced from the bot's Tangled repo by operator choice (see comment above). Scope is deliberately open — the operator drives."
|
|
|
|
# Standby orchestrator for cc-ci, on the Claude Code backend + Fable model (claude-fable-5). The
|
|
# PRIMARY cc-ci orchestrator runs on opencode + glm-5.2 elsewhere; this is a SELF-CONTAINED standby
|
|
# (own dir/state/prefix cc-ci-backup-) that never touches the live cc-ci loops. Operator-driven via
|
|
# Remote Control. Engine from the bot's Tangled repo (same as the two projects above).
|
|
[[project]]
|
|
name = "cc-ci-orchestrator-backup"
|
|
location = "/srv/project-orchestrator/projects/cc-ci-orchestrator-backup"
|
|
harness = "agent-orchestrator"
|
|
ref = "26d93c1eda36dd68d1f59e5bec5e4cea9bc0d761" # latest engine (v0.1.0-33-g26d93c1) from the bot's Tangled repo
|
|
enabled = true # RUNNING — operator-driven via Remote Control
|
|
secrets = ".env" # none required — claude backend uses the loops user's Claude login; gitignored placeholder
|
|
config = "agents.toml"
|
|
notes = "Created 2026-08-03. Self-contained STANDBY for the cc-ci orchestrator (primary runs on opencode + glm-5.2). Single persistent agent 'orchestrator' on the claude backend with the Fable model (claude-fable-5), watch=heal, resume=true, exposed over Claude Code Remote Control as session cc-ci-backup-orchestrator. Isolated from the live cc-ci system: own dir, own session prefix cc-ci-backup-, own state — it must NOT drive the live loops unless the operator deliberately promotes it. Engine from the bot's Tangled repo."
|
|
|
|
# Design/build project for a sandboxed opencode interface at emily.commoninternet.net (the
|
|
# operator's mother edits her lichen.page site via GLM 5.2). Architecture is in the project's own
|
|
# PLAN.md. NOTE: this entry is the PLANNING project — the sandbox itself is NOT built yet, and
|
|
# nothing is serving emily.commoninternet.net.
|
|
[[project]]
|
|
name = "emily-lichen"
|
|
location = "/srv/project-orchestrator/projects/emily-lichen"
|
|
harness = "agent-orchestrator"
|
|
ref = "26d93c1eda36dd68d1f59e5bec5e4cea9bc0d761" # latest engine (v0.1.0-33-g26d93c1) from the bot's Tangled repo
|
|
enabled = true # RUNNING — operator-driven via Remote Control
|
|
secrets = ".env" # none yet; the sandbox's 3 creds are operator-supplied (see PLAN.md §2)
|
|
config = "agents.toml"
|
|
notes = "Created 2026-08-13. Plans + builds a sandboxed opencode web UI at emily.commoninternet.net for editing a lichen.page site with GLM 5.2. Design: a Docker container that joins the tailnet as its OWN node (tag:emily-sandbox), reached via the operator's gateway — the app host exposes nothing new publicly; the container is the security boundary and holds only 3 scoped creds. Single persistent agent 'implementer' (claude-opus-5, watch=heal, resume=true) over Remote Control as session emily-lichen-implementer. STATUS: planning — sandbox not built; blocked on operator input (dedicated opencode-go key, Emily's lichen token, tailscale tagged auth key + ACL, gateway forwarding, whether her site exists). Engine from the bot's Tangled repo."
|
|
|
|
# The tunnel gateway (upstream: codeberg.org/notplants/tunnel-gateway-server) — nginx SNI/stream
|
|
# routing + a Flask admin app, forwarding public domains to tailnet backends. This is the gateway
|
|
# the emily-lichen design depends on.
|
|
#
|
|
# HARNESS IS NOT VENDORED IN THE PROJECT REPO (operator's choice, 2026-08-20): engine/, agents.toml,
|
|
# prompts/ and .ao-state/ are excluded via the project's .git/info/exclude (per-clone, never
|
|
# committed) rather than a submodule + .gitignore, so nothing about the harness reaches the public
|
|
# upstream repo or its pull requests. `ref` below is therefore the pinned commit of a PLAIN CLONE at
|
|
# <location>/engine, not a submodule pin — re-pin by checking that clone out at a new ref.
|
|
[[project]]
|
|
name = "gateway-coop"
|
|
location = "/srv/gateway-coop"
|
|
harness = "agent-orchestrator"
|
|
ref = "26d93c1eda36dd68d1f59e5bec5e4cea9bc0d761" # plain clone at engine/ (NOT a submodule); v0.1.0-33-g26d93c1
|
|
enabled = true # RUNNING — operator-driven via Remote Control
|
|
secrets = ".secrets/" # Hetzner API token + Tailscale auth keys; gitignored upstream, never in git
|
|
config = "agents.toml"
|
|
notes = "Registered 2026-08-20 (pre-existing repo, not scaffolded by the PO). Tunnel gateway: nginx SNI/stream routing driven by tunnel_map.conf + Flask admin (app.py, ports.py) mapping domain -> tailnet backend, with regex/wildcard entries and ip:port backends for remapping 443. Two deploy paths: imperative Debian (setup.sh) and declarative NixOS (nix/, flake.nix), with e2e/ tests. Single persistent agent 'orchestrator' (claude-opus-5, watch=heal, resume=true) over Remote Control as session gateway-coop-orchestrator. CAUTION: live infrastructure other projects depend on (it forwards emily.commoninternet.net per the emily-lichen plan), and the working tree carries substantial in-flight STAGED work (NixOS deploy: nix/, flake.nix, e2e/, terraform) that is not the PO's and must not be committed."
|