Rosentic catches semantic conflicts between AI coding agents before they break your main branch. AST-level detection across 11 languages, deployed as a GitHub Action or MCP server.
Add a workflow file to your repository. The engine runs on GitHub's infrastructure — your code never leaves your environment.
That's it. Four lines. Every PR gets scanned against all active branches before merge.
Run the engine directly against any local repository.
| Command | Description |
|---|---|
| detect.py <repo> <a> <b> | Check a single branch pair for semantic conflicts |
| detect.py scan-all <repo> | Full conflict matrix — every branch pair in one query |
| --format text | Human-readable output (default) |
| --format markdown | PR comment-ready markdown |
| --format json | Machine-readable JSON for integrations |
Rosentic uses tree-sitter to build an AST (Abstract Syntax Tree) for every file on every active branch. From the AST, it extracts function definitions, call sites, HTTP route declarations, and HTTP client calls. Then it compares every branch pair to find incompatibilities.
The engine is deterministic. Same input, same output. No LLM inference, no hallucination, no false positives from model uncertainty. Tree-sitter parsing is production-grade from day one.
Full AST parsing and symbol extraction across 11 languages:
| Layer | What It Detects | Status |
|---|---|---|
| L1 — Symbol Graph | Same-language function signature mismatches. Function changed parameters but callers still use old signature. | Built |
| L2 — Interface Graph | Cross-language HTTP contract conflicts. Python route changed required fields, TypeScript client still sends old fields. | Built |
| L3 — Contract Graph | GraphQL schemas, protobuf contracts, event bus topics (Kafka, RabbitMQ), database migration conflicts. | Next |
| L4 — Compatibility | Breaking change classification. Required field = breaking, optional = compatible. | Next |
| L5 — Confidence | Every conflict edge carries evidence source and confidence score. | Future |
The engine stores a persistent index at .rosentic/index.json in the target repo. The index caches branch HEAD commit hashes — when a branch hasn't moved, the engine skips re-indexing.
On a warm run (no branches changed), scan times drop dramatically:
| Benchmark | Cold | Warm |
|---|---|---|
| Demo repo (5 branches, 18 conflicts) | 1.6s | 0.97s |
| Production codebase (46,690 lines, 235 files) | 29.6s | 11.3s |
The index auto-creates the .rosentic/ directory and adds it to .gitignore.
When deployed as a GitHub Action, the workflow is:
Agent opens PR → GitHub spins up temporary runner → downloads Docker image → scans PR branch against all active branches → posts PR comment with conflict report → blocks or approves merge → runner is destroyed.
Rosentic ships an MCP (Model Context Protocol) server for direct agent integration. Agents can query the conflict graph before pushing code, enabling them to self-correct before creating a PR.
Machine-readable output for CI integration, dashboards, or custom tooling. Use --format json flag.