Push a feature. An agent integrates it into the newest main. When it hits a decision only you can make, not a merge conflict but a product one, it asks. Right in your notch.
Describe what you meant to do. The agent folds it into the newest main and syncs your checkout back.
$ synqit push "add avatars"→ integrated onto main a91f3c2
Your change to login()’s return type collides with Ana’s guard clause, merged 18s ago, which calls it and expects the old shape.
the actual escalation from Synqit’s end-to-end test run
Describe the change in plain English: synqit push "add avatars"
It reads the newest main and resolves anything it can safely decide on its own.
A genuine product conflict becomes three choices, right in your notch.
Everything shared source control needs to not be Git plus a chatbot.
One shared main. Nothing to fork, nothing to open a pull request against.
A genuine product decision stops the agent and asks — instead of guessing and shipping the wrong call.
A real macOS menu-bar app. Always there, out of the way until it isn't.
Once you've decided a concept, the same question isn't asked twice — even from a different file.
Real commits, on your real main. doctor verifies the token can actually write before you ever push.
MIT licensed, self-hosted. Fork it, read every line that runs your pushes.
Point Synqit at a repo with Contents: read and write. doctor --verify exercises the permission for real, against a real ref — not an identity check that passes for any token and then fails on your first push.
A decision isn’t just logged — it’s written back into the graph as precedent for every concept the conflict touched. The next collision on the same idea, even in a different file, resolves on its own.
Which decision was made, and why, is part of the published commit message — not a side channel that drifts from what actually shipped.
| Commit | Decision | Dev |
|---|---|---|
| a91f3c2 | kept theirs | dev_ana |
| 7c2e0d1 | mechanical | — |
| e58b420 | instructed | dev_ben |
One person runs one server. Every project your team connects shares the same notch, the same identity, the same escalation surface.
pricing-service
active
marketing-site
active
mobile-app
active
Read every line that runs your pushes, then change the ones you don't like.
Runs on your machine or your infrastructure. No Synqit account, ever.
Fork it, read it, ship your own escalation surface on top of it.
The EscalationSurface seam means Slack, Linear, or your own UI can plug in exactly where the notch does.
There's nothing to review. One shared main — the agent integrates continuously, and only stops you for a real product call, not a stylistic one.
No. It replaces branches, pull requests, and merges on top of Git. GitHub stays the source of truth for every commit.
The push ends in needs_human after five minutes. Your local work is never touched — you can answer later and push again.
The integration agent calls an LLM (OpenRouter by default, or your own pinned model) to reason about conflicts. Only the changed files and their intent are sent — see the docs for exactly what leaves the server.
Pushes are serialized per project — one queue, one integration at a time. No simultaneous integration race to corrupt main.
A conflicting push returns needs_human immediately instead of hanging. Your work stays local and unchanged until you attach a notch.
Configurable at synqit configure — OpenRouter by default. Pin any tool-capable model; a free router can pick a different backing model per call, so pin one before relying on stable behavior.
Yes — MIT licensed. Fork it, self-host it, or swap the escalation surface for your own.
Open source. Self-hosted. First run walks you through setup — no Synqit account required.