jam-annotate skill
Jam CLIを使用して、スクリーンショットに枠線、矢印、注釈、墨消し、ぼかしを追加し、共有可能なJamレポートを作成します。
- GitHubスター
- 11
- ファイル
- 2
- 最終コミット
- 2026年11月9日
- ライセンス
- MIT
- 許可されたツール
- —
jam-annotate skillは何をしますか
jam-annotateはAgent Skillsです。 Jam CLIを使用して、スクリーンショットに枠線、矢印、注釈、墨消し、ぼかしを追加し、共有可能なJamレポートを作成します。.
skillのSKILL.mdから生成された要約。
jam-annotate skill について
jam-annotateは、レビュアー向けに共有可能な注釈付きバグレポートを作成することを可能にします。ユーザーが特定のUIの問題を強調したスクリーンショットを提出または共有する必要がある場合、このSKILLはJam CLIを使用して、アップロード前に画像へ直接視覚的な補助を描き込みます。枠線、矢印、テキスト注釈、墨消し、ぼかしを含むJamレポートを生成し、レビュアーが数秒で問題を理解できるようにします。
エージェントは、ユーザーが注釈付きのスクリーンショットをJamとして共有することを明示的に求めた際に、このSKILLをロードする必要があります。プロセスには、座標、ラベル、色を含むJSONペイロードの生成が含まれ、それが `jam create jam` コマンドによって処理されます。このSKILLは、Retinaディスプレイ向けの複雑な座標スケーリングを処理し、壊れた要素にはストロベリーカラーの枠線を使用したり、機密データには墨消しを使用したりするなど、さまざまなマークタイプを管理します。なお、Jam CLIがインストールされており、パーソナルアクセストークンまたはブラウザログインによって認証されている必要があります。
エージェントができること
- 1機密性の高いユーザーデータの保護スクリーンショットを公開共有する前に、メールアドレスやトークンなどの個人情報を墨消しします。
- 2UIの変更箇所への誘導矢印を使用して、インタラクションの失敗した方向や、特定のコントロールによって値が変更された箇所を示します。
- 3視覚的なノイズの除去サイドバーや無関係なリスト項目にぼかしを適用し、レビュアーが画面の関連部分のみに集中できるようにします。
skill の SKILL.md から作成されています。すべてのユースケースは、その引用と照合されています。
jam-annotate skillのインストール方法
各コマンドはskillフォルダをクライアントのskillsディレクトリにコピーします。読み込むには、クライアントを再起動するか新しいセッションを開始してください。プラグインにjam-annotate skillをインストールする
/plugin marketplace add jamdotdev/skills /plugin install jam@jam-plugins
Claude Codeにjam-annotate skillをインストールする
~/.claude/skills/jam-annotate/SKILL.md
$ npx degit jamdotdev/skills/skills/jam-annotate ~/.claude/skills/jam-annotateClaude Code (project)にjam-annotate skillをインストールする
.claude/skills/jam-annotate/SKILL.md
$ npx degit jamdotdev/skills/skills/jam-annotate .claude/skills/jam-annotateCodexにjam-annotate skillをインストールする
~/.agents/skills/jam-annotate/SKILL.md
$ npx degit jamdotdev/skills/skills/jam-annotate ~/.agents/skills/jam-annotateGemini CLIにjam-annotate skillをインストールする
~/.gemini/skills/jam-annotate/SKILL.md
$ npx degit jamdotdev/skills/skills/jam-annotate ~/.gemini/skills/jam-annotateClaude.aiにjam-annotate skillをインストールする
npx degit jamdotdev/skills/skills/jam-annotate jam-annotate && zip -r jam-annotate.zip jam-annotate # claude.ai → Customize → Skills → + → Create skill → Upload a skill → jam-annotate.zip
SKILL.md
GitHubで表示jam-annotate
The deliverable is a screenshot Jam a reviewer reads in five seconds: a box
on the broken thing, a number that matches a line in the description, secrets
redacted. jam create jam draws the marks into the image before upload;
jam agent-context prints the full payload schema.
A request to create or share a Jam authorizes the upload. For local-only annotation or redaction, use the available image tools and return a local file. Do not upload it or sign in to Jam.
Set up the CLI
command -v jam >/dev/null || echo "jam is not installed"
export PATH="$HOME/.local/bin:$PATH"
jam auth status --json || jam auth login
If jam is not on PATH, stop and ask the user to install it from
https://jam.dev/docs/cli, then continue. Do not install it yourself.
Exit code 3 means not signed in. With no browser (CI, a cloud agent), ask the
user to set JAM_TOKEN to a personal access token from
https://jam.dev/s/settings/mcp as a secret. Never write a token to a file.
Pick the mark
Five kinds. Pick by what the mark says:
| Kind | Says | Numbered |
|---|---|---|
box |
this element is the subject | yes |
arrow |
from here, look there (direction) | yes |
text |
a fact with no element to point at | no |
redact |
this region must not leave the screen | no |
blur |
this region is not the point | no |
Get coordinates right
Coordinates are pixels of the image file, origin top-left. They are not CSS
pixels. A retina capture is 2x, so a button at CSS (120, 340) sits at image
(240, 680).
- Capture the viewport, not the full page, so element bounds and the image share an origin.
- Read the image size (the PNG header, or your driver's screenshot metadata) and divide by the viewport width. That ratio is the scale.
- Take element bounds from the driver (Playwright
locator.boundingBox(), CDPDOM.getBoxModel) and multiply every number by the scale. - Pad a box 6 to 10 CSS pixels beyond the element so the outline does not sit on the element's own border.
With only an image file and no driver, read its pixel size, place the marks by eye in image pixels with generous boxes, and say in the reply that the positions are estimates.
The CLI refuses a mark that falls outside the image and names the index. A refusal almost always means the scale was skipped.
Know what a mark covers
A box or arrow draws more than its outline. Below, u is the image width
divided by 1440, at least 1, and every size is image pixels.
- Badge: a circle of radius
14ucentered on the box's top-left corner, or on the arrow'sfrom. Its inner quarter sits on whatever is in that corner: an icon, an avatar, the first letter. - Box label: a chip
29utall whose bottom edge is7uabove the box, starting21uright of the box's left edge. When the box is less than36ufrom the top of the image, the chip goes inside the box's top edge and covers its content. - Arrow label: a chip
29utall, centered vertically onfrom, starting21uto its right. - A chip is about
8.4uwide per character, plus14u. - At an image edge, the CLI moves badges and chips inward so they stay in the image. There they cover more of the box than the numbers above say.
So a labelled box needs 36u of empty space above it. Rows in a list, table
or activity feed are closer than that: a label on one row covers the row
above it, and a label on the next row covers the first row's text.
Compose
- One mark per fact you will write. Three to five marks. More is a video.
- Nothing a mark draws may cover text the reader needs, including another mark's subject. Before you add a label, check its chip and badge against the section above.
- For neighbors (stacked rows, adjacent buttons), box each one without a label and put the words in the numbered description. When the labels must be on the image, use arrows whose tails sit in an empty margin with room for the chip to their right.
- Pad a box at least
14uon the left when an icon or avatar starts the element, so the badge does not hide it. - Box the element that is wrong. Arrow only when direction is the point: where a click should have led, which control changed which value. Put the tail in empty space and the head on the edge of the target, not its center.
- Text is for a fact with no element: "nothing happened after click". Place it in empty space near the area it describes.
- Redact first, generously: emails, names, avatars, tokens, internal URLs, customer identifiers. Redact the whole row, not the word.
- Blur is for clutter, not secrets: a sidebar, a list of unrelated rows, a
face in a demo. It softens the region so the eye skips it. Large text stays
legible through a blur, so anything that must not leave the screen is a
redact. - Order is the story. Numbers follow payload order, so list the marks in the order the description tells them.
- Labels are five words or fewer, Latin text, no trailing period. The sentence goes in the description.
- Color carries meaning, one color per meaning. Default
limeis "look here". Usestrawberryfor the broken thing when there is more than one mark. Other swatches:grape,blueberry,mint,lemon,black. - Marks are drawn on the primary screenshot only. A
secondaryScreenshotPathuploads as-is, so a redaction on the primary does not cover it. Attach a secondary only when it shows none of what you redacted; otherwise redact it with an image tool first, or leave it out.
Payload
The capture below is 2x, so a 1440×900 viewport is a 2880×1800 image and every coordinate is doubled.
Write the payload to a file with your file-writing tool (for example
payload.json), then run jam create jam @payload.json. The URL, title and
description come from the user or the page, so they never go into a shell
argument.
{
"url": "https://app.example.com/checkout",
"title": "Pay button does nothing on retry",
"description": "1. The Pay button, clicked twice.\n2. Where the confirmation should have appeared.\nCard number redacted.",
"screenshotPath": "./checkout.png",
"screenDimensions": { "width": 1440, "height": 900 },
"annotations": [
{ "type": "redact", "x": 1200, "y": 640, "width": 560, "height": 48 },
{ "type": "blur", "x": 0, "y": 0, "width": 480, "height": 1800 },
{ "type": "box", "x": 1180, "y": 1120, "width": 320, "height": 88, "label": "Pay, clicked twice", "color": "strawberry" },
{ "type": "arrow", "from": { "x": 600, "y": 1400 }, "to": { "x": 1440, "y": 980 }, "label": "no confirmation here" }
]
}
Write the description so its numbers are the badge numbers: "1." is the first box or arrow in the payload, "2." the second. Redactions, blurs and text notes never take a number.
After
- Read the receipt:
id,url,kind. If the command failed, say so and fix the payload. Never hand over a link you did not get. - Look at what was drawn:
jam get screenshots <id> --out <dir>, then open the PNG. If a chip or badge covers text the claim depends on, fix the payload, create the Jam again, and share only the new link. Ask the human before you delete the first Jam, because a deleted Jam cannot come back. - Link it when there is something to link. With a pull request or ticket
the screenshot belongs to:
jam update jam <id> --resource <url>. For one Jam per UI state, join them withjam update jam <id> --mark-related <other jam> --type relates_to. Never attach a URL that carries a token: the share page can be public. - Return the link with the claim it supports. Post it on a PR or ticket only when the user requested that destination.
Send feedback to Jam
When this skill, a Jam MCP tool, a jam command or a Jam doc was wrong,
stale or confusing, or worked unusually well, tell Jam. Send it yourself:
Jam's agents read it, so it needs no approval.
Call the submitFeedback MCP tool with body, category and subject.
When MCP is unavailable, use the CLI:
jam feedback "<what you were doing, what you expected, what happened, the mistake>" --category <skills|mcp|cli|docs> --subject <skill name, tool name or command>
- Jam surfaces only, not the user's code or other tools.
- At most once per session, and never for a slip you corrected yourself.
- No secrets, customer data, source code, stack traces or recording content.
このスキルのファイル
2jam-annotate skillに関する質問
Claude Codeにjam-annotate skillをインストールするには
npx degit jamdotdev/skills/skills/jam-annotate ~/.claude/skills/jam-annotateを実行してください。Claude Codeは~/.claude/skills(すべてのプロジェクト)または.claude/skills(単一プロジェクト)からskillsを読み込み、説明がタスクに一致する場合にskillを使用します。
jam-annotate skillはどのクライアントで使用できますか
Agent Skills形式を読み込むすべてのクライアントで使用できます: Claude Code、Codex、Gemini CLI、claude.ai(ZIPとしてアップロード)。skill内のスクリプトは、クライアントがコード実行を許可した場合にのみ実行されます。
Retinaディスプレイや高DPIのスクリーンショットにはどう対応すればよいですか?
画像サイズをビューポートの幅で割ってスケールを算出し、CSS座標にそのスケールを掛ける必要があります。
ブラウザのないCIやクラウド環境で実行する場合はどうすればよいですか?
ユーザーに環境変数 JAM_TOKEN をパーソナルアクセストークンに設定するよう依頼してください。
redact(墨消し)とblur(ぼかし)の違いは何ですか?
Redactはメールアドレスやトークンなど、画面外に出してはいけない機密情報の保護に使用し、blurはサイドバーや無関係な行などの不要な情報を目立たなくするために使用します。