Self-hosted orchestration and control plane for golemcore-bot runtimes.
- Spring Boot 4.0
- Java 25
- Maven
- React + TypeScript
- Tailwind CSS 3
- Local JSON persistence
- operator auth with access JWT + refresh JWT cookie
- bot enrollment, machine JWT rotation, fleet registry, roles, and heartbeats
- board flows, board teams, cards, card-bound threads, and command dispatch
- lifecycle signal ingestion from golems
- approval gates for destructive or high-cost commands
- approval gates for
SelfEvolvingpromotion decisions - audit history, budget snapshots, notification events, and production guardrails
- readonly per-golem
SelfEvolvinginspection fed by connected bot projections
When a connected golemcore-bot has SelfEvolving enabled, Hive exposes readonly per-golem inspection for:
- projected runs and judge verdict summaries
- candidate queue and promotion states
- lineage nodes
- artifact workspace catalog, lineage rail, diff, evidence, and impact tabs mirrored from the bot
- tactic search status, readonly result ranking, selected tactic details, and
Why this tacticscore breakdown - benchmark campaigns tied to the selected artifact stream
- promotion approvals
golemcore-bot stays the primary working screen. Hive keeps these views inside the existing inspection surface instead of creating a second golem dashboard and mirrors the bot workspace as readonly state.
When tactic embeddings are disabled or unavailable, Hive mirrors the degraded BM25-only state instead of masking it.
Artifact identity and compare rules:
artifactStreamIdis the canonical identity across bot and HiveartifactKeyand aliases are display metadata only- per-golem workspace projections are mirrored verbatim from the bot
- Hive derives only the fleet-level same-stream compare read model
- bounded rollout diffs are mirrored when available, while arbitrary revision compare may fall back to on-demand content diff from mirrored normalized revisions
Hive also exposes fleet-level artifact search and same-stream compare across golems, while keeping approval actions inside the existing governance flow.
Relevant APIs:
GET /api/v1/self-evolving/golems/{golemId}/runsGET /api/v1/self-evolving/golems/{golemId}/runs/{runId}GET /api/v1/self-evolving/golems/{golemId}/candidatesGET /api/v1/self-evolving/golems/{golemId}/lineageGET /api/v1/self-evolving/golems/{golemId}/artifactsGET /api/v1/self-evolving/golems/{golemId}/artifacts/{artifactStreamId}GET /api/v1/self-evolving/golems/{golemId}/artifacts/{artifactStreamId}/lineageGET /api/v1/self-evolving/golems/{golemId}/artifacts/{artifactStreamId}/diffGET /api/v1/self-evolving/golems/{golemId}/artifacts/{artifactStreamId}/transition-diffGET /api/v1/self-evolving/golems/{golemId}/artifacts/{artifactStreamId}/evidenceGET /api/v1/self-evolving/golems/{golemId}/artifacts/{artifactStreamId}/compare-evidenceGET /api/v1/self-evolving/golems/{golemId}/artifacts/{artifactStreamId}/transition-evidenceGET /api/v1/self-evolving/golems/{golemId}/tacticsGET /api/v1/self-evolving/golems/{golemId}/tactics/searchGET /api/v1/self-evolving/golems/{golemId}/tactics/search-statusGET /api/v1/self-evolving/golems/{golemId}/tactics/{tacticId}GET /api/v1/self-evolving/golems/{golemId}/tactics/{tacticId}/explanationGET /api/v1/self-evolving/golems/{golemId}/tactics/{tacticId}/lineageGET /api/v1/self-evolving/golems/{golemId}/tactics/{tacticId}/evidenceGET /api/v1/self-evolving/artifacts/searchGET /api/v1/self-evolving/artifacts/compareGET /api/v1/approvals?golemId={golemId}
Promotion approvals are generalized through the normal approvals system with subjectType=SELF_EVOLVING_PROMOTION.
./mvnw test
./mvnw spring-boot:runcd ui
nvm use
npm ci
npm run test
npm run build
npm run devThe Vite dev server proxies /api and /ws to the backend on http://localhost:8080.
Bootstrap operator provisioning is disabled by default.
To enable a local bootstrap operator, configure all three properties explicitly:
hive.bootstrap.admin.enabled=truehive.bootstrap.admin.username=<username>hive.bootstrap.admin.password=<password>
You can set them in src/main/resources/application.yml or via environment-backed Spring properties.
Hive stores state under hive.storage.base-path, defaulting to ./data/hive.
Important directories:
operators/auth/refresh-sessions/auth/golem-refresh-sessions/golems/golem-roles/enrollment-tokens/heartbeats/boards/cards/threads/thread-messages/commands/runs/lifecycle-signals/approvals/audit/budgets/notifications/
Package the backend and built frontend together:
nvm use
./mvnw packageprepare-package runs npm ci, npm run build, and copies ui/dist into the Spring Boot jar as static assets.
If you need a backend-only package during local debugging:
./mvnw -Dskip.frontend=true packagePushes to main run the conventional release workflow. When releasable commits are present, Hive:
- creates the next
v*tag withcocogitto, - builds the packaged Spring Boot jar,
- publishes
hive-*.jarandsha256sums.txtto the GitHub Release for that tag, - triggers container publication to
ghcr.io.
Published image tags:
- branch pushes outside
main: short SHA only main:latestand short SHA- release tags
v*:<version>,latest, and short SHA
Example:
docker pull ghcr.io/<owner>/golemcore-hive:latest- Copy
application-prod.example.ymlinto your deployment config and replace secrets. - Set a non-empty
hive.security.jwt.secret. - Enable
hive.security.cookie.secure=true. - Change the bootstrap admin password or disable bootstrap admin creation.
- Set
hive.deployment.production-mode=true.
When production mode is enabled, Hive fails fast if the JWT secret is missing, refresh cookies are not secure, or the bootstrap password still uses the local default.