pici is a CI system where every build step runs in an attachable terminal session.
Your pipeline is a bash script. It runs the same locally and in CI.
The Problem
A build fails. You scroll through 2,000 lines of log output. You guess what went wrong. You re-run the job and wait 10 minutes to find out you were wrong. Repeat.
Debugging CI should not be an archaeological dig through log files in a browser.
The Solution
Every build step in pici runs as a real terminal session: a PTY you can attach to.
No "enable debugging" flag. No "re-run with SSH" button. No waiting for a tunnel.
A test fails? Attach to the session, press ↑ + Enter to rerun the command,
inspect the environment, fix the issue. You're already there.
zmx attach ci.myrepo.test to jump in↑ to rerun the failing commandJob Engine
Your pipeline is pico.sh: a bash script that runs identically on your machine
and on the CI runner. No YAML, no DSL, no "it works on my machine" gap.
zmx is the job engine. Each zmx run spawns
a parallel terminal session. zmx wait "*" blocks until they all finish.
Run tasks sequentially by just calling them one after another, or in parallel; it's bash,
you control the flow.
zmx run commands locally and in CIrun: parallel keywordsTrigger Model
Most CI systems are glued to Git webhooks. pici isn't. The core loop is simple:
rsync a workspace and publish an event over SSH.
Git post-receive hooks are just one trigger. You can fire builds from anything: a cron job, a file watcher, a webhook receiver on your own server, a button press.
Deployment
Same pico.sh. Same zmx attach. Same experience. Your infra or ours.
Who It's For
pici is built for individuals and small teams who want to move fast. You write a bash
script, you push your code, your build runs, and if something breaks you jump into the
terminal and fix it. No YAML labyrinths, no approval workflows, no complex pipeline DAGs.
We're not building marketplace integrations, compliance reports, or workflow bureaucracy. What you will find is the CI system you'd write for yourself.
Infrastructure
ci.pico.sh runs on cd.pico.sh: our SSH VM service on hardware we own. Not AWS. Not GCP. Not a cloud provider.
Push a docker-compose.yml to an SSH endpoint and your containers are live.
Label a service and it gets a public HTTP URL. No cloud console, no CLI SDK,
no provider lock-in.
The same platform that runs your CI runs your apps.
git pushFeatures
Terminal workflows, rsync + SSH pubsub, JSONL status streams. Everything an agent needs to trigger builds, monitor progress, and attach to failures. No OAuth flows, no API rate limits, no webhooks. An agent can start as many jobs as it wants and read results as structured text.
No HTTP APIs to expose. No webhooks to configure. No OAuth tokens to manage. SSH keys are your auth. SSH pubsub is your event bus. If SSH works, CI works.
Build artifacts are plain HTML + CSS. No JavaScript. No app server. No build step.
Serve the directory with any static host: nginx, s3, pgs.sh, python -m http.server.
Zero runtime dependencies.
Automatic provenance baked into every job: runner hostname, OS, arch, repo, branch, commit, and workspace checksum. Supply-chain ready without extra tooling.
Comparison
picipici.
We're opening the managed beta at ci.pico.sh.
Self-hosted is available now on GitHub.
No spam. We'll email you when beta slots open.