Run AI coding agents against GitHub repositories, publish their changes, and watch pull request checks. Product details live at molten.bot/code.
mkdir -p ./.moltenhub
docker run --rm -p 7777:7777 \
-e GITHUB_TOKEN \
-v "$PWD/.moltenhub:/workspace/config" \
moltenai/moltenhub-code:latestThe image defaults to with-config, which uses /workspace/config as the
persistent config and CLI auth home:
MOLTEN_HUB_TOKENpresent: write or updateconfig.json, then startharness hub.config.jsonwith Hub fields: startharness hub --config.config.jsonwith run fields: executeharness run --config.init.jsonpresent andconfig.jsonabsent: startharness hub --init.- No config files: start local Hub onboarding UI on port
7777.
Compose example:
services:
codex:
image: moltenai/moltenhub-code:latest
ports:
- "3331:7777"
volumes:
- ./.moltenhub:/workspace/config
environment:
GITHUB_TOKEN: ${GITHUB_TOKEN}
MOLTEN_HUB_TOKEN: ${MOLTEN_HUB_TOKEN}
MOLTEN_HUB_REGION: na
HARNESS_AGENT_HARNESS: codex
OPENAI_API_KEY: ${OPENAI_API_KEY}Compose environment must use mapping syntax (KEY: value) or list syntax
(KEY=value). List entries like KEY:value are malformed.
The runtime image includes Go 1.26.2, Node 25.9.0, Python 3, git, gh,
jq, rg, Playwright Chromium, and these agent CLIs:
@openai/codex@anthropic-ai/claude-code@augmentcode/auggie@mariozechner/pi-coding-agentopencode-ai
More Docker config details: docker/config/README.md.
Requires Go 1.26.2 or newer plus git, gh, and the selected agent CLI.
go build -o bin/harness ./cmd/harness
./bin/harness hubLocal harness hub listens on 127.0.0.1:7777 by default.
harness run --config run.example.json
harness multiplex --config ./tasks --parallel 2
harness hub --config ./.moltenhub/config.json
harness hub --init ./.moltenhub/init.jsonrunexecutes one repository task.multiplexruns multiple config files or config directories.hubstarts the local UI and optional remote Hub transport.
Run configs are JSON or JSONC. Minimal example:
{
"repo": "git@github.com:owner/repo.git",
"agentHarness": "codex",
"prompt": "Update README setup instructions."
}Common fields:
repo,repoUrl, orrepos: target repository or repositories.baseBranch: branch to clone; omit for repository default branch.branch: alias forbaseBranch.targetSubdir: repository subdirectory for single-repo work; defaults to..prompt: task sent to the agent.agentHarness:codex,claude,auggie,pi, oropencode.agentCommand: optional executable override.responseMode: defaults tocaveman-full; setofffor normal prose.images: base64 prompt images; supported bycodexandpi.review: PR review selector usingprNumber,prUrl, orheadBranch.commitMessage,prTitle,prBody,labels,reviewers: optional PR metadata.
Use camelCase field names. Snake_case run-config fields are rejected.
See run.example.json for a commented template.
Each harness run:
- Checks required tools and selected agent CLI.
- Verifies GitHub auth with
gh auth status. - Creates an isolated workspace under
/workspace. - Clones each repo at
baseBranch, or the repository default branch when omitted. - Bootstraps an empty
mainbranch when a new GitHub repo has no refs. - Creates a
moltenhub-...work branch frommainormaster; for other branches it works directly on that branch. - Probes publish access before agent execution. Public GitHub repos may fall back to a fork when direct push is denied.
- Runs the selected agent in
targetSubdirfor one repo, or the workspace root for multi-repo runs. - Commits changed repos, pushes branches, opens or reuses PRs, and watches required checks.
- If checks fail, runs up to three focused remediation attempts and pushes follow-up commits.
Harness-created commits include:
Co-authored-by: Molten Bot 000 <260473928+moltenbot000@users.noreply.github.com>
If no repository changes remain after the agent runs, the task exits
successfully with status=no_changes.
Useful environment variables:
GITHUB_TOKENorGH_TOKEN: GitHub auth for clone, push, PRs, and checks.MOLTEN_HUB_TOKEN: remote Hub agent token.MOLTEN_HUB_REGION:naoreu; defaults tona.MOLTEN_HUB_URL: explicit hosted Hub API URL,https://na.hub.molten.bot/v1orhttps://eu.hub.molten.bot/v1.MOLTEN_HUB_SESSION_KEY: runtime config session key; defaults tomain.HARNESS_AGENT_HARNESS: default agent harness.HARNESS_AGENT_COMMAND: default agent executable.OPENAI_API_KEY: Codex login bootstrap; also usable by OpenCode providers.AUGMENT_SESSION_AUTH: Auggie session JSON fromauggie token print.PI_PROVIDER_AUTHorPI_AUTH_JSON: Pi provider auth bootstrap.
Hub OpenAPI:
- Live:
https://na.hub.molten.bot/openapi.yaml - Offline snapshot: na.hub.molten.bot.openapi.yaml
Supported responseMode values:
defaultoffcaveman-litecaveman-fullcaveman-ultracaveman-wenyan-litecaveman-wenyan-fullcaveman-wenyan-ultra
Omitted or default maps to caveman-full. The harness prepends the bundled
Caveman skill to the agent prompt unless
responseMode is off.
go test ./...There is no separate dependency install step for the Go module. Dependencies are declared in go.mod.