Repository navigation
Launch the skill set: jam-fix, jam-proof, jam-annotate, jam-to-e2e (2.0.0) #16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
221576e
feat: Launch skill set with jam-fix, jam-proof, jam-annotate, jam-to-e2e
baransu 4a60454
fix: Address launch review findings
baransu 65a053a
docs: Say what a Jam is and add a skill overview table to the README
baransu 4edc498
docs: Trim the README to one install line, a skill table and short cards
baransu 38df03d
ci: Move to Node 24 and checkout/setup-node v7 with npm cache
baransu 57e43bd
ci: Validate against the latest skills CLI and Claude Code, as users …
baransu f8f7169
chore: Drop the pull request template; CONTRIBUTING covers it
baransu de638ad
docs: Changelog no longer names the removed PR template
baransu 5949f88
docs: State which scope each tool needs; submitFeedback is the read-s…
baransu 254b5f2
jam-annotate: Port today's mark-coverage rules and the post-upload ch…
baransu f2408e1
jam-proof: Use agent-browser --headed for the visible-Chrome rung
baransu d2084a6
jam-proof: Drop the per-OS Chrome binary paths
baransu 3178d4a
chore: Drop the ChatGPT package generator and its omit markers; git a…
baransu cd88d39
jam-to-e2e: Move the CLI install to references so the ChatGPT archive…
baransu 58ff586
jam-proof: Say why agent-browser records and that its file is discarded
baransu 5a0ac8d
chore: Build the ChatGPT package with a script that rewrites the list…
baransu d5d3614
jam-proof: Record the throwaway overlay video at 5 fps so the encoder…
baransu fbebd45
Treat a Jam as any screen recording with context, not only a bug repo…
baransu cc0d83c
jam-to-e2e: The user's request decides whether the test passes or fai…
baransu e6187ca
jam-to-e2e: Runner- and language-agnostic rules, with Playwright and …
baransu cf595bb
jam-to-e2e: One test per claim, not one per Jam
baransu 8d40669
server.json follows the Jam MCP server version; registry publishes on…
baransu 2f7d90e
docs: Changelog names the mcp-v tag and the server-version rule
baransu 8fed62f
Address review: screenshot Jams in jam-to-e2e, no bare jam record run…
baransu 832a0b6
Sanity-check fixes: Cursor rule stops routing every Jam to jam-fix, n…
baransu File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,13 +1,27 @@ | ||
| { | ||
| "name": "jam", | ||
| "version": "1.23.2", | ||
| "description": "Jam's MCP is the fast lane between Jam recordings and your dev tools. Drop a Jam link into your coding agent and the whole recording – video, console, network, logs – arrives pre-packaged.", | ||
| "author": { "name": "Jam", "email": "support@jam.dev" }, | ||
| "version": "2.0.0", | ||
| "description": "Jam recordings (video, console, network, logs) as context for your coding agent. Fix the bug in a Jam, prove a fix with a recorded Jam, mark up a screenshot, or turn a Jam into an end-to-end test.", | ||
| "author": { | ||
| "name": "Jam", | ||
| "email": "support@jam.dev" | ||
| }, | ||
| "homepage": "https://jam.dev", | ||
| "repository": "https://github.com/jamdotdev/skills", | ||
| "license": "MIT", | ||
| "keywords": ["jam", "bug-reports", "debugging", "mcp", "session-replay", "observability"], | ||
| "privacyPolicyUrl": "https://jam.dev/legal/privacy-policy", | ||
| "keywords": [ | ||
| "jam", | ||
| "bug-reports", | ||
| "debugging", | ||
| "mcp", | ||
| "session-replay", | ||
| "observability" | ||
| ], | ||
| "mcpServers": { | ||
| "Jam": { "type": "http", "url": "https://mcp.jam.dev/mcp" } | ||
| "Jam": { | ||
| "type": "http", | ||
| "url": "https://mcp.jam.dev/mcp" | ||
| } | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| name: Skill bug | ||
| description: A skill did the wrong thing, or names a command or tool that doesn't exist. | ||
| labels: [bug] | ||
| body: | ||
| - type: dropdown | ||
| id: skill | ||
| attributes: | ||
| label: Skill | ||
| options: [jam-fix, jam-proof, jam-annotate, jam-to-e2e, plugin or MCP setup, other] | ||
| validations: | ||
| required: true | ||
| - type: input | ||
| id: agent | ||
| attributes: | ||
| label: Agent and version | ||
| placeholder: Claude Code 2.1, Cursor 2.4, Codex 0.50... | ||
| validations: | ||
| required: true | ||
| - type: textarea | ||
| id: what | ||
| attributes: | ||
| label: What happened, and what you expected | ||
| description: Paste the prompt you gave and the step where the agent went wrong. Redact tokens and customer data. | ||
| validations: | ||
| required: true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| blank_issues_enabled: false | ||
| contact_links: | ||
| - name: Jam product support | ||
| url: mailto:support@jam.dev | ||
| about: Questions about Jam itself, your account or billing. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| name: Skill idea | ||
| description: A job coding agents should do with a Jam, about QA, pull requests or proof of work. | ||
| labels: [skill-request] | ||
| body: | ||
| - type: textarea | ||
| id: job | ||
| attributes: | ||
| label: The job | ||
| description: 'What goes in and what comes out. For example, "PR diff in, five things a tester must check by hand out."' | ||
| validations: | ||
| required: true | ||
| - type: textarea | ||
| id: why | ||
| attributes: | ||
| label: What agents get wrong today | ||
| description: What happens when you ask an agent to do this without a skill? | ||
| validations: | ||
| required: true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| name: CI | ||
|
|
||
| on: | ||
| pull_request: | ||
| push: | ||
| branches: [master] | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| check: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v7 | ||
| - uses: actions/setup-node@v7 | ||
| with: | ||
| node-version: 24 | ||
| cache: npm | ||
|
|
||
| - name: Install check dependencies | ||
| run: npm ci | ||
|
|
||
| - name: Regression tests | ||
| run: npm test | ||
|
|
||
| - name: Repo checks | ||
| run: node scripts/check.mjs | ||
|
|
||
| - name: Plugin manifest | ||
| run: npx -y @anthropic-ai/claude-code@latest plugin validate . --strict | ||
|
|
||
| - name: skills.sh sees every skill | ||
| run: | | ||
| npx -y skills@latest add . --list </dev/null > skills.txt 2>&1 | ||
|
baransu marked this conversation as resolved.
|
||
| node scripts/check.mjs --skills-list skills.txt || { cat skills.txt; exit 1; } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,3 +3,4 @@ tasks/ | |
| *.pem | ||
| mcp-registry-auth | ||
| .mcpregistry_* | ||
| node_modules/ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # AGENTS.md | ||
|
|
||
| Guidance for coding agents working in this repository. Humans: see [CONTRIBUTING.md](./CONTRIBUTING.md), which holds the rules every skill follows. | ||
|
|
||
| ## Layout | ||
|
|
||
| - `skills/<name>/SKILL.md`: the skills. Each folder also has `agents/openai.yaml`. | ||
| - `.claude-plugin/`, `.codex-plugin/`, `.cursor-plugin/`, `gemini-extension.json`: plugin manifests. `mcp.json` is the shared MCP server entry. | ||
| - `server.json`: the MCP Registry entry `dev.jam/jam`. Its `version` is the Jam MCP server's, not the plugin's. Pushing an `mcp-v*` tag publishes it, and a published version is permanent. Never push a tag unless asked. | ||
| - `rules/`: a Cursor rule that guards the Jam MCP delete tools. | ||
| - `scripts/package-chatgpt.mjs`: the ChatGPT directory package. A skill that reads a Jam over MCP alone goes into its `SKILLS` list. | ||
| - `docs/plugin.md`: plugin sign-in, what the MCP server can do, permissions. The tool list itself lives at jam.dev/mcp; do not copy it here. | ||
| - `scripts/check.mjs`: repo checks, run by CI. | ||
|
|
||
| ## Invariants | ||
|
|
||
| Run `node scripts/check.mjs` after any change. It prints each rule it finds broken, with the file. | ||
|
|
||
| Also: | ||
|
|
||
| - When you add, rename or remove a skill, update its README card, the CHANGELOG, and any skill that names it. | ||
| - `jam-proof` and `jam-annotate` are also bundled in the Jam CLI. This repo is the source; tell the user the bundle needs a resync when you change them. | ||
| - Only name `jam` CLI commands and MCP tools that ship today. Check with `jam agent-context`. | ||
| - Skills are public. No internal paths, repo names, staging hosts or customer data. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| AGENTS.md |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| # Contributing | ||
|
|
||
| Thanks for helping. This repo holds small agent skills about Jams (screen recordings with the console, network and user actions attached), QA, pull requests and proof of work. Read the rules below before you open a pull request; most review comments come from them. | ||
|
|
||
| ## The rules | ||
|
|
||
| 1. **One job per skill.** A skill does one thing well. Two jobs are two skills. | ||
| 2. **The name tells the truth.** A skill named `jam-*` needs a Jam account. A skill without `jam` in its name works fully without Jam, and mentions Jam at most once, in a line labeled "With Jam" next to the alternatives. | ||
| 3. **No pitch.** No sales copy inside a `SKILL.md`. Jam lives in the README. | ||
| 4. **Do what agents can't, or give them structure they lack.** Visuals for humans (proof video, marked-up screenshots, diagrams) and evidence structure (claim, how it was verified, evidence, gaps). Not things agents already do well, such as reading a HAR file. | ||
| 5. **Claim only what ships.** Every command, flag and tool a skill names must exist in the released Jam CLI or MCP server today. Check with `jam agent-context` or the [MCP docs](https://jam.dev/mcp). | ||
| 6. **Use the project's tools.** A skill uses the project's existing test runner, browser driver or setup, and falls back to Playwright when there is none. | ||
|
|
||
| ## Anatomy of a skill | ||
|
|
||
| ``` | ||
| skills/<name>/ | ||
| SKILL.md required | ||
| agents/openai.yaml required: Codex picker metadata | ||
| references/ optional: depth the agent loads on demand | ||
| scripts/ optional: scripts the skill runs | ||
| ``` | ||
|
|
||
| - **Name:** 2 or 3 words, kebab-case, verb first (`prove-change`) or `x-to-y` (`jam-to-e2e`). No single words, no `verify-*`. The folder name equals the `name` in the frontmatter. | ||
| - **Description:** what it does, then when to use it, with the phrases a user would type ("Use when the user pastes a jam.dev link..."). The agent decides to load the skill from this line alone. 1024 characters at most. | ||
| - **Length:** keep `SKILL.md` under about 200 lines. Move detail to `references/` and link it from the step that needs it. | ||
| - **Style:** imperative, concrete, no filler. Show the command, not a description of the command. Say what to do when a step fails. | ||
| - **Feedback:** every `jam-*` skill ends with the same `## Send feedback to Jam` section. Copy it from an existing skill; CI fails if it differs. | ||
| - **Secrets:** never ask the agent to write a token to a file. Use environment variables. | ||
| - **Descriptions use the user's words, not ours.** Write what people type: "jam link", "bug recording", "screen recording", "repro video", "proof for the PR". Say what a Jam is the first time a description names it; the model may never have heard of Jam. | ||
| - **Jam terms, in prose only:** `Jam` is always capitalized and never a verb (record a Jam, share a Jam). The hierarchy is workspace > folder > Jam; a person with a seat is a member. Write `Sharepage`, `Recording Link`, `Jam MCP`, `Jam CLI`, and `Model Context Protocol (MCP)` on first mention in a page. You capture a screenshot and record a video. | ||
| - **Claims:** no "only", "first", "best" or guarantees. State what the skill does and its limits. | ||
|
|
||
| ## Test a skill locally | ||
|
|
||
| ```bash | ||
| npm ci # install the locked YAML validator | ||
| node scripts/check.mjs # the same checks CI runs | ||
| npm test # validation and package regressions | ||
| npx skills add . --list # what skills.sh will see | ||
| claude --plugin-dir . # load the plugin in Claude Code | ||
| ``` | ||
|
|
||
| Then run the skill on a real task in at least one agent and say which one in the pull request. For a `jam-*` skill, include the Jam link it produced. | ||
|
|
||
| ## Pull requests | ||
|
|
||
| - One skill per pull request. Maintainers may ship a coordinated release of several in one. | ||
| - Add a line under **Unreleased** in [CHANGELOG.md](./CHANGELOG.md). | ||
| - A new skill also needs a card in [README.md](./README.md). CI fails without one. | ||
|
|
||
| ## Releasing (maintainers) | ||
|
|
||
| Two things ship from this repo, each with its own version. | ||
|
|
||
| **The plugin.** Its version is the same in `.claude-plugin/plugin.json`, `.codex-plugin/plugin.json`, `.cursor-plugin/plugin.json` and `gemini-extension.json`; CI checks this. | ||
|
|
||
| 1. Bump the version in those four files and move **Unreleased** in the changelog under the new version. | ||
| 2. Merge to `master` and push a `v<version>` tag. | ||
|
|
||
| **The MCP Registry entry.** `server.json` describes the remote Jam MCP server at `mcp.jam.dev`, so its `version` is the server's, not the plugin's. When the server releases: | ||
|
|
||
| 1. Set `version` in `server.json` to the server's version and merge to `master`. | ||
| 2. Push an `mcp-v<version>` tag. `.github/workflows/publish-mcp.yml` publishes `server.json` to the registry as `dev.jam/jam`. A registry version can't be changed after it is published. | ||
|
|
||
| ### ChatGPT directory package | ||
|
|
||
| The ChatGPT directory takes the skills that read a Jam over MCP alone: `jam-fix` and `jam-to-e2e`, without their `references/`. The CLI install steps (in `jam-proof`, `jam-annotate` and the `references/cli.md` files) download and run code, which fails ChatGPT's external-code review, so a skill meant for ChatGPT keeps its install steps in `references/` and is added to `SKILLS` in `scripts/package-chatgpt.mjs`. Build the package from `master` after the merge: the packaged skills link to `references/` on GitHub. | ||
|
|
||
| ```bash | ||
| node scripts/package-chatgpt.mjs ../jam-chatgpt-<version>.zip | ||
| ``` | ||
|
|
||
| The script copies those two skills with the plugin identity, connection and assets, and rewrites the listing description so it names only what the package contains. | ||
|
|
||
| Update the existing app entry with this package. Do not create a new app through **Upload New**; that loses the saved identity and connection settings. |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.