Each module does one job, runs on the AI model you choose and writes into tools you already use. Start with test generation and code checks, and add requirements and traceability once those are trusted.
Settings · Modules7 of 9 on
Requirements extractionBRD, Word, Excel, PDF, Jira
fast
Test case designScenarios, P1 to P4 cases, coverage
strong
Test generationUnit, integration, E2E, contract
strong
Live UI checksChromium, visual, WCAG
fast
Bug detectionTwelve categories, with fixes
strong
Threat modelSTRIDE, LINDDUN, PASTA
strong
TraceabilityRequirement to code to test
fast
Performance analysisk6, JMeter, Gatling results
fast
Codebase Q&AAnswers cited to file and line
fast
Sample configuration · the switches work
About thirty modules · all live
Every module, and how each one is checked.
Pick a group, then a module. The AI does the judging and the platform checks the result against your code before it's shown. We're deepening each module release by release.
Plan and design
Requirements
Live
Splits a BRD, Word, Excel, PDF or Jira export into atomic requirements, each with a priority and a reference to its section.
How it's checkedThe whole document is read in parts, with no first-page cutoff. Statements too vague to test are listed, never dropped.
In · DocumentsOut · Requirement list with source refs
BRD_Refunds_v3.docx· 14 pages42 requirements
REQ-12 · § 3.1 · second approver over 10,000critical
REQ-13 · § 3.1 · no self-approvalhigh
REQ-18 · § 4.2 · audit log kept seven yearsmedium
§ 5.4 "should feel intuitive"not atomised
3 statements too vague to test, listed for review
Illustration · sample data
Plan and design
Testability
Live
Scores each requirement as testable, needs work or untestable, suggests a rewrite and flags contradictions.
How it's checkedA score is shown only when the assessment actually ran.
In · RequirementsOut · Scores, issues, rewrites
Testability· Refunds31 testable · 9 need work · 2 untestable
REQ-12 · second approver over 10,000testable
REQ-14 · "the screen should be fast"needs work
REQ-20 · "approve as appropriate"untestable
REQ-7 and REQ-19 disagree on the limitcontradiction
Suggested for REQ-14: loads in under 2 s at p95 on staging
Illustration · sample data
Plan and design
Test scenarios
Live
Maps happy, alternate, negative, boundary, error, cross-feature and non-functional scenarios for every requirement.
How it's checkedThe platform computes which requirements have no scenario, or only one side covered.
In · RequirementsOut · Scenario map, coverage matrix
Scenario coverage· Refunds42 requirements
REQ-12 · 5 scenariosboth sides
REQ-13 · 3 scenariosno boundary
REQ-15 · 1 scenariohappy path only
REQ-21 · 0 scenariosuncovered
Illustration · sample data
Plan and design
Test cases
Live
Writes P1 to P4 cases using equivalence, boundary, decision-table and state-transition techniques.
How it's checkedCoverage is computed by the platform, and uncovered requirements are filled in a second pass.
In · Requirements or scenariosOut · Prioritised cases
Test cases· Refunds118 cases
P1 · TC-031 · exactly 10,000 needs no second approverboundary
P1 · TC-032 · 10,000.01 needs a second approverboundary
P2 · TC-040 · approver approves own refundnegative
Requirement coverage41 of 42
1 gap filled in the second pass
Illustration · sample data
Plan and design
Test plan
Live
Builds a risk-based plan: scope, a risk matrix over modules, test levels, entry and exit criteria, and an effort estimate.
How it's checkedRisk is grounded in measured code complexity, not the model's opinion.
In · Requirements and codeOut · Plan and estimate
Test plan· payments-servicev1 draft
refunds/ · complexity 38 · many callershigh risk
ledger/ · complexity 21medium
notifications/ · complexity 6low
Effort estimate14 days
Entry and exit criteria included
Illustration · sample data
Plan and design
Test data
Live
Creates fixtures from your schemas, stories or designed cases: valid, invalid, boundary and security values.
How it's checkedEach case is checked against your real schema. Sensitive fields are masked as environment variables.
In · Schemas, stories, casesOut · JSON fixtures
Fixtures· RefundRequest26 values
amount = 10000.00boundary
amount = -1invalid
approver_id = ${APPROVER_ID}masked
TC-032 expects 422matches schema
Checked against the RefundRequest model
Illustration · sample data
Plan and design
Threat model
Live
Builds a data-flow diagram from your routes, call graph and dependencies, then runs STRIDE, LINDDUN and PASTA over it.
How it's checkedA threat is corroborated only when a real scan finding shares its CWE. There is never a "secure" verdict.
In · Code, OpenAPI, scan resultsOut · Threat register with coverage
NextThreat-model diff on every change
Threat register· payments-serviceSTRIDE · LINDDUN · PASTA
POST /refund · denial of servicecorroborated · CWE-770
ledger DB · tamperinghypothesis
customer profile · linkabilityhypothesis
webhook endpoint · spoofingunverified
18 of 24 element and category cells assessed
Illustration · sample data
Generate tests
Unit and integration tests
Live
Writes pytest, Jest, JUnit 5 and Go tests for the files you choose, plus characterisation tests that pin current behaviour.
How it's checkedTests may only import symbols that exist. Python and TypeScript suites run in a sandbox; Java and Go are marked generated only.
In · Source filesOut · Test files with measured results
Test generation· payments-servicerun #1042
test_refund_handler.py · 14 tests14 passed
RefundServiceTest.java · 6 testsgenerated only
Line coverage, Python82%
Imports checked against real symbols0 invented
Illustration · sample data
Generate tests
End-to-end tests
Live
Writes Playwright, Cypress or Selenium (Java or Python) suites for the journeys and URL you give it, including behind login.
How it's checkedSelectors come from a live inspection of your app and every cited selector is checked against the page. Suites ship with config and run instructions.
In · Journeys, URL, repoOut · Runnable suite
NextAppium for Android and iOS
End-to-end suite· Playwrightstaging.yourapp.com
approval.spec.ts · 3 journeysgenerated only
Selectors found on the live page18 of 18
Lint: no hard sleeps, no empty assertsclean
playwright.config.ts · RUN.mdscaffold added
Grounded behind login with your saved session
Illustration · sample data
Generate tests
Contract tests
Live
Writes API tests from your OpenAPI or Swagger spec, one file per tag, covering every documented status code.
How it's checkedThe spec is the source of truth, not the model's guess about your API.
In · OpenAPI spec, live APIOut · Contract test files
NextGraphQL contracts and a mock server
Contract tests· openapi.yaml3 tags
POST /refunds · 201, 400, 409, 4224 of 4 codes
GET /refunds/{id} · 200, 4042 of 2 codes
PATCH /refunds/{id}/approve · 200, 4032 of 2 codes
DELETE /refunds/{id}not in spec
Illustration · sample data
Generate tests
Functional and BDD
Live
Turns user stories into tests: story-driven pytest, or real Gherkin with step definitions for pytest-bdd, cucumber-js or cucumber-jvm.
How it's checkedScenarios carry requirement tags, so the traceability matrix can follow them. pytest-bdd runs here; Cucumber is generated only.
In · Stories from a file, upload or the codeOut · Tests and .feature files
refund_approval.feature· pytest-bdd6 scenarios
Scenario: refund over the limit@REQ-12
Scenario Outline: 4 example rowsfrom test data
pytest-bdd run6 passed
cucumber-jvm step definitionsgenerated only
Illustration · sample data
Run against your app
Live UI test
Live
Runs a journey written in plain English in a real Chromium browser against staging or production.
How it's checkedThe verdict comes from the assertions, not from how many steps ran. A broken selector is repaired once and reported.
In · URL, journey, optional sessionOut · Step screenshots and verdict
Journey · refund approval· Chromiumstaging
Signed in as ops.managerpass
Entered 12,500 on charge ch_7f21pass
Approval banner shownpass
Approve button selector repaired oncerepaired
Verdict from 3 assertions: pass
Illustration · sample data
Run against your app
Visual regression
Live
Pins a baseline the first time and compares every later run pixel by pixel.
How it's checkedMissing screenshots show as not compared, never as a match.
In · URL, optional journeyOut · Diffs against the baseline
Visual check· refund journeybaseline 12 Sep
Screen 1 · refund formmatch
Screen 2 · approval bannerdiff 2.4%
Screen 3 · confirmationnot compared
Screen 3 had no current screenshot
Illustration · sample data
Run against your app
Accessibility
Live
Checks WCAG 2.0 and 2.1 A and AA on every page it visits, with the element and the rule for each issue.
How it's checkedA page that didn't load is inconclusive, never "0 violations".
In · URLOut · Issues by severity
Accessibility· /refunds/newWCAG 2.1 AA
Amount input has no label · 1.3.1critical
Approve button contrast 3.9:1 · 1.4.3serious
Page has landmark regionspass
Each issue names the element and the rule
Illustration · sample data
Run against your app
Page health
Live
Collects failed requests, mixed content, console errors and broken links, with no AI involved.
How it's checkedA page where nothing was observed reports no signal instead of a clean bill.
In · URLOut · Health report
Page health· /refunds142 responses
GET /api/fx-rates returned 503failed request
Image over http on an https pagemixed content
Link /help/refunds returns 404broken link
Console errorsnone
Illustration · sample data
Analyse code
Repo snapshot
Live
Runs test generation, bug detection, security and impact analysis in parallel over a repository or a set of changed files.
How it's checkedOne agent failing never blocks the other three, and each result carries its own label.
In · Repository or changesOut · Four reports in one run
NextGitLab and Bitbucket, alongside GitHub In build
Run #1042· payments-service4 agents
Tests · 20 written14 measured
Bugs1 open
Security1 high
Impact · Java callersinconclusive
Illustration · sample data
Analyse code
Bug detection
Live
Reads the code across twelve bug categories and proposes a fix for each finding.
How it's checkedThe code is read on its own first, then checked against complexity, the call graph and static-analysis hits. Files it didn't reach are listed.
In · Source filesOut · Findings with file, line and fix
Shows real token usage and spend per run, module and project.
How it's checkedCounted from actual calls. A model with no known price shows N/A, not $0.
In · Every AI callOut · Usage and cost
Cost analytics· Septemberby module
test-gen · strong tier$2.20
threat-model · fast tier$0.18
Run #1042 · 412k tokens$3.10
internal-model-xN/A · no list price
Illustration · sample data
Live
Project dashboard and analytics.
Group a product's repositories into a project, and the dashboard takes the latest run of each check in each repository. Coverage, bugs, security and impact sit side by side, and every figure says how many repositories it rests on. A repository that wasn't measured shows N/A, so an average can't hide it.
Coverage you can quoteRequirement coverage and test health per repository, with "3 of 4 measured" beside the number instead of a blended guess.
History across every runCoverage, findings and test health plotted run by run. A run that measured nothing leaves a gap, not a drop to zero.
Analytics per product and repositoryTrends over weeks and releases, so a regression shows up the week it happens.
Run history in plain wordsEach run says what it found, such as "2 bugs, 1 threat" or "78% of requirements verified", not just "completed".
payments-platform· project dashboard4 repositories · last run 9 min ago
Requirements verified
78%3 of 4 repos
Open security findings
31 high
Test health
94%4 of 4 repos
Repository
Coverage
Bugs
Security
Impact
payments-service
81%
1
1 high
medium
checkout-web
74%
0
0
low
ledger-api
79%
2
2
high
notifications
N/A
0
0
N/A
Requirements verified · last 8 weeksmeasured runs only
W31W32W33W34W35 · N/AW36W37W38 · 78%
#1042
on demand · payments-service
1 bug · 1 threat
#1041
nightly · checkout-web
88 UI tests passed
#1039
load report · payments-service
N/A · no k6 report
Illustration · sample data
How a result is made
The AI judges. The platform checks the judgement.
This is the part most tools skip. A model can say anything, so nothing it says becomes a result until the platform has checked it against your code and seen what ran.
1 · Inputs
Your material
Source code, requirements, OpenAPI specs, CI reports, load results, a running URL.
2 · AI
Judgement
Extracts, classifies, designs tests, diagnoses. Routed to the model tier you set.
3 · Platform
Verification
Every cited file and line resolved
Selectors checked on the live page
Framework and assertion gates
What can run is run
4 · Label
Evidence state
Measured, generated only, inconclusive or N/A, decided by step 3.
5 · Output
Your tools
Test files ready to commit, findings cited to file and line, an Excel traceability matrix.
Bring your own model
Your models, your keys.
Anthropic, OpenAI, Google, or any OpenAI-compatible endpoint, including a gateway in front of Bedrock or Azure. Give a cheap fast tier to classification and a strong one to test design. Every run records which model did the work, and your provider bills you directly.
# config/modules.yaml · read live, no restart# the provider is detected from the model namedefault_model: ""# "" = the platform defaultmodel_tiers:
fast: gemini-3.5-flash-litestrong: claude-sonnet-4-5modules:
test-cases: { enabled: true, model: fast }
test-gen: { enabled: true, model: strong }
bug-detection: { enabled: true, model: strong }
threat-model: { enabled: true, model: strong }
performance: { enabled: false }
Roadmap
What we're building next.
Customers help set the order in a monthly release review. Alongside each release we keep working on accuracy, AI cost per run, speed and scale.
Run what we generate
Playwright, Selenium, JUnit and Go suites run in the platform
GitHub Actions and Jenkins steps
Two-way Jira, scheduled runs
Roles, API keys, audit trail, branding
Your tools, your repo
Cloud grid execution
Test manager with Jira and Azure DevOps
ServiceNow and ALM export
Accuracy benchmark on your journeys
Mobile and assistants
Appium for Android and iOS on grid devices
Sahasa.AI inside Claude Code, Cursor, Copilot
Manual runner linked to the matrix
Single sign-on
API breadth, video to test
GraphQL contract tests, mock server
A recorded journey turned into a suite
Load-test creation for k6 and JMeter
Import from TestRail, Zephyr, Xray, qTest
Complex journeys and load
Branching and cross-app flows
Event-driven and async API tests
Load tests run against baselines and SLOs
Release-readiness view
Scale and packaged apps
Salesforce, Dynamics and SAP Fiori
Distributed runs on your runners
Core Web Vitals and performance alerts
Dashboard v2, SOC 2 readiness
Not on the plan: a device farm, a proprietary step language, a full ALM, desktop or TV apps.
Next step
Bring one repository.
We'll walk you through Sahasa.AI on a sample project and talk through how it would fit your stack. If it looks useful, we can scope a pilot together.
01
A short call. Your stack, your frameworks, and where quality hurts today.
02
A demo. The platform on a sample project, and how it would connect to your tools.
03
A pilot, if it fits. Scoped with you around one service.