Getting started
Loopa reviews captured pages of a running website and connects each comment to the evidence an implementer needs. It is built for Next.js apps you own, and for coding agents that run in your own checkout.
You need:
- A Loopa account. Create one at /app/sign-up with an email and a password of at least 12 characters.
- A running preview of your app reachable over HTTP(S): production, staging or a branch preview.
- The git repository for that app, and the commit your preview was built from.
- Optional: a coding agent that supports MCP with OAuth, running in a checkout of that repository.
Your first loop
Create a project and capture a page
A project groups the preview environments, builds, captures and feedback for one repository.
- Open Projects and choose New project. Give it a name and the repository it belongs to, for example
github.com/owner/repo. - In the project, open Settings → Preview environments → Add environment. Enter the Origin: scheme, host and port of the running preview, with no path. Optionally limit the routes that may be captured with Route prefixes.
- Under Builds, choose Register build and enter the git commit SHA the preview was built from. Builds are immutable; register a new one for each deploy you review.
- Open Pages and choose Capture page. Pick the environment, enter a path such as
/pricingand, optionally, the registered build and a state label. - When the capture is ready, choose Open in review.
A capture renders the route in a headless browser, waits for the network to settle, scrolls to load lazy content, takes a full-page screenshot and stores the cleaned HTML and assets. The stored page is shown with scripts disabled. Only the initial state of the URL is captured, so capture menus or modals as separate URLs or states.
Add annotations
The review workbench shows the capture with a sidebar of numbered comment pins.
- Switch to Comment mode (
C). Browse mode (B) is for scrolling and switching pages. - Choose the target type: Element for a DOM element, or Point for a spot on the page.
- Hover and click the element, then describe the change in the composer (“What should change?”) and choose Post comment.
- Use the inspector tabs: Thread for replies and edits, Evidence for screenshot and source context, Anchor for how the pin is attached.
Resize the capture to 1440, 768 or 390 pixels with the viewport control. This resizes the stored DOM; it does not re-run your app's JavaScript, so capture again if a layout depends on scripts at that width. Press ? in the workbench for the full list of keyboard shortcuts.
Understand Next.js source mapping
Source candidates are only as good as the evidence in your build. Loopa reads two things when it captures a page:
- Source stamps:
data-insp-path="file:line:column"attributes on rendered elements, in the Attest stamp format. - A source index:
/.attest/source-index.jsonon the same origin, whosecommitmust equal the registered build's SHA.
When you comment on an element, Loopa looks for a stamp on it or its nearest stamped ancestor and stores the location as a candidate with its relation (self or ancestor). The visible text may also get a content-origin candidate, or be marked ambiguous when it matches several files.
Read more about the model on the Next.js visual feedback page.
Connect a coding agent
Agents use Loopa through the MCP endpoint at https://getloopa.eu/mcp (HTTP POST), protected by OAuth. On first connection you sign in and approve the client on the consent screen, which grants two scopes:
feedback:read: read projects, annotations, batches, captures and evidence.feedback:report: report run progress, item outcomes and checks on batches you authorized.
Tools include list_projects, list_annotations, get_annotation, list_batches, get_batch, get_artifact, claim_run, heartbeat_run, report_item_result, report_run_check, finish_run and abort_run. No tool can authorize a batch, verify feedback, merge or deploy.
The agent needs its own access to the repository: run it in a checkout of the project's repository at the batch's base commit. Loopa supplies feedback; it does not provide file system or git access.
Prepare and authorize a batch
- Open Feedback in the project. It lists open comments across all captured pages.
- Select the comments that belong together and choose Freeze n selected comments. The batch stores the instructions, evidence, repository and base commit, and cannot change afterwards.
- Inspect the frozen batch. To run it, tick “I authorize one agent run for these frozen instructions, repository and base commit.” and choose Authorize one agent run.
- Start your agent and let it claim the run. An unused authorization expires after 24 hours; you can also Revoke unused authorization or Cancel batch.
Freezing never starts anything. Authorization is a separate, explicit step, and it covers exactly one run.
Review implementation results
Open Runs to follow a run. While it is active you can Request stop. When it finishes, each item shows the agent-reported outcome, the checks and the result commit:
implementedblockedneeds_clarificationnot_attempted
- Deploy or run the result commit as a preview, register it as a build and capture the affected pages.
- Open each item and compare the result capture with the original capture and target evidence.
- Tick “I inspected this result capture against the original feedback.” and choose Accept item, or Reopen item with a reason.
Accepting marks the comment verified. Reopening returns it to the queue for the next batch. Accept and reopen become available once a finished run has reported a result commit.
Troubleshooting
A capture fails or never starts
Check the environment origin and route prefixes. The capture worker can only reach origins the operator has allowed. Failure codes such as network_error, navigation_timeout and resource_limit are shown on the capture; each capture gets up to three attempts.
The captured page looks incomplete
Resources that were blocked, failed, too large or unsupported are listed as omissions. Content that only appears after interaction is not in an initial-URL capture; capture that state at its own URL.
Source shows as unknown
The reason is recorded with the annotation: no_stamps, index_missing, index_invalid,build_unregistered, build_dirty or build_mismatch. Register the exact clean commit you deployed and make sure the index commit matches it.
“Source was indexed for a different build”
The preview was rebuilt after you registered the build. Register the new commit and capture again.
The agent cannot claim the run
Check that the batch is authorized, that the authorization has not expired or been revoked, and that it has not already been used by another run.
Accept and reopen are disabled
They unlock after the run finishes with a result commit and you confirm that you inspected the result capture.