{"slug": "muraqib-free-nightly-qa-that-lets-claude-open-a-fix-pr-when-tests-fail", "title": "Muraqib, free nightly QA that lets Claude open a fix PR when tests fail", "summary": "Muraqib, a free nightly QA system for solo developers, runs Playwright tests against live apps and lets Claude open fix PRs when tests fail, with a weekly digest email. The open-source project, released on GitHub, uses GitHub Actions, Claude Code Action, and Resend, and defaults to manual review unless auto-merge is enabled with a guard. It offers a self-hosted alternative to Octomind's paid service, which stopped taking new customers in April 2026.", "body_md": "**Arabic: مُراقِب (\"the guardian, the watchful one\")**\n\nMuraqib is a nightly QA system built for one-person software teams. It runs Playwright tests against your live app every night, lets Claude fix failing tests automatically, and sends you one weekly summary email. You only hear about it on Monday morning.\n\nSolo founders can't afford a QA team. But silent regressions (a broken signup flow, a payment page that 404s, a broken PDF export) are invisible until a customer complains. Muraqib watches while you sleep.\n\n```\nNightly (2am) → Playwright runs all tests against production\n               ↓ if tests fail\n               Claude reads the error, diagnoses it, opens a PR with the fix\n               ↓ if fix passes CI\n               PR waits for manual review by default, see \"Auto-merge\" below\n               ↓ always\n               Weekly digest email every Monday with pass/fail history\n```\n\n**Playwright**: browser automation + test runner** GitHub Actions**: nightly cron, dispatches the Claude fix workflow on failure** Claude Code Action**: reads failing test output, writes the fix, opens a PR** Resend**: failure/weekly digest email\n\n| Path | What it does |\n|---|---|\n`tests/` |\nPlaywright test specs (you write these for your app) |\n`tasks/` |\nHandwritten automation tasks |\n`tasks/registry.ts` |\nMaps task names to handlers, no runtime AI, zero token cost |\n`task-runner.ts` |\nCLI: `npm run task -- <name> --flags` |\n`lib/selfHeal.ts` |\nReference implementation of the Claude fix-prompt builder |\n`.github/workflows/` |\nThe nightly runner + the Claude auto-fix workflow, already wired |\n\n- Use this repo as a template (or clone it) into your own project.\n- Edit\n`muraqib.config.ts`\n\n: set`baseUrl`\n\n,`projectName`\n\n,`flows`\n\n, and`alerting.emailTo`\n\n/`emailFrom`\n\n. - Add secrets in your repo settings:\n`ANTHROPIC_API_KEY`\n\n,`RESEND_API_KEY`\n\n. - Write your Playwright specs in\n`tests/`\n\n, matching the`file`\n\nname in each flow. - Leave\n`claudeIntegration.autoMerge`\n\nat its default (`false`\n\n) until you've read the \"Auto-merge\" section below.\n\nDefault is off. Claude opens a PR, CI runs against it, and it waits for you to review and merge, the same as any other PR. This is deliberate: CI passing means the fix didn't break the tests it can see, not that the fix is correct.\n\nIf you turn `autoMerge`\n\non, two independent things keep it from touching payment/auth/migration/secrets code:\n\n- The Claude fix prompt is instructed to leave those for manual review regardless of the setting. That is a text instruction a model reads.\n`.github/workflows/auto-merge-guard.yml`\n\nchecks the actual changed files on any PR with auto-merge enabled and force-disables it if a sensitive path matches. That is code, not a prompt.\n\nTurning `autoMerge`\n\non requires one manual setup step: add **\"Muraqib Auto-Merge Guard / guard\"** as a required status check in your repo's branch protection rules for `main`\n\n. Without that, the guard still runs and will disable auto-merge and comment if it catches something, but GitHub's native auto-merge can complete before the guard job does. A required status check is what makes GitHub wait for it. Auto-merge without both the guard and that setting is not a safety net, it's just skipping review. This repo has that setting configured on `main`\n\nas of 2026-08-29; if you fork or clone this for your own project, you need to add it yourself.\n\nOctomind offered a similar idea (nightly AI-assisted QA) as a paid, hosted product starting around $89/month, and stopped taking new customers in April 2026. This project is not a hosted replacement for it, it is a different shape entirely: you clone it, it runs in your own GitHub Actions and your own Claude subscription, and there is no monthly bill because there is no service to bill for. The tradeoff is honest too, you set it up yourself (a config file, two secrets, your own test specs), instead of signing up and getting a dashboard.\n\nIf you want a hosted, zero-setup product with support, this is not that. If you want the same core idea for $0 and are fine reading a README, this repo is free and MIT licensed, and its full defect history (below) is public, not a claim.\n\n**Tasks are always handwritten**: no runtime AI generates or executes tasks. Writing a new handler is one-time Claude work. Running it costs 0 tokens.** You get one email per week**, plus one on the night something actually breaks. Not one per failed test. Signal, not noise.** Test failure text is data, not instructions**: the Claude fix prompt explicitly labels error output as untrusted, and never lets it decide the auto-merge outcome.** Auto-merge is opt-in and scoped**: off by default, and even when on, payment/auth/migration/secrets changes always wait for a human.\n\nMIT License.", "url": "https://wpnews.pro/news/muraqib-free-nightly-qa-that-lets-claude-open-a-fix-pr-when-tests-fail", "canonical_source": "https://github.com/holistis/muraqib", "published_at": "2026-08-29 08:44:08+00:00", "updated_at": "2026-08-29 08:48:16.050379+00:00", "lang": "en", "topics": ["ai-tools", "ai-agents", "developer-tools"], "entities": ["Muraqib", "Claude", "Playwright", "GitHub Actions", "Claude Code Action", "Resend", "Octomind"], "alternates": {"html": "https://wpnews.pro/news/muraqib-free-nightly-qa-that-lets-claude-open-a-fix-pr-when-tests-fail", "markdown": "https://wpnews.pro/news/muraqib-free-nightly-qa-that-lets-claude-open-a-fix-pr-when-tests-fail.md", "text": "https://wpnews.pro/news/muraqib-free-nightly-qa-that-lets-claude-open-a-fix-pr-when-tests-fail.txt", "jsonld": "https://wpnews.pro/news/muraqib-free-nightly-qa-that-lets-claude-open-a-fix-pr-when-tests-fail.jsonld"}}