Starter
For a team putting its first repositories under review.
$99/ month
- Up to 5 repositories
- 5M analysis tokens per month
- Automated pull request reviews
- 100 mobile CI test minutes per month
Private beta · Trial workspaces on request
Guarani AI reviews every pull request, routes and meters every model call, and runs your mobile journeys on real devices, then turns the findings into one release decision you can trace.
Run summary
Pipeline
LLM latency by providerp50 p95
Running
CLEARED for release
1 advisory, 0 failures. Check posted to pull request #1842.
Each module installs where the work already happens: Verify on GitHub and GitLab pull requests, Mesh in front of your model providers, Mobile CI inside GitHub Actions or GitLab CI. Use one module or all three: versioned policy rules combine their findings into one verdict.
Verify builds a semantic graph of your codebase and reviews every pull request against it: architecture rules, API contracts, performance budgets and static security analysis (SAST). Findings are posted to the pull request before it merges.
Verdicts come from versioned policy rules applied to the findings: the same findings and the same policy always produce the same verdict.
Explore Guarani VerifyestimateEta() calls the inventory service once per line item, inside the loop. On large orders this adds sequential calls and pushes GET /v2/orders past its 450 ms p95 budget.
Batch the lookups into one getAvailability() call to stay under budget.
- for (const item of order.items) {- const stock = await inventory.get(item.sku);- etas.push(estimate(item, stock));- }+ const skus = order.items.map((item) => item.sku);+ const stock = await inventory.getAvailability(skus);+ const etas = order.items.map((item) => estimate(item, stock[item.sku]));Additive field fulfillment_eta on GET /v2/orders. Existing clients are unaffected: compatible with contract v3.
SAST: no new data flow from request input to a query, shell or file call, and no secret added in this diff.
Generated 4 unit tests and 1 integration test for estimateEta(), all passing.
One OpenAI-compatible endpoint for every model your teams use. Mesh routes each request by latency, cost, context length and data residency, fails over across regions and providers, and meters spend per team.
| Provider | Share | p50 | p95 | Spend / 24 h |
|---|---|---|---|---|
| Azure OpenAIeastus2, swedencentral | 38% | 218 ms | 540 ms | $77.33 |
| Amazon Bedrockus-east-1, us-west-2 | 31% | 236 ms | 575 ms | $47.32 |
| Gemini 4 Argon (Google Cloud)us-central1, 1M context | 21% | 208 ms | 520 ms | $50.75 |
| GPU (open-weight)dedicated endpoint | 10% | 172 ms | 390 ms | $7.00 |
Spend by team, daily budget
Run UI and regression suites on real Android and iOS devices from the pipelines you already have. Every result carries its video, device logs and network traces.
| Device | sign-in | search | checkout | payment sheet |
|---|---|---|---|---|
| Pixel 10 | passed12.8 s | passed13.9 s | passed21.0 s | passed9.7 s |
| iPhone 17 | passed12.1 s | passed13.2 s | passed20.4 s | passed9.9 s |
| Galaxy S25 | passed13.3 s | passed14.4 s | HOLD, retry passed22.6 s | passed10.2 s |
Every change runs as a traced pipeline across managed cloud regions, GPU inference and real device pools. Customer code is processed in isolated tenants and never used to train models.
Webhook received
A pull request on GitHub or GitLab notifies the control plane at api.guarani-llc.com/v1. The policy engine resolves the profile for the repository.
Code indexed
The orchestrator updates the semantic graph and the vector index for the changed files, inside the customer's isolated tenant.
Review agents dispatched
Architecture, contract, performance and security (SAST) agents run on analysis workers: containers on AKS, ECS/EKS and Cloud Run.
Mesh routes model calls
Every agent call goes through Guarani Mesh. When Azure OpenAI degrades in eastus2, the router marks the call REROUTED to swedencentral and the trace continues.
Mobile suites run
The affected journeys run on real Android and iOS devices. Video, logs and network traces are stored with the run.
CLEARED for release
Versioned policy rules mark the strip CLEARED, the verdict is posted to the pull request as a check, and every step is written to an audit trail.
Source and CI
Control plane
api.guarani-llc.com/v1Analysis workers
Device cloud
Guarani Mesh
Model providers
Data
Install the CLI, add one step to your workflow or call the REST API. Typed SDKs for TypeScript and Python wrap the same endpoints.
# Install the CLI (Node.js 20 or later)
npm i -g @guarani-ai/cli
# Authenticate with your workspace access token
guarani login
# Create guarani.yml for this repository
guarani init
# Run the release profile and print a JSON report
guarani verify --repo acme/core-api --profile release --jsonname: guarani
on: pull_request
permissions:
contents: read
checks: write
pull-requests: write
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm i -g @guarani-ai/cli
- run: guarani verify --profile pull-request --report github
env:
GUARANI_TOKEN: ${{ secrets.GUARANI_TOKEN }}guarani-verify:
stage: test
image: node:20
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- npm i -g @guarani-ai/cli
- guarani verify --profile pull-request --report gitlab
# GUARANI_TOKEN is a masked CI/CD variable in the project settingscurl https://api.guarani-llc.com/v1/verifications \
-H "Authorization: Bearer $GUARANI_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7c1d9e2a-1842-release" \
-d '{"repo": "acme/core-api", "ref": "refs/pull/1842/head", "profile": "release"}'import { Guarani } from "@guarani-ai/sdk";
const guarani = new Guarani({ token: process.env.GUARANI_TOKEN });
const run = await guarani.verifications.create({
repo: "acme/core-api",
ref: "refs/pull/1842/head",
profile: "release",
});
// Polls until the verdict is ready
const result = await guarani.verifications.wait(run.id);
console.log(result.verdict, result.findings.length);import os
from guarani_ai import Guarani
client = Guarani(token=os.environ["GUARANI_TOKEN"])
run = client.verifications.create(
repo="acme/core-api",
ref="refs/pull/1842/head",
profile="release",
)
# Polls until the verdict is ready
result = client.verifications.wait(run.id)
print(result.verdict, len(result.findings))The packages and endpoints shown are the v1 beta interface.
Private beta clients are published on npm and PyPI. Remote execution requires a GUARANI_TOKEN from a provisioned Private Beta workspace.
Every plan starts with a 14-day free trial. Prices in USD, billed monthly, taxes excluded.
For a team putting its first repositories under review.
$99/ month
Recommended
For several teams sharing model budgets and device minutes.
$399/ month
For dedicated infrastructure, isolated GPU inference and audit evidence.
Custom
Founder & Principal Systems Architect
Designs and builds the Guarani AI platform: the control plane, the review agents, the Mesh gateway and the CI integrations.
CTO
Leads GPU inference and mobile CI infrastructure.
RLS-NEXTyour-org/your-repoAWAITING CLEARANCE
Private beta clients are published on npm and PyPI. Remote execution requires a GUARANI_TOKEN from a provisioned Private Beta workspace.