Figure
vectorize-io/hindsight
Draw an animated figure (boxes, arrows, moving data) as one self-contained SVG for a GitHub README, PR, issue or blog post.
A skill your agent uses when the user wants to add dynamic data (GitHub stars, latest blog posts, weather, follower counts, repo activity, anything fetched from a URL) to their linkyee site by…
$ npx skills add ZhgChgLi/linkyee --skill linkyee-plugin-builder -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ZhgChgLi/linkyee linkyee-plugin-builder --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/ZhgChgLi/linkyee.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/linkyee-plugin-builder .claude/skills/linkyee-plugin-builder && 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 "linkyee-plugin-builder" agent skill from https://github.com/ZhgChgLi/linkyee/tree/main/.claude/skills/linkyee-plugin-builder into .claude/skills/linkyee-plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linkyee-plugin-builder", 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/ZhgChgLi/linkyee/tree/main/.claude/skills/linkyee-plugin-builderType 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 ZhgChgLi/linkyee --skill linkyee-plugin-builder -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ZhgChgLi/linkyee linkyee-plugin-builder --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZhgChgLi/linkyee.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/linkyee-plugin-builder .agents/skills/linkyee-plugin-builder && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "linkyee-plugin-builder" agent skill from https://github.com/ZhgChgLi/linkyee/tree/main/.claude/skills/linkyee-plugin-builder into .agents/skills/linkyee-plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linkyee-plugin-builder", 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 ZhgChgLi/linkyee --skill linkyee-plugin-builder -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ZhgChgLi/linkyee linkyee-plugin-builder --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZhgChgLi/linkyee.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/linkyee-plugin-builder .cursor/skills/linkyee-plugin-builder && 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 "linkyee-plugin-builder" agent skill from https://github.com/ZhgChgLi/linkyee/tree/main/.claude/skills/linkyee-plugin-builder into .cursor/skills/linkyee-plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linkyee-plugin-builder", 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/ZhgChgLi/linkyee.git --path .claude/skills/linkyee-plugin-builder--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 ZhgChgLi/linkyee --skill linkyee-plugin-builder -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ZhgChgLi/linkyee linkyee-plugin-builder --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZhgChgLi/linkyee.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/linkyee-plugin-builder .gemini/skills/linkyee-plugin-builder && 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 "linkyee-plugin-builder" agent skill from https://github.com/ZhgChgLi/linkyee/tree/main/.claude/skills/linkyee-plugin-builder into .gemini/skills/linkyee-plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linkyee-plugin-builder", 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 ZhgChgLi/linkyee linkyee-plugin-builderInstalls 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 ZhgChgLi/linkyee --skill linkyee-plugin-builder -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ZhgChgLi/linkyee.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/linkyee-plugin-builder .github/skills/linkyee-plugin-builder && 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 "linkyee-plugin-builder" agent skill from https://github.com/ZhgChgLi/linkyee/tree/main/.claude/skills/linkyee-plugin-builder into .github/skills/linkyee-plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linkyee-plugin-builder", 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 ZhgChgLi/linkyee --skill linkyee-plugin-builder -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ZhgChgLi/linkyee linkyee-plugin-builder --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZhgChgLi/linkyee.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/linkyee-plugin-builder .opencode/skills/linkyee-plugin-builder && 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 "linkyee-plugin-builder" agent skill from https://github.com/ZhgChgLi/linkyee/tree/main/.claude/skills/linkyee-plugin-builder into .opencode/skills/linkyee-plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "linkyee-plugin-builder", 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.
linkyee-plugin-builderA skill your agent uses when the user wants to add dynamic data (GitHub stars, latest blog posts, weather, follower counts, repo activity, anything fetched from a URL) to their linkyee site by…
Linkyee Plugin Builder is an agent skill from ZhgChgLi/linkyee. Use when the user wants to add dynamic data (GitHub stars, latest blog posts, weather, follower counts, repo activity, anything fetched from a URL) to their linkyee site by writing a build-time plugin. Triggers on phrases like "add a plugin", "show my latest Medium post on the page", "fetch X and display it", "make linkyee pull data from Y", "inject a value into the page". Generates plugins/<PluginName.rb, wires it up in config.yml, references it in the right Liquid spot, and runs the build to verify.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Writing & Content, covering Blog and article writing. It works with GitHub and Wix. The repository describes itself as: A fully customized, open-source LinkTree alternative deployed directly on GitHub Pages. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1b6f42e. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditBashGlobGrepFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bundleFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
MEDIUM_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Linkyee Plugin Builder loads about 1.9k tokens when it runs. Until then it costs about 134 tokens; SKILL.md has 949 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Write, Edit, Bash, Glob, GrepAutomated 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); files beside SKILL.md are not scanned.
The full file from ZhgChgLi/linkyee at commit 1b6f42e, republished under its MIT licence (© ZhgChgLi). 949 words, ~1,863 tokens.
.claude/skills/linkyee-plugin-builder/SKILL.md (or your agent's skills folder).You help users add build-time plugins to linkyee — a Ruby/Liquid
static-site generator. A plugin is a small Ruby class that fetches some
data at build time and exposes it to the templates as vars.<PluginName>.
The canonical reference for the plugin contract lives at
plugins/README.md. Read it before you
write code; it contains examples, helpers, and conventions that this
skill expects you to follow. Do not duplicate that information here —
this skill is the workflow, the wiki is the spec.
config.yml lists enabled plugins. At build time scaffold.rb
instantiates <PluginName>.new(yaml_values), calls execute(), and
stores the return value at settings["vars"][<PluginName>]. Liquid then
renders {{ vars.<PluginName> }} (and friends) inside config.yml
strings and the theme's index.html. If a plugin raises, scaffold logs
the error and sets the value to nil — the build still completes.
Follow these steps in order. Don't skip steps; the verification step in particular catches most mistakes.
Before writing anything, confirm:
index.html)If anything is ambiguous, ask one focused question. Don't ask three clarifying questions at once.
Read plugins/README.md § "Built-in plugins". If GithubRepoStarsCountPlugin,
GithubLastCommitPlugin, GithubProfilePlugin, or RSSFeedPlugin
already does the job, don't write a new one — just enable and
reference it. Tell the user.
Run Read on config.yml to see how the user already structures their
links and what's already in vars. This affects naming and where to
inject the value.
Create plugins/<PluginName>.rb:
*Plugin suffix
(e.g. WeatherPlugin, MediumLatestPostsPlugin).require_relative 'Plugin' at the top.Plugin.http_get, http_get_json, args, params, cache,
log) — do not call Net::HTTP or URI directly. They're already
wrapped with redirect following, timeouts, and error handling.0, "", {}, []) on
failure. Plugins must not raise.nil on failure — Liquid breaks).Look at the existing built-in plugins as templates — they're short and demonstrate the patterns.
Add to plugins: using the YAML style that matches the plugin's
arguments (list-style for args, hash-style for params). Then
reference {{ vars.<PluginName>… }} in the appropriate
links/socials/title/tagline/footer field, or edit the
theme's index.html if the user wants a loop / conditional.
Run:
bundle exec ruby ./scaffold.rbThen check:
[<PluginName>] or [scaffold] Plugin '<PluginName>' failed lines
in stderr_output/index.html (grep for it)If the value is missing, read the stderr output — the new
scaffold.rb swallows plugin failures but logs them clearly. Do not
guess; fix the underlying error.
If the plugin needs an API key, personal access token, OAuth token, or any other credential:
config.yml. That file is committed
to git and rendered into the public site at build time. Anything in it
is public, forever, including in old commits..rb file. Same problem.ENV:token = ENV["MEDIUM_TOKEN"]
return [] if token.nil? || token.empty?
http_get_json(url, headers: { "Authorization" => "Bearer #{token}" })MEDIUM_TOKEN),
paste value..github/workflows/build.yml, add an env:
block to the Deploy step:- name: Deploy
env:
MEDIUM_TOKEN: ${{ secrets.MEDIUM_TOKEN }}
run: bash deploy.shexport MEDIUM_TOKEN=xxx && bundle exec ruby ./scaffold.rbIf the user asks you to "just paste the token in config.yml for now", refuse and explain why. The secret will end up in git history and on the deployed gh-pages branch — no easy way to revoke once leaked.
Tell the user:
config.ymlMyPlugin:")Gemfile unless absolutely required.
nokogiri (already in Gemfile) plus stdlib net/http and json
cover the vast majority of cases./feed, /commits.atom) and JSON APIs are far more
stable than HTML scraping.ENV and document the secret name in the plugin's header comment.execute should be a pure data fetch.config.yml only.RSSFeedPlugin
especially) already handles the case.© ZhgChgLi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/linkyee-plugin-builder of ZhgChgLi/linkyee.
Open the folder on GitHubat commit 1b6f42e
Linkyee Plugin Builder 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 |
|---|---|---|---|---|---|---|
| Linkyee Plugin Builder this skillZhgChgLi/linkyee | 180 | — | ~1.9k | Automated safety check: Notes | MIT | |
| Figurevectorize-io/hindsight | 47k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Content Writerdageno-agents/geo-content-writer | 214 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Release Blog Drafterobot-platform/obot | 1.1k | — | ~4.6k | Automated safety check: Pass | MIT | |
| Lwipponylang/ponylang-website | 160 | — | ~3.5k | Automated safety check: Pass | BSD-2-Clause | |
| Readability Checkjdevalk/skills | 105 | — | ~3.3k | Automated safety check: Pass | MIT |
vectorize-io/hindsight
Draw an animated figure (boxes, arrows, moving data) as one self-contained SVG for a GitHub README, PR, issue or blog post.
dageno-agents/geo-content-writer
A skill your agent uses when the user wants to turn [Dageno](https://dageno.ai/?utmsource=github&utmmedium=social&utmcampaign=official) GEO opportunities into a real-fanout backlog and then write…
obot-platform/obot
Drafts a release announcement blog post for an obot release as a Markdown file, with an optional WordPress draft through MCP and no live publishing without confirmation.
ponylang/ponylang-website
Create a new "Last Week in Pony" blog post from the open GitHub issue
jdevalk/skills
Runs a readability audit on a blog post draft or other multi-paragraph prose, calibrated for readers who read English as a second language.
digoal/blog
Write Chinese "数据库筑基课" Markdown articles for database architects, DBAs, and application developers.
ZhgChgLi/linkyee
A skill your agent uses when the user wants to design, customize, or generate a custom visual theme for their linkyee site (a Hexo-like LinkTree-style static site).
Categories
A skill your agent uses when the user wants to add dynamic data (GitHub stars, latest blog posts, weather, follower counts, repo activity, anything fetched from a URL) to their linkyee site by…. Linkyee Plugin Builder is an agent skill from ZhgChgLi/linkyee. Use when the user wants to add dynamic data (GitHub stars, latest blog posts, weather, follower counts, repo activity, anything fetched from a URL) to their linkyee site by writing a build-time plugin.
Linkyee Plugin Builder fits situations like: the user wants to add dynamic data (GitHub stars; latest blog posts; follower counts; anything fetched from a URL) to their linkyee site by writing a build-time plugin.
Run `npx skills add ZhgChgLi/linkyee --skill linkyee-plugin-builder -a claude-code`. Or copy the skill folder (.claude/skills/linkyee-plugin-builder in ZhgChgLi/linkyee) into .claude/skills/linkyee-plugin-builder in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ZhgChgLi/linkyee --skill linkyee-plugin-builder -a codex`. Or copy the skill folder (.claude/skills/linkyee-plugin-builder in ZhgChgLi/linkyee) into .agents/skills/linkyee-plugin-builder 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 ZhgChgLi/linkyee --skill linkyee-plugin-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/linkyee-plugin-builder, .gemini/skills/linkyee-plugin-builder, .github/skills/linkyee-plugin-builder and .opencode/skills/linkyee-plugin-builder in your project.
Going by SKILL.md and its folder, Linkyee Plugin Builder needs the command-line tools its instructions call (bundle) and credentials named MEDIUM_TOKEN. Our summary lists: A credential in MEDIUM_TOKEN. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash, Glob, Grep.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Linkyee Plugin Builder is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Linkyee Plugin Builder: Figure (vectorize-io/hindsight, 47k stars), Content Writer (dageno-agents/geo-content-writer, 214 stars), Release Blog Drafter (obot-platform/obot, 1.1k stars) and Lwip (ponylang/ponylang-website, 160 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ZhgChgLi (a GitHub organization) maintains it in ZhgChgLi/linkyee, which has 180 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 9, 2026.
Source: ZhgChgLi/linkyee on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.