Agent skill

Short Race

by gug007 in gug007/lpm

Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, one above the other: Run in duplicates puts each model in its own copy of the project, shown as two rows, the…

MITAuto-check passed

Install Short Race

skills CLI
$ npx skills add gug007/lpm --skill short-race -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install gug007/lpm short-race --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/short-race .claude/skills/short-race && rm -rf skills-src

Use ~/.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/

Facts

Skill name
short-race
GitHub stars
152
Token cost
~4.3k tokens
SKILL.md length
2,727 words
Files
7 (incl. scripts)
Skills in repo
12
Repo updated
First seen
Licence
MIT

At a glance

Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, one above the other: Run in duplicates puts each model in its own copy of the project, shown as two rows, the…

  • Works in 5 steps: Cold open on the payoff for two lines… → No setup on screen. Picking the models,… → Both models at work in lpm, one above… → …
  • The user asks for a TikTok
  • SKILL.md covers What the video shows (about 18…, Setup: duplicates side by side, Models and Make one, plus 1 more section
  • Runs JavaScript scripts from its folder; calls node, gemini and composer

What it does

Short Race is an agent skill from gug007/lpm. Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, one above the other: Run in duplicates puts each model in its own copy of the project, shown as two rows, the same prompt sent to both, the real finish times on the pane headers, then both results live in lpm's browser. Default prompt: a giraffe flying a one-seat plane as animated HTML. Models in, 1080x1920 MP4 + cover + post caption out. Use when the user asks for a TikTok, Reel or Short that compares models, such as "opus 5.5…

Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts (for example `scripts/beats.js`, `scripts/claude-default.js` and `scripts/cli-default.js`).

It works with TikTok, xAI Grok and OpenAI. The repository describes itself as: Start, stop, and duplicate dev projects with one click. The best workspace for running Claude Code, Codex, and other AI agents alongside your services. The licence is MIT.

When your agent uses it

  • The user asks for a TikTok
  • Short that compares models
  • Such as opus 5.5 max vs gpt 6 astra ultra
  • Opus 5.5 vs grok 4.7 (Claude models run in Claude Code

Example prompts

  • “opus 5.5 max vs gpt 6 astra ultra”
  • “opus 5.5 vs grok 4.7”
  • “opus 5 vs opus 5.5”
  • “/short-race”

Requirements

  • Node.js

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Cold open on the payoff for two lines ("open": 2, about 4–5 s): both animations running one above the other, a colour bar over each row…
  2. No setup on screen. Picking the models, typing the prompt and Run in duplicates all happen under the two opening lines, where the payoff…
  3. Both models at work in lpm, one above the other: "Opus 5.5 and GPT-6 Astra, both running in lpm's terminal." The camera pushes in on each…
  4. The build is jump-cut. The clocks run while the line is spoken and stop on each agent's real finish.
  5. Both index.html files open in lpm's own browser, one per row. The payoff shot starts as soon as the camera goes wide on them, so it…

What it can do on your machine

Read from SKILL.md and the folder at commit 57f7a3f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 6 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node
    • gemini
    • composer
    • claude
    • codex

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Short Race loads about 4.3k tokens when it runs. Until then it costs about 185 tokens; SKILL.md has 2,727 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~185
When it runs · the whole SKILL.md, loaded when a task matches
~4.3k

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.

Safety

Auto-check passed

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); the scripts in this folder are not scanned.

SKILL.md

The full file from gug007/lpm at commit 57f7a3f, republished under its MIT licence (© gug007). 2,727 words, ~4,329 tokens.

Download SKILL.mdSave it as .claude/skills/short-race/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
short-race
description
Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, one above the other: Run in duplicates puts each model in its own copy of the project, shown as two rows, the same prompt sent to both, the real finish times on the pane headers, then both results live in lpm's browser. Default prompt: a giraffe flying a one-seat plane as animated HTML. Models in, 1080x1920 MP4 + cover + post caption out. Use when the user asks for a TikTok, Reel or Short that compares models, such as "opus 5.5 max vs gpt 6 astra ultra", "opus 5.5 vs grok 4.7" (Claude models run in Claude Code, GPT models in Codex, every other model in Cursor CLI) or "opus 5 vs opus 5.5". When the models build a game, use short-game.
version
1.2.0
argument-hint
"<model A>" vs "<model B>" [prompt: …]

Races two models on one prompt and cuts it into a TikTok. It writes a lesson for the short skill and records it with that skill's pipeline. Everything in that SKILL.md still holds and is not repeated here: payoff-first cut, captions, safe zones, review, the lesson data dir and workspace, foreground takes.

What the video shows (about 18 s)

  1. Cold open on the payoff for two lines ("open": 2, about 4–5 s): both animations running one above the other, a colour bar over each row with the model and its finish time, and the headline. It starts with the two model names slammed in big (slam in lesson.json, written by new.js): model A in cyan from the left, VS, model B in pink from the right, over the dimmed pages. At 1.65 s they shrink away into the headline, and that slam frame is the cover. A race between brands is named the way people search for it: "Claude or ChatGPT?" spoken, "Claude vs ChatGPT: Fable 5.1 vs GPT-6 Sol 🦒" as the headline, "Claude vs ChatGPT for coding:" leading the caption ("Claude vs Grok" for a Grok model in Cursor). The second line says what both models were asked to build ("Same prompt: a giraffe flying a plane."), so viewers know the prompt without reading it in the terminals. Keep it when rewording lesson.json. It also keeps the result on screen: a one-line opening lost most viewers at 0:02, when it cut to the setup.
  2. No setup on screen. Picking the models, typing the prompt and Run in duplicates all happen under the two opening lines, where the payoff hides them, so the video goes from the opening straight to the race.
  3. Both models at work in lpm, one above the other: "Opus 5.5 and GPT-6 Astra, both running in lpm's terminal." The camera pushes in on each row's start banner as its model is named (for Cursor, its status line, which it draws just under the prompt), then goes wide on "terminal". The clocks on the bars tick from the first frame of this shot.
  4. The build is jump-cut. The clocks run while the line is spoken and stop on each agent's real finish.
  5. Both index.html files open in lpm's own browser, one per row. The payoff shot starts as soon as the camera goes wide on them, so it outlasts the two-line opening. Every video ends on them by asking viewers which two models they want compared next, in the comments ("Which giraffe wins? Comment two models to race next."), and the caption asks too. Keep that ending when rewording lesson.json. It asks for suggestions; it never promises or teases a particular next video.

Setup: duplicates side by side

The race uses lpm's own Run in duplicates with Open side by side split into Rows, not a hand-built split:

  • One project with a header button that launches model A's CLI. Its terminal is run #1, and its composer's Model menu picks model A (off screen, like the rest of the setup): hover the model, click its level in the flyout. When that menu can't pick model A (Codex, whose picker isn't scripted, or a Claude model that isn't its family's newest), the button launches model A pinned with its session-only flags instead (the launch commands below).
  • The prompt goes into run #1's composer, then the send button's caret → Run in duplicates → 2 runs. Open side by side stays on. In the dialog, the copy gets model B one of two ways:
    • Same CLI: the copy's model picker (Model / Level, next to its name) is set to model B. It offers each Claude family by its bare name, which Claude Code resolves to that family's newest model, so new.js refuses a Claude model B that isn't its family's newest (opus 5 while Opus 5.5 exists): put that one on the left instead, as run #1.
    • Claude vs Codex: the project gets a second header button that launches model B pinned. The copy's run menu ("Run on this copy", right of its name) is set to Action → that button, and the prompt is typed again into the copy's own box, since an override starts empty.
    • Claude or Codex vs Cursor: the same, except that nothing is typed: the Cursor button carries the prompt as its launch argument, read from prompt.txt in the lesson workspace (outside both projects). lpm folds a prompt into the launch command only for Claude Code and Codex, and a prompt pasted into a CLI that is still booting gets lost. A Cursor model is always model B: new.js refuses one on the left, and two Cursor models can't race each other.
  • lpm clones the project into a copy (its own folder, so each agent writes its own index.html), starts the copy's agent on model B, sends it the prompt, and shows them as two rows, run #1 on top and the copy below. The lesson's settings preset the dialog's split to Rows (runInDuplicatesLayout). Run #1 keeps the keyboard.

Models

Each side is a loose spec: model, then an optional effort. The model picks the CLI: Claude models run in Claude Code and GPT models in Codex, never in Cursor, though Cursor lists them too. Every other model runs in Cursor CLI.

  • Claude Code: opus, opus 5, opus 5.5, sonnet, haiku, fable 5.1… A bare family means its newest version. Effort: low, medium, high, xhigh, max.
  • Codex: gpt 6 astra, gpt-5.6 sol, astra, gpt 5.5… Effort: whatever that model supports (ultra only on some).
  • Cursor CLI (agent): grok 4.7, gemini 3.7 flash, kimi k3, glm 5.2, composer 2.5… Cursor lists most levels as their own model (grok-4.7-xhigh), so most need an effort. A few, such as gemini-3.1-pro, gemini-3.5-flash and composer-2.5, run at one fixed level and take none: Cursor's own /model picker has no Effort for them, and it refuses gemini-3.1-pro[effort=xhigh]. The brand in the headline is the model's own name ("Claude vs Kimi"), "Cursor" only for Composer. The narration, captions and post never say a model runs "in Cursor": "The copy gets Grok 4.7", not "Grok 4.7 in Cursor".
  • No effort means the CLI's default, and the labels leave it out.
  • An effort the user gives the whole race ("use extra high effort") goes to both sides: --effort xhigh on new.js or models.js, for each side that names none. When a side can't run at it (a Cursor model with one fixed level, or a level that model lacks), new.js stops, and so does the video: tell the user which levels that side has and ask how to match the race before writing the lesson. A side is never run at another level than the one asked for, and the race is never quietly left unmatched.

scripts/models.js checks both against what is installed right now: Claude Code's own model table (read from its binary), Codex's ~/.codex/models_cache.json and agent --list-models. It rejects an effort the model does not support, because Codex fails such a run with a 400 in the middle of the take. Typos such as utra resolve, and so does "extra high". For a Cursor level with no slug of its own it asks Cursor itself: agent -p --model '<model>[effort=<level>]' with no prompt checks the model and exits without sending anything ("No prompt provided" when Cursor takes it, "Cannot use this model" when it doesn't), and the model it saves as the user's default is put back. A level found that way launches as --model '<model>[effort=<level>]'.

node scripts/models.js "opus 5.5 max" "gpt 6 astra ultra"
node scripts/models.js "opus 5.5" "grok 4.7" --effort xhigh

Launch commands (session-only flags, so nothing in the user's config changes):

  • claude --model <id> [--effort <e>] --permission-mode acceptEdits
  • codex -m <slug> [-c model_reasoning_effort=<e>] -c check_for_update_on_startup=false (Codex's update prompt once ran an update on a stray Enter)
  • agent --model <slug> --trust --force "$(cat <workspace>/prompt.txt)": --trust skips the new copy's folder-trust prompt, and --force runs its shell calls without an approval that would stall the race (its status line then reads "Run Everything"). Cursor does save --model as the user's default; see Traps.

Make one

  1. Write the lesson:

    node scripts/new.js "opus 5.5 max" "gpt 6 astra ultra"
    node scripts/new.js "opus 5.5" "grok 4.7" --effort xhigh
    node scripts/new.js "opus 5" "opus 5.5"
    node scripts/new.js "opus 5.5 low" "opus 5.5 max" --prompt "<prompt>" --subject "a lava lamp"

    It creates ~/Movies/lpm-lessons/tiktok/<slug>/ with lesson.json (narration, headline, post), compare.json (both models, the prompt), beats.js (a stub that loads scripts/beats.js, which brings in the tiktok kit) and take.sh (short/scripts/take.sh, inside the Claude-default backup when model A is picked in the composer). Both point into this repo by absolute path, so the folder needs nothing from outside git. --effort is the race's effort, for each side that names none. --subject is the short noun phrase ("a lava lamp") that the second line says and the caption uses; a custom --prompt requires it. --slug names the folder. --force rewrites an existing one. A lesson written before the setup moved off screen still has lines for it (left, prompt, dupes, pick, go) that the beats no longer run: rewrite it with --force before another take.

    A custom prompt must still ask for index.html at the project root: the race waits for that file, and the reveal opens it. It must also keep "Don't run or test it.": Claude runs with acceptEdits, so a model that checks its page with a shell command waits on an approval nobody gives, and its turn never ends (Opus 5.5 xhigh did, with node check.js). It should also say the page is shown in a wide, short panel of any size, lay the scene out on a fixed 900x360 stage with the subject's size given as shares of that stage (the default: plane about 25% of the width, centered, body about 70% down, giraffe's head about 15% from the top), and ask for the whole stage to be scaled to fit the panel, never cropped. Each row shows about 800x320 of page in the 800x990 window, the stage's own shape, so it fills the row with no bars at the sides. Races before 2026-10-09 ran in columns on a tall 420x740 stage: rewrite such a lesson with --force before retaking it. Pixel sizes break at other panel sizes, and percentages of the panel itself pull against each other when its shape changes. "Fill the window" made one model crop its scene, and without sizes the two results come out at different scales, which makes the side-by-side comparison harder.

  2. Tell the user that a take is starting and that they should leave the keyboard and mouse alone. A take drives the real pointer, and a stray key lands in the prompt.

  3. Dry run: <slug>/take.sh --no-audio --frames, then check frames/. The preflight runs first, and a take stops before touching anything when it lists something missing. Both rows should be there, both banners should show the right model, and both prompts should be sent. There should be no intro or update screen in either row.

  4. The video: <slug>/take.sh --frames. The take lasts as long as the slower model (15-minute limit per side, or timeoutMin in compare.json; a side that runs out shows ✗ no page. xhigh and max can think for over 15 minutes before writing). The real times go to <slug>/result.json.

  5. Review as short says (sheet, cover, popups, hook length). Then open the MP4 and check that both pages are moving and are the models' real output. take.sh --mux-only re-cuts without a retake.

Finish the reply with each model's time from result.json, then the rendered MP4's full absolute path. To post it, use short-publish.

Show full SKILL.md (847 more words)Show less

Traps

  • The window is 800x990 (window in lesson.json). The wide shot scales it to 982 px wide and centres it in the 1080x1920 frame, so a narrower window shows taller and bigger: 800 runs from y 352, under the headline's foot (y 190–380), to y 1568, with only the bottom row's footer below the top of TikTok's caption area (y 1500). Any narrower slides the bottom game under TikTok's own text, and the top bar under the headline. Races before 2026-10-10 used 900x990, which left the games letterboxed at the sides and the frame below y 1500 empty. TikTok's like and comment buttons cover x 950–1080 from y 700 down, which takes in the bottom row's right end, so each bar's clock sits just after the model's name, not at the bar's end. Check a change by laying a payoff frame into the frame at that size, with ~/Movies/lpm-lessons/tiktok/_look/safe-zones.png over it.
  • The voice is made before the take, so the narration never names a winner. The times on the colour bars are the result.
  • Time each side from its own prompt, not from the Run click. The copy starts later (the clone, then its agent's boot), so a clock started at Run would hand run #1 a head start.
  • The composer's Model menu runs Claude's /model and /effort, and Claude saves both as the user's default for new sessions (model and modelSettings in ~/.claude/settings.json). Cursor CLI saves the model it was launched with (model, selectedModel… in ~/.cursor/cli-config.json). take.sh sets each file aside first and puts those keys back on exit (scripts/cli-default.js). A take killed hard leaves _claude-settings.backup.json or _cursor-settings.backup.json in the lesson folder; the next take.sh run keeps that backup and restores from it.
  • Cursor keeps no transcript with times. The race reads its chat (~/.cursor/chats/<md5 of the folder>/<chat>/store.db, scripts/cursor.js): the prompt is in when a user message holds <user_query>, and the turn is over when the last message is the model's with no tool call. A side's clock starts at meta.json's createdAtMs (the prompt can reach the store only with the model's first step, which took 28 minutes at xhigh and once handed Grok a 28-minute head start) and stops at updatedAtMs, the chat's last write. Its model name shows on its status line, not in a banner, and Cursor draws that line inline just under the prompt, about halfway down its screen early in a chat, not at the foot. The store is in WAL mode and a read-only open fails without its -shm file, so the race reads a copy of store.db and its -wal; a long chat's messages run past 1 MB of sqlite3 output.
  • A model name the transcript mishears fails the voice's dropped-words check. Reword that line in lesson.json, or add the heard spelling to HEARD_AS in lesson/scripts/words.js, then run again with --respeak.
  • Two sides may not be identical: new.js refuses when model and effort both match.
  • lpm starts a Claude or Codex copy by typing its launch line, prompt included, into a shell that is still starting, and macOS cuts a terminal line off at 1024 bytes. The copy then sits at its shell with the line cut mid-prompt and never starts, and the race waits out its limit (the first GTA take, a 1259-byte line). new.js refuses a launch line over 1000 bytes: shorten the prompt. Cursor reads prompt.txt, so it has no limit.
  • A new Codex model can open with a one-time intro screen, and that screen takes the first Enter. If the dry run shows one, dismiss it in the hook beat before the prompt is typed.
  • The project gets its own global.yml with no actions, which keeps lpm's default Claude and Codex buttons out of the header, so only the race's buttons show.
  • lpm refuses a project with no service, so the project has a preview service that is never started.
  • The copy inherits the project's header buttons, so each is named after its CLI ("Claude", "Codex", "Cursor"), not a model; otherwise the model B row would show a model A button. The banners and colour bars name the models.
  • The copy is a clone of run #1's folder, made a second or two after run #1 gets the prompt. A model fast enough to write index.html in that window would hand the copy its page; the go beat logs a warning if the copy starts with one.
  • Codex prints the path of the index.html it wrote, and lpm opens a file preview over everything when that path is clicked. The reveal makes a passive row active by clicking its pane header, never its terminal, and presses Escape if a dialog is open.
  • take.sh runs under caffeinate: a slow model can leave the pointer still for longer than the display-sleep timer.
  • Codex 0.157 changed its rollout: the prompt is an item_completed event whose item is a UserMessage, not a user_message event. The race looks for either. A side whose clock never starts (no sentAt) never finishes and ends as ✗ no page even with index.html written, so check the rollout format first when a Codex update lands.

© gug007, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files (scripts) in .claude/skills/short-race of gug007/lpm.

  • SKILL.md
  • scripts/beats.js
  • scripts/claude-default.js
  • scripts/cli-default.js
  • scripts/cursor.js
  • scripts/models.js
  • scripts/new.js

Open the folder on GitHubat commit 57f7a3f

Compare with similar skills

Short Race 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.

Short Race compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Short Race this skillgug007/lpm152—~4.3kAutomated safety check: PassMIT
Video Transcribewendy7756/AI-Video-Transcriber3.3k—~937Automated safety check: NotesApache-2.0
Adversarial Speczscole/adversarial-spec556—~8.3kAutomated safety check: NotesMIT
Ad Creativecoreyhaines31/marketingskills54k—~6.3kAutomated safety check: PassMIT
PiDeck Usage Probe Helperayuayue/PiDeck1k—~1.4kAutomated safety check: PassMIT
Omd Mediakwakseongjae/oh-my-design533—~1.1kAutomated safety check: PassMIT

Similar skills

  • Video Transcribe

    wendy7756/AI-Video-Transcriber

    Transcribe and summarize a video or podcast from a URL (YouTube, TikTok, Bilibili, Apple Podcasts, SoundCloud, 30+ platforms) or from a local media/.txt file.

    3.3k GitHub stars~937 tokensUpdated 25 days ago
    Media & CreativeAuto-check: notes
  • Adversarial Spec

    zscole/adversarial-spec

    Iteratively refine a product spec by debating with multiple LLMs (GPT, Gemini, Grok, etc.) until all models agree.

    556 GitHub stars~8.3k tokensUpdated 8 mo ago
    Product & Project ManagementAuto-check: notes
  • Ad Creative

    coreyhaines31/marketingskills

    When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platform.

    54k GitHub stars~6.3k tokensUpdated 2 days ago
    Marketing & SEOAuto-check passed
  • Helps show a model provider's usage, balance or quota in PiDeck: checks built-in support, points to the dialog templates, or writes a custom probe entry.

    1k GitHub stars~1.4k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Omd Media

    kwakseongjae/oh-my-design

    Brand-consistent asset sets from DESIGN.md — hero, section illustrations, icon sets, OG image — generated through whichever channel the user actually has (grok build imagegen, Codex $imagegen…

    533 GitHub stars~1.1k tokensUpdated 9 days ago
    Frontend & DesignAuto-check passed
  • Official

    Wires Grok speech-to-speech into an app's own microphone and audio playback over a realtime WebSocket, replacing an STT-LLM-TTS cascade or OpenAI Realtime.

    11k GitHub stars~1.7k tokensUpdated today
    Media & CreativeAuto-check passed

More from gug007/lpm

All 12 skills in this repo
  • Short

    gug007/lpm

    Make a short vertical (9:16) lpm lesson that feels native to TikTok, Reels and Shorts: a payoff-first hook, fast push-ins that follow the action, word-by-word burned-in captions, numbered step…

    152 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Short Game

    gug007/lpm

    Make a short vertical (9:16) video where two AI models build the same self-playing game in lpm, one above the other, and both games then play live in lpm's browser.

    152 GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Lpm Config

    gug007/lpm

    Create and edit lpm YAML configs for projects, duplicates, worktree metadata, services, actions, header and footer button zones and zone layers, terminals, profiles, SSH projects, and shared config…

    152 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Make the App Store screenshots for lpm Link (iPhone 6.3" 1206x2622 and iPad 13" 2064x2752) from the current mobile/ source: a screenshot build of the app opens each screen straight into Demo Mode…

    152 GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Short Publish

    gug007/lpm

    Post a finished vertical lesson from ~/Movies/lpm-lessons/tiktok/<slug/ to YouTube Shorts (LPM channel, through Chrome) and TikTok (@lpm06557, from the user's iPhone through iPhone Mirroring) in…

    152 GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Record the App Store review demo video for lpm Link: the lpm desktop app and lpm Link on a physical iPhone (live through iPhone Mirroring) side by side, pairing and then controlling the Mac from the…

    152 GitHub stars~2.4k tokensUpdated today
    Auto-check passed

Questions about Short Race

What does Short Race do?

Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, one above the other: Run in duplicates puts each model in its own copy of the project, shown as two rows, the…. Short Race is an agent skill from gug007/lpm. Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, one above the other: Run in duplicates puts each model in its own copy of the project, shown as two rows, the same prompt sent to both, the real finish times on the pane headers, then both results live in lpm's browser.

When should I use Short Race?

Short Race fits situations like: the user asks for a TikTok; short that compares models; such as opus 5.5 max vs gpt 6 astra ultra; opus 5.5 vs grok 4.7 (Claude models run in Claude Code.

How do I install Short Race in Claude Code?

Run `npx skills add gug007/lpm --skill short-race -a claude-code`. Or copy the skill folder (.claude/skills/short-race in gug007/lpm) into .claude/skills/short-race in your project. Claude Code loads it when a task matches its description.

How do I install Short Race in Codex?

Run `npx skills add gug007/lpm --skill short-race -a codex`. Or copy the skill folder (.claude/skills/short-race in gug007/lpm) into .agents/skills/short-race in your project. Codex loads it when a task matches its description.

Can I use Short Race in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gug007/lpm --skill short-race -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/short-race, .gemini/skills/short-race, .github/skills/short-race and .opencode/skills/short-race in your project.

What does Short Race need to run?

Going by SKILL.md and its folder, Short Race needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node, gemini, composer, claude and codex). Our summary lists: Node.js.

Does Short Race access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Short Race safe to install?

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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Short Race use?

Short Race is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Short Race use?

About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Short Race?

Skills that share tags, products or a category with Short Race: Video Transcribe (wendy7756/AI-Video-Transcriber, 3.3k stars), Adversarial Spec (zscole/adversarial-spec, 556 stars), Ad Creative (coreyhaines31/marketingskills, 54k stars) and PiDeck Usage Probe Helper (ayuayue/PiDeck, 1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Short Race?

gug007 (a GitHub user) maintains it in gug007/lpm, which has 152 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 10, 2026.

Source: gug007/lpm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.