One Island
Project One Island, environment development only. One Island Bot drives the project’s devbox and does rewrite work on oneisland-org/oneisland (trunk dev). Server Bot owns the shared dbb-devbox image, the Coolify service, egress, and upgrades.
The shared image, <project>-devbox naming, security limits, upgrade path, and usage logger are in platform/devbox/README.md. This page holds the One Island instance.
oneisland-devbox
Section titled “oneisland-devbox”Coolify project One Island (2dr4aio45ysuzbvhzbgqs4ic), environment development (iozlpliqabgmm4uzqu5grssr), service oneisland-devbox (ef2tvvwfdhyagkwivm1geryn). Compose platform/compose/oneisland-devbox.yml. Create or update it, then start it, with platform/deploy-devbox.sh --start.
- Process uid 1000
daz. Home is the named volumeef2tvvwfdhyagkwivm1geryn_homeat/home/daz. It survives a restart or a new image tag. /home/daz/Code/oneislandis bind-mounted at the same path. Repos fromoneisland-orgare cloned as~/Code/oneisland/<repo>. There is nooneisland-paymentsoroneisland-infrafolder under~/Code; those repos are owner-only.- Compose sets
hostname: oneisland-devbox, so the prompt isdaz@oneisland-devbox. - No domain, no published port, no Docker socket, no Coolify token, no
~/_secrets. - Entry is only
ssh dbb-serverthen~/.local/bin/oneisland-devbox.oneisland-devboxopens a login zsh asdazin~/Code/oneisland.oneisland-devbox <cmd>runs a command there instead.oneisland-devbox herdrstarts herdr straight away. No One Island work is done on the host, and the bind-mounted repos are not edited from the host.
The live image tag is dbb-devbox:2026.11.4. The compose default is ${DEVBOX_IMAGE_TAG:-2026.11.4}. 2026.11.3 and 2026.11.2 are kept on the host for rollback. To roll back the box, set DEVBOX_IMAGE_TAG to the previous tag and restart; the database sidecar does not depend on the devbox image.
Resource caps
Section titled “Resource caps”The devbox is capped at mem_limit: 64g, memswap_limit: 64g (no extra swap), and cpus: 12: half of dbb-server, leaving headroom for Coolify, client apps, LiteLLM, project-gostraight-dev, and a later second devbox. The database sidecar is 1g / 1 CPU. The egress Squid sidecar is 256m / 0.5 CPU. Changing these limits restarts the service and ends herdr sessions in the box.
The box is included in the host usage log. The timer dbb-devbox-stats.timer writes every project devbox to /var/log/dbb/devbox-stats.jsonl. That logger is a host-level concern, documented with the shared image.
GitHub
Section titled “GitHub”GitHub access is a fine-grained personal access token for the oneisland-org owner, with Contents and pull-request read/write on all repos in that org. It is stored only as the Coolify runtime env GH_TOKEN on the service. The compose file passes GH_TOKEN: ${GH_TOKEN} into the devbox. The value is never in the repo. Recreate the container after adding or rotating the env so the process sees it.
The image entrypoint seeds a credential helper so HTTPS git to github.com uses x-access-token and $GH_TOKEN, and sets user.name / user.email to Darren Barklie / darrenbarklie@gmail.com. Clone over HTTPS through the egress proxy (https://github.com/oneisland-org/<repo>.git). The helper itself is documented with the shared image.
Egress
Section titled “Egress”The devbox’s only network is oneisland-devbox-internal, a Docker --internal network with no route out. The compose file joins it with network_mode, because Coolify adds its own routed network to every service that does not set network_mode. The sidecar egress (Squid) is on that network and on Coolify’s network for the service. The devbox’s HTTPS_PROXY and HTTP_PROXY point at http://egress:3128. NODE_USE_ENV_PROXY=1 is set so Node 24 and later fetch honours the proxy.
Egress is open by default for public HTTP and HTTPS. Squid’s deny-list (in the compose file) blocks RFC1918, Tailscale CGNAT, loopback, link-local (including cloud metadata), unique-local IPv6, dbb-server’s public addresses, craftapplied-server’s public IPv4 (168.119.162.21), *.daz.dev including Coolify, and *.craftapplied.dev. llm.server.daz.dev is allowed by name first, because it resolves to dbb-server’s Tailscale address. A connection that ignores the proxy has no route.
To block another destination, add it to the deny-list in the compose file. Prefer updating Coolify’s compose and recreating only the egress container, so a live devbox session can stay up. platform/deploy-devbox.sh --start restarts the whole service, including the devbox.
oneisland-db-dev
Section titled “oneisland-db-dev”oneisland-db-dev is a compose sidecar on the official postgis/postgis:18-3.7 image (Postgres 18, PostGIS 3.7). The hostname follows <project>-db-<env>. It was renamed from oneisland-devbox-db; the compose volume key oneisland-devbox-db-data was kept, because Coolify names the volume {service-uuid}_{volume-key} (ef2tvvwfdhyagkwivm1geryn_oneisland-devbox-db-data) and a new key would start an empty volume and lose oneisland_db_dev.
The sidecar joins only oneisland-devbox-internal via network_mode. No host port, no Traefik labels, no egress network. The named volume is mounted at /var/lib/postgresql. The database is disposable and is not backed up.
A first-boot init script (platform/compose/oneisland-devbox-db-init.sh) creates role oneisland with LOGIN CREATEDB NOSUPERUSER and runs CREATE EXTENSION postgis in template1, so new databases inherit PostGIS. Postgres 18 has native uuidv7(); no uuid extension is installed. Coolify generates SERVICE_PASSWORD_POSTGRES (superuser, used only by the database container) and SERVICE_PASSWORD_ONEISLAND (the oneisland role). Those values are never in the repo. The devbox receives them as runtime env only: PGHOST=oneisland-db-dev, PGPORT=5432, PGUSER=oneisland, PGPASSWORD, and DATABASE_URL_BASE (postgresql://oneisland:…@oneisland-db-dev:5432, no database name; append /<dbname>). oneisland-db-dev is on NO_PROXY so connections do not go through Squid. Coolify generates both passwords as 32 alphanumeric characters, so DATABASE_URL_BASE needs no URL-encoding. The official postgis/postgis entrypoint also creates a template_postgis database and enables PostGIS in the default postgres database; that image default is left alone.
omp reads LITELLM_BASE_URL (https://llm.server.daz.dev/v1) and LITELLM_API_KEY. The key is the LiteLLM virtual key oneisland-devbox-omp, limited to morph-kimik31, morph-kimik3, morph-dsv41flash and morph-dsv41flash-1017. The deploy script generates it and stores it in the locked Coolify env. It is never printed or written to disk.
~/.omp/agent/config.yml in the home volume sets the model roles: default is litellm/morph-kimik31, smol is litellm/morph-dsv41flash. Gateway overrides for Morph tool calling and thinking levels ship in the shared image (platform/devbox/omp/models.yml) and are documented there.
One Island Bot installed pstack and cursor-team-kit skills by hand into ~/.omp/agent/skills on 12 Nov 2026, later aligned to pstack 0.15.30 from cursor/plugins (path pstack, commit 076f4b2f57844ff9eb4ada914d4763884d40146e, matching the pin in One Island’s AGENTS.md). Version-check markers were also placed at ~/.cursor/plugins/cache/cursor-public/pstack/<commit>/, ~/.omp/agent/skills/PSTACK_VERSION, and ~/.omp/agent/pstack/plugin.json. Those skills and markers ship in dbb-devbox:2026.11.5 (see platform/devbox/README.md). The image is prepared and not yet deployed. After Darren gives a go and the box is recreated on 2026.11.5, remove the hand-installed skill directories that the image now provides, plus ~/.omp/agent/pstack-LICENSE, ~/.omp/agent/cursor-team-kit-LICENSE, and ~/.omp/agent/pstack-skills-source.txt. Leave any skill directories that were added later and are not in the image. Leave the three version-check markers if they already match 0.15.30; the entrypoint will adopt identical files as managed symlinks on a later start, and will not clobber a hand-installed plugin tree directory at the cache path. Do not remove the hand-installed skill directories before that rollout. The image and the rollout do not delete them. Until those skill directories are removed, identical copies collapse in omp; a differing home-volume copy would appear under a namespace, and a leftover skill such as ketchup-video that exists only in the home volume would still be listed.
Working in oneisland-devbox
Section titled “Working in oneisland-devbox”A devbox restart stops the herdr server. Restart it inside the box with:
setsid nohup herdr server > ~/_logs/herdr-server.log 2>&1 < /dev/null &It restores workspaces, layout, and omp sessions. omp resumes by session file; a session whose file is missing drops to a shell prompt.
There is one workspace, oneisland-workspace. Panes run top to bottom:
lead: omp,morph-kimik31. The smart, slower planner and implementer.worker: omp,morph-dsv41flash. The fast mechanical worker.builder: Darren’s own omp. Bots never touch it.
At most two bot agents run at once.
herdr agent wait and herdr agent read --timeout take milliseconds.
omp writes relative to its pane cwd. Each agent pane starts with cwd in the task’s worktree, not the main checkout, and moves back to the main checkout after the worktree is removed. A lesson from oneisland PR #31: lead first wrote into the main checkout, then corrected itself.
Git flow
Section titled “Git flow”dev is trunk. Each task gets a branch plus a worktree at ~/Code/oneisland/.worktrees/oneisland-<branch-slug>. Commits are authored as Darren Barklie, never with --no-verify. Agents push and open pull requests into dev. Merges wait for Darren’s explicit yes. After merge: pull dev, git worktree remove, delete the local branch, and move agent panes back to the main checkout. GitHub deletes the remote branch automatically.
Gates before a pull request: pnpm install, then lint, typecheck, tests (scripts/devbox-db.sh test <branch-slug> in the box), and a real proof run where it matters. The repo pins Node 24 and Corepack pnpm 10.15.1. In the box those come from fnm use and Corepack, as a per-user install in the home volume, not from the shared image. The image ships its own fnm and the current Node LTS under /usr/local/fnm, unpinned; a repo checkout selects 24 through the version files and the home-volume install.
Databases
Section titled “Databases”The API takes optional ONEISLAND_DB_HOST (default 127.0.0.1, so local and production are unchanged). That landing is in oneisland PR #31.
scripts/devbox-db.sh name|create|migrate|drop|test <branch-slug> maps the box’s PG* env onto ONEISLAND_DB_* inline, never prints secrets, validates names, and refuses to drop the trunk database oneisland_db_dev. Each worktree gets oneisland_db_dev_<slug>: create and migrate when the worktree opens, drop before git worktree remove. - in the slug is turned into _. The test subcommand runs the full oneisland-api suite against that branch’s database.
Known gaps
Section titled “Known gaps”Seven oneisland-api integration suites need a local oneisland-db/.env and fail at collect in the devbox. The fix is pending in oneisland PR #32 (open, awaiting Darren). That change makes API integration tests use ONEISLAND_DB_* from the environment when all five are set, and otherwise fall back to the sibling oneisland-db repo’s .env (Darren’s local Docker PostGIS on 127.0.0.1:5433). The intended devbox test step is scripts/devbox-db.sh test <branch-slug>; on that PR’s branch the full API suite passed against the branch database, 48 files and 323 tests.