Skill Upstream Pr logo

Skill Upstream Pr

Community
luongnv89
skill-upstream-pr

Improve an open-source GitHub skill and open a friendly suggestion PR upstream: fork, run skill-creator's retrofit, attach asm eval before/after metrics. Don't use for local-only skills, authoring from scratch, bulk repos, or registry publish.

Overview

Publisherluongnv89
Repositoryasm
Skill nameskill-upstream-pr
Stars
955
Forks
82
Bundled files
2
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 2 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by luongnv89 on GitHub. Read the source before you install it.

Installation

Install the Skill Upstream Pr AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/luongnv89/asm/tree/main/skills/skill-upstream-pr
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/luongnv89/asm.git /tmp/asm
mkdir -p .claude/skills
cp -r /tmp/asm/skills/skill-upstream-pr .claude/skills/skill-upstream-pr
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Skill Upstream Pr in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Skill Upstream Pr on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Skill Upstream Pr is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Skill Upstream PR

You are contributing quality improvements to someone else's open-source skill. The workflow is: fork → clone → improve via skill-creator's retrofit loop → push to fork → open a friendly suggestion PR upstream. You do not own the target repo. Every step assumes you are a polite contributor, not a maintainer.

Repo Sync Before Edits (mandatory)

Before any modification to the cloned fork, pull the latest from the fork's tracked branch:

bash
branch="$(git rev-parse --abbrev-ref HEAD)"
git fetch origin
git pull --rebase origin "$branch"

If the working tree is dirty: stash, sync, pop. If origin is missing or conflicts occur: stop and ask the user. A stale fork that PRs yesterday's tree is worse than no PR.

When to Use

  • User shares a GitHub URL to a public skill repo and asks to "improve", "level up", or "contribute to" it
  • User says "open a PR to this skill" or "suggest improvements upstream"
  • The target skill scores below 85/8 on asm eval and the user wants the upstream author to benefit

Do not trigger for: editing a local skill with no upstream, authoring a brand-new skill, publishing to the ASM registry, or bulk-improving many repos in one pass. One skill → one PR.

Prerequisites

Verify each before cloning anything. Stop and tell the user if any fails.

  • asm on PATH (command -v asm)
  • gh on PATH and authenticated (gh auth status)
  • git on PATH
  • Network access to GitHub
  • Write access to your own GitHub account (for the fork)

Input

The user provides a GitHub reference to a skill. Accept any of:

  • https://github.com/owner/repo
  • https://github.com/owner/repo/tree/<branch>/<path/to/skill>
  • github:owner/repo[#ref][:path]

Normalize to owner, repo, optional ref, optional path. If path is not given and the repo has multiple SKILL.md files, ask the user which one.

Workflow

Execute phases in order. Do not skip or reorder.

Phase 0 — Fork and clone

bash
cd "$(mktemp -d)"
gh repo fork "$OWNER/$REPO" --clone --remote
cd "$REPO"
# If a ref was provided:
git checkout "$REF"

gh repo fork --clone --remote creates the fork under your account, clones it locally, sets origin to your fork and upstream to the original repo. Verify with git remote -v before continuing.

Create a dedicated branch for the improvement:

bash
git checkout -b "skill-upstream-pr/improve-$(date +%Y%m%d-%H%M%S)"

Phase 1 — Locate the target SKILL.md

If the user gave a path, use it. Otherwise:

bash
find . -maxdepth 5 -name "SKILL.md" -type f

If more than one match and no path was given, list the candidates and ask the user to pick. Never guess — a wrong PR is worse than a delayed one.

Set SKILL_PATH to the directory containing the chosen SKILL.md (not the file itself) — asm eval takes a directory.

Phase 2 — Delegate to skill-creator's retrofit loop

This skill does not reimplement the improvement loop. Follow skills/skill-creator/references/retrofit-loop.md with $SKILL_PATH as the target:

  1. Phase 0: capture .asm-improver/baseline.json
  2. Phase 1: asm eval --fix plus frontmatter normalization
  3. Phases 2–4: Gate 1 fixes, then the category loop against the 85/8 floor
  4. Phases 5–6: version bump and the loop cap (8 iterations / 3 no-move / 2 regressions)
  5. Phase 7: .asm-improver/report.md

If the baseline already passes both gates, stop and tell the user — no PR needed for a skill that already meets the floor. Offer to find a different skill or a different target.

Phase 3 — Harvest metrics for the PR

Read two files produced by the retrofit loop:

  • .asm-improver/baseline.json — the before snapshot
  • The latest .asm-improver/iter-N.json — the after snapshot

Extract for both:

  • overallScore, grade
  • Every categories[].score (7 categories)
  • topSuggestions summary (for context, not quoted verbatim)

Compute deltas. If the overall score did not improve by at least 3 points or no category moved from below 8 to at least 8, stop and tell the user — the change isn't meaningful enough to justify a PR. Offer the retrofit report as feedback they can share informally instead.

Phase 4 — Build the PR body

Read references/pr-template.md and fill it in. The template enforces friendly, suggestion-style tone. Key sections:

  • What changed — one-sentence summary
  • Before/after metrics — table with overallScore, grade, and all 7 categories
  • Files touched — list every modified path under $SKILL_PATH
  • Iterations taken — N of 8 from the retrofit loop
  • How to verify — the asm eval command the maintainer can run locally

Tone rules (read references/tone-guide.md):

  • Lead with "Hi — noticed X, wanted to share Y"
  • Frame as a suggestion, not a fix: "happy to adjust if the direction doesn't fit"
  • Never imply the maintainer did something wrong
  • Thank them for open-sourcing the skill
  • Close with "no obligation to merge — totally fine to close if this isn't the right direction"

Phase 5 — Last-mile confirmation (mandatory)

Opening a PR on someone else's repo is public and hard to reverse. Before pushing anything, show the user:

  1. The PR title
  2. The full PR body (rendered markdown)
  3. The exact diff (git diff upstream/<default-branch>)
  4. The commands you are about to run

Ask the user to confirm. If they want edits, apply them and re-preview. Do not push until the user says "go" or equivalent.

Phase 6 — Push and open the PR

After approval:

bash
# Commit the changes
git add -A
git commit -m "$(cat <<'EOF'
improve SKILL.md: clarify triggers, add acceptance criteria, fix frontmatter

Suggested via skill-upstream-pr. See PR body for before/after metrics.
EOF
)"

# Push to the fork
git push -u origin "$(git rev-parse --abbrev-ref HEAD)"

# Open the PR upstream
gh pr create \
  --repo "$OWNER/$REPO" \
  --title "$PR_TITLE" \
  --body-file .asm-improver/pr-body.md

Never push to upstream. Never use --no-verify or other hook-skip flags. If gh pr create fails, stop and report — do not retry in a loop.

Print the PR URL returned by gh pr create so the user can open it.

Step Completion Reports (mandatory)

Emit a compact status block after each phase:

◆ Phase N — [phase name] ([N of 6])
··································································
  [check 1]:         √ pass
  [check 2]:         √ pass (note if relevant)
  [check 3]:         × fail — [reason]
  Criteria:          √ M/K met
  ______________________________
  Result:            PASS | FAIL | PARTIAL

Checks per phase:

  • Phase 0 — Fork created, Clone succeeded, Branch created, Remotes correct
  • Phase 1 — SKILL.md located, Path unambiguous
  • Phase 2 — Baseline captured, Retrofit loop ran, Final score >= 85, All categories >= 8
  • Phase 3 — Before/after delta >= 3 points OR category promoted
  • Phase 4 — PR body rendered, Tone checks passed
  • Phase 5 — User approved
  • Phase 6 — Push succeeded, PR opened, URL printed

Acceptance Criteria

  • Fork + clone done via gh repo fork --clone --remote — never a direct clone of upstream
  • Dedicated feature branch created before any edits
  • skill-creator retrofit loop run on the target; baseline + final JSON captured under .asm-improver/
  • Overall score improved by ≥ 3 points, OR at least one category moved from below 8 to ≥ 8
  • PR body built from references/pr-template.md with the full before/after table
  • User explicitly approved the PR preview before push
  • git push targets origin (the fork), never upstream
  • gh pr create --repo $OWNER/$REPO used — the PR targets the upstream repo
  • PR URL printed to the user at the end

Expected output

  • A new branch on the user's fork of $OWNER/$REPO
  • A public PR on $OWNER/$REPO with a before/after metrics table and friendly tone
  • A local .asm-improver/ directory with baseline, iterations, report, and pr-body.md

Edge Cases

  • Skill already passes 85/8 — stop at Phase 2; do not open a PR for a skill that already meets the floor
  • Improvement too small (< 3 point overall delta AND no category promoted) — stop at Phase 3; offer the retrofit report as informal feedback instead
  • Multiple SKILL.md files in the repo — ask the user which one; never batch
  • Fork already exists from a prior run — gh repo fork --clone --remote reuses it; rebase on upstream's default branch before editing
  • Upstream force-pushed or rewrote history — stop and ask the user; do not force-push the fork to "catch up"
  • asm eval --fix writes changes you disagree with — revert SKILL.md.bak and do targeted edits only; don't ship the auto-fix if it harms the skill
  • Maintainer has a CONTRIBUTING.md or PR template — read it before Phase 4 and align the PR body with their conventions; their template wins over ours

References

  • references/pr-template.md — PR title + body template with before/after table
  • references/tone-guide.md — wording patterns for friendly, suggestion-style contributions
  • skills/skill-creator/references/retrofit-loop.md — the improvement loop this skill delegates to
  • asm eval --help — flag reference for the evaluator

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Skill Upstream Pr AI skill do?

Improve an open-source GitHub skill and open a friendly suggestion PR upstream: fork, run skill-creator's retrofit, attach asm eval before/after metrics. Don't use for local-only skills, authoring from scratch, bulk repos, or registry publish.

Why use Skill Upstream Pr on TypingMind?

Because you install it once and use it with any model. Skill Upstream Pr is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Skill Upstream Pr in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/luongnv89/asm/tree/main/skills/skill-upstream-pr. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Skill Upstream Pr?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Skill Upstream Pr?

As many as you like. As long as a model supports skills, you can use Skill Upstream Pr with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Skill Upstream Pr AI skill free?

Yes. It is published on GitHub by luongnv89 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇