Wahajolla/annotate

Webページ上でクリックしてコメントできるフィードバックツール(Agentationツールバー)を提供します。Claudeがそのコメントを読み取り、コードに適用します。

annotate とは?

このスキルは、Webページ上で要素をクリックしてコメントを残し、そのフィードバックをClaudeが読み取ってコードに反映できるようにするツールです。ローカルモード(開発中のアプリに自分で注釈を付け、そのメモを直接Claudeに渡す)と共有モード(同僚がホストされたサイトにコメントを残し、全員で共有する)の2つのモードがあります。ツールバーは、Reactアプリ内への埋め込み、任意のHTMLページへのスクリプトタグの追加、ブックマークレット、Chrome拡張機能など、さまざまな方法でページに追加できます。Claudeは、注釈からセレクタ、近傍テキスト、バウンディングボックス、URLなどの情報を受け取り、コード内の該当要素を特定して修正できます。MCPツールとの統合により、反復的なフィードバックループを自動化することも可能です。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Wahajolla/annotator-skill/tree/HEAD/skills/annotate

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

annotate は何をしますか?

ユーザーがページ上の要素をクリックしてメモを書き、Claudeがそのメモをセレクタ、近傍テキスト、バウンディングボックス、URLとともに取得し、コード内の要素を見つけて修正できるようにします。

Agentation をベースに構築されています:agentation ツールバー(React 18+、デスクトップのみ)と agentation-mcp ノートサーバー(SQLite上のHTTP API、オプションのMCPツール付き)です。

最初にモードを選択

明確でない場合はユーザーに質問してください:

  • ローカル: このマシン上でのユーザーとClaudeだけのモードです。ノートサーバーは localhost:4747 で実行されます。何もデプロイする必要はありません。デフォルトのモードです。
  • 共有: 同僚がホストされたサイトにコメントし、全員がお互いのノートを見られるモードです。公開HTTPSホスト上にノートサーバーが必要です。references/shared.md を参照してください。このページにはアーキテクチャと要件が記載されており、ホスティングはユーザーが選択します。

ツールバーの設置場所

ページの種類に応じて選択します。どちらのモードでも同じオプションが使用できます。変更されるのは endpoint と session だけです。

  1. ユーザーのReactアプリ内に埋め込む。 npm i -D agentation を実行し、アプリの隣にレンダリングします。本番環境には到達しないようにゲートを設定してください:
    {import.meta.env.DEV && <Agentation endpoint="http://localhost:4747" />}
    
    ハッシュルーターを使用する場合は useHashLocation を追加し、フィードバックにラベルを付けるために appName を追加します。
  2. Reactであるかどうかに関わらず、ユーザーが制御する任意のHTMLページ。 1つのスクリプトタグを追加します。ローダー はツールバーを独自のコンテナと独自のReactルートにマウントするため、ホストページには影響しません:
    <script type="module" src="https://cdn.jsdelivr.net/gh/Wahajolla/[email protected]/embed/annotator.js?endpoint=http://localhost:4747"></script>
    
    クエリパラメータ: endpoint, session, app, hash=1。または、スクリプトがロードされる前に window.ANNOTATOR_CONFIG = {endpoint, session, app, hash} を設定します。
  3. コードに触れずに任意のサイト。 ブックマークレットを使用します。ユーザーに次の行をブックマークとして保存するよう指示します。クリックするとツールバーの表示/非表示が切り替わります:
    javascript:(()=>{const s=document.createElement('script');s.type='module';s.src='https://cdn.jsdelivr.net/gh/Wahajolla/[email protected]/embed/annotator.js?endpoint=http://localhost:4747&t='+Date.now();document.head.appendChild(s)})()
    
    ユーザーに伝えるべき制限事項:
    • 厳格なコンテンツセキュリティポリシー(CSP)を持つサイト(GitHub、多くの銀行、大規模アプリ)は注入されたスクリプトをブロックするため、ツールバーは表示されません。
    • localhost と通信する公開 https:// サイトでは、ブラウザがローカルネットワークアクセスを求める場合があります。許可してください。
    • ノートサーバーはそのサイトのオリジンを許可する必要があります(以下のCORSを参照)。
    • ノートはサイトのURLに紐付けられ、ツールバーのローカル下書きはそのサイトのlocalStorageに保存されます。
  4. Chrome拡張機能。 任意のサイトに注釈を付ける最も堅牢な方法です。1回のクリックまたはAlt+Shift+Aで切り替え、厳格なCSPサイト(GitHub、Notionなど)でも動作し、CORSの設定は不要です。リクエストは拡張機能を通して行われます。インストール:https://github.com/Wahajolla/annotator-skill/releases/latest から annotator-extension.zip をダウンロードし、chrome://extensions → デベロッパーモード → パッケージ化されていない拡張機能を読み込む。ノートサーバーは拡張機能のオプションで設定します。デフォルトは http://localhost:4747 です。共有モードの場合は、ホストされているURLとセッションIDを使用します。ライブ同期は5秒ごとにポーリングします。ノートサーバーに到達できない場合、拡張機能は開始コマンドとともに「Notes server is offline」カードを表示し、#annotator-ext-root に data-annotator-server="offline" が設定されます(応答すると "online" になります)。ブラウザを操作している場合は、ユーザーにノートが保存されたことを伝える前にこれを確認してください。オプションで「Sign in with GitHub」を有効にすると、すべてのノートにユーザーのログイン名が署名され、同僚のノートに誰が残したかが表示されます。

endpoint がない場合、ツールバーは コピーのみ で動作します。ノートはブラウザに残り、ユーザーが「コピー」を押してマークダウンをチャットに貼り付けます。サーバーは不要なので、ユーザーが一度だけ使用したい場合に使用します。

ローカルモード

  1. ノートサーバーを起動します。 以下のいずれかを選択してください:

    • MCP(繰り返し使用に最適)。 ユーザーの了承を得て:claude mcp add agentation -- npx -y agentation-mcp server を実行します。Claude Codeはセッションごとにサーバーを起動し、再起動後に agentation_* ツールが利用可能になります:get_all_pending、resolve、reply、ハンズフリーループ用の watch_annotations。
    • プレーンHTTP(再起動不要)。 バックグラウンドコマンドとして npx -y agentation-mcp server を実行し、HTTP経由でノートを読み取ります(以下を参照)。

    curl http://localhost:4747/health で確認します。{"status":"ok"} が返るはずです。

  2. CORS。 デフォルトでは開発用オリジンのみが許可されます(localhost、*.localhost、127.0.0.1、プライベートIP、.local、.test、.internal)。公開サイトでブックマークレットを使用する場合は、AGENTATION_CORS_ORIGINS=https://that-site.com(正確なオリジン、カンマ区切り)でサーバーを起動します。* も使用できますが、開いているすべてのタブがノートを書き込めるようになるため、正確なオリジンを指定することをお勧めします。

  3. 上記のいずれかのオプションを使用して、ツールバーをページに配置します。 endpoint=http://localhost:4747 を指定します。

  4. 確認。 ツールバーからテストノートを1つ追加し、curl localhost:4747/pending でそれが表示されることを確認し、削除します。

ノートは ~/.agentation/store.db に保存されます。

ノートの読み取りとアクション(両方のモード)

  • MCP: agentation_get_all_pending で未解決のノートを取得し、コードを修正してから、agentation_resolve を短い要約とともに実行します。
  • HTTP: GET /pending(すべての未解決ノート)、GET /sessions、GET /sessions/:id。ノートを修正した後、PATCH /annotations/:id を {"status":"resolved"} で送信します。
  • 誰が書いたか: GitHubサインインを使用したChrome拡張機能からのノートには authorId: "github:<login>" が含まれ、デフォルトでコメントは @<login>: で始まります。authorId がないノートは匿名です(他の方法でツールバーを読み込んだ場合)。報告時に作成者に言及してください。
  • 有用なフィールドは comment、url、element、elementPath、fullPath、nearbyText、selectedText、boundingBox、reactComponents(開発ビルドのみ)です。
  • 何かを削除する前にユーザーに決定させてください。

スクリーンショット用のノート表示

Agentationは、マーカーにホバーしている間のみノートのテキストを表示します。すべてのノートを一度に表示するには、ノートレイヤーを使用します。各ノートに枠線、番号、全文カードが表示されます。描画が完了すると、<html> に data-annotator-notes="<count>" が設定されます。

  • ユーザー(Chromeの場合): 拡張機能でAlt+Shift+Nを押します(またはアイコンを右クリック → 「このページのすべてのノートを表示」)。
  • あなた(操作しているページ上、Playwright、Chrome DevTools MCPなど): 独自のノートを設定してレイヤーを読み込み、属性が設定されるのを待ってスクリーンショットを撮ります:
    window.ANNOTATOR_NOTES = [
      { selector: "h1", comment: "長すぎます。「シンプルな料金」にしてください", author: "claude" },
      { selector: "#cta", comment: "ブランドの青色を使用してください" },
    ]
    const s = document.createElement("script"); s.type = "module"
    s.src = "https://cdn.jsdelivr.net/gh/Wahajolla/[email protected]/embed/notes.js?t=" + Date.now()
    document.head.appendChild(s)
    
    各ノートは selector(またはページ座標での boundingBox: {x, y, width, height})、comment、オプションの author を受け取ります。セレクタが何にも一致しないノートはコンソール警告とともにスキップされるため、カウントが一致することを確認してください。ANNOTATOR_NOTES の代わりに ?endpoint=http://localhost:4747 を渡すと、そのページのサーバーのノートが表示されます。&all=1 を追加すると解決済みのノートも含まれます。新しい t で再度読み込むとレイヤーが非表示になります。
  • 厳格なCSPサイト(GitHubなど)はそのスクリプトをブロックします。Playwrightでは、bypassCSP: true でコンテキストを作成してください。それ以外の場合は拡張機能を使用します。
  • ノートを実際のものにするには(ユーザーもツールバーでそれらを表示でき、解決できるようになります):POST /sessions を {"url": "<page url>"} で実行し、次に POST /sessions/:id/annotations を comment、element、elementPath(CSSセレクタ)、url、boundingBox、x/y(ページ座標)とともに実行します。その後、?endpoint=… で表示します。最初にユーザーに確認してください。これらのノートは共有ノートになります。

落とし穴

  • ツールバーはデスクトップのみです。
  • ノートサーバーには認証はなく、CORSのみです。ブラウザのオリジンが許可されている人は誰でもノートの書き込みと削除ができます。
  • useHashLocation はノートを #route ごとに保持します。後で有効にしても、既存のノートは移動しません。
  • AgentationはPolyForm Shieldライセンスです。これは内部フィードバックでの使用に適しています。

関連スキル