Repository navigation
Colonizer v0.2.12
Immutable
release. Only release title and notes can be modified.
Colonizer v0.2.12
What's new
- Exec policy:
tarandrsync--excludepatterns no longer count as touching a secret path, so copying a repository while excluding the placeholder dotfiles is no longer refused or flagged as a control bypass.--exclude-fromand every other word still count. - The mothership can merge its own colonies' pull requests (merge steward). An org can set
auto_mergetogreenorgreen+rebasein Settings → Workspaces, with a merge method (squash by default) and delete-branch. Every few minutes, one GraphQL read per org decides each colony pull request: a green, clean one is merged (GitHub's branch protection is never overridden); a behind or conflicting one gets GitHub's update-branch, then its colony is resumed to rebase; a real failing check resumes the colony with the job's log tail, twice at most; and a pull request whose jobs all failed in seconds with no steps, or that GitHub flagged for billing or a spending limit, is markedci_blockedwith one banner per org instead of burning colonies. The workspace page lists each pull request's state with a Merge now button. Off by default. (#1172) - A contradicted verification now sends the failure back to the agent instead of holding the colony: the failing check and command, the failing test names, the last 60 lines of the log (redacted), and the instruction to fix it, re-run the check and update pr.md. At most 2 automatic rounds per colony, then it holds with
attention: verify_failed_repeatedly; when another check also fails on the base commit it holds at once withpreexisting_failureand sends nothing. (#1186) - A question that closes without an answer is closed everywhere. A question whose tool call got its result without an answer (an exec-policy ask that timed out or was refused) no longer stays "open" for autopilot while the Nest shows nothing. It closes with a
question_closedevent (reason:tool_resolved,timeoutorturn_end), a restart or resume repairs such ghosts from the event log, and autopilot only waits on a question the colony's record shows aswaiting_for_answer, so a finished colony verifies and publishes instead of sitting until it is parked. (#1189) - The watchdog now fixes known stalls itself, and releases can install themselves. A remediation playbook (signature, action, bounded tries; defaults compiled in,
playbook.tomlin the config directory to add or replace rows) answers a placeholder-dotfile denial, apr.mdwrite refused outside the repo and a toolchain-installer denial with the exact fix message, switches a colony held onunrecognized_modelor provider quota to a healthy fallback and resumes it, and publishes an idle colony whose verification is confirmed. The same denial after its tries stops the colony with attentionlooping. Each fix is logged asauto-fixed: <signature>, listed on the session asauto_fixesand shown in the colony header; security holds are never released. A newupdates.auto_applysetting (off,when_idle,always) installs a newer release on the update-check cadence, withwhen_idlewaiting until the spare app slot is free. (#1191) - Releases can be cut by a release train instead of by hand.
scripts/release-prep.mjsdoes what the release pull requests did: it folds thechangelog.d/fragments intoCHANGELOG.md, bumps the release crates to the next patch (a crate such ascolonizer-redactthat is already ahead is left alone), refreshesCargo.lockand writes a release-notes stub, and does nothing when no fragment is pending. The newRelease trainworkflow runs daily and by hand: whilemainhas pending fragments and its latest CI runs are green it opensrelease: vX.Y.Zwith auto-merge on, and after the merge it checks the tag gate, pushes the lightweight tag on the merge commit and dispatchesReleaseon it (a tag pushed withGITHUB_TOKENwould not start it).release-train: skipin the head commit ofmainpostpones a run, and only patch bumps are ever made. While a release pull request is open, the merge steward holds colony pull requests that add a fragment. Seedocs/release.md. (#1193) - The Loops page is one page, with one card for every loop. Built-in loops (Merge train, Dependencies & supply chain, TypeScript: remove any, Docs & README, Disk cleanup) and your own sit in two sections and wear the same card: name, switch, what it does, when it runs, what it covers, how the last run went, and a 7-day strip of runs coloured by outcome with a hairline for each day's spend. Details open in a drawer with 7, 30 and 90-day charts of runs and spend, the last run grouped by outcome (eleven pull requests blocked by the same billing error are one line with a link to fix it), the settings and every run. The mothership now keeps each loop's runs for 90 days — outcome, counts, dispatched colonies and what those colonies cost — and serves them at
GET /api/loops/{id}/history?days=. (#1199) - Setup no longer asks for the Stack again after every restart. The image-pull status is held in memory, so it read
idleafter each restart and Setup showed "image is not cached" even with the image on disk. The mothership now checks the image cache at startup and before answeringGET /api/sandbox/pull, reportingcachedfor an image that is already there. Setup shows "Checking the image…" while that state is unknown instead of asking, and the advisory rows (Stack, first launch, live map) no longer turn the Settings dot amber once the machine, GitHub and Claude rows are done. The Stack and live-map rows have a "Don't ask again", kept on the mothership insetup.json(GET/PUT /api/setup). (#1200) - The navbar model dropdown now sets the judge model too. A Judge row sits below the colony models, labelled "Answers colonies' questions for you", with a health dot (green answering, amber degraded, red failing). Picking a model saves only
autonomy.settings.model, merged into the saved settings. The list is everyprovider/modelfrom Model providers, plusfableandopusonly when anapi.anthropic.comprovider with a key exists. While the judge is failing the pill shows a small warning and the dropdown suggests a healthy model. (#1201) - Add a provider starts from logo tiles. Anthropic API, OpenRouter, DeepSeek, MiniMax, Z.AI, Alibaba, OpenAI, Local and Custom are one tap away and open a short form (the key, with the models prefilled from the catalogue); "Search 83 more…" opens the rest of the catalogue, and the disclaimers are one muted line with a "Why?" for the full text. (#1204)
- The Model providers page is a quiet list, with credits left and when they reset. Each provider is one row (logo, name, status dot, a gauge of the plan left, "resets in 3 h 12 min") that opens to a credits chart over the last 7 days with reset markers and a projected run-out, requests, failures and time per day as sparklines, the models ("3 enabled · +5 available"), which model settings use it and the connection details. The Mothership now keeps 30 days of per-day usage, plan-balance readings (read on Check and every half hour) and plan events, served by
GET /api/providers/{id}/usage?days=; a plan balance reader can name a reset time with a new reset pointer. A provider with no balance reader says "balance unknown". (#1204) - A moved branch, a failed parent and a fixture key no longer fail a colony. A push rejected as non-fast-forward (something else, such as a merge of main or update-branch, moved the colony's branch on GitHub) now fetches the branch, rebases the colony's new commits onto it (a merge when the rebase cannot), and pushes again, twice at most; a conflict resumes the colony with a rebase note instead of failing it. A colony stacked on a parent is never failed when its boot finds the parent unable to lend a branch: it goes back to the queue (which walks it up the stack or re-bases it on the default branch), waits as
blockedwhile the parent is paused, or re-bases on the default branch when the parent is gone for good. Before pushing, the colony's added lines are scanned with the log redactor, and a secret-shaped literal (a realistic test key) resumes the colony once with thepath:lineand kind, and never the value, asking it to build the fake key at runtime; aGH013push-protection rejection is parsed for the same paths and handled the same way. (#1206) - A long colony opens on its latest messages and loads the older ones as you scroll up. The colony chat used to fetch and render a colony's whole history before anything showed, which was slow for colonies with thousands of events, on a phone or over remote access. Now the events socket takes
limitand sends only the newest page of the current run (about 200 events, extended back to the start of the turn it would cut) with ahistoryframe saying whether more is behind it, andGET /api/sessions/{id}/events?before=<seq>&limit=returns the page before, read from the end ofevents.jsonland then the rotatedevents-N.jsonlso the cost does not grow with the history. Scrolling near the top loads the previous page and keeps your place, with a "Loading earlier…" row and a "Jump to start" for very long chats; live events stream at the bottom as before. The settler cards, their numbering, the cost and the brief come from a summary the mothership keeps instead of a replay of every event, and a socket withoutlimitreplays the whole run as before. For 5,000 events the first paint carries 75 KB instead of 1.85 MB. (#1210) - One repository multi-select everywhere a setting takes repositories. The Docs & README, merge train, dependencies and TypeScript loops, the org settings (close superseded PRs, colony merge requests) and a phone's repository filter now share a searchable dropdown: "All repositories", "All in " and each repository as a checkbox, shown as removable chips, with "Add owner/name…" for repositories not known yet. The server accepts
ownerand*in every one of those lists (nevertakes no wildcard), documented in the Mothership API. (#1212) - Hide a GitHub org from Colonizer. Settings → Workspaces → "Show or hide orgs" has a "Show in Colonizer" toggle per org, search, a "Hidden (n)" section and "Hide all without colonies"; the workspace switcher has "Manage orgs…". A hidden org leaves the switcher, the repository pickers, the backlog counts and the merge steward, and the
*("all repositories") choice of every loop and setting skips it, resolved when it is used. Nothing is deleted and running colonies keep running. (#1213) - The cockpit chat can now act, and every change waits for your approval. On Anthropic-wire models the chat is connected to the Colonizer tools: reads (colonies, questions, issues, loops, providers, model assignments, orgs, the activity log) run at once, and every write (stop, resume, publish, answer, launch, queue order, switch models, run a loop, apply an update) becomes an approval card showing the exact action in plain words, the dry-run diff where the API has one, and how many colonies, orgs and repos it reaches, with Approve, Edit and Reject.
POST /api/chat/approvals/{id}settles each call exactly once and writeschat.approveorchat.rejectto the activity log. Secret values, security-hold release and switched-off orgs are refused, and writes are rate-limited. (#1217) - Spotlight: one bar to ask, search and act from anywhere. ⌘K or
/, the "Ask or search…" pill in the top bar, and the phone's floating button (or a pull down) open one frosted panel over the current page. One ranked list blends Go to (colonies, repositories, workspaces, Settings pages and fields, loops, chats), Do ("colonize #212", stop, resume, move to front, switch model, apply the update) and open Issues, ranked by what you seem to mean; an "Ask Colonizer" row is always last and streams its answer inline, then Expands into a full thread on the Chat page. Recents show when the box is empty and Up recalls the last question. The Colonize pane is now reached from Do (or its button). The Colonize issue list is friendlier: grouped by repository, a plain one-line summary and a state pill with a live dot per row, status, label and priority filters, Colonize, Move to front, Skip and GitHub on each row, and bulk actions. (#1218) - Trusted auto-colonize: new issues from people the org trusts start by themselves. Set
auto_colonizetotrustedper org (Settings → Workspaces → Colonies → Auto-colonize) or per repository (PUT /api/repos/{owner}/{name}/auto-colonize); it is off by default and only issues filed after you turn it on are taken. An author is trusted when GitHub says they are an org member or owner, a collaborator with write access, an allowlisted login (auto_colonize_allow) or the signed-in account itself, looked up through the API and cached for five minutes, never read fromauthor_association. A stranger's issue, an issue a stranger edited, one labelledno-colonizeorneeds-human, and anything in a hidden org never starts by itself; the issues list (GET /api/repos/{owner}/{name}/issues) carriesintake: {mode: auto|review, reason, label, author, trusted, …}on each issue, andPOST …/issues/{number}/intakedismisses or restores one. A repository starts at most 5 auto colonies an hour (auto_colonize_rate), a colony that started this way is checked again at boot, and comments from outside the org are left out of its brief. Every trust decision is a line in the activity log. (#1219) - Overview and workspace dashboards: more room between the Colonize button and the range and Compare controls below it, so they no longer touch.
- Release train:
release-prep.mjsfalls back to a networkedcargo update -wwhen the offline one fails, so it works on a fresh CI runner with no registry cache.
Prebuilt Colonizer for Linux x86_64 (with KVM) and Apple Silicon Macs, built from e67e4d7.
curl -fsSL https://colonizer.dev/install.sh | shThe installer checks the archive against SHA256SUMS. It fetches the Claude Agent SDK from the npm registry, and on a Mac the Linux build of Claude Code, from Anthropic's own channels: neither is in the release. Guide: https://colonizer.dev/docs/install
Each artifact, SHA256SUMS included, also carries a build-provenance attestation recording the commit that built it. Verify one with:
gh attestation verify colonizer-<platform>.tar.gz --repo Colonizer-dev/harnessHere is linux-x86_64 or darwin-arm64.
Apple Silicon Macs can also use Colonizer-arm64.dmg: an unsigned app, so macOS asks you to approve it once (System Settings > Privacy & Security > Open Anyway). The curl installer above is the recommended path.
84f9a7a62ac65fcfac98d28dacab71b65f7886bb2e4c0e322d9db4e3148ca6f8 colonizer-darwin-arm64.tar.gz
adbbce56b8a1a1e0299302215fa9d88848e00a6fc0d124d89de7c3ffd1050dab colonizer-linux-x86_64.tar.gz
e791f03a233caaec1639411fcf0405f1ef0dc63e6eb99368f76270be4fc4e00f Colonizer-arm64.dmg
4293bed20d991fb79164e457163a058fb362f10e480c0588e0edac4d3ffd7b4b install.sh