Pinpoint — Visual Feedback Tool

SkillAI & models

With pinpoint added, your AI can read the feedback users pin on your web pages and fix the code those comments point to. It comes from a framework for building applications designed to work with AI agents. Feedback left on a page can end up as a real code change.

Available today. Use it from your connected AI after setup.

After adding pinpoint, start with a page that has pinned feedback on it. Ask your AI to read the comments and fix the code they point to.

Then ask your AI: use the Pinpoint — Visual Feedback Tool skill

What your AI can do with it

  • Read feedback that users pin on your web pages
  • Find the code each pinned comment points to
  • Fix the code based on that feedback
  • Turn page comments into code changes

What this skill tells your AI

The instructions your AI receives, as published by builderio/agent-native in packages/pinpoint/.agents/skills/pinpoint/SKILL.md and read by ahel’s review.

You are an agent with access to Pinpoint, a visual feedback and annotation tool. Users annotate UI elements on web pages and send structured feedback to you.

Reading Annotations

Pins are stored as JSON files in data/pins/{uuid}.json:

{
  "id": "uuid",
  "pageUrl": "/dashboard",
  "comment": "This button color is wrong",
  "element": {
    "tagName": "button",
    "selector": ".sidebar button.primary",
    "classNames": ["primary", "btn"]
  },
  "framework": {
    "framework": "react",
    "componentPath": "<Sidebar> <ActionButton>",
    "sourceFile": "src/components/Sidebar.tsx:42"
  },
  "status": { "state": "open", "changedBy": "user" }
}

Key fields:

  • sourceFile — exact file and line number to edit
  • componentPath — React/Vue component hierarchy
  • selector — CSS selector for the DOM element
  • comment — what the user wants changed

Actions

Run with pnpm action <name>:

ActionPurposeKey Args
get-pinsList pins--pageUrl, --status
create-pinCreate a pin--pageUrl, --selector, --comment
resolve-pinMark as resolved--id, --message
update-pinUpdate a pin--id, --comment, --status
delete-pinRemove a pin--id
list-sessionsList pages with pins(none)

Workflow

  1. User annotates elements in the browser
  2. Read pins: pnpm action get-pins --status open
  3. Use sourceFile to locate the code and make the requested changes
  4. Mark resolved: pnpm action resolve-pin --id <uuid>

Tips

  • Always check sourceFile first — it points directly to the code to edit
  • Use get-pins --status open to see only unresolved pins
  • Resolve pins after fixing them so the user gets visual confirmation
  • The componentPath helps you understand the component hierarchy when sourceFile is not available
  • Multiple pins on the same page often relate to each other — read them all before starting fixes

Adding Pinpoint to a New App

If the repository does not have Pinpoint set up:

  1. pnpm add @agent-native/pinpoint
  2. npx @agent-native/pinpoint init — copies scripts and skill to your project
  3. Add <Pinpoint /> component to the root React component:
    import { Pinpoint } from "@agent-native/pinpoint/react";
    <Pinpoint author="User" endpoint="/api/pins" autoSubmit />
    
  4. Add server middleware in the Express setup:
    import { pagePinRoutes } from "@agent-native/pinpoint/server";
    app.use("/api/pins", pagePinRoutes());
    

Signals

GitHub stars
5k
Forks
440
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
pinpoint
Source
github.com/builderio/agent-native