vibey
A queue-based, six-phase conductor for autonomous software delivery — with an
optional visual-design interstitial and opt-in Azure deployment — built on top
of the *loop autonomous session runners.
What problem this solves
An autonomous coding session is not autonomous software delivery. A single
claudeloop run can finish a task, but it cannot interview you until the spec
is sharp, split the work into parallel items, verify each one against gates it
cannot game, survive its own credit exhaustion by handing off to a different
vendor's engine without losing a single open question, or know that a review
finding should reopen design rather than vanish into a transcript.
Vibey conducts all of that. You describe what you want; it interviews you until the spec is sharp, builds unattended across a pool of engines with real budget caps, reviews the result with you, and (only if you opt in) deploys. Every choice, finding, and handoff lives in an append-only PostgreSQL ledger — never in one vendor's chat session.
| Runs on | macOS / Linux, local. No cloud control plane required. |
| Language | Python 3.12+ |
| Queue | PostgreSQL (FOR UPDATE SKIP LOCKED) |
| Engines | claudeloop, codexloop, cursorloop, agyloop |
| State dir | .vibey/ |
| Env prefix | VIBEY_ |
| Done marker | Each loop's own marker (CLAUDELOOP_TASK_FULLY_COMPLETE, etc.) |
Install
Requires Python 3.12+, PostgreSQL, and at least one *loop engine on
PATH. Windows is not a supported target.
uv tool install vibey # or: pipx install vibey / pip install vibey
uv tool install claudeloop # at least one engine; add codexloop, cursorloop, agyloop for rotation
vibey doctor # pre-flight: database, engines, auth
Quickstart
vibey doctor --conformance --record # verify each engine's contract, persist health
vibey new my-app --repo ~/src/my-app \
--max-cycle-dollars 15 # real budget brake, enforced from the ledger
vibey worker --engines claudeloop,agyloop -j 2 # unattended build across the pool
# When vibey parks for your input (design gates, review, budget grants):
vibey answer <gate-id> --defaults # accept the interview defaults, or:
vibey answer <gate-id> --raw '{"max_dollars": 25}' # raise a tripped budget cap
vibey design accept <project-id> --no-visual
vibey answer <gate-id> --verdict accept # review demo
vibey answer <gate-id> --choice local_only # decline deployment → DONE (local)
The greeter live-demo runbook walks a full paid run end to end, including the zero-touch contracts.
The shape of it
DELIVERY STAGE SET
INTAKE → ① DESIGN ──┬─ no ───────────────→ ② BUILD ⇄ ③ REVIEW
│ autonomous / interactive
└─ yes → [VISUAL DESIGN]
interactive, media generation + confirmation
│ visual-ready
└──────────────→ ② BUILD
③ REVIEW ── no deployment ─────────────────────────────→ DONE (local)
│ opt in
▼
DEPLOYMENT STAGE SET
④ DEPLOY DESIGN ⇄ ⑤ DEPLOY EXECUTE ⇄ ⑥ DEPLOY REVIEW → DONE (deployed)
interactive autonomous interactive
▲ │ │
└─────────────────┴────────────────────┘
Phases 1, 3, 4, and 6 talk to you. The optional Visual Design stage also talks to you and cannot hand work to BUILD until every planned visual is accepted or you explicitly waive the stage. Phases 2 and 5 run unattended, survive rate-limit windows and credit exhaustion, and rotate eligible engines/providers when one runs dry. Phase 3 asks whether to deploy; "no" is a successful local completion. Phase 6 accepts a successful deployment, requests changed deployment details in Phase 4, retries an unambiguous deployment in Phase 5, or routes an application defect back to the appropriate delivery phase.
Why it isn't just another agent framework
The hard part is not calling an LLM in a loop — claudeloop and its siblings
already solve that, including the distinction between a waitable rate-limit
window and exhausted credits that no amount of waiting will fix. Vibey adds the
things those runners deliberately do not do:
- A phase machine with loop-backs, so a review finding becomes a new design conversation rather than a lost note.
- Round-robin engine rotation with lossless handoff — the conversation is an append-only event ledger, not a chat transcript locked inside one vendor's session, so any engine can pick up where any other left off. A handoff that would lose an open question, decision, assumption, or finding is rejected by a pure, deterministic no-loss gate — never silently accepted.
- A durable queue, so work survives a laptop lid closing, a crash, or a provider outage, and so multiple work items build in parallel in isolated git worktrees.
- Real money brakes — per-cycle dollar and turn caps summed from the ledger's own cost events, with parks that tell you the exact command to grant more.
Documentation
| Document | What's in it |
|---|---|
| Greeter live-demo runbook | A full paid run, end to end, with the zero-touch contracts |
| Expansion runbooks | Fifteen workstreams: JIRA, more clouds, Kubernetes server mode, clients, store submissions, … |
| Architecture & roadmap | The master design: context, containers, layers, phases, risks, milestones |
| Domain model | Every value object, ADT, and invariant in domain/ |
| Data model | Full PostgreSQL DDL, queue semantics, indices |
| Handoff protocol | The event ledger, the envelope, and the no-loss gate |
| Rotation & engines | Capability matrix, effort normalization, smooth weighted round robin |
| Phase protocols | What all six phases do, turn by turn |
| Implementation plan | Milestone-by-milestone, test-first task breakdown |
| Decision records | Why each hard call was made |
Status
Live-validated. The full pipeline has conducted real paid deliveries end to
end: multi-worker builds (-j 2) with cross-engine rotation (claudeloop
implements, agyloop verifies), the bounded verify-repair ladder, budget caps
tripping and being granted live, and fully zero-touch DESIGN phases answered
with nothing but --defaults. The validation campaign's findings — a blind
budget brake, a repair-loop livelock, terminal gate-command failures — were
each fixed and re-validated live.
Every architectural layer (domain, application, infrastructure, cli)
holds a 100% branch-coverage floor, enforced as four separate CI gates.
domain/ is pure stdlib, enforced by import-linter and an AST-walking purity
test — the no-loss handoff gate is deterministic code, not a model's opinion.
Related projects
| Project | What it is |
|---|---|
| claudeloop | Autonomous Claude Code session runner — the design the family transplants |
| codexloop | The same design retargeted onto OpenAI Codex |
| cursorloop | The same design retargeted onto Cursor |
| agyloop | The same design retargeted onto Google Antigravity / Gemini |
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vibey-0.1.2.tar.gz.
File metadata
- Download URL: vibey-0.1.2.tar.gz
- Upload date:
- Size: 699.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
127cc7e3589f839f648e5be492b50a9d0ab11b76130a4a30a485238938f18f41
|
|
| MD5 |
dea0fdd06ca3b083bc5f608861c1d936
|
|
| BLAKE2b-256 |
776904d701654e7e342f66f77ef7808a904a5e8ee36cd4f025961a148fa7e25b
|
Provenance
The following attestation bundles were made for vibey-0.1.2.tar.gz:
Publisher:
publish-to-pypi.yml on adammatthewsteinberger/vibey
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibey-0.1.2.tar.gz -
Subject digest:
127cc7e3589f839f648e5be492b50a9d0ab11b76130a4a30a485238938f18f41 - Sigstore transparency entry: 2536739521
- Sigstore integration time:
-
Permalink:
adammatthewsteinberger/vibey@de9ccb252e78a3e0a8b8b9d8f4416ce6df301981 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/adammatthewsteinberger
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@de9ccb252e78a3e0a8b8b9d8f4416ce6df301981 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file vibey-0.1.2-py3-none-any.whl.
File metadata
- Download URL: vibey-0.1.2-py3-none-any.whl
- Upload date:
- Size: 248.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d99da0ec38b5026c3663fa35b8b8bad0f271b5286ee323799efb641ba6101534
|
|
| MD5 |
39ff72453d8e587a074d4bef90010318
|
|
| BLAKE2b-256 |
429b129875e479cac289771d7a99a28e2f16011ccd804fdcdf8574fd44dc5801
|
Provenance
The following attestation bundles were made for vibey-0.1.2-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on adammatthewsteinberger/vibey
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibey-0.1.2-py3-none-any.whl -
Subject digest:
d99da0ec38b5026c3663fa35b8b8bad0f271b5286ee323799efb641ba6101534 - Sigstore transparency entry: 2536739695
- Sigstore integration time:
-
Permalink:
adammatthewsteinberger/vibey@de9ccb252e78a3e0a8b8b9d8f4416ce6df301981 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/adammatthewsteinberger
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@de9ccb252e78a3e0a8b8b9d8f4416ce6df301981 -
Trigger Event:
workflow_dispatch
-
Statement type: