Your error tracker has been telling you about the same unhandled null for three weeks. It is correct, it is well-formatted, and it has never once written a patch. Patcherly drafts the change, you approve it, and it applies on your own infrastructure, or arrives as a pull request for your normal review.
Correct, if the AI decides. The whole design here is that it does not. There are six gates between a model producing a diff and a byte changing on your disk, and you own four of them.

Every fix waits for your say-so. Dry-run starts off on new sites - turn it on only for preview-only. Auto Apply on Pro is opt-in per site - never a surprise default.
Every fix waits for a human. Low-confidence proposals need a second, separate confirmation before they can be applied at all.
Monitored paths, excluded paths and patch-exclusion paths are per site. Whole trees can be declared untouchable, and stay that way.
Every path in the patch is snapshotted on your own host first, with sha256-verified backup manifests. The restore copy never leaves your machine.
The file is parsed before and after the write. Then a health request runs against your site, plus tests or deeper checks on supported plans.
A failed check triggers restore from the local snapshot. You can also roll back any applied patch yourself, whenever you like. Docs →
Auto Apply does exist on Pro. It is opt-in, scoped to a single site, revocable in one click, and it still runs the backup, the syntax check, the health check and the rollback. It is a decision you make per site after you have watched it work - not a default you have to remember to turn off.
If your team only trusts what went through review and CI, keep it that way. Delivery mode is set per site: production can wait for your merge, or get the fix now with the PR following behind.
The connector applies the approved fix on your server, after a local backup, then checks the site still responds. If it does not, the backup goes straight back. The fastest way to stop the bleeding.
Your server is never written to. The approved fix arrives as a pull request on your GitHub repo, on its own patcherly/ branch. Review it, let CI run, merge when it suits you. The error closes when the PR merges.
Fix production now and keep the repo in step. The patch applies live and the same change opens as a pull request, so your next deploy does not quietly undo it.
Python, Node.js and PHP apps often need more than a changed file: a process reload, a cache clear, a quick test run. Write those steps once in a short YAML manifest, and the connector runs them on your server after every successful patch.
# Sites → your site → App restart → Configure
version: 1
when: on_fix_success
working_directory: /srv/shop-api
steps:
- name: reload_api
run: pm2 reload shop-api
timeout_seconds: 60
- name: smoke_tests
run: npm test -- tests/smoke
timeout_seconds: 120Sentry, Rollbar, Bugsnag and Datadog do tracing, performance, release health, session replay and a breadth of SDKs Patcherly does not attempt. If you are evaluating this as a swap, you will be disappointed, and we would rather say that here than in month three.
Patcherly picks up where they hand off. The error is known. The stack trace is beautiful. Somebody still has to open the file, work out what changed, write the patch, get it reviewed and ship it. That gap is the product.
Read the product scope doc before you buy. It is written to set expectations, not to sell.
Not “we take security seriously”. The actual list, so you can decide whether it is acceptable before you install anything.
API keys, passwords and tokens are pattern-redacted before anything reaches a model or a log line.
Inbound is a signed patch payload. Unsigned or replayed messages are refused, and signing cannot be disabled.
Log lines are attacker-influenceable input on their way to a model. Suspicious payloads are quarantined and flagged instead of analysed, with a per-site protection mode. How →
Connectors pair through a short-lived device-code grant with fixed scopes that never widen for the life of the connection. Revoke from the dashboard and the connector is dead immediately.
Frankfurt. The Art. 28 DPA and the subprocessor list are on the site, not behind a sales call. Full detail on the security page.
Patcherly started as a research question, tested across a million simulated sessions before it was a product. The numbers and the methodology are both published.
Errors resolved without a human.
Against roughly 5% without enriched context. Same error pool, same review process.
Drop in resolution time.
Base scenario. Includes human approval time, not just machine time.
Errors still needing a person.
Roughly one in eight handed back to automation. Not a revolution - a real dent.
You are going to find these in week two anyway. Better you find them now and decide with the real shape of the thing in front of you.
It reacts to errors your application emits. It does not poll your endpoints every minute to tell you the box is alive. Keep your monitoring stack.
Checks confirm the app loads and tests pass. They cannot prove every user journey works. Bugs behind rare paths still need QA.
It patches source. It does not migrate a schema, edit a database row, or rewrite your infrastructure config.
Environment-specific and race-condition errors may not reproduce on a post-apply check, so verification tells you less than you would like.
No post-fix test runs or restarts on the WordPress plugin, by directory rule and by design. Use the standalone connectors where you need that. Docs →
PHP, Python, Node.js and WordPress. Go, Ruby, Rust, Java and .NET are roadmap, not shipping. Tell us what you run.
Nothing to import, no middleware to wire, no build step. The connector reads the logs you already write. Your PR flow and your CI do not move an inch.
Prefer a registry install? Use WordPress.org, npm, PyPI, or Packagist for your stack.
curl -sSL https://api.patcherly.com/install.sh | sudo bash
The Connect modal in your dashboard hands you the same command with the pairing code already in it. All connectors · Install docs
The ones we would ask too. Not answered here? Ask directly - the founder is also the person on call for Patcherly itself.
No, and we would rather say so than lose the argument later. Those products do tracing, performance, release tracking, session replay and breadth of SDKs that Patcherly does not attempt. Patcherly starts where they finish: you already know the error exists, and something still has to write the patch. Plenty of teams run both.
No. The connector sends the error message, the file path and line, a scrubbed snippet around the error, and environment metadata. Secrets are pattern-redacted before anything leaves the host. Your repository is never mirrored, cloned or stored, and your code is never used to train third-party foundation models.
The apply step is gated by default. Every patch waits for an explicit approval, and low-confidence proposals need a second confirmation. Dry-run starts off on new sites (Approve can apply for real); turn it on per site only when you want preview-only. Auto Apply exists on Pro, but it is opt-in, scoped per site, and revocable in one click. The failure mode people rightly worry about with autonomous remediation is the one this architecture removes.
The connector snapshots every path in the patch before writing, verifies syntax before and after, then runs a post-apply health request against your site URL, and on supported plans tests or deeper checks. If verification fails, rollback restores from the local snapshot - automatically, or manually whenever you want.
Yes, on Python, Node.js and PHP sites (Pro). You list the steps in a short YAML manifest, such as a process reload, a cache clear or a smoke-test run, and the connector runs them after each successful patch. The WordPress plugin deliberately does not run server commands. Manual restart is always available on your host.
Error text is untrusted input, so it is treated as hostile. Suspicious payloads are quarantined and flagged rather than analysed, and our protection mode controls how aggressively that gate closes.
The EU, in Frankfurt. Your code and your pre-apply backups stay on your own machine and never reach us. A Data Processing Agreement is published and the subprocessor list is public.
It patches code files, not database rows or configuration. Post-patch verification is best-effort inside the workflow: it can confirm the app loads and tests pass, not that every user journey works. Intermittent and environment-specific bugs may not reproduce on a check. And it is not uptime monitoring; it reacts to errors your application emits.
Add one site and watch what it proposes. Turn Dry-run on if you want a preview-only week first: it cannot write anything until Dry-run is off and you approve (or Auto Apply is on on Pro), so the worst case is that you learn what your logs have been hiding.
Full Pro plan for 30 days. No credit card. Free Personal plan after that, for as long as you like.
Not ready to connect anything? Start with getting the real error out of a 500, per stack and by hand.