Hunk Release Workflow
modem-dev/hunk
Maintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits.
Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.
$ npx skills add TryGhost/Ghost --skill migrate-internal-package -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install TryGhost/Ghost migrate-internal-package --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/TryGhost/Ghost.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/migrate-internal-package .claude/skills/migrate-internal-package && rm -rf skills-srcUse ~/.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/
Install the "migrate-internal-package" agent skill from https://github.com/TryGhost/Ghost/tree/main/.agents/skills/migrate-internal-package into .claude/skills/migrate-internal-package/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-internal-package", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/TryGhost/Ghost/tree/main/.agents/skills/migrate-internal-packageType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add TryGhost/Ghost --skill migrate-internal-package -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install TryGhost/Ghost migrate-internal-package --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TryGhost/Ghost.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/migrate-internal-package .agents/skills/migrate-internal-package && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-internal-package" agent skill from https://github.com/TryGhost/Ghost/tree/main/.agents/skills/migrate-internal-package into .agents/skills/migrate-internal-package/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-internal-package", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TryGhost/Ghost --skill migrate-internal-package -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install TryGhost/Ghost migrate-internal-package --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TryGhost/Ghost.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/migrate-internal-package .cursor/skills/migrate-internal-package && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "migrate-internal-package" agent skill from https://github.com/TryGhost/Ghost/tree/main/.agents/skills/migrate-internal-package into .cursor/skills/migrate-internal-package/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-internal-package", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/TryGhost/Ghost.git --path .agents/skills/migrate-internal-package--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add TryGhost/Ghost --skill migrate-internal-package -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install TryGhost/Ghost migrate-internal-package --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TryGhost/Ghost.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/migrate-internal-package .gemini/skills/migrate-internal-package && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "migrate-internal-package" agent skill from https://github.com/TryGhost/Ghost/tree/main/.agents/skills/migrate-internal-package into .gemini/skills/migrate-internal-package/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-internal-package", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install TryGhost/Ghost migrate-internal-packageInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add TryGhost/Ghost --skill migrate-internal-package -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/TryGhost/Ghost.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/migrate-internal-package .github/skills/migrate-internal-package && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "migrate-internal-package" agent skill from https://github.com/TryGhost/Ghost/tree/main/.agents/skills/migrate-internal-package into .github/skills/migrate-internal-package/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-internal-package", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TryGhost/Ghost --skill migrate-internal-package -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install TryGhost/Ghost migrate-internal-package --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TryGhost/Ghost.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/migrate-internal-package .opencode/skills/migrate-internal-package && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "migrate-internal-package" agent skill from https://github.com/TryGhost/Ghost/tree/main/.agents/skills/migrate-internal-package into .opencode/skills/migrate-internal-package/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-internal-package", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
migrate-internal-packageMoves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.
The skill moves a package from a repository such as TryGhost/SDK or TryGhost/framework into Ghost without losing its history or leaving a gap where neither repository owns it. The stages are a history import PR, an exceptional merge-commit handoff, a PR that removes the package from the source repository, optional npm deprecation, migration cleanup and a modernization handoff. Migration mechanics stay separate from Ghost's long-term package standards.
Any contributor can run it. Administrator rights are needed only at the exceptional merge checkpoint, which goes to one of a small group of Ghost repository administrators. The authority boundaries are firm: every cross-repository or administrative action is explained first, a request for instructions is not permission to act, and explicit authorization is required before changing repository settings, merging a PR, deprecating npm versions or force-pushing. The agent never runs the history import's confirm operation and never asks for, shows or stores credentials or one-time codes.
Work happens in isolated checkouts. The agent fetches both repositories, confirms the source checkout is clean, creates a dedicated worktree from the freshly fetched origin/main, runs history-changing commands one at a time, and stops to ask when the target branch or path already exists. Reference notes cover history and merge handling and legacy integration, and a merge-history-pr script is included.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7aecaf7. It shows what the files ask for, not the result of running them.
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.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
pnpmnpmgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, npm and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Migrate Internal Package into Ghost loads about 3.8k tokens when it runs, and up to ~7.3k if it reads all its reference files. Until then it costs about 103 tokens; SKILL.md has 2,022 words of instructions outside code blocks.
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.
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.
The full file from TryGhost/Ghost at commit 7aecaf7, republished under its MIT licence (© TryGhost). 2,022 words, ~3,817 tokens.
.claude/skills/migrate-internal-package/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Move a package from another TryGhost repository into Ghost without losing its history or creating a period where neither repository owns it. Keep migration mechanics separate from Ghost's lifetime package standards.
Any contributor can run this skill. Do not require repository administration permission for the audit, import, PR preparation, CI, read-only preflight, post-merge verification or follow-up work. Administration is required only at the exceptional merge checkpoint, which is handed to one of the small set of Ghost repository administrators.
The contributor workflow is documented in
docs/contributing/internal-package-migrations.md.
Keep that guide aligned when this skill changes its outputs or human
checkpoints.
Explain every cross-repository or administrative action before it happens.
--confirm operation. That command is the
deliberate human administrator checkpoint because it temporarily changes a
Ghost repository setting and merges the exceptional PR.Never manipulate history in a checkout containing unrelated work. Fetch both
repositories, confirm the source checkout is clean, and create a dedicated
Ghost worktree from the freshly fetched origin/main.
Run history-changing commands individually or in a fail-fast shell. A failed
git worktree add must not be followed by git subtree add in whichever
checkout happens to be current. Before choosing a branch or path, list existing
worktrees and matching local and remote branches. Use a migration-specific slug,
for example codex/import-<package>-from-<source>, rather than a generic name.
If the destination branch or path already exists, stop and inspect its cleanliness, base, divergence, source split and attached worktree. Do not mutate, delete or silently reuse it. Present the evidence and ask the user whether to resume, preserve and supersede, or remove it when more than one choice is reasonable. A previous attempt can contain valid unmerged history even when its remote branch is gone.
Before importing, record and compare the destination HEAD and origin/main;
they must match. Recheck the first parent immediately after the subtree commit.
Initialize a fresh Ghost worktree with pnpm bootstrap, not pnpm setup.
pnpm setup is a pnpm CLI command that configures pnpm's global home and may
edit shell startup files; it does not invoke Ghost's repository bootstrap.
Before continuing, confirm the command installed the workspace, initialized the
submodules and configured the repository-local blame ignore file as described
by Ghost's root bootstrap script.
Before changing either repository, record the source repository, its default branch, the package path within it, the destination path in Ghost, and whether the package has been published to npm. Then:
All packages moved by this workflow belong in Ghost's root packages/
workspace. Derive the destination as packages/<package-directory> from the
source package directory and report that exact path to the user before creating
the subtree. Never place an imported package under ghost/, even when Ghost
Core is its only consumer. If the derived path conflicts with an existing path
or the request appears to require another workspace, stop and resolve the
destination explicitly before manipulating history.
workspace:*.Publication or download counts alone do not prove that a package must remain a supported public API. If supported external consumers still need new releases, stop: this internal-only workflow is the wrong publishing model.
For the public-consumer audit, check npm metadata, first-party repositories and documentation, plus GitHub code search for package dependencies and runtime imports. Classify results as first-party consumers, independent integrations, Ghost forks, or deployed Ghost installation snapshots. Forks and installation snapshots show historical presence only. Require a recent update, current deployment, active dependency or another freshness signal before treating them as evidence of continued installation needs; even then, they do not establish an independently supported API. Record the evidence and confidence behind the ownership decision; stop and ask if current support expectations remain unclear.
Run registry-only npm view commands from a neutral temporary directory. A
repository's devEngines policy can reject the host Node version before npm
contacts the registry, which is unrelated to the package metadata audit. Record
that failure separately if using a neutral directory does not resolve it.
Keep the history import and modernization separate. The import establishes ownership and provenance; later commits can modernize code without obscuring the move.
Read
references/history-and-merge.md completely
before manipulating history.
Use an unsquashed git subtree import from the recorded source repository and
package path. Do not copy the current files, pass --squash, or recreate old
commits manually.
After the subtree commit, add focused integration commits that:
ghostPackage.goldenPath to migration and ghostPackage.reason to a
concise explanation of the remaining modernization work;workspace:*;pnpm;Before editing package metadata, map each source workspace:* dependency to
its destination state:
workspace:* when the dependency already exists in Ghost;catalog: when Ghost's catalog version satisfies the imported package;Document temporary named-catalog entries for the modernization follow-up. Never
inline dependency versions; Ghost's strict catalog policy still applies. Do not
import additional packages implicitly. After pnpm install, inspect the
lockfile's resolved override and package snapshot entries for every translated
dependency. Repository-wide pnpm overrides take precedence over catalog
references without changing the dependency declaration in package.json; if a
global override changes an imported package's required version, add the
narrowest package-scoped override that preserves the source release and record
why it is needed.
If the package is legacy JavaScript or CommonJS, read
references/legacy-integration.md
completely before creating integration commits.
Verify that the subtree commit has two parents and that representative file history crosses into the source repository before opening the PR.
Before opening the PR, also verify the source split is reachable from the branch tip, the consumer resolves the workspace package through its production import path, package lint and tests pass through Nx, relevant consumer tests pass, the repository formatting check passes, the full build passes, and the Ghost archive contains the internal package. Record the exact commit IDs and commands in the handoff. Keep mechanical formatting in a focused integration commit so the subtree commit remains an exact history import and reviewers can distinguish format-only changes from behavioral adaptation.
Open the history-import PR with a title beginning [Don't merge]. Put a
prominent warning at the top of its body that squash and rebase merges destroy
the imported ancestry and that the PR must only be merged with the guarded
history script below. Do not remove the prefix or warning merely because CI is
green: they remain until the authorized user performs the exceptional merge.
For a pilot or first use, include a structured gap report in the handoff:
Observed: the exact failure or ambiguity and the command/state that exposed it;Worked around: the safe action taken, without hiding the original gap;Skill change: the concrete instruction, preflight or script improvement;Tooling change: anything that cannot be solved within this repository;Confidence: high, medium or low, with unresolved evidence called out.This is the exceptional PR. It must use GitHub's Create a merge commit method:
Make CI green and run the guarded script with --dry-run as part of the
automated preparation. Resolve preflight failures that are within the import's
scope. Once it passes, stop and ask a human Ghost repository administrator to
run this command from the Ghost repository root:
.agents/skills/migrate-internal-package/scripts/merge-history-pr \
TryGhost/Ghost \
<pr-number> \
<source-split-tip> \
<dry-run-head-sha> \
--confirmThe human administrator's script repeats the preflight, records and temporarily changes the merge setting, uses the correct merge form, restores the setting, and verifies the resulting history. The skill must not run this command on the administrator's behalf, even if its current GitHub session appears to have sufficient access.
Every merge-checkpoint handoff must repeat the warning and render a directly
copyable --confirm command containing the actual PR number and recorded source
split tip plus the exact head SHA reported by the dry run; do not leave
placeholders for the administrator to infer. Include the successful dry-run
evidence and explain that the command rejects a changed head, temporarily
enables merge commits, merges the pinned PR head, restores the original setting
and verifies the ancestry. Explicitly say not to use GitHub's normal
squash/rebase buttons and not to remove [Don't merge] manually.
The history-import PR must not belong to a GitHub pull-request stack. The preflight must stop and ask the contributor to unstack it before the human checkpoint; do not use GitHub's asynchronous stack merge while the repository's merge-commit setting is temporarily enabled.
Wait for the administrator to report that the command completed. Afterward,
independently fetch main and confirm the source split tip is an ancestor, then
continue the automated source-repository cleanup and modernization workflow.
Branch from the latest source default branch only after the Ghost import is
verified on main. Remove:
Search with both the npm name and directory name. The source-repository PR should link to the merged Ghost PR and state that Ghost now owns the implementation. Use that repository's normal merge policy; this PR does not contain imported ancestry.
If the package was published and new direct use is now unsupported, deprecate all historical versions rather than unpublishing them:
npm deprecate '@tryghost/<package>@*' \
'This package is now maintained as an internal Ghost workspace package. Existing versions remain available for older Ghost releases; direct use is unsupported.'
npm view @tryghost/<package> deprecatedThis preserves installation for old Ghost releases. Authentication and OTP are human checkpoints; verify the public metadata after the authorized user runs the mutation.
Search .github/renovate.json5 and related release automation for rules that
still treat the package as sourced or released from the former repository or
npm. Prefer a small,
standalone cleanup PR so the later conversion remains focused.
Read packages/README.md completely and compare the package against the
template and current comparable internal packages. Do not turn this one-time
migration skill into the source of lifetime package standards.
If the package needs conversion from legacy JavaScript or CommonJS, use the
convert-internal-package-to-typescript skill in a separate modernization PR.
That skill owns commit staging, file-lineage checks, TypeScript quality and
runtime verification. This does not alter the merge-commit requirement for the
earlier subtree history import.
Do not call the migration complete until:
main;At each boundary, distinguish what is merged from what is merely prepared and report the exact verification performed.
Do not use this workflow for packages that remain public, independently versioned, or supported for third-party use. This skill describes privileged operations but does not authorize them.
© TryGhost, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (scripts, references) in .agents/skills/migrate-internal-package of TryGhost/Ghost.
Open the folder on GitHubat commit 7aecaf7
Migrate Internal Package into Ghost 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Migrate Internal Package into Ghost this skillTryGhost/Ghost | 55k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Hunk Release Workflowmodem-dev/hunk | 9.5k | — | ~3.8k | Automated safety check: Pass | MIT | |
| AionUi Version BumpiOfficeAI/AionUi | 33k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| ZCF Release AutomationUfoMiao/zcf | 6.1k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Pullkaranhudia/borg-ui | 1.7k | 1 repos | ~1.2k | Automated safety check: Pass | AGPL-3.0 | |
| Git Changes ReporterNo-Trade-No-Life/Yuan | 352 | — | ~1.2k | Automated safety check: Pass | MIT |
modem-dev/hunk
Maintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits.
iOfficeAI/AionUi
Automates an AionUi release: checks the latest AionCore release and its artifacts, updates package.json, writes the changelog, opens a PR and tags the release.
UfoMiao/zcf
Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.
karanhudia/borg-ui
Pull latest origin/main into the current local branch and resolve merge conflicts (aka update-branch).
No-Trade-No-Life/Yuan
生成结构化 git 变更报告(JSON + Markdown)。使用此技能当用户提到"git 变更"、"commit 摘要"、"代码审查"、"release note"、"近期改动"、"每日摘要",或需要分析指定 commit 区间的代码变更。包含三元组结构(设计意图、核心代码、影响范围)的语义化报告,适用于代码审查、发布说明、团队同步、CI/CD 等场景。
MarkBind/markbind
Complete guide for migrating JavaScript files to TypeScript in the MarkBind project, including the two-commit strategy, import/export syntax conversion, and best practices.
TryGhost/Ghost
Moves a legacy internal Ghost package from JavaScript and CommonJS to TypeScript and ESM in three focused commits that keep git file history intact.
TryGhost/Ghost
Adds a private developer-experiments feature flag to Ghost, covering the backend registration, the Labs settings toggle and the test snapshot updates.
TryGhost/Ghost
Guidance for running the Tinybird tb CLI: choosing local, branch or cloud workflows, building and deploying, loading data, handling tokens and secrets, and CI/CD.
TryGhost/Ghost
Guides the agent through making a focused git commit in the Ghost repository: inspect state, stage only relevant files, follow the contributing rules, then verify.
TryGhost/Ghost
Rules for writing Tinybird datasources, pipes, endpoints and materialized views, with SQL constraints, optimization habits and deduplication patterns.
TryGhost/Ghost
Add, consume, review, or remove Admin 7 milestone flags using Ghost's existing Labs conventions.
Categories
Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator. The skill moves a package from a repository such as TryGhost/SDK or TryGhost/framework into Ghost without losing its history or leaving a gap where neither repository owns it. The stages are a history import PR, an exceptional merge-commit handoff, a PR that removes the package from the source repository, optional npm deprecation, migration cleanup and a modernization handoff.
Migrate Internal Package into Ghost fits situations like: moving a package from another TryGhost repository into Ghost; importing a package's Git history through a pull request; preparing the pull request that removes the package from its source repository; deprecating the old npm package after a migration.
Run `npx skills add TryGhost/Ghost --skill migrate-internal-package -a claude-code`. Or copy the skill folder (.agents/skills/migrate-internal-package in TryGhost/Ghost) into .claude/skills/migrate-internal-package in your project. Claude Code loads it when a task matches its description.
Run `npx skills add TryGhost/Ghost --skill migrate-internal-package -a codex`. Or copy the skill folder (.agents/skills/migrate-internal-package in TryGhost/Ghost) into .agents/skills/migrate-internal-package in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TryGhost/Ghost --skill migrate-internal-package -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-internal-package, .gemini/skills/migrate-internal-package, .github/skills/migrate-internal-package and .opencode/skills/migrate-internal-package in your project.
Going by SKILL.md and its folder, Migrate Internal Package into Ghost needs the command-line tools its instructions call (pnpm, npm and git). Our summary lists: Git access to both the Ghost repository and the source repository; A Ghost repository administrator for the exceptional merge step.
SKILL.md contains no URLs. Its commands use npm and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Migrate Internal Package into Ghost is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Migrate Internal Package into Ghost: Hunk Release Workflow (modem-dev/hunk, 9.5k stars), AionUi Version Bump (iOfficeAI/AionUi, 33k stars), ZCF Release Automation (UfoMiao/zcf, 6.1k stars) and Pull (karanhudia/borg-ui, 1.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
TryGhost (a GitHub organization) maintains it in TryGhost/Ghost, which has 55,493 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: TryGhost/Ghost on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.