Open-Source Momentic Alternative: Read Every Line of the Test Agent
Every "Momentic alternative" listicle checks the "open source" box and moves on. None of them explain what open source actually means for an AI testing tool. Here is what it means: the file agent.ts in Assrt contains 15 tool definitions that control how the test agent navigates, clicks, types, asserts, and reports. You can read every one. You can change any of them. You can add your own. With Momentic, that logic is a black box running on someone else's server.
“Assrt's test agent is 15 tool definitions in a single TypeScript file. Momentic's equivalent is proprietary, undocumented, and costs $2,500/mo.”
Assrt source: agent.ts lines 16-196
1. What "Open Source" Actually Means for a Test Agent
When a traditional testing library (Playwright, Cypress, Selenium) says "open source," you know what that means: the API, the runner, and the assertion library are all code you can inspect. You trust it because you can read it.
AI testing tools break that contract. Momentic, Testim, and others run a proprietary AI layer between your test plan and the browser. That layer decides how to find elements, when to retry, what counts as a pass. You cannot see how it makes those decisions. You cannot change its behavior when it makes the wrong call. You pay for access to a black box.
Assrt is different because the AI layer itself is open source. The test agent is not a compiled service you call over HTTP. It is a TypeScript file (src/core/agent.ts) that defines the tools available to the LLM, the system prompt that guides its behavior, and the execution loop that processes tool calls. Every decision the agent makes traces back to code you own.
This matters most when something goes wrong. A Momentic test fails, and you get an error message. An Assrt test fails, and you can read the system prompt (lines 198 to 254 of agent.ts) to understand exactly why the agent chose that action. You can change the prompt. You can change the tool. You do not need to file a support ticket and wait.
2. The 15 Tools Inside agent.ts
The test agent operates by calling tools. Each tool is a JSON object with a name, a description the LLM reads to decide when to use it, and an input schema that defines its parameters. Here is the complete list:
| Tool | What it does |
|---|---|
| navigate | Goes to a URL and waits for the page to load |
| snapshot | Returns the full accessibility tree with ref IDs for every element |
| click | Clicks an element by its accessibility ref ID |
| type_text | Types into a field identified by ref ID |
| select_option | Selects a dropdown value |
| scroll | Scrolls the page in a specified direction |
| press_key | Sends a keyboard event (Enter, Escape, Tab, etc.) |
| wait | Pauses execution for a specified duration |
| screenshot | Captures a PNG of the current viewport |
| evaluate | Runs arbitrary JavaScript in the page context |
| assert | Records a pass/fail assertion with a description |
| complete_scenario | Signals that all steps for a test case are finished |
| suggest_improvement | Reports a UX issue found during testing with severity and fix suggestion |
| http_request | Makes an HTTP call (useful for API validation alongside UI tests) |
| wait_for_stable | Monitors DOM mutations and waits until the page stops changing |
Each of these is a plain object in a TypeScript array. The click tool, for example, has an input schema that accepts a ref parameter (the accessibility tree ref ID) and an optional coordinates fallback. The LLM reads the description to decide when to use it. You can change that description. You can rename the tool. You can remove it. The agent adapts.
With Momentic, you cannot see what tools the AI uses internally, how it decides between a CSS selector and a visual match, or why it chose one retry strategy over another. That information is proprietary.
Read the source yourself
Assrt is MIT licensed. Clone the repo, open agent.ts, and see every tool the test agent uses. No signup required.
Get Started →3. Adding Your Own Tools
This is where open source becomes a practical advantage, not just a licensing checkbox. Because the TOOLS array is a regular TypeScript array, you can add a 16th tool (or a 20th) by adding an object with three fields: name, description, and input_schema.
Real examples of what teams add:
- check_database: query a local PostgreSQL instance to verify that a form submission actually wrote the correct row
- validate_pdf: download a generated PDF and check that it contains the expected text
- check_analytics_event: intercept network requests and verify that the correct tracking pixel fired
- compare_screenshot: diff the current screenshot against a baseline image for visual regression testing
The agent does not need to be retrained or reconfigured. It reads the tool descriptions at runtime and decides when to use them based on the test plan. If your test plan says "verify the database row was created," the agent will call your check_database tool because its description matches the intent.
Try doing this with Momentic. You cannot. Their tool vocabulary is fixed. If their AI does not support the assertion you need, you either file a feature request or work around it.
4. Self-Hosting: 48 Lines of Dockerfile
The Assrt web app ships with a Dockerfile that is 48 lines long. It uses Node.js 20 slim as the base image, installs Playwright's Chromium dependencies via APT, copies the built app, and exposes port 8080.
git clone https://github.com/assrt-ai/assrt.git
cd assrt
npm install
npx playwright install chromium --with-deps
npm run build
npm startThe database is SQLite. It auto-creates at data/piastest.db on first run. No PostgreSQL. No MySQL. No managed database service. One file, on your disk.
For the CLI and MCP server, there is nothing to host:
npm install -g @assrt-ai/assrt
assrt run --url http://localhost:3000 --plan "Test the login flow"It installs from npm, launches a local Chromium instance, and runs the test. Your app's DOM, screenshots, and test data stay on your machine. The only external call is to the LLM API (Claude or Gemini) for reasoning.
Momentic requires their cloud. Your test steps are sent to Momentic's servers for AI processing. For teams testing behind a VPN, working in regulated industries, or simply wanting to control where their data goes, this is a non-starter.
5. Assrt vs Momentic: Open-Source Comparison
| Dimension | Assrt | Momentic |
|---|---|---|
| License | MIT | Proprietary |
| AI agent source code | Fully readable (agent.ts, 15 tool definitions) | Closed, not inspectable |
| Tool extensibility | Add tools by editing a TypeScript array | Fixed tool set, no extension |
| System prompt | Readable and editable (agent.ts lines 198-254) | Hidden |
| Self-hosting | 48-line Dockerfile, SQLite, no external DB | Cloud only, no self-hosting |
| Test format | Plain markdown (#Case N:) | Proprietary YAML |
| Price | Free (pay for your own LLM API calls) | ~$2,500/mo (opaque, quote-based) |
| AI model choice | Claude, Gemini, or any function-calling LLM | Undisclosed, no choice |
| Data residency | Your infrastructure, your rules | Momentic's cloud servers |
The table is lopsided on purpose. Momentic is not pretending to be open source. It is a funded SaaS product designed for enterprise buyers who prefer a managed service and can afford the price tag. Assrt is for developers who want to understand (and control) exactly what happens when their tests run.
6. Frequently Asked Questions
Can I actually modify how the test agent works, or is 'open source' just marketing?
The test agent's behavior is defined in two places: the TOOLS array in agent.ts (15 tool definitions with JSON Schema parameters) and the system prompt in the same file (lines 198 to 254). You can change how any tool works, add new tools, or rewrite the system prompt. The agent uses standard function calling, so any tool you add to the array becomes available on the next run. There is no compiled binary or obfuscated runtime.
What license does Assrt use?
MIT. The MCP SDK (@assrt-ai/assrt) and the web app are both MIT licensed. You can use Assrt in commercial projects, modify it, distribute it, and include it in proprietary products. The only requirement is preserving the license notice.
How do I self-host Assrt?
Clone the repo, run npm install, install Chromium via npx playwright install chromium, build with npm run build, and start with npm start. The database is SQLite (auto-created at data/piastest.db), so you do not need PostgreSQL or MySQL. For container deployments, the Dockerfile is 48 lines and uses Node.js 20 slim as the base image. It needs about 2 GB of RAM per concurrent test.
What happens to my tests if I stop using Assrt?
Test scenarios are plain markdown files using a #Case N: format. They live on your filesystem at /tmp/assrt/scenario.md while running, and you can commit them to git like any other file. The scenarios do not reference Assrt-specific APIs or proprietary identifiers. A human or another tool can read them and understand what to test.
Does Assrt work behind a firewall or in air-gapped environments?
Yes. Assrt runs entirely on your machine or your server. The only external call is to the AI model API (Claude or Gemini) for test reasoning. If you have an on-premises LLM that supports function calling, you can point Assrt at it. Your application's DOM, screenshots, and test data never leave your infrastructure.
How is this different from just using Playwright directly?
Playwright is a browser automation library. You still have to write test code, maintain selectors, and handle assertions. Assrt adds an AI agent layer on top of Playwright that reads the accessibility tree, decides what to click and type, and runs assertions based on natural language test plans. You get Playwright's browser engine with AI-driven test execution, and because it is open source, you can see exactly how the AI layer works.
Can I add a custom tool to the test agent?
Yes. The TOOLS array in agent.ts is a standard array of tool definitions with name, description, and input_schema fields. Add a new object to the array with a JSON Schema for parameters, then handle it in the tool dispatch function. The agent will see your tool in its available actions and use it when the test plan calls for it. For example, you could add a tool that checks database state, calls an internal API, or validates a PDF download.
Fork It, Extend It, Own It
Assrt is MIT licensed. Clone the repo, open agent.ts, and start reading. Add your own tools. Deploy on your infrastructure. Your tests, your code, your data.