Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
Always use after creating a pull request that proposes user-visible changes.
$ npx skills add speakeasy-api/gram --skill pull-request-demo -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install speakeasy-api/gram pull-request-demo --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/pull-request-demo .claude/skills/pull-request-demo && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pull-request-demo" agent skill from https://github.com/speakeasy-api/gram/tree/main/.agents/skills/pull-request-demo into .claude/skills/pull-request-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request-demo", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/speakeasy-api/gram/tree/main/.agents/skills/pull-request-demoType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add speakeasy-api/gram --skill pull-request-demo -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install speakeasy-api/gram pull-request-demo --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/pull-request-demo .agents/skills/pull-request-demo && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pull-request-demo" agent skill from https://github.com/speakeasy-api/gram/tree/main/.agents/skills/pull-request-demo into .agents/skills/pull-request-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request-demo", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add speakeasy-api/gram --skill pull-request-demo -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install speakeasy-api/gram pull-request-demo --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/pull-request-demo .cursor/skills/pull-request-demo && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pull-request-demo" agent skill from https://github.com/speakeasy-api/gram/tree/main/.agents/skills/pull-request-demo into .cursor/skills/pull-request-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request-demo", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/speakeasy-api/gram.git --path .agents/skills/pull-request-demo--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add speakeasy-api/gram --skill pull-request-demo -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install speakeasy-api/gram pull-request-demo --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/pull-request-demo .gemini/skills/pull-request-demo && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pull-request-demo" agent skill from https://github.com/speakeasy-api/gram/tree/main/.agents/skills/pull-request-demo into .gemini/skills/pull-request-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request-demo", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install speakeasy-api/gram pull-request-demoInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add speakeasy-api/gram --skill pull-request-demo -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/pull-request-demo .github/skills/pull-request-demo && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pull-request-demo" agent skill from https://github.com/speakeasy-api/gram/tree/main/.agents/skills/pull-request-demo into .github/skills/pull-request-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request-demo", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add speakeasy-api/gram --skill pull-request-demo -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install speakeasy-api/gram pull-request-demo --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/pull-request-demo .opencode/skills/pull-request-demo && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pull-request-demo" agent skill from https://github.com/speakeasy-api/gram/tree/main/.agents/skills/pull-request-demo into .opencode/skills/pull-request-demo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request-demo", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pull-request-demoAlways use after creating a pull request that proposes user-visible changes.
Pull Request Demo is an agent skill from speakeasy-api/gram. Always use after creating a pull request that proposes user-visible changes.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Pull requests. The repository describes itself as: Securely scale AI usage across your organization. A single stack to Connect, Secure, Observe and Distribute agents, MCPs, and Skills within your company. The licence is AGPL-3.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ad78247. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
miseffmpegghpsqlgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKENGH_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pull Request Demo loads about 3.3k tokens when it runs. Until then it costs about 24 tokens; SKILL.md has 1,637 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from speakeasy-api/gram at commit ad78247, republished under its AGPL-3.0 licence (© speakeasy-api). 1,637 words, ~3,312 tokens.
.claude/skills/pull-request-demo/SKILL.md (or your agent's skills folder).Capture only the changed dashboard behavior and post it as a PR comment. Use one or two PNGs for a static visual change; use a 10-20 second WebM recording for an interaction.
REQUIRED SUB-SKILL: Use gram-playwright-cli for browser commands.
Uploads cannot be undone. gh attachments have no delete endpoint, and deleting the comment does not unpublish the asset: it stays live at an unauthenticated URL. The inspect step in section 3 is the last reversible moment in this workflow.
| Change type | Capture | Publish as |
|---|---|---|
| Static visual | screenshot --hires | PNG, embedded with alt text |
| Interaction | video-start / video-stop | WebM, rendered as a player |
| Interaction needing inline email visibility | WebM, then ffmpeg | GIF, embedded with alt text |
Discover the dashboard URL with mise run zero:summary — read the address from the Gram dashboard row (don't assume a port). The same table shows whether each service is RUNNING. A paused worktree shows Database and ClickHouse as STOPPED: run mise run wake (containers, then daemons) and expect two to four minutes. Do not use mise start here, which launches the foreground process-manager TUI and starts only the daemons, leaving the server wedged against a stopped Postgres with no diagnostic. Dev-idp auto-login is enabled, and the local TLS cert is browser-trusted (mkcert CA in the NSS store, set up by mise run zero:tls — rerun that if you see cert errors).
Use the default project for all flows — mise run seed (the demo seed retargeted at your dev org) provisions exactly one project. Before recording, verify the database is seeded by probing it directly (the connection string is in the Database row of zero:summary; drop its &search_path=public parameter, which psql rejects with invalid URI query parameter):
psql "postgres://gram:gram@127.0.0.1:<port>/gram?sslmode=disable" -c "SELECT p.slug, om.gram_account_type FROM projects p JOIN organization_metadata om ON om.id = p.organization_id WHERE p.slug = 'default' AND NOT p.deleted;"Expect at least one row, every row reading gram_account_type = 'enterprise'. Two rows is normal, because your dev org and the demo org each own a default project. Run mise run seed only on zero rows or a non-enterprise tier.
Invoke Playwright only through mise run playwright. The task uses the repo configuration and installs Chromium on demand.
Use ./tools/ffmpeg for the trim, frame-extraction, and GIF steps. The PNG path needs no conversion.
The login flow is credential-less: open the dashboard, click Login if redirected, and wait for /speakeasy. If the first load is blank after a fresh browser install, navigate to the URL again.
Concurrent agent sessions share a worktree and share the Playwright browser. Key the artifact directory and the Playwright session name on the PR number, so two sessions cannot overwrite each other's files or drive each other's browser:
PR=<pr-number>
DIR=.playwright-cli/pr-demos/$PR
mkdir -p "$DIR"Use -s=pr-demo-$PR as the session flag in every Playwright command below. If your tooling runs each command in a fresh shell, these variables do not survive between calls: re-export them in every command, or write the literal paths. .playwright-cli/ is gitignored at any depth. Relative paths resolve against your current directory, so stay at the repo root for the whole workflow: a path that resolves differently at capture time and at upload time silently breaks the body rewrite in section 4.
mise run playwright -s=pr-demo-$PR open "<dashboard-url>"
mise run playwright -s=pr-demo-$PR snapshotNavigate to the feature and rehearse the exact interaction using snapshot refs. Keep the browser open. Video recording starts only when requested, so rehearsal does not create footage.
Return to the intended starting state before capture. Hide the fixed development dock with eval before every capture, whether or not it obscures the change: it is dev-only chrome and reads as a product bug to a reviewer. Page navigation removes DOM-only adjustments, so re-apply it after navigating.
Prepare the exact frame, then capture a viewport or element screenshot:
mise run playwright -s=pr-demo-$PR screenshot --hires --filename="$DIR/demo.png"
mise run playwright -s=pr-demo-$PR screenshot <element-ref> --hires --filename="$DIR/demo-detail.png"The shared config keeps the CSS viewport at 1440x900 and uses a 2x device scale factor, so --hires produces a crisp 2880x1800 viewport image. Use --full-page only when the changed layout cannot fit in the viewport.
Start recording only after the page is ready:
mise run playwright -s=pr-demo-$PR video-start "$DIR/demo.webm" --size=1440x900
mise run playwright -s=pr-demo-$PR video-show-actions --duration=700 --position=top-right --cursor=pointerPerform the rehearsed clicks, fills, and navigation with normal CLI commands. The action overlay supplies the pointer, target highlight, and action label; do not inject a fake cursor. Let each important state remain visible long enough to read. When a longer hold is needed:
mise run playwright -s=pr-demo-$PR run-code "async page => await page.waitForTimeout(1000)"For a meaningful transition, optionally add a short chapter card:
mise run playwright -s=pr-demo-$PR video-chapter "<title>" --description="<what changes>" --duration=1200Stop recording to flush the WebM, then close the session:
mise run playwright -s=pr-demo-$PR video-stop
mise run playwright -s=pr-demo-$PR closeEvery mise run playwright subcommand costs one to two seconds of process startup, and all of it lands in the recording as dead air. Budget for it: a take with six commands and six seconds of deliberate holds runs near thirty seconds. Trim the lead-in and tail before uploading:
./tools/ffmpeg -y -ss <start> -to <end> -i "$DIR/demo.webm" \
-c:v libvpx -b:v 1M -crf 30 -an "$DIR/demo-trimmed.webm"The trimmed file is the one you publish, so it is the one section 3 applies to. GitHub serves .webm back as video/webm and renders it as a player, so no further conversion is needed. If a take goes wrong, stop it, restore the starting state in a new session, and record again. Do not include setup, login, exploration, or unrelated page tours.
Convert only when the reviewer needs the demo inline where a player will not render, notably GitHub notification emails. Convert the trimmed file, not the raw take, so the GIF does not carry the dead air you just removed. Two-pass palette:
./tools/ffmpeg -i "$DIR/demo-trimmed.webm" \
-vf "fps=10,scale=1200:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
"$DIR/demo.gif"A GIF is hard-refused over 10 MB. Increase the scale toward 1440 for small text, or crop to the relevant region before fps= instead of shrinking the whole frame.
You cannot watch a WebM. Extract frames first, then look at them:
./tools/ffmpeg -i "$DIR/demo-trimmed.webm" -vf "fps=1/2,scale=1200:-1" "$DIR/frame-%02d.png"One frame every two seconds gives eight to ten frames for a trimmed 15 to 20 second take. Raise the interval on anything longer, because reading twenty near-identical frames is the slowest step in this workflow. Read every extracted frame, or the PNG or GIF for the other paths, and confirm all of the following before running any --attach command:
dev@example.com in Local Dev Org, so this is normally satisfied already. If your stack points at a real identity provider and the sidebar shows your actual name, collapse the sidebar and recapture rather than editing the DOM.mise run seed retargets the demo seed at your own org, so the rows are synthetic but the chrome around them is not.A recording crosses far more of these surfaces than a deliberately framed screenshot. Recapture rather than publishing a frame you are unsure about.
Two environment gotchas, both of which produce misleading errors:
env -u GH_TOKEN -u GITHUB_TOKEN. An environment token wins over your keyring credential, and Actions' GITHUB_TOKEN is not allowed to upload attachments.mise exec so you get the pinned 2.100.0. A shell without mise active falls through to a system gh, and an older one fails with unknown flag: --attach.Write the body to a file so the same shell variable supplies the path in both the markdown and the flag. gh rewrites a body reference in place only when the two paths match byte for byte; any mismatch silently appends the image below your text instead, and still exits 0.
cat > "$DIR/comment.md" <<EOF
### Demo

What it shows:
1. <starting state>
2. <interaction>
3. <changed behavior>
EOF
env -u GH_TOKEN -u GITHUB_TOKEN mise exec -- gh pr comment "$PR" \
--body-file "$DIR/comment.md" --attach "$DEMO#<alt text>"Set DEMO="$DIR/demo.png" or DEMO="$DIR/demo.gif" first. The heredoc is intentionally unquoted so $DEMO expands; escape any literal ` or $ in your text. A path containing # cannot be attached, because # delimits the alt text.
Video differs. A video renders as a bare URL on its own line and cannot carry alt text, so passing #<alt text> is a hard error. Attach it with no alt text and let it append below your body:
env -u GH_TOKEN -u GITHUB_TOKEN mise exec -- gh pr comment "$PR" \
--body-file "$DIR/comment.md" --attach "$DIR/demo-trimmed.webm"Write that body with the numbered list above the player, and no image reference.
Keep the numbered list short and aligned with the visible steps.
HTTP 404 from --attach means you lack write access, not that the PR is missing. Attachments need ADMIN, MAINTAIN, or WRITE; READ and TRIAGE both 404. Fine-grained PATs are per-repo, so one minted elsewhere fails on a repo you can otherwise push to. From a fork, fall back to a secret gist: write any text file into $DIR, run gh gist create on it (binaries passed directly are silently dropped), clone the returned gist repo, copy $DEMO in (or $DIR/demo-trimmed.webm for a recording, which the video path never assigns to $DEMO), commit, push with git -c credential.helper='!gh auth git-credential' push, then reference the raw URL.gh pr edit instead of a comment. Use a comment, so the demo sits in the timeline next to the change it describes.gh validates every attachment locally before it resolves the repository, so these all fail without uploading or posting anything:
| Command | Error |
|---|---|
--attach demo.webm#alt | cannot set alt text on video |
--attach missing.png | missing.png: no such file or directory |
--attach empty.png | empty.png is empty |
--attach some-dir | some-dir is a directory |
--attach notes.txt | notes.txt is not a supported file type (supported: png, jpg, jpeg, gif, webp, svg, mp4, mov, webm) |
--attach a.png --attach a.png | a.png and a.png are the same file; attached files must be unique |
Duplicate detection also catches a symlink or hard link to an already-attached file.
© speakeasy-api, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/pull-request-demo of speakeasy-api/gram.
Open the folder on GitHubat commit ad78247
Pull Request Demo next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pull Request Demo this skillspeakeasy-api/gram | 272 | — | ~3.3k | Automated safety check: Pass | AGPL-3.0 | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Check PRonyx-dot-app/onyx | 32k | 2 repos | ~2.3k | Automated safety check: Pass | MIT | |
| Understand Diff AnalysisEgonex-AI/Understand-Anything | 86k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| PR Design DocOpenHands/OpenHands | 90k | — | ~2.4k | Automated safety check: Pass | MIT |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
onyx-dot-app/onyx
Checks a GitHub, GitLab, or Perforce (p4) pull request (or merge request, or shelved changelist) for unresolved review comments, failing status checks, and incomplete PR descriptions.
Egonex-AI/Understand-Anything
Reads your git changes or a pull request against a prebuilt knowledge graph of the project to explain what changed, which components are affected and what is risky.
OpenHands/OpenHands
For a non-trivial pull request, write a self-contained HTML design doc under the temporary .pr/ directory and link a visibility-appropriate preview in the PR description, so maintainers grasp the…
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
speakeasy-api/gram
A skill your agent uses when automating the Gram dashboard in a browser, capturing screenshots, inspecting pages.
speakeasy-api/gram
A skill your agent uses when adding, changing, restyling, reviewing, validating, or previewing a Gram/Speakeasy transactional email, in Go or in LMX/MJML — a template<name.go, a TemplateKey…
speakeasy-api/gram
A skill your agent uses when adding, changing, or styling UI in client/admin (the Gram admin dashboard) that touches shadcn/ui — a button, dialog, table, sidebar, badge, select, tabs, tooltip, card…
speakeasy-api/gram
A skill your agent uses when adding, editing, reviewing, testing, or locating a reviewed skill distributed with the Platform MCP plugin; triggers include "Platform MCP skill", "platformmcpskills"…
speakeasy-api/gram
A skill your agent uses when changing or reviewing Gram ClickHouse schemas, migrations, queries, inserts, access principals, bootstrap SQL, Cloud compatibility, partial migration failures, or…
speakeasy-api/gram
A skill your agent uses when gating a feature behind a flag, dogfooding or gradually rolling out a change, choosing between productfeatures and PostHog feature flags, adding or checking a product…
Categories
Always use after creating a pull request that proposes user-visible changes. Pull Request Demo is an agent skill from speakeasy-api/gram. Always use after creating a pull request that proposes user-visible changes.
Pull Request Demo fits situations like: tasks that involve Pull requests.
Run `npx skills add speakeasy-api/gram --skill pull-request-demo -a claude-code`. Or copy the skill folder (.agents/skills/pull-request-demo in speakeasy-api/gram) into .claude/skills/pull-request-demo in your project. Claude Code loads it when a task matches its description.
Run `npx skills add speakeasy-api/gram --skill pull-request-demo -a codex`. Or copy the skill folder (.agents/skills/pull-request-demo in speakeasy-api/gram) into .agents/skills/pull-request-demo in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add speakeasy-api/gram --skill pull-request-demo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pull-request-demo, .gemini/skills/pull-request-demo, .github/skills/pull-request-demo and .opencode/skills/pull-request-demo in your project.
Going by SKILL.md and its folder, Pull Request Demo needs the command-line tools its instructions call (mise, ffmpeg, gh, psql and git) and credentials named GITHUB_TOKEN and GH_TOKEN. Our summary lists: A credential in GITHUB_TOKEN.
SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pull Request Demo is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pull Request Demo: Finishing a Development Branch (obra/superpowers, 296k stars), PR Babysitter (openinterpreter/openinterpreter, 69k stars), Check PR (onyx-dot-app/onyx, 32k stars) and Understand Diff Analysis (Egonex-AI/Understand-Anything, 86k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
speakeasy-api (a GitHub organization) maintains it in speakeasy-api/gram, which has 272 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 8, 2026.
Source: speakeasy-api/gram on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.