Skip to main content
// 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.

$ terminal
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

Files that ple import github: picks up and what each becomes
FileImported as
SKILL.md (up to 8 folders deep)a skill, titled by its name (else its folder)
*.prompt.mda Copilot prompt
.md under .claude/commands/ or .cursor/commands/a command
*.mdca Cursor rule
…/patterns/<name>/system.mda Fabric pattern
AGENTS.md, CLAUDE.mdcontext, only directly at the path you gave
one .md file, when the path names ita 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:

  1. 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.
  2. The nearest LICENSE, LICENCE or COPYING file (.md and .txt are 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.
  3. 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:

end of the description
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.

$ terminal
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. production keeps pointing where it did until you run ple 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.

GitHub compared with PromptLikeEngineer, one row per job
TopicGitHubPromptLikeEngineer
HistoryUnlimited 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 itEach 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 sourcegh 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.
AgentsAn 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, distributionPull 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 skill has been in public preview since 16 April 2026 and is subject to change. GitHub changelog
  • gh skill install --pin locks a skill to a tag or commit. GitHub changelog
  • gh skill update --force overwrites locally modified skill files. gh skill update manual
  • npx skills update is 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

ple import github:anthropics/skills --dry-run, 21 October 2026
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.