Internal Links
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing a site's internal link structure, identifying pages that need more incoming links, generating contextual linking opportunities between related content, or…
Review what Blot's request-time folder-link rewrite (app/blog/render/replaceFolderLinks) still does in production, from the [folder-links] and [folder-asset-origin] log lines, to decide what has to…
$ npx skills add blotcms/blot --skill folder-links-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install blotcms/blot folder-links-review --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/blotcms/blot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/folder-links-review .claude/skills/folder-links-review && 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 "folder-links-review" agent skill from https://github.com/blotcms/blot/tree/master/.claude/skills/folder-links-review into .claude/skills/folder-links-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "folder-links-review", 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/blotcms/blot/tree/master/.claude/skills/folder-links-reviewType 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 blotcms/blot --skill folder-links-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install blotcms/blot folder-links-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/blotcms/blot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/folder-links-review .agents/skills/folder-links-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "folder-links-review" agent skill from https://github.com/blotcms/blot/tree/master/.claude/skills/folder-links-review into .agents/skills/folder-links-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "folder-links-review", 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 blotcms/blot --skill folder-links-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install blotcms/blot folder-links-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/blotcms/blot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/folder-links-review .cursor/skills/folder-links-review && 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 "folder-links-review" agent skill from https://github.com/blotcms/blot/tree/master/.claude/skills/folder-links-review into .cursor/skills/folder-links-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "folder-links-review", 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/blotcms/blot.git --path .claude/skills/folder-links-review--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 blotcms/blot --skill folder-links-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install blotcms/blot folder-links-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/blotcms/blot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/folder-links-review .gemini/skills/folder-links-review && 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 "folder-links-review" agent skill from https://github.com/blotcms/blot/tree/master/.claude/skills/folder-links-review into .gemini/skills/folder-links-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "folder-links-review", 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 blotcms/blot folder-links-reviewInstalls 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 blotcms/blot --skill folder-links-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/blotcms/blot.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/folder-links-review .github/skills/folder-links-review && 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 "folder-links-review" agent skill from https://github.com/blotcms/blot/tree/master/.claude/skills/folder-links-review into .github/skills/folder-links-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "folder-links-review", 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 blotcms/blot --skill folder-links-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install blotcms/blot folder-links-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/blotcms/blot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/folder-links-review .opencode/skills/folder-links-review && 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 "folder-links-review" agent skill from https://github.com/blotcms/blot/tree/master/.claude/skills/folder-links-review into .opencode/skills/folder-links-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "folder-links-review", 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.
folder-links-reviewReview what Blot's request-time folder-link rewrite (app/blog/render/replaceFolderLinks) still does in production, from the [folder-links] and [folder-asset-origin] log lines, to decide what has to…
Folder Links Review is an agent skill from blotcms/blot. Review what Blot's request-time folder-link rewrite (app/blog/render/replaceFolderLinks) still does in production, from the [folder-links] and [folder-asset-origin] log lines, to decide what has to move to entry build time or template save time before the runtime pass can be deleted. Pulls the app container logs over ssh, aggregates them with scripts/folder-links/analyze-logs.js, maps each finding to the next piece of migration work, and appends a short entry to this skill's findings log. Use when asked to review…
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Turns a folder into a website. The licence is AGPL-3.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 92e37a1. 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.
Shell commands in SKILL.md call:
sshnodeghcurlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use ssh, gh and curl, 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.
Folder Links Review loads about 2.2k tokens when it runs. Until then it costs about 160 tokens; SKILL.md has 918 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); files beside SKILL.md are not scanned.
The full file from blotcms/blot at commit 92e37a1, republished under its AGPL-3.0 licence (© blotcms). 918 words, ~2,162 tokens.
.claude/skills/folder-links-review/SKILL.md (or your agent's skills folder).app/blog/render/middleware.js runs replaceFolderLinks/html.js (HTML
views) and replaceFolderLinks/css.js (CSS views) over every rendered page,
rewriting links to files in the blog's folder into versioned CDN URLs with a
disk lookup (lookupFile.js). The goal is to delete that pass and do the
work earlier instead:
app/build/plugins/folderAssets (#1896), with %%BLOT_CDN%% tokens.Template.setView).The pass is instrumented (#2032)
so production traffic tells us what it still rewrites. Two req.log lines:
[folder-links] blog=<id> handle=<h> template=<id> view=<name> kind=html|css rewrites=N enoent=N ms=N sources=template:2,entry:1 forms=root:2,relative:1 sample=ok:template:root:/a.jpg,enoent:entry:relative:b.jpg
[folder-asset-origin] blog=<id> handle=<h> path=<path> referer_path=<path>[folder-links]: one per request where the pass rewrote a link or found
no file for one. Format documented in replaceFolderLinks/stats.js.[folder-asset-origin]: a blog-folder file (not an HTML page) served by
the app with a Referer from one of the blog's own pages, i.e. a link that
reached the origin instead of the CDN. Logged by app/blog/routes/assets.js.Field meanings:
source: where the original link text was found.template: the view or partial source.entry: entry.html of an entry on the page.metadata: an entry's metadata.other: none of those, e.g. menu URLs, template locals, or links
assembled from variables like {{blog.url}}/x.jpg.{{> /file.html}}) count as
template.form:root: starts with /.relative: no leading slash. These break if the pass is removed,
because browsers resolve them against the page URL.host: an absolute URL on one of the blog's own hosts.static: a reserved global path (/fonts, /katex…).Removing the pass is safe for root, host and static links in the sense
that app/blog/routes/assets.js still serves them from the origin. The page
only loses CDN caching for those files. relative links are the
correctness risk.
The log lines only exist once #2032 is deployed. Check the PR is merged
(gh pr view 2032 --repo blotcms/blot --json state,mergedAt).
Always confirm with the user before running anything against production,
even read-only commands, and stick to read-only commands. The SSH host is
blot.
ssh blot "docker ps --format '{{.Names}}\t{{.Status}}'"Container logs only go back to the last deploy or restart. That uptime
bounds the window: use it as --since, and note it in the report.
Pull the logs once into the scratchpad, filtered to the two markers, and
analyse locally. The script is plain Node with no dependencies and reads
stdin, so it doesn't need to run on the host. $SCRATCH is your
scratchpad directory, or any local temp directory.
for c in blue green yellow; do
ssh blot "docker logs --since 24h blot-container-$c 2>&1 | grep -F -e '[folder-links]' -e '[folder-asset-origin]'"
done > "$SCRATCH/folder-links.log"
node scripts/folder-links/analyze-logs.js --top 20 < "$SCRATCH/folder-links.log"
node scripts/folder-links/analyze-logs.js --json < "$SCRATCH/folder-links.log" > "$SCRATCH/folder-links.json"For the share of all HTML/CSS requests that hit the pass, compare against
the Replacing folder links with CDN links lines. Every non-preview HTML or
CSS render logs one:
for c in blue green yellow; do
ssh blot "docker logs --since 24h blot-container-$c 2>&1 | grep -cF 'Replacing folder links with CDN links'"
doneMap each bucket from the source × form table (built from sampled links) and the per-line totals onto the migration work.
| Finding | What it means | Work it points to |
|---|---|---|
template + root/host | Literal folder links in a view or partial | Bake at template save time in Template.setView, with template→file dependencies so file changes re-bake the view and regenerate the {{#cdn}} manifest |
template + relative | Template links without a leading slash; would break if the pass were removed | Same as above, resolving relative to the view; list affected templates explicitly |
entry (any form) | Entry HTML not baked: built before #1896, or a missing-file dependency never fired | Build-version stamp plus a throttled rebuild of unstamped entries; check the dependency gaps below |
entry with enoent | Entry links to a file that doesn't exist | Expected for genuinely broken links. If the file does exist under a different case or encoding, it's the dependents-key gap (case-sensitive keys, percent-encoded poster/srcset paths) |
metadata | {{metadata.image}} and friends in attributes (og:image etc.) | Decide whether to bake eligible metadata path values at entry build time |
other | Menu URLs, template locals, variable-assembled links | Bake menu/locals at save time; for assembled host links, find the template pattern |
static | /fonts, /katex… in entries or templates | Bake reserved static paths at build/save time (global file if present, else blog file) |
High enoent with low rewrites | Pass doing disk lookups for nothing | Pure cost; note which blogs/templates |
ms | Time the pass adds, including lookups | The performance case for removal |
[folder-asset-origin] | Pages still sending browsers to the origin for folder files | Fetch the public referer_path page (curl -s https://<host><referer_path>) and find the link that wasn't rewritten. These continue after removal |
To drill into one blog or template, grep the raw lines in the scratch file. It's local, so no further prod access is needed:
grep -F 'handle=<handle> ' "$SCRATCH/folder-links.log" | head
grep -F 'template=<templateID> ' "$SCRATCH/folder-links.log" | awk '{for(i=1;i<=NF;i++) if ($i ~ /^sample=/) print $i}' | sort | uniq -c | sort -rn | headFor an entry finding, confirm by fetching the public page and checking
whether the rewritten link sits inside the post body. If the entry's file was
last modified before #1896 shipped, it was simply never rebuilt.
In chat (blog handles, templates and paths are fine there), give:
[folder-links] line;relative cases, called out separately;[folder-asset-origin] summary;Then append an entry to the findings log below. Delete the scratch files when done.
Read this first: earlier runs show the trend and which work has already landed. Newest entries last.
Privacy: this file is committed to the repo, so entries must contain no
customer information. Leave out blog IDs, handles, domains, template IDs,
file names and paths. Describe things generically ("a handful of custom
templates link /favicon.ico literally"). Also leave out absolute request,
blog or line counts, because they reveal userbase scale. Use percentages
and shares only.
Entry template:
### <date> — <window, e.g. 24h across blue/green/yellow>
- Pass hit: <share of HTML/CSS renders with a [folder-links] line>
- Rewrites by source: template x%, entry y%, metadata z%, other w%
- Forms: root …, relative …, host …, static …
- Notable: <generic description of the biggest buckets and any relative cases>
- [folder-asset-origin]: <generic summary>
- Since last run: <what migration work landed, how the shares moved>
- Next: <the work the biggest bucket points to>© blotcms, AGPL-3.0. 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/folder-links-review of blotcms/blot.
Open the folder on GitHubat commit 92e37a1
Folder Links Review 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 |
|---|---|---|---|---|---|---|
| Folder Links Review this skillblotcms/blot | 2k | — | ~2.2k | Automated safety check: Pass | AGPL-3.0 | |
| Internal Linksthedaviddias/Front-End-Checklist | 74k | — | ~770 | Automated safety check: Pass | MIT | |
| External Linksthedaviddias/Front-End-Checklist | 74k | — | ~773 | Automated safety check: Pass | MIT | |
| Invalid Linksthedaviddias/Front-End-Checklist | 74k | — | ~806 | Automated safety check: Pass | MIT | |
| SEO Aeo Internal Linkingsickn33/agentic-awesome-skills | 47k | 1 repos | ~2.3k | Automated safety check: Pass | MIT | |
| Link Checkerthedaviddias/Front-End-Checklist | 74k | — | ~408 | Automated safety check: Pass | MIT |
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing a site's internal link structure, identifying pages that need more incoming links, generating contextual linking opportunities between related content, or…
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing content pages for citation quality, suggesting authoritative sources to link for factual claims, or reviewing whether a page's external link attributes…
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing a page's link elements for crawlability, reviewing JavaScript-heavy SPAs where navigation may not use <a href tags, or checking that dynamically generated links…
sickn33/agentic-awesome-skills
Maps internal link opportunities between pages with relevant anchor text, placement instructions, orphan-page detection, and cannibalisation checks.
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing templates, rendered HTML, or shared components related to Check for broken links.
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing metadata, crawlability, structured data, or indexability related to Optimize article link density.
blotcms/blot
Investigate a "Dropbox sync issue" alert email from Blot's hourly Dropbox sync validation (each flagged blog lists unsynced changes, Fix() repairs, errors and/or a stuck folder lock; the changes…
blotcms/blot
Work out why the blot-container-{blue,green,yellow} Docker containers from the most recent production deployment have restarted — distinguishing a normal deploy-triggered restart from a crash (V8…
blotcms/blot
Scan the production openresty access log (/var/instance-ssd/logs/access.log) for requests with slow upstream response times (st=, the time the node containers took to answer), triage and rank them…
blotcms/blot
Investigate an "iCloud resync requested" admin email ("A resync was requested for site blog…") or any other iCloud / macserver sync problem.
blotcms/blot
Analyze production Node.js app container response times to find slow-rendering sites, cross-checking against nginx queuing delay to rule out false positives (a site only looks slow because the event…
blotcms/blot
Triage Fix() repairs reported in a "<Client sync issue" digest email (Dropbox sync issue, etc.; the "Fix() repaired:" lines under a blog) or in a "Resync found changes" email.
Review what Blot's request-time folder-link rewrite (app/blog/render/replaceFolderLinks) still does in production, from the [folder-links] and [folder-asset-origin] log lines, to decide what has to…. Folder Links Review is an agent skill from blotcms/blot. Review what Blot's request-time folder-link rewrite (app/blog/render/replaceFolderLinks) still does in production, from the [folder-links] and [folder-asset-origin] log lines, to decide what has to move to entry build time or template save time before the runtime pass can be deleted.
Folder Links Review fits situations like: asked to review folder links; check progress on removing replaceFolderLinks; re-run the folder-link log analysis.
Run `npx skills add blotcms/blot --skill folder-links-review -a claude-code`. Or copy the skill folder (.claude/skills/folder-links-review in blotcms/blot) into .claude/skills/folder-links-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add blotcms/blot --skill folder-links-review -a codex`. Or copy the skill folder (.claude/skills/folder-links-review in blotcms/blot) into .agents/skills/folder-links-review 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 blotcms/blot --skill folder-links-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/folder-links-review, .gemini/skills/folder-links-review, .github/skills/folder-links-review and .opencode/skills/folder-links-review in your project.
Going by SKILL.md and its folder, Folder Links Review needs the command-line tools its instructions call (ssh, node, gh and curl). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use ssh, gh and curl, 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. Review the folder before installing.
Folder Links Review is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.6k 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 Folder Links Review: Internal Links (thedaviddias/Front-End-Checklist, 74k stars), External Links (thedaviddias/Front-End-Checklist, 74k stars), Invalid Links (thedaviddias/Front-End-Checklist, 74k stars) and SEO Aeo Internal Linking (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
blotcms (a GitHub organization) maintains it in blotcms/blot, which has 1,983 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 7, 2026.
Source: blotcms/blot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.