Agent skill

Short Publish

by gug007 in 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…

MITAuto-check passedMedia & Creative

Install Short Publish

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

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

GitHub CLI
$ gh skill install gug007/lpm short-publish --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-publish .claude/skills/short-publish && 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-publish
GitHub stars
152
Token cost
~3.1k tokens
SKILL.md length
1,855 words
Files
2 (incl. scripts)
Skills in repo
12
Repo updated
First seen
Licence
MIT

At a glance

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…

  • Works in 9 steps: Video into Photos: open -R "" (a Finder… → TikTok: cmd+1 → the Search pill above… → + (tab bar centre) → "iPhone camera is… → …
  • The user asks to upload
  • SKILL.md covers Running both at once, YouTube Shorts (Chrome), TikTok (iPhone Mirroring) and After posting
  • Runs JavaScript scripts from its folder; calls node; reaches tiktok.com and studio.youtube.com

What it does

Short Publish is an agent skill from 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 parallel: the MP4, the caption and hashtags from post.txt, the headline cover, each platform's settings, then both links logged and the title listed in SHORTS.md. Use when the user asks to upload, publish or post a short, vertical, TikTok or YouTube Shorts video, to one platform or both.

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/prepare.js`).

It sits in Media & Creative, covering Video scripts and shorts. It works with TikTok and YouTube. 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 to upload
  • YouTube Shorts video

Example prompts

  • “/short-publish”

Requirements

  • Node.js

Workflow steps

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

  1. Video into Photos: open -R "" (a Finder window with the file selected appears after a second or two; AppleScript to Finder is not…
  2. TikTok: cmd+1 → the Search pill above the dock → type TikTok → the Top Hit icon. Check the profile handle.
  3. + (tab bar centre) → "iPhone camera is not available from Mac" → OK → the gallery thumbnail at the bottom left. TikTok has limited Photos…
  4. In TikTok's gallery ("Select multiple" is on) tap the video's circle (it shows 1) → Next → the editor → Next (no "Add sound").
  5. Post screen: tap "Add description…", type the caption, then key return twice with short waits, then each hashtag as its own type with a…
  6. Edit cover: a frame strip under the preview, "+ Upload", text styles None/Standard. Drag the selector from the far left 5 px right (mouse…
  7. "Everyone can view this post" is the default. More options: leave AI-generated content off (turn it off if the app pre-set it on). Content…
  8. Post. The app shows "Video posted! Everyone can view. Share:" and the post with "Promotional content" (no AI-generated label).
  9. Delete the import from Photos: cmd+1 → Photos → the Library grid. The Library can hold several similar-looking lpm lesson clips (this…

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 1 file in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • tiktok.com
    • studio.youtube.com
    • youtube.com

    Also links to:

    • lpm.cx

    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 Publish loads about 3.1k tokens when it runs. Until then it costs about 125 tokens; SKILL.md has 1,855 words of instructions outside code blocks.

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

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). 1,855 words, ~3,098 tokens.

Download SKILL.mdSave it as .claude/skills/short-publish/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
short-publish
description
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 parallel: the MP4, the caption and hashtags from post.txt, the headline cover, each platform's settings, then both links logged and the title listed in SHORTS.md. Use when the user asks to upload, publish or post a short, vertical, TikTok or YouTube Shorts video, to one platform or both.
version
2.2.0
argument-hint
<slug> [youtube|tiktok]

Post a vertical lesson to YouTube Shorts and TikTok at the same time.

  • scope: both platforms unless the user names one. A platform whose ledger already lists the slug is skipped unless the user asked for a repost.
  • run node scripts/prepare.js <slug> <scratchpad-dir> [--full-lesson <youtu.be link>] first. It copies the MP4 (named after the title, because Studio pre-fills the title from the file name) and cover.jpg into the scratchpad, shrinks a master over 10,000,000 bytes to a two-pass H.264 copy (the master stays in the lesson folder), and prints the title, the TikTok caption and the YouTube description. It warns about a wrong size, a clip over 3 minutes (not a Short), a title the file name could not carry (retype it), an over-long caption, more than 5 hashtags, an @, and a slug already in either ledger. --full-lesson is the long YouTube lesson on the same topic (Studio → Content → Videos); leave it out when there is none.
  • shared text: the caption is the first paragraph of post.txt, then at most 5 hashtags (TikTok's cap; a 6th and later lose their #; when post.txt has more, keep the topic tags and #lpm). Brand stays lowercase lpm. No @. No next-video teaser. YouTube gets the same caption and hashtags plus the lpm line and link that prepare.js adds.

Running both at once

The two tracks use different tools that do not share state: YouTube goes through the Claude in Chrome MCP, which drives the tab through the extension and needs no OS focus; TikTok goes through computer use on iPhone Mirroring, which moves the real pointer in the frontmost app. Work both yourself, without subagents: put the next step of each track in the same message as two parallel tool calls (a browser_batch beside a computer_batch), read both results, and send the next pair. Start with YouTube's file_upload so the video processes on YouTube's side while the phone steps run.

  • both platforms publish as soon as their forms are done and checked; neither waits for the user's OK (user rule 2026-09-30: "post it without asking").
  • computer use "in use by another Claude session": end that session without asking (user rule 2026-09-30). ~/.claude/computer-use.lock names its pid; kill <pid>, check the lock is gone, then request_access again.
  • a blocked track does not stop the other: when computer use is still unavailable (access denied) or the Chrome extension is not connected, finish the other platform and tell the user which one is left. Never move TikTok to the Chrome path on your own.
  • each track was verified on its own (2026-09-25: two Shorts, two TikTok posts). The first parallel run is new: write what broke into the tiktok-upload and youtube-upload memories.

YouTube Shorts (Chrome)

  • channel LPM (UCIxcL1wPIlFT-4cahfHZJig). Open https://studio.youtube.com/channel/UCIxcL1wPIlFT-4cahfHZJig/videos/upload?d=ud: it switches Studio to LPM and opens the upload dialog. youtube.com/upload, and a new MCP tab group, can land on the user's personal channel, even on an LPM video's /edit URL. Check the sidebar's "Your channel LPM" (or ytcfg.get('CHANNEL_ID') in JS) before file_upload.
  • YouTube turns any vertical video of 3 minutes or less into a Short by itself: the link reads youtube.com/shorts/<id> and the row sits under Content → Shorts.
  • Details: find the file input → file_upload the MP4 → wait ~6 s. Title: the lesson title as-is (100 characters max). Description: click the box, type prepare.js's YouTube description, then click a neutral label (the "Details" heading) to close the hashtag popup. When typing is dropped (computer use hides Chrome) and the fields are filled in JS, set the description with box.focus(), select its contents, document.execCommand('insertText', false, text): innerText = text shows the line breaks in the dialog but saves one run-on line ("…Codex.https://lpm.cx#claudecode"). Check the saved text on the edit page. Thumbnail: find the Thumbnail "Upload file" file input → file_upload the cover. Playlists: none (the tutorials playlist holds only the long lessons). Audience: "No, it's not made for kids", by coordinate. Show more → Tags: 15–20, a comma after each (lpm, lpm.cx, the lesson's own nouns and verbs, Claude Code, Codex, mac dev tools, developer tools). Category: Science & Technology (the channel default; check it). Paid promotion and AI use: left unanswered, as on the long lessons. Check the radios and tag chips with JS before leaving the step.
  • Video elements: skip. "Related video" (a link from the Short to the long lesson) is refused on this channel with "Build your channel history"; "Got it" closes it. The "Full lesson" line in the description stands in for it.
  • Next ×3 → Public (zoom: the button now reads Publish) → Publish → the "Video published" dialog shows the link.
  • never press Escape in the upload dialog: it closes it. The upload is already a private draft: Content → Shorts → "Edit draft" on the row (a coordinate click; the dialog takes ~4 s to appear, and a click on the description before then hits the row behind it and opens that video's edit page).
  • "We had trouble saving your video, retrying" once left the tab unresponsive to the extension even though the publish went through. Check from a new tab's Shorts list instead of waiting on the old one.
  • verify: the Shorts row shows Public; studio.youtube.com/video/<id>/edit shows the description, the cover as the thumbnail, and the tags (Show more). Links in the description stay plain text until the channel's one-time phone verification, which only the user can do; say so once.
Show full SKILL.md (973 more words)Show less

TikTok (iPhone Mirroring)

  • path: always the iPhone, through iPhone Mirroring (user rule 2026-09-25). Use the Chrome path below only when the user asks for it.
  • account: @lpm06557 (display name "lpm"). Check it before posting: the TikTok app's Profile tab shows the handle under the name. Any other handle: stop and tell the user. Never log in, log out or switch accounts.
  • cover: the opening frame with the headline sticker. The sticker pops in over the first frames, so frame 0 has none: take the frame around 0.6 s (the one cover.jpg shows).
  • settings (user decisions 2026-09-25, AI label changed 2026-09-27): Everyone can view; comments and reuse (Duet, Stitch) allowed; AI-generated content off: never turn the label on and never mention AI-generated anywhere in the post (user 2026-09-27: "do not mention AI generated"); Disclose commercial content on → Your brand (the post is labeled "Promotional content", which cannot be changed once live); Ad authorization and Only show as ads off; no sound added (the video carries its own voice and music); no schedule unless asked.
  • post without asking once the account, caption, hashtags, cover and labels check out (zoom on each); report them after posting. Stop and ask only when one of them is wrong and can't be fixed.

Computer use: request_access for "iPhone Mirroring" and "Finder". The first launch shows Apple's "iPhone on Your Mac" setup, which turns on mirroring and notification forwarding and needs the phone unlocked: the user does that part. The mirrored phone sits at the right edge of the screen; the phone must stay locked and nearby.

  1. Video into Photos: open -R "<scratchpad video>" (a Finder window with the file selected appears after a second or two; AppleScript to Finder is not authorized). On the phone, cmd+1 (Home) → Photos. Drag the Finder row onto a visible part of the mirrored Photos screen with left_mouse_down, several mouse_move steps, a 1–2 s hover, left_mouse_up. The video lands at the end of the Library (its length as the badge).
  2. TikTok: cmd+1 → the Search pill above the dock → type TikTok → the Top Hit icon. Check the profile handle.
  3. + (tab bar centre) → "iPhone camera is not available from Mac" → OK → the gallery thumbnail at the bottom left. TikTok has limited Photos access: on "Would Like to Access Your Photos" choose Select More Photos…, tick only the new video (newest, top left), ✓. Nothing else of the user's library is shared.
  4. In TikTok's gallery ("Select multiple" is on) tap the video's circle (it shows 1) → Next → the editor → Next (no "Add sound").
  5. Post screen: tap "Add description…", type the caption, then key return twice with short waits, then each hashtag as its own type with a trailing space and a ~1 s wait. Typing the whole block in one go put the line breaks after the first hashtag. cmd+a then delete clears the field; a retype must start from a fully empty field, because hashtags that were typed and then partly deleted still count toward the 5 ("Maximum 5 hashtags", and new # are dropped). Wait ~1.5 s between the two returns (0.7 s lost one). Zoom to check.
  6. Edit cover: a frame strip under the preview, "+ Upload", text styles None/Standard. Drag the selector from the far left 5 px right (mouse down, small moves, up) until the preview shows the headline sticker → Save.
  7. "Everyone can view this post" is the default. More options: leave AI-generated content off (turn it off if the app pre-set it on). Content disclosure and ads (loads for a few seconds) → Disclose commercial content → tick Your brand → Save → "Content disclosure setting is on… labeled Promotional content" → Continue. Close the sheet (×).
  8. Post. The app shows "Video posted! Everyone can view. Share:" and the post with "Promotional content" (no AI-generated label).
  9. Delete the import from Photos: cmd+1 → Photos → the Library grid. The Library can hold several similar-looking lpm lesson clips (this session's and past sessions'), so confirm before deleting — zoom on the candidate thumbnail and check it matches the payoff frame/headline of the video just posted, and that its duration badge matches the one prepare.js printed, the same check that catches the wrong-video mixup in step 4. Tap it open, then the trash icon, then confirm "Delete Video". It only leaves the phone's "Recently Deleted" after 30 days (or an immediate empty from there), which is fine — the goal is just to keep it out of the Library before the next take.

TikTok from Chrome (only when the user asks for it; post form not yet verified): navigate https://www.tiktok.com/tiktokstudio/upload → check the account → find the "Select video to upload" file input → file_upload the scratchpad MP4 → the post form: replace the file-name caption, cover editor, visibility, the same labels, Post. Never press Escape in the form; leaving the page asks to discard the upload. Write the form's real layout into the tiktok-upload memory on its first use.

After posting

  • YouTube: append - <YYYY-MM-DD> <slug> https://youtube.com/shorts/<id> to ~/Movies/lpm-lessons/tiktok/SHORTS_POSTED.md (create it with a # YouTube Shorts posts heading).
  • TikTok: the link comes from Chrome, https://www.tiktok.com/tiktokstudio/content → find the row's link (/@lpm06557/video/<id>); the public profile page sat on "Please wait…" in the MCP tab. Avoid the app's "Copy link": it goes through the shared clipboard. Append - <YYYY-MM-DD> <slug> <link> to ~/Movies/lpm-lessons/tiktok/POSTED.md (create it with a # TikTok posts heading). A new post shows "Content under review" (result within 12 hours) and Privacy "Only me" until the review finishes; it was posted as Everyone.
  • titles: SHORTS.md at the repo root lists every posted short by title only, oldest first. Append - <lesson title> after the first platform posts (no links; those live in the two ledgers).
  • report both links, the title, the caption as posted, each platform's labels, and TikTok's review status. Confirm the import was deleted from the iPhone's Photos library (step 9 above); if it couldn't be verified or deleted, say so instead of assuming.

© 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 1 other file (scripts) in .claude/skills/short-publish of gug007/lpm.

  • SKILL.md
  • scripts/prepare.js

Open the folder on GitHubat commit 57f7a3f

Compare with similar skills

Short Publish 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 Publish compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Short Publish this skillgug007/lpm152—~3.1kAutomated safety check: PassMIT
Analyze Socialccplugins/awesome-claude-code-plugins970—~1.1kAutomated safety check: WarnApache-2.0
Memstack Content Youtube Scriptcwinvestments/memstack423—~3.5kAutomated safety check: PassProprietary
Shortform Ideationericrisco/rsc-harness180—~3.1kAutomated safety check: PassMIT
Cross Platform ReformatterOotto-AI/claude-content-skills130—~449Automated safety check: PassMIT
Video Hook Generatornicepkg/ai-workflow285—~2kAutomated safety check: PassMIT

Similar skills

  • Analyze Social

    ccplugins/awesome-claude-code-plugins

    A skill your agent uses when the user shares a social video/post link or local video and wants it understood — an Instagram (instagram.com), TikTok (tiktok.com), YouTube or YouTube Shorts…

    970 GitHub stars~1.1k tokensUpdated 1 mo ago
    Media & CreativeAuto-check: warnings
  • Memstack Content Youtube Script

    cwinvestments/memstack

    A skill your agent uses when the user says 'YouTube script', 'video script', 'write script for YouTube', 'YouTube video outline', or is creating scripted content for a YouTube video with hooks…

    423 GitHub stars~3.5k tokensUpdated 14 days ago
    Media & CreativeAuto-check passed
  • Shortform Ideation

    ericrisco/rsc-harness

    A skill your agent uses when a Reels/TikTok/Shorts account needs its next video ideas scored into a ranked backlog, grounded in its own performance log plus dated trending sounds, each bet logged so…

    180 GitHub stars~3.1k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Cross Platform Reformatter

    Ootto-AI/claude-content-skills

    Reshapes one Instagram reel into a TikTok and a YouTube Short — adjusting hook, length and captions per platform.

    130 GitHub stars~449 tokensUpdated 2 days ago
    Media & CreativeAuto-check passed
  • Video Hook Generator

    nicepkg/ai-workflow

    Generate attention-grabbing hooks for the first 3 seconds of videos.

    285 GitHub stars~2k tokensUpdated 8 mo ago
    Media & CreativeAuto-check passed
  • Video Marketing

    aAAaqwq/AGI-Super-Team

    When the user wants to plan video marketing, create video scripts, or optimize for short-form or long-form video.

    105 GitHub starsUsed in 1 repo~914 tokens
    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 yesterday
    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 yesterday
    Auto-check passed
  • Short Race

    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…

    152 GitHub stars~4.3k tokensUpdated yesterday
    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 yesterday
    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 yesterday
    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 yesterday
    Auto-check passed

Works with

Questions about Short Publish

What does Short Publish do?

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…. Short Publish is an agent skill from gug007/lpm.md.

When should I use Short Publish?

Short Publish fits situations like: the user asks to upload; youTube Shorts video.

How do I install Short Publish in Claude Code?

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

How do I install Short Publish in Codex?

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

Can I use Short Publish 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-publish -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-publish, .gemini/skills/short-publish, .github/skills/short-publish and .opencode/skills/short-publish in your project.

What does Short Publish need to run?

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

Does Short Publish access the network?

SKILL.md names 4 domains. In commands or code: tiktok.com, studio.youtube.com and youtube.com; the agent is likely to contact these when it follows the instructions. As links in the text: lpm.cx. This is read from the text; nothing was executed.

Is Short Publish 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 Publish use?

Short Publish 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 Publish use?

About 3.1k tokens (SKILL.md is roughly 12k 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 Publish?

Skills that share tags, products or a category with Short Publish: Analyze Social (ccplugins/awesome-claude-code-plugins, 970 stars), Memstack Content Youtube Script (cwinvestments/memstack, 423 stars), Shortform Ideation (ericrisco/rsc-harness, 180 stars) and Cross Platform Reformatter (Ootto-AI/claude-content-skills, 130 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Short Publish?

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.