CI/CD that doesn't suck. For you and your agents.
Run CI on your working tree. Write your pipelines in your favorite language. The best of persistent CI and stateless CI.
Run CI on your working tree.
Test uncommitted code before you push. Broken builds never reach your team — failed runs cost nothing.
pipeline.pyPipelines in real code, not YAML.
Python or TypeScript — typed, testable, reusable.
mcpBuilt for your AI agents.
Machine-readable output and MCP. Agents read failures, fix pipelines, and re-run.
parallelPersistent state, stateless scale.
Warm disks, no artifact shuffling. Forks run in parallel. CI in seconds.
signupJoin the waitlist.
First access when the hosted platform launches.
// how it works
- 00
download hm.
A single static binary — nothing else to install.
curl -fsSL https://get.harmont.dev/install.sh | sh
- 01
write a pipeline.
Pipelines are real code, not YAML. Toolchains like
uvandcargobring lint, typecheck, and test steps with them.import harmont as hm@hm.pipeline(default_image="ubuntu:24.04")def ci() -> hm.Step:app = hm.py.uv(path=".")return hm.group([app.lint(),app.typecheck(),app.test(),])import { pipeline } from "harmont";import { py } from "harmont/toolchains";const app = py.uv({ path: "." });export default pipeline(app.lint(),app.typecheck(),app.test(),{ defaultImage: "ubuntu:24.04" },); - 02
run it locally.
hm runexecutes your working tree exactly as it is — no commit, no push, no runner queue. Failed runs cost nothing.This is the actual pipeline that builds the Harmont CLI. - 03
commit and push.
under construction wipA branch is a persistent box — write
openapi.jsononce and it's there next step, no artifact upload/download. Forks run in parallel from the same warm disk. Persistent state, stateless scale. - 04
debug with agents.
under construction wipA step fails? Your agent reads the logs, fixes your pipelines, and re-runs.
- 05
deploy across agents.
under construction wiphm devruns your whole stack locally. Each deploy is namespaced, so two agents can bring the same repo up in parallel without colliding on ports. Every PR gets a preview environment.$ hm dev up # claude #1 ✓ api localhost:4001 ✓ web localhost:4002 ✓ preview pr-128.preview.harmont.dev $ hm dev up # claude #2 ✓ api localhost:4011 ✓ web localhost:4012 ✓ preview pr-129.preview.harmont.dev
How hm compares.
| Harmont | gh actions | buildkite | |
|---|---|---|---|
| local working tree | yes | no | no |
| no git host required | yes | no | partial |
| runs without a queue | yes | no | no |
| persistent workspace | yes | no | no |
| pipeline language | python, ts | yaml | yaml |
| type-checked pipelines | yes | no | no |
| headless rest api | yes | partial | partial |
| agent-driven debugging | yes | no | no |
| json output | yes | partial | partial |
| self-hostable | yes | partial | partial |
// register
Join the waitlist.
Hosted Harmont is under construction — persistent disks, parallel forks, zero runner management. Drop your email and we'll tell you the moment it opens.
You're on the list.
We'll email you the moment the cloud opens.
Or join the community on Discord.