These docs are in English. If you prefer German, write us at beta@clickprobe.ai.
Resolve Bugs from Your IDE
Once the proxy is logged in with the agent:resolve scope, a coding agent can
close bugs directly from your chat — no browser required.
Heads up: If you want bugs to close automatically when you push a commit with
Fixes CP-<n>, see Auto-close via commit — no IDE plugin or MCP call needed.
Prerequisite:
clickprobe-proxy loginwithagent:resolvein the consent screen. If your current token lacks the scope, re-run login and re-consent. See troubleshooting.md for 403 and scope errors.
Three-tool cheat sheet
| Tool | What it does | Minimum scope |
|---|---|---|
clickprobe.resolve_bug | Mark a bug resolved / wont_fix / duplicate; optionally attach commit SHA + note | agent:resolve |
clickprobe.annotate_bug | Append a free-text note to a bug’s notes thread | agent:resolve |
clickprobe.link_pr | Attach a PR / MR URL (and optional commit SHA) to a bug | agent:resolve |
Full parameter schemas for each tool are in the quick-reference sections below.
⚠ Prerequisites — bug FSM. Freshly-filed bugs land in status
new. The server FSM forbidsnew → resolved;resolve_bugrequires the bug to be inconfirmed,retesting, orexportedfirst. If the agent callsresolve_bugon anewbug, the response is HTTP 422 with body:{"detail": {"reason": "illegal_transition", "current": "new", "allowed": ["confirmed", "dismissed", "exported", "retesting"]}}To advance a
newbug toconfirmed, either:
- Ask the operator to click Confirm in the dashboard, or
PATCH /api/bugs/{bug_id}with body{"status": "confirmed"}using the operator’s session cookie (this is not an MCP tool in v1).See the worked example below (“Workflow: confirming a
newbug before resolving it”) for the recommended sequence.
clickprobe.resolve_bug — quick reference
{
"tool": "clickprobe.resolve_bug",
"arguments": {
"bug_id": "<uuid>",
"resolution": "resolved",
"commit_sha": "abc1234",
"notes": "Fixed null dereference in checkout — PR #42"
}
}
resolution is one of resolved, wont_fix, or duplicate.
commit_sha and notes are optional.
clickprobe.annotate_bug — quick reference
{
"tool": "clickprobe.annotate_bug",
"arguments": {
"bug_id": "<uuid>",
"note": "Investigated — root cause is a race condition in the cart reducer."
}
}
clickprobe.link_pr — quick reference
{
"tool": "clickprobe.link_pr",
"arguments": {
"bug_id": "<uuid>",
"pr_url": "https://github.com/acme/app/pull/42",
"commit_sha": "abc1234"
}
}
Workflow: confirming a new bug before resolving it
Session-runner-filed bugs land in status new. The recommended sequence for
a coding agent is:
1. Agent: clickprobe.get_bug_detail(bug_id="abc-123")
→ returns { ..., "status": "new", ... }
→ agent observes the bug is unconfirmed.
2. Agent: writes the fix locally; runs tests; commits as "abc1234".
3. Operator (human): opens https://app.clickprobe.ai/app/bugs/abc-123 and
clicks Confirm. The bug moves to status `confirmed`.
Equivalent API call (operator-auth, not token-auth):
PATCH /api/bugs/abc-123
Cookie: <operator session>
Body: {"status": "confirmed"}
4. Agent: clickprobe.resolve_bug(
bug_id="abc-123",
resolution="resolved",
commit_sha="abc1234",
notes="Fixed null deref in cart_reducer.ts"
)
→ 200 OK, bug is now `resolved`.
Why the operator step? The Confirm gate is a deliberate quality bar — a human reviews the screenshot + repro steps before downstream automation acts.
Future direction. A
clickprobe.confirm_bugMCP tool that lets the agent confirm without an operator round-trip is on the C-014 follow-up backlog (C-014-F01); whether to ship it is a v1.x decision driven by beta-customer feedback.
End-to-end example transcript
This is a copy-pasteable Claude Code session that walks through finding and resolving a bug. Replace the bug UUID and repo URL with your own values.
User: Fix the checkout null-pointer crash — it's tracked in ClickProbe.
Claude:
1. Let me fetch the open bugs.
[calls clickprobe.get_bugs with status=new]
→ returns list including bug abc-123: "Null pointer on /checkout"
2. Getting the full detail and repro steps.
[calls clickprobe.get_bug_detail with bug_id="abc-123"]
→ repro: "Add item to cart → checkout → crash at cart_reducer.ts:42"
3. I can see the issue — `items` is undefined when the cart is empty.
Adding a guard:
[edits cart_reducer.ts, adds `items ?? []` guard]
[runs tests — pass]
4. Annotating the bug with a summary before I close it.
[calls clickprobe.annotate_bug]
arguments: { bug_id: "abc-123", note: "Root cause: items undefined on empty cart. Fixed with nullish coalescing in cart_reducer.ts:42." }
5. Resolving the bug with the fix commit SHA.
[calls clickprobe.resolve_bug]
arguments: { bug_id: "abc-123", resolution: "resolved", commit_sha: "a1b2c3d4e5f6", notes: "Fixed in cart_reducer.ts — PR #42" }
6. Linking the PR for traceability.
[calls clickprobe.link_pr]
arguments: { bug_id: "abc-123", pr_url: "https://github.com/acme/app/pull/42", commit_sha: "a1b2c3d4e5f6" }
→ Bug abc-123 is now resolved. The ClickProbe dashboard shows the
"Resolved" badge, the commit chip "a1b2c3", and the PR link.
A Slack notification fires if a webhook is configured.
Troubleshooting
403 — missing scope
this token lacks required scope "agent:resolve"; run 'clickprobe-proxy login' to re-consent
Re-run clickprobe-proxy login. On the consent screen make sure agent:resolve
is checked alongside agent:read and agent:write.
422 — illegal transition
{"detail": {"reason": "illegal_transition", "current": "new", "allowed": ["confirmed", "dismissed", "exported", "retesting"]}}
The bug must be in confirmed, retesting, or exported status before it
can be resolved. Most commonly: confirm the bug first via the
dashboard, then retry resolve_bug. The full troubleshooting recipe is in
troubleshooting.md § 9.
422 — invalid PR URL
{"detail":"pr_url must start with http:// or https://"}
Pass a full https:// URL. SSH URLs and bare paths are not accepted.