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.
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-maskto hide an element's text, orstarko-no-captureto 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.
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.
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.
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.
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.
- Proposed30 Oct
- →Accepted
- →Fix opened
- →Shipped
- 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
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.
Recommendation: make the search box visible on the help-center home
Bug: ticket reply fails when the attachment is larger than 10 MB
Recommendation: explain the empty state on the Projects page
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.
- 1Reproduce first, with a probe that fails.
- 2Make the smallest change that fixes it.
- 3Verify: the probe passes, and the tests and typecheck run.
- 4For a UI change, take before and after screenshots.
- 5Open a draft pull request: Problem, Reproduction, Fix, Verification, Risk, Out of scope.
Template picker crashes when a template has no body
- searching
whatsapp-template - reading
components/functional/whatsapp-template-picker.tsx - reading
actions/connections/whatsapp.ts - running
npm test -- whatsapp-template
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.- editing
actions/connections/whatsapp.ts - writing
components/functional/whatsapp-template-manager.tsx - writing
tests/whatsapp-template-manager.test.tsx - running
npm run lint && npm run typecheck && npm test
git push origin starko/fix-d2728b0cA 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.
Add the ability to delete a WhatsApp template
Permission-gated template manager with confirmation and server-side deletion on Meta and the local mirror row.
Picker: a deleted template could stay selected in an open composer. Invalidate the picker query after deletion.
Opened PR #432 with evidence. The reviewer agent asked for a picker-query invalidation, so run 2 is revising.
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.
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 -62Run
Open ticketReproduction
Reproduced
Picker listed 41 stale templates; no delete affordance anywhere in the UI.
Verification
13 commands run in the sandboxAgent’s claim: deletion removes the template on Meta and the local mirror row; the picker drops it from every send and broadcast flow.
- exit 0
npm run lint✔ 0 problems
- exit 0
npm run typechecktsc --noEmit · 0 errors
- exit 0
npm test -- whatsapp-templateTests: 8 passed, 8 total
- exit 0
npm run test:e2e -- template-manager3 passed · deleted a template in the seeded sandbox
Reviewer agent
Risk: mediumStarko 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| Ticket | Task | Outcome | Started |
|---|---|---|---|
| Delete a WhatsApp template | Feature · medium | Running | 6 min ago |
| Ticket reply fails above 10 MB | Bug · small | PR open | 1 h ago |
| Explain the empty Projects state | Feature · small | Merged | yesterday |
| Invoice PDF missing VAT line | Bug · small | Merged | yesterday |
| Annual plan proration | Feature · large | Needs info | 2 d ago |
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.