antcolony
All repositories: gitoria
5.1 KB
# antcolony-scheduler — permanent `./colony run --live` on Loreana (mission 028, ticket antcolony#1).# README "Operations" says how to start / stop / read logs / change settings.## How: a tiny busybox container that bind-mounts the HOST's / and pivot_roots into it (docker/pivot.sh), then drops to# uid 1000 (mre) and runs docker/entrypoint.sh → ./colony run. The scheduler and its workers therefore see exactly the# host's toolchain (claude + ~/.claude login, node, google-chrome-stable, rsync, ssh, /media/STORAGE/projects, the token)# — nothing is installed in an image. Root only exists for the three mount calls in pivot.sh.# Settings: environment below, overridden by a `.env` beside this file (see .env.example — never commit a .env).services:scheduler:image: busybox:1.37-musl@sha256:5cec3fc171c87218698e85a52af7087de727372aae264a787b8112901a5b0092container_name: antcolony-schedulerrestart: unless-stopped # starts with the docker daemon (enabled at boot); `docker stop` keeps it stoppednetwork_mode: host # same network as the host (workers' dev servers, tickets, Claude API)pid: host # same /proc as the host fs: lib/cleanup.sh reads /proc + ss, PIDs must matchcap_add: [SYS_ADMIN] # pivot.sh: mount --make-rprivate + pivot_root (dropped with the switch to uid 1000)security_opt:- seccomp=unconfined # pivot_root, and Chrome's sandbox (user namespaces) like on the hoststop_grace_period: 75s # docker stop: finish window (COLONY_STOP_FINISH_SECONDS, 20) + park, < systemd's 90 s at shutdownvolumes:- /:/host # recursive bind; propagation rprivate (docker default)entrypoint: ["sh", "/host/media/STORAGE/projects/antcolony-scheduler/docker/pivot.sh"]logging:driver: json-fileoptions: { max-size: "10m", max-file: "3" }environment:COLONY_LIVE: ${COLONY_LIVE:-1} # 1 → `run --live` (the live tickets server)COLONY_TICKETS_URL: ${COLONY_TICKETS_URL:-https://tickets.worldapi.org}COLONY_TOKEN_FILE: ${COLONY_TOKEN_FILE:-/home/mre/.config/antcolony/tickets-token}CLAUDE_CONFIG_DIR: ${CLAUDE_CONFIG_DIR:-} # empty = the host's ~/.claude (mre's own subscription); e.g. /home/mre/.claude-colony = a separate login for the workersCOLONY_QUOTA_RESERVE: ${COLONY_RESERVE:-70} # no start at/above this % of the 5 h window; 100 = offCOLONY_WEEK_LIMIT: ${COLONY_WEEK_LIMIT:-84} # no start while the weekly usage is above; 100 = offCOLONY_RUN_INTERVAL: ${COLONY_RUN_INTERVAL:-60} # seconds between iterationsCOLONY_PARALLEL: ${COLONY_PARALLEL:-1} # sessions at onceCOLONY_MODEL: ${COLONY_MODEL:-sonnet}COLONY_SANDBOX: ${COLONY_SANDBOX:-} # antcolony#18: on (default) | off — every Claude session in a bubblewrap box (README "Sandbox")COLONY_SANDBOX_RO: ${COLONY_SANDBOX_RO:-} # extra read-only paths, ':'-separated (default /media/STORAGE/projects/antcolony-docs)COLONY_MAX_TURNS: ${COLONY_MAX_TURNS:-40}COLONY_WORK_TIMEOUT: ${COLONY_WORK_TIMEOUT:-3600}COLONY_CONTROLLER_MODEL: ${COLONY_CONTROLLER_MODEL:-sonnet}COLONY_CONTROLLER_MAX_TURNS: ${COLONY_CONTROLLER_MAX_TURNS:-20}COLONY_CONTROLLER_TIMEOUT: ${COLONY_CONTROLLER_TIMEOUT:-900}COLONY_MAX_BUDGET_USD: ${COLONY_MAX_BUDGET_USD:-} # empty = no --max-budget-usdCOLONY_PORT_POOL: ${COLONY_PORT_POOL:-8700-8799}COLONY_PORTS_PER_SESSION: ${COLONY_PORTS_PER_SESSION:-10}COLONY_RUN_ARGS: ${COLONY_RUN_ARGS:-} # extra `run` options, e.g. "--lease-ttl 7200"COLONY_STOP_FINISH_SECONDS: ${COLONY_STOP_FINISH_SECONDS:-20} # docker stop: let sessions finish this long, then parkCOLONY_LOG_MAX_BYTES: ${COLONY_LOG_MAX_BYTES:-10485760} # logs/colony.log rotates at this sizeCOLONY_LOG_KEEP: ${COLONY_LOG_KEEP:-5} # rotated files kept (colony.log.1 … .5)COLONY_LIBRARIAN: ${COLONY_LIBRARIAN:-} # mission 029: on (default) | off — the librarian FIRST in every iterationCOLONY_LIBRARIAN_MODEL: ${COLONY_LIBRARIAN_MODEL:-} # its model (default sonnet)COLONY_LIBRARIAN_FALLBACK: ${COLONY_LIBRARIAN_FALLBACK:-} # antcolony#20: where a text goes when the local model cannot answer (default sonnet)COLONY_LOCAL_URL: ${COLONY_LOCAL_URL:-} # antcolony#20: OpenAI-compatible endpoint of the local model (default http://127.0.0.1:8080/v1)COLONY_LOCAL_TIMEOUT: ${COLONY_LOCAL_TIMEOUT:-} # seconds per local call (default 120)COLONY_LIBRARIAN_MAX: ${COLONY_LIBRARIAN_MAX:-} # creator texts classified per iteration (default 0 = all; a text left over → no start that iteration)COLONY_CREATOR_NAMES: ${COLONY_CREATOR_NAMES:-} # the creator's display names in tickets (default Caramboleyo,creator)COLONY_CREATOR_TOKEN_FILE: ${COLONY_CREATOR_TOKEN_FILE:-} # optional: the creator's tickets token, lets /confirm and /reject in comments work
Branches
- mainmain branch