Demo
Watch Novix work a task.
One task, start to finish, on example data.
An issue lands in a tool you already use
A customer writes in. Novix classifies it as a bug and sets the priority before anyone opens it. Spam is set aside first. A teammate asking for a change is treated as work and gets a patch, not a support reply.
500 error on /checkout after v2.4.1 deploy
“Checkout is broken for us. Every purchase has returned an error page since this morning. We’re losing orders. Can you look at this urgently?”
Sarah, reporting for Brightline
Or an engineer names Novix where the team is already talking.
@Novix csv export times out for large orgs
Novix takes the thread as the report and runs the same five steps.
Where Novix can post back to Slack it answers in that thread too: the diagnosis, the pull request link, and a question when it needs more. All of it is on the task either way, and merging is still yours.
Or nobody reports it at all, and your monitoring starts the run.
TypeError: cannot read property ‘total’ of undefined
The same agent steps run with nobody in them, and the answer is published where you said: a Slack thread, a Discord message, a Linear issue, a Notion page or an email.
A recovery, an acknowledgement or a test page never becomes a task, and an alert matching no auto-summon is still diagnosed. Merging is still yours here too.
Novix finds the root cause
Novix reads the code, the recent deploy and past incidents, then names the cause with the receipts. Not every task is a bug: it answers user error itself and asks for specifics when a report is too thin.
- Read task and matched it to the v2.4.1 deploy
- Pulled code context for the checkout service
- Found: null pointer at payment_service.go:42
Orders from the new guest-checkout flow are created without a payment object; Charge() dereferences it without checking.
A fix is drafted, reviewed and verified
The candidate fix is a small, boring diff. It clears a security review and a safety review, then runs your own build and tests in a sandbox, so a fix that breaks the build says so on the card.
func Charge(o *Order) error {
+ if o.Payment == nil {
+ return ErrMissingPayment
+ }
amt := o.Payment.AmountYou approve it, without leaving that tool
Nothing ships without a human, and nobody has to open Novix to be one. Merge the pull request yourself, comment novix approve in the tool the report came from, reply to the mail, or press the button in Slack or the dashboard. Every decision trains the next one.
Fix for #892 · null pointer at payment_service.go:42
The fix always arrives as a pull request: GitHub PR #412, ready for review when the fix review passed at low risk, a draft carrying the reason when it did not. Merging it is the approval, wherever you are standing. Novix never merges on its own.
Not the fix you wanted? Say how you would do it, here or with novix redraft in the tool it came from, and Novix re-drafts your way.
The customer hears back
The customer gets a resolution update, Novix checks the bug is actually gone, and the diagnosis becomes a known issue that answers the next person before they file a ticket.
“This is fixed. Guest checkouts created without a payment method were failing at charge time. Can you confirm it works on your end?”
Sarah replies “working now, thank you.” It lands on the same task as a follow-up, not a duplicate, confirmed by the person who hit it.
When Novix needs a detail, it asks in the thread the task came from. Reply there and it carries on.
The diagnosis becomes a self-serve answer, deflecting the same report before it becomes a ticket.
Now run it on your tasks.
Free to start · no card to sign up · how the trial works