// docs / github
Import prompts and skills from GitHub
Pull a prompt or a skill out of a public repo into your library, pinned to the commit you read it at and copied only when its license allows it. Later, see what changed upstream and add it as a new version when you want it.
What it does
ple import github:<owner>/<repo> reads a public GitHub repository, finds the prompts and skills in it, lists them in a table (kind, license, title, size, path) and copies the ones you pick into your library. Each prompt keeps a link to the commit it was read at, so it always says which version of the file you have. Signed out, imports go to your local store; signed in, to your account.
Public repositories only. No GitHub token is read or sent. The CLI does not read GITHUB_TOKEN or GH_TOKEN, sends no credentials or cookies, and contacts only api.github.com and raw.githubusercontent.com.
One import uses three counted API requests (repo, commit, file list). GitHub allows 60 an hour per IP address without a token; the file downloads come from raw.githubusercontent.com and do not count against that. Answers are cached on your machine, so a --dry-run followed by the real import costs nothing extra.
ple import github:anthropics/skills --dry-run # what is there, and under which license
ple import github:anthropics/skills/skills/pdf # one folder; pick 1,3-5 / all
ple import github:owner/repo@v1.2 --all # a tag, branch or commit; no questions
ple import https://github.com/owner/repo/tree/main/prompts # a github.com URL works too
ple import --check # has anything changed upstream?
ple import --check --apply # add the changes as new versions@ref is a branch, tag or commit; without it the repo's default branch is used. A path that names a single .md file imports just that file. --dry-run only looks, --all imports everything new without asking, and --project <repo> picks the repo in your account. Needs CLI 0.10+; the full flag list is in the CLI reference.
What is picked up
| File | Imported as |
|---|---|
SKILL.md (up to 8 folders deep) | a skill, titled by its name (else its folder) |
*.prompt.md | a Copilot prompt |
.md under .claude/commands/ or .cursor/commands/ | a command |
*.mdc | a Cursor rule |
…/patterns/<name>/system.md | a Fabric pattern |
AGENTS.md, CLAUDE.md | context, only directly at the path you gave |
| one .md file, when the path names it | a prompt |
Only the Markdown file is imported. The rest of a skill's folder (scripts, references) stays on GitHub, and the output says how many files that is. More than 200 matching files stop the import and ask for a narrower path. Files over 64 KB, binary files, names like .env*, *.key or credentials*, and files that look like they contain a live token are skipped and named; the token itself is never printed.
The license rule
A file is copied only when it has an open license, decided per file, closest declaration first:
- The file's own
license:line in its frontmatter (MIT,Apache 2.0,CC BY 4.0…). A value like “see LICENSE.txt” continues with step 2. - The nearest
LICENSE,LICENCEorCOPYINGfile (.mdand.txtare fine), first in the file's folder, then in each parent up to the repo root. A closer license file that is not on the list below blocks the file; it never falls back to a broader license. - Only when there is no license file on the way up: the license GitHub shows for the repo.
Allowed: MIT, MIT-0, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, 0BSD, Unlicense, CC0-1.0, CC-BY-4.0 and CC-BY-SA-4.0. For CC-BY-SA-4.0 the output adds a note: if you change it and make it public, keep the same license.
Everything else is never copied. Files without an open license (all rights reserved, NonCommercial, NoDerivatives, custom or source-available terms, or no license at all) are listed with a link and never copied. The output says “not imported — no open license found” and gives the file's address on GitHub.
Attribution. The description of every imported prompt ends with its source:
Source: github.com/<owner>/<repo>/blob/<commit>/<path> · <license> · <copyright line>The copyright line is there when the license file has one. The same facts are stored with the prompt (a few upstream_* lines in the local file, or the prompt's source record in your account), and that is what ple import --check reads.
The license is recognized from its text. If a repository's licensing matters to you, read it yourself; this is not legal advice.
Following upstream
ple import --check looks at every prompt you imported from GitHub and shows a diff for the ones that changed there. Nothing is written until you add --apply, which adds each upstream text as a new version.
ple import --check # a diff for each changed prompt, nothing is written
ple import --check --apply # add each upstream text as a new version- Nothing is overwritten. Signed in, an update is a new version of the prompt with the changelog
Upstream owner/repo@abc1234 (blob def5678); signed out, a new entry in the local history. The text you had stays in the history. A text you edited by hand is recorded in the local history first. - Labels do not move.
productionkeeps pointing where it did until you runple tag. - The license is checked again. A changed file goes through the license and secret checks once more; a license that turned non-open is reported, not applied.
- A file that no longer exists upstream is kept here as it is. A file whose new text is what your prompt already says only has its source pointer updated.
- An unchanged file costs no download, and prompts from the same repo share one lookup (three API requests). On Free, a prompt that reached its 10-version limit is reported with a link to the pricing page, and the rest carries on.
GitHub or PromptLikeEngineer?
GitHub is the better place to publish and review prompts and skills. This table is about the narrower job of keeping the prompts you actually use. It compares a repository, plus the CLI tools that read one, with PromptLikeEngineer.
| Topic | GitHub | PromptLikeEngineer |
|---|---|---|
| History | Unlimited and free: every commit of the repository is kept. Commits are per repo, not per prompt. | Per-prompt versions with a diff and a rollback that adds a version. Free: up to 10 versions per prompt; Pro: unlimited. |
| Filling a prompt when you use it | Each tool has its own placeholder syntax: $ARGUMENTS in Claude Code, ${input:name} in Copilot prompt files, {{args}} in Gemini CLI. | One {{variable}} / {{#if}} template, filled the same way by ple get --var, the web app and the MCP fill_variables tool (templates). |
| Which version is live? | Tags and releases are repo-wide. gh skill install --pin locks one skill to a tag or commit. | Per-prompt production and staging labels, every move logged (needs an account; how labels work). |
| Following the source | gh skill update and npx skills update bring an installed skill up to the new upstream version. Their documentation describes no diff of the text and no copy of the old one. | ple import --check shows the diff; --apply adds a version. Labels stay where they are. |
| Agents | An agent reads the copy that sits in its own folder. | The MCP server serves the current version or a labelled one (needs an account; tested in Claude Code). |
| Review, CI, distribution | Pull requests, Actions, stars, forks and marketplaces. GitHub is better here. | No pull requests, no CI, no marketplace. Public repos can be starred and found in Explore, but PromptLikeEngineer is a personal library, not a place to review or distribute. |
| Whole skill folders (scripts, assets) | Kept. | Only the Markdown text is imported and versioned. |
Use both. Publish and review on GitHub; keep the prompts you use (filled, labelled and served to your agent) in PromptLikeEngineer. ple export --format skill|agents-md writes them back out as files.
Checked 21 October 2026
- GitHub Models (the playground, model catalog and inference API) was retired on 30 July 2026. GitHub changelog
gh skillhas been in public preview since 16 April 2026 and is subject to change. GitHub changeloggh skill install --pinlocks a skill to a tag or commit. GitHub changeloggh skill update --forceoverwrites locally modified skill files. gh skill update manualnpx skills updateis listed as “Update installed skills”; the README describes no diff and no copy of the old text. vercel-labs/skills README- Without a token, the GitHub REST API allows 60 requests an hour. GitHub REST API docs
- A public repository without a license falls under default copyright: others may view and fork it on GitHub, but have no right to reuse its files outside GitHub. GitHub docs: licensing a repository
- Claude Code fills
$ARGUMENTS, Copilot prompt files use${input:variableName}and Gemini CLI custom commands use{{args}}. Claude Code, VS Code, Gemini CLI - GitHub releases are based on Git tags and cover the whole repository. GitHub docs: releases
- GitHub Free includes unlimited public and private repositories. GitHub docs: plans
Product behavior changes, so check the sources again before you rely on a detail. Our own plans and limits are on the pricing page.
Example output
Found 13 prompt files in github.com/anthropics/skills@main (dbd4588) → your local store
1 skill Apache-2.0 algorithmic-art 19.3 KB skills/algorithmic-art/SKILL.md
(+2 files not imported — scripts/references stay on GitHub)
3 skill Apache-2.0 brand-guidelines 2.2 KB skills/brand-guidelines/SKILL.md
…
⚠ skills/docx/SKILL.md: not imported — no open license found https://github.com/anthropics/skills/blob/dbd4588…/skills/docx/SKILL.md
⚠ skills/claude-api/SKILL.md: larger than 64 KB — skipped
Dry run — nothing imported. Run `ple import github:anthropics/skills` to pick, or add --all.Output trimmed. The numbers are the rows you can pick (1,3-5 or all); a file without an open license is listed with a link and is never copied. A repository changes over time, so the commit in the first line is what this run saw.