v0.2.0-alpha.6
Pre-releaseBuildMax is an out-of-the-box, privately deployable Agent platform: a CLI/TUI,
a desktop app, and a team Portal on one shared Go Agent Runtime.
0.2.0-alpha.5 carries the same changes but published nothing: it was tagged,
and its release build then failed before uploading any archive or image. Only
its Portal image exists. This version replaces it.
Highlights
- The agent now remembers a local project between sessions. Each project keeps
small Markdown memories under a generated index; only the index is carried
into a turn, and the agent opens a memory when the line suggests it is worth
reading. Every surface can see what a project remembers:buildmax info, the
TUI/infopanel, and a read-only Memory view in Desktop. - Team issues reach the terminal.
buildmax issue list,issue show, and
issue statuswork the issues a team assigned you, andbuildmax --issue <id>scopes a local session to one: the agent reads the issue and reports
back, while status, assignee, and sub-issues stay a person's decision. - Desktop and the CLI share one local project catalog, so both list the same
sessions for the same repository, worktrees included. /compactcompacts a TUI session on demand instead of waiting for the
context window to fill.- Alpha releases prepare themselves: a daily check opens a reviewable pull
request, and merging it is what creates the tag.
Upgrade notes
- A deployment running workers as Kubernetes Jobs must set all four
worker.k8s.resourcesbounds. The server now refuses to start when one is
missing or invalid, naming the key to edit, instead of logging the problem
and running worker pods unbounded. buildmax statsis nowbuildmax info, and the TUI/statspanel is
/info. Scripts reading--jsonget the statistics understatsand the
new memory listing underproject_memory.- A run trace's
prompt_layersrecord is nowcontext_sources. Anything
reading traces has to follow the rename; the record now names every source a
run started with, not only the system-prompt layers. --continueis now scoped to the directory you are in, not the newest
session anywhere on the machine.--continue --projectwidens it to every
directory of the project and prints where it will run.
Install
Download the archive for your platform below. Each one contains all three
binaries — buildmax, buildmax-server, buildmax-worker — plus
config-examples/, LICENSE, and NOTICE-THIRD-PARTY. Verify it against
checksums.txt first.
With a Go toolchain, for the CLI alone:
go install github.com/gougoujiang/buildmax/cmd/buildmax@v0.2.0-alpha.6
As a container, for linux/amd64 and linux/arm64:
docker pull ghcr.io/gougoujiang/buildmax:0.2.0-alpha.6
Copy config-examples/settings.example.yaml to ~/.buildmax/settings.yaml,
configure at least one model, then run buildmax for the TUI or
buildmax -p "your prompt" for a single non-interactive turn. Running the
server and Portal additionally needs MySQL and object storage; see the README.
The desktop app is not published here. It needs code signing and notarization
to launch on macOS, so build it locally with ./make build.
Before you deploy this
This is an alpha, and two defaults deserve to be read as warnings rather than
footnotes:
- Server authentication is bootstrap-level. There is no mail channel, so an
operator creates accounts and issues single-use login codes with
buildmax-server user createanduser login-code. Self-registration is
closed by default. There is no password, second factor, SSO, or recovery
flow; putting the Portal on a network you do not control requires wiring a
real identity provider first. - The bash sandbox is off by default, and worker hardening is incomplete.
SECURITY.md lists both, along with how to report a vulnerability privately.
Interfaces and deployment guidance may change before a stable release.
Added
-
The agent can now remember things about a local project between sessions. A
project keeps one bounded memory store at
<BUILDMAX_HOME>/projects/<project_id>/memory/: small Markdown files, one
per memory, under a generatedMEMORY.mdindex. Only the index is shown to
the model on every turn, as fallible recall rather than as instruction --
AGENTS.mdstays the place for rules -- and the agent opens a memory's body
withMemoryReadwhen the line suggests it is worth reading.MemoryWrite
creates, replaces, or deletes one memory at a time, and changing a memory
requires having read it, so two sessions recording different facts never
collide and a stale write risks one memory instead of the store. Subagents
receive neither the index nor the tools. The store is shared by every session
of that project, including those in other worktrees of the same repository,
it is yours to read, edit, or empty at any time, and--no-project-memory
runs without it in either direction. -
buildmax --issue <id>scopes a local session to a team issue: the agent can
read the issue, its sub-issues, and recent discussion, and post a short report
back. It cannot change the issue's status, assignee, or sub-issues. A report
from your machine is recorded as a local agent report attributed to you, and
Portal shows it as reported rather than said — it is not a run the deployment
scheduled, counted, or traced. -
buildmax issue listshows the issues a team assigned you, across every team
you belong to, so team work can be picked up from the terminal instead of a
board in a browser. Listing issues by assignee and by status now works over
the API too; both filters were described but not implemented. -
buildmax issue show <id>prints one issue with its sub-issues and recent
discussion, andbuildmax issue status <id> <status>moves it when you are
done. Moving status stays a person's action: an agent working the issue can
say it believes the work is finished, and you decide. A session started with
--issuenow also prints which server, team, and issue it is working and
where prompts go, before the first model call. -
An agent working a team issue can now read it and report back.
GetIssue
returns the issue, its sub-issues, and recent discussion;ReportToIssue
posts one bounded comment on the thread. Both are scoped to the issue the run
was started for, and neither can change its status, assignee, or sub-issues. -
/compactin the TUI summarizes the conversation so far and continues from
the summary, instead of waiting for the context window to fill up. It keeps a
much shorter tail verbatim than the automatic pass, reports what it replaced
and what the context costs now, and honors the samepre_compactand
post_compacthooks. -
Desktop has a Memory button beside the message box: it lists what the
project remembers and shows the body of whichever memory you select, over the
same store the CLI and TUI read. It is read-only for now — memories are
Markdown files and the drawer prints the directory so you can edit them
directly — and it names any file that could not be parsed, since such a memory
is silently absent from every run until it is repaired. -
buildmax project listshows the local projects and marks the ones whose
locator no longer resolves;buildmax project relink <project-id>points one
at the current directory after a repository or folder has moved, keeping the
memories and sessions attached to it. A run that registers a new project while
others are unresolved now says so and names the command, since otherwise the
duplicate looks like the feature working. -
A daily release check now prepares a reviewable pull request once the latest
alpha is at least 72 hours old and user-visible changes are waiting. Merging
that pull request creates the version tag and starts the existing publication
workflows; an empty or unreviewed release is never published on the timer. -
Add
./make oceanto provision disposable DigitalOcean infrastructure, deploy a pinned private application trial, inspect it, and tear it down for beta qualification. -
Add idempotent OpenRouter model initialization for the DigitalOcean trial,
including automatic selection and rollout of the Tier 1 conversation model. -
Add
./make ocean show allto inspect the standard Kubernetes workload
resources in the BuildMax namespace with the qualification cluster's isolated
kubeconfig. -
Add an owner-only Kubernetes tunnel for inspecting the qualification MySQL
database locally without opening its firewall to the public internet.
Changed
-
A deployment running workers as Kubernetes Jobs must now set all four
worker.k8s.resourcesbounds, and the server refuses to start when one is
missing, is not a Kubernetes quantity, is zero or negative, or names a limit
below its own request. The error names the key to edit. Previously a typo such
asmemory_limit: 4 gigabyteswas logged and dropped, which left worker pods
running model-chosen commands with no memory limit while the configuration
looked correct. -
--continuenow resumes the newest session recorded in the directory you are
in, rather than the newest session anywhere on the machine. In a repository
with worktrees, a project-wide search could pick a session from a sibling
worktree and run there, moving your working root out from under the workflow
whose whole purpose is branch isolation. When this directory has no sessions
but the project does,--continuesays how many and names--continue --project, which widens the search and prints the directory it will run in.
The TUI/sessionspicker spans the project -- one Git repository including
all its worktrees, or one plain folder -- and marks sessions recorded in
another tree; pressato see every project.--resume <id>still finds a
session by id, but returns to the directory it ran in and refuses to continue
one that belongs to a different project.buildmax infowith no argument
follows the same scope. -
buildmax statsis nowbuildmax info, and the TUI/statspanel is
/info, because both now answer a second question: what the session's project
remembers. In the TUI the two halves are tabs —taband the arrow keys
switch, and on the memory tabenteropens a memory to read the reason behind
it, which until now meant finding the file by hand. On the command line the
memory listing follows the statistics, and--jsoncarries both understats
andproject_memory. -
Desktop and the CLI now share one local project catalog, so both opened on the
same repository list the same sessions. A folder Desktop already knows --
including a worktree of a repository in the list -- opens that project instead
of adding a duplicate, session grouping follows the project a session belongs
to rather than matching folder paths, and deleting a project no longer takes
its sessions with it unless you confirm that as well. -
The run trace's
prompt_layersrecord is nowcontext_sources, which names
every source a run started with rather than only the system-prompt layers: the
instruction layers and their sizes, the project and the project memory it
loaded with that document's revision and digest, the session notes and todos
it inherited, and whether a compaction summary stood in for messages. It
carries sizes and revisions, never content.buildmax doctornow also reports
which project the current directory belongs to, where its memory file is and
whether it fits its budget, and any sessions naming a project this machine no
longer has. -
Let operators explicitly print qualification database credentials with
./make ocean info --show-secretswhile keeping ordinary output redacted.
Fixed
-
The release build no longer fails after the tag exists. The image scan that
now runs before publication kept its database inside the checkout, and
GoReleaser refuses to publish from a worktree git reports as dirty, so
v0.2.0-alpha.5was tagged and then published nothing. The scanner now caches
outside the checkout. -
Editing an issue no longer silently overwrites someone else's change. An
update now carries the version it was built from, and the server refuses a
write built on a stale copy; Portal reloads the issue and asks you to reapply.
Earlier releases are in
CHANGELOG.md.