How it works

From a visitor who got stuckto a merged pull request.

Starko watches where your product gets in the way, decides what is worth fixing, has a coding agent build and verify the fix, and puts the pull request in front of you with its proof. Here is every step, and what happens inside each one.

01 · Observe

The widget records what the visitor saw, around the moment it went wrong.

The same chat widget that answers your customers can record their session in the browser. The recording stays on the visitor's device and is uploaded only when something happens: a JavaScript error, a failed API call, a rage click, an action that failed, or the visitor opening a conversation. A session where nothing goes wrong never leaves the browser.

  • It records the page structure, clicks, navigation and scrolling, not a screen video. Canvas and 3D viewers are captured as frames.
  • Every input field is masked. Add starko-mask to hide an element's text, or starko-no-capture to leave it out entirely.
  • Recordings are deleted after 7 days, or after 30 when they belong to a conversation or a ticket.
  • The upload triggers are set on Starko's side, so they change without a redeploy of your site.
app.northwind.io/reports
Reports
Export
Export failed. Try again later.
Back
NNorthwindHi! How can we help?
Export keeps failing, I need this report for a meeting.
NNorthwindSorry about that. While we look into it, you can download the same report as CSV: open Reports, then the ⋯ menu, then Download CSV.
CSV works, thanks. But the Export button just does nothing?
Type your message...
02 · Answer

Starko AI answers first, and hands over with everything attached.

When the visitor writes, Starko AI replies from your knowledge base on the channel they used: the web widget, WhatsApp, email, Instagram or Slack. What it cannot settle goes to your team with the conversation, the customer record and the recording in one thread. Questions it could not answer are tracked as knowledge gaps, so the help center gets written where customers actually look.

  • The support side, inbox, AI answers, ticketing and knowledge base, is free.
  • Every channel lands in the same inbox, so a WhatsApp complaint and a widget recording can point at the same problem.
  • See channels and the support inbox.
v2.starko.one/dashboard/conversations/8c1e…
Conversations/Mia Novak
72%
MN
Mia Novakmia@northwind.io
Export keeps failing, I need this report for a meeting.
Starko AI
Sorry about that. While we look into it, you can download the same report as CSV: open Reports, then the ⋯ menu, then Download CSV. Exporting reports · Knowledge Hub
MN
Mia Novakmia@northwind.io
CSV works, thanks. But the Export button just does nothing?
Starko AI
That looks like a bug on our side, so I have passed it to the team with your session attached. You will hear back here.
03 · Understand

Starko replays the session and asks one question: where did the product get in the way?

When the conversation settles, Starko rebuilds the recording in a short-lived sandbox, screenshots the moments around the errors and the trigger, and resolves what each click actually hit. That becomes a timeline a model can read: pages, clicks with their targets, masked typing, idle gaps, errors, and the moment the chat opened. A classifier reads it next to the conversation, because the visitor's own words say what they were trying to do.

  • The verdict is one of five: Smooth, Hesitation, Confusion, Dead end or Inconclusive. Inconclusive is a valid answer, preferred over a confident guess.
  • Each piece of evidence cites a [mm:ss] moment that exists in the timeline, so a person can jump straight to it.
  • Clips with under 10 seconds of activity or fewer than 50 events are skipped, not guessed at.
  • Recordings without a conversation, started by an error or a rage click, are read too, with a stricter bar, since intent has to come from behaviour.
  • The conversation is treated as data. Instructions a visitor types into the chat are never followed.
Session replayapp.northwind.io/reports · 1m 12s · expires in 30d
Reports
Export
Export failed. Try again later.
00:1401:12
1x2x4x8xskip inactive
04 · Triage

Only confident friction becomes a ticket, and repeats pile onto one.

A recording is filed on its own only when the verdict is Confusion or Dead end at 70% confidence or more, or when the visitor described the problem themselves (60% and up). Before filing, Starko checks the open recommendations from the last 90 days. If one already covers the same thing, the recording is added to it as a sighting. Ten confused visitors become one recommendation with ten sightings, not ten tickets.

  • Tickets in a project linked to a repository, from any channel, are classified as a bug, a feature request, a docs gap or a question.
  • A bug report that is missing what a fix needs gets an internal note listing exactly what is missing.
  • Every Monday a digest groups the week's recordings into themes for the team.
  • A Hesitation, or a verdict under the confidence bar, stays on the conversation, where a person can still file it with one click.
Open full ticket
Bug · SmallProposed7

Export button gives no feedback when the export fails

Seven visitors clicked Export on the Reports page, got nothing back, and kept clicking. Six of them then opened the chat about it.

Fixing it means the button shows progress and a clear error, so people know to retry or use CSV.

  1. Proposed30 Oct
  2. →Accepted
  3. →Fix opened
  4. →Shipped
up to 250 creditsDetails
Page
/reports
Change
Show a spinner while exporting and an error with a retry when the request fails.
Where
The Export button in the Reports toolbar
Visitors
7
AcceptDecline
05 · Decide

Nothing gets built until someone accepts it.

Recommendations wait on Home and the Improvements page, written for whoever owns the product, not only for engineers: bug or improvement, Small, Medium or Large, what Starko understood, what fixing it means, and a credit estimate. Accepting shows the checks, the credit cap and your balance afterwards before anything starts. Declining asks for a reason, which stays on record so later recommendations learn from it.

  • A project can opt into auto-dispatch for small bug fixes. It is off by default and runs within a monthly budget, one live run per project, three automated attempts per ticket.
  • Mention @starko in an internal comment on any ticket to start a run by hand.
  • Or decide from Claude, Cursor or VS Code through the Starko MCP server.
2 open recommendations
Improvement · SmallProposed 7 visitorsStarko - Main development

Recommendation: make the search box visible on the help-center home

up to 200 credits
Bug · SmallIn progress 2 visitorsStarko - Main development

Bug: ticket reply fails when the attachment is larger than 10 MB

up to 250 credits 40 used
Open
Improvement · SmallMergedStarko - Main development

Recommendation: explain the empty state on the Projects page

up to 80 credits 31 used PR
Open
Ask anything…
06 · Build

A coding agent reproduces the problem before it changes a line.

An accepted recommendation becomes a run in an isolated sandbox with your repository and your real toolchain: Node, Docker Compose services, Playwright and a browser. Starko prepared that environment itself when the project was connected. It installed dependencies, started the app and proved it ran with a screenshot, asking you only for the secrets it cannot know. The agent gets the ticket, the conversation and a digest of the recording, then works to a fixed contract.

  1. 1Reproduce first, with a probe that fails.
  2. 2Make the smallest change that fixes it.
  3. 3Verify: the probe passes, and the tests and typecheck run.
  4. 4For a UI change, take before and after screenshots.
  5. 5Open a draft pull request: Problem, Reproduction, Fix, Verification, Risk, Out of scope.
v2.starko.one/dashboard/tickets/4f2c…
Tickets/STK-432
72%

Template picker crashes when a template has no body

In Progress HighSV Stefan Vukmanović Marko Petrović · Acme d.o.o.Bugstarko-me/starko-v2
DescriptionStarko AI
Starko AI Running · 4m 12s starko/fix-d2728b0c-ad880fSVEP #432 Console Changes Preview End session Stop
Run · Oct 24, 10:58 · #432
Worked for 1m 48s
  1. searching whatsapp-template
  2. reading components/functional/whatsapp-template-picker.tsx
  3. reading actions/connections/whatsapp.ts
  4. running npm test -- whatsapp-template
Reproduced it. TemplatePicker reads template.body.length before checking the body exists; a template with no body throws on render. I also found 41 stale templates in the picker and no way to delete them, which is what Ana asked for. I will fix the crash first and add a delete action in the same pull request unless you want them separate.
Same PR is fine. Make sure a deleted template drops out of the picker in an open composer, and add tests for both.
You· Read · 11:02
Current session · Oct 24, 11:02
Worked for 2m 24s
  1. editing actions/connections/whatsapp.ts
  2. writing components/functional/whatsapp-template-manager.tsx
  3. writing tests/whatsapp-template-manager.test.tsx
  4. running npm run lint && npm run typecheck && npm test
Added a null guard in the picker and a permission-gated template manager with a confirm dialog. Deleting removes the template on Meta and the local mirror row, then invalidates the picker query so it disappears from every send and broadcast flow. 8 new tests, 212 pass. Pushing to PR #432 now.
Also mask the template body in the evidence screenshots, it has customer names.
You· Queued · Send now
Working for 14s running git push origin starko/fix-d2728b0c
Tell Starko AI what to do next…
Enter queues · ⌘Enter steers · Shift+Enter new line
07 · Review

A reviewer agent, your CI and your team all get a say before you do.

When the pull request opens, a second agent reviews it with the diff, the evidence, CI and the original classification. It rates overall risk plus side effects, compatibility and performance, lists its concerns and names any evidence that is missing. A revise verdict sends the run back with those notes. A red check suite does the same with the failing output. A GitHub review that requests changes, or mentions @starko, is copied into the ticket and resumes the same run.

  • Automated revisions are capped per pull request, so a run cannot loop on its own.
  • Only owners, members and collaborators on the repository can steer a run from GitHub.
  • The command log comes from the sandbox session itself, not from the agent's summary of what it did.
v2.starko.one/dashboard/tickets/4f2c…
Tickets/STK-432
72%

Add the ability to delete a WhatsApp template

In Progress MediumSVStefan Vukmanović Ana Kovač · Acme d.o.o.starko-me/starko-v2 Fix with Starko AI
Starko AI2 runs
Reviewer reviseFeature · mediumstarko-me/starko-v2 · 6 minutes ago · 4m 12s · 184,220 tok
Evidence
13 verification commands 2 screenshots
Fix
PR #432 · open

Permission-gated template manager with confirmation and server-side deletion on Meta and the local mirror row.

Review
medium riskRevise requestedCI: passing1 concern

Picker: a deleted template could stay selected in an open composer. Invalidate the picker query after deletion.

Automated follow-ups: on · next run: Feature · medium
OperatorFeature · mediumPR openrun 1 · 1 h ago · 3m 48s · 121,906 tok

Opened PR #432 with evidence. The reviewer agent asked for a picker-query invalidation, so run 2 is revising.

08 · Approve

You read the proof and press merge.

The pull request opens inside Starko with an Evidence tab: what was reproduced, the commands that ran, before and after screenshots, the reviewer's verdict and the checks. Merge from that panel or on GitHub. Either way the ticket closes, the merge is counted once, and that merged pull request is what Starko bills for.

  • A pull request closed without merging costs nothing, and becomes an evaluation case Starko learns from.
  • If a later push reverts a merged fix, the run is marked reverted and credited back.
  • The ledger shows every run's trigger, outcome, CI state and cost, with merge rate, time to merge and cost per merged pull request.
starko-me/starko-v2#432

feat(whatsapp): add the ability to delete a WhatsApp template

starko-ai[bot]·updated 20 hours ago· Open

mainstarko/fix-d2728b0c-ad880f 9 files+1,354 -62

Run

Open ticket
Reviewer revisePR openCI: passingFeature · mediumprompt v14

Reproduction

Reproduced

Picker listed 41 stale templates; no delete affordance anywhere in the UI.

Verification

13 commands run in the sandbox

Agent’s claim: deletion removes the template on Meta and the local mirror row; the picker drops it from every send and broadcast flow.

  • npm run lint

    ✔ 0 problems

    exit 0
  • npm run typecheck

    tsc --noEmit · 0 errors

    exit 0
  • npm test -- whatsapp-template

    Tests: 8 passed, 8 total

    exit 0
  • npm run test:e2e -- template-manager

    3 passed · deleted a template in the seeded sandbox

    exit 0

Reviewer agent

Risk: medium
Side effects: lowCompatibility: lowPerformance: lowVerdict: reviseAuto-revised

Starko AI

Every fix run, what came of it, and what it cost: the ledger behind the @starko agent.

Merged PRs

41

Merge rate

85%

merged ÷ runs that opened a PR

Time to merge

3h 40m

median, run start → merge

Billed / merged PR

$18.20

platform cost $6.90

Outcomes

62 runs · 55 opened a PR · 9.4M tokens · $745 billed at list price · $283 platform cost
Merged 41 PR open 7 Closed unmerged 4 No fix 3 Needs info 4 Running 3
TicketTaskOutcomeStarted
Delete a WhatsApp templateFeature · mediumRunning6 min ago
Ticket reply fails above 10 MBBug · smallPR open1 h ago
Explain the empty Projects stateFeature · smallMergedyesterday
Invoice PDF missing VAT lineBug · smallMergedyesterday
Annual plan prorationFeature · largeNeeds info2 d ago
Guardrails

What Starko will not do on its own.

Build what you did not accept
Unless you switch on auto-dispatch for a project, every run starts with a person's yes.
Merge your code
You merge. The one exception is the onboarding pull request that installs the Starko widget, merged only when its checks are green.
Upload a quiet session
Recordings leave the browser only after an error, a failed request, a rage click or a conversation.
Read what visitors type
Every input is masked before anything is stored.
Follow instructions in your data
Tickets, conversations and recordings reach the agents as untrusted data, never as commands.
Keep a sandbox
Each run's sandbox is destroyed when the run ends. Tokens, duration and cost go to the ledger.

FAQQuestions about the loop.

Connect a channel and a repository. Turn the support queue into a build queue.

Feedback starts flowing in minutes. The first recommendation shows up as soon as a pattern repeats, and the first pull request as soon as you accept one.