Agent skill

Folder Links Review

by blotcms in 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…

AGPL-3.0Auto-check passed

Install Folder Links Review

skills CLI
$ npx skills add blotcms/blot --skill folder-links-review -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install blotcms/blot folder-links-review --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
folder-links-review
GitHub stars
2k
Token cost
~2.2k tokens
SKILL.md length
918 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
AGPL-3.0

At a glance

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…

  • Works in 4 steps: Check the instrumentation is live → Collect and aggregate → Interpret → …
  • Asked to review folder links
  • SKILL.md covers Background, 1. Check the instrumentation…, 2. Collect and aggregate and 3. Interpret, plus 2 more sections
  • Calls ssh, node and gh

What it does

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.

When your agent uses it

  • Asked to review folder links
  • Check progress on removing replaceFolderLinks
  • Re-run the folder-link log analysis

Example prompts

  • “/folder-links-review”

Requirements

  • Docker

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Check the instrumentation is live
  2. Collect and aggregate
  3. Interpret
  4. Report

What it can do on your machine

Read from SKILL.md and the folder at commit 92e37a1. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • ssh
    • node
    • gh
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~160
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from blotcms/blot at commit 92e37a1, republished under its AGPL-3.0 licence (© blotcms). 918 words, ~2,162 tokens.

Download SKILL.mdSave it as .claude/skills/folder-links-review/SKILL.md (or your agent's skills folder).
name
folder-links-review
description
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 folder links, check progress on removing replaceFolderLinks, or re-run the folder-link log analysis.

Background

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:

  • Entries: already baked at build time by app/build/plugins/folderAssets (#1896), with %%BLOT_CDN%% tokens.
  • Templates: to be baked when a view is saved (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.
    • Partials pulled in from the folder ({{> /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.

1. Check the instrumentation is live

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.

bash
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.

2. Collect and aggregate

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.

bash
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:

bash
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'"
done
Show full SKILL.md (489 more words)Show less

3. Interpret

Map each bucket from the source × form table (built from sampled links) and the per-line totals onto the migration work.

FindingWhat it meansWork it points to
template + root/hostLiteral folder links in a view or partialBake at template save time in Template.setView, with template→file dependencies so file changes re-bake the view and regenerate the {{#cdn}} manifest
template + relativeTemplate links without a leading slash; would break if the pass were removedSame 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 firedBuild-version stamp plus a throttled rebuild of unstamped entries; check the dependency gaps below
entry with enoentEntry links to a file that doesn't existExpected 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
otherMenu URLs, template locals, variable-assembled linksBake menu/locals at save time; for assembled host links, find the template pattern
static/fonts, /katex… in entries or templatesBake reserved static paths at build/save time (global file if present, else blog file)
High enoent with low rewritesPass doing disk lookups for nothingPure cost; note which blogs/templates
msTime the pass adds, including lookupsThe performance case for removal
[folder-asset-origin]Pages still sending browsers to the origin for folder filesFetch 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:

bash
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 | head

For 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.

4. Report

In chat (blog handles, templates and paths are fine there), give:

  • the window and containers;
  • the share of HTML/CSS renders that produced a [folder-links] line;
  • the source × form breakdown;
  • the top blogs and templates per bucket, with a sample link each;
  • relative cases, called out separately;
  • the [folder-asset-origin] summary;
  • which migration work each bucket points to, ranked by share of rewrites.

Then append an entry to the findings log below. Delete the scratch files when done.

Findings log

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

Files

Just SKILL.md in .claude/skills/folder-links-review of blotcms/blot.

Open the folder on GitHubat commit 92e37a1

Compare with similar skills

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.

Folder Links Review compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Folder Links Review this skillblotcms/blot2k—~2.2kAutomated safety check: PassAGPL-3.0
Internal Linksthedaviddias/Front-End-Checklist74k—~770Automated safety check: PassMIT
External Linksthedaviddias/Front-End-Checklist74k—~773Automated safety check: PassMIT
Invalid Linksthedaviddias/Front-End-Checklist74k—~806Automated safety check: PassMIT
SEO Aeo Internal Linkingsickn33/agentic-awesome-skills47k1 repos~2.3kAutomated safety check: PassMIT
Link Checkerthedaviddias/Front-End-Checklist74k—~408Automated safety check: PassMIT

Similar skills

  • 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…

    74k GitHub stars~770 tokensUpdated 2 days ago
    Marketing & SEOAuto-check passed
  • External Links

    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…

    74k GitHub stars~773 tokensUpdated 2 days ago
    Research & ScienceAuto-check passed
  • Invalid Links

    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…

    74k GitHub stars~806 tokensUpdated 2 days ago
    Marketing & SEOAuto-check passed
  • SEO Aeo Internal Linking

    sickn33/agentic-awesome-skills

    Maps internal link opportunities between pages with relevant anchor text, placement instructions, orphan-page detection, and cannibalisation checks.

    47k GitHub starsUsed in 1 repo~2.3k tokens
    Marketing & SEOAuto-check passed
  • Link Checker

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing templates, rendered HTML, or shared components related to Check for broken links.

    74k GitHub stars~408 tokensUpdated 2 days ago
    Auto-check passed
  • Article Links

    thedaviddias/Front-End-Checklist

    A skill your agent uses when auditing metadata, crawlability, structured data, or indexability related to Optimize article link density.

    74k GitHub stars~425 tokensUpdated 2 days ago
    Marketing & SEOAuto-check passed

More from blotcms/blot

All 8 skills in this repo
  • 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…

    2k GitHub stars~3.9k tokensUpdated yesterday
    Auto-check passed
  • 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…

    2k GitHub stars~4.7k tokensUpdated yesterday
    Auto-check passed
  • 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…

    2k GitHub stars~3.6k tokensUpdated yesterday
    Auto-check passed
  • Investigate an "iCloud resync requested" admin email ("A resync was requested for site blog…") or any other iCloud / macserver sync problem.

    2k GitHub stars~3k tokensUpdated yesterday
    Auto-check: warnings
  • 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…

    2k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • 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.

    2k GitHub stars~3.8k tokensUpdated yesterday
    Auto-check passed

Questions about Folder Links Review

What does Folder Links Review do?

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.

When should I use Folder Links Review?

Folder Links Review fits situations like: asked to review folder links; check progress on removing replaceFolderLinks; re-run the folder-link log analysis.

How do I install Folder Links Review in Claude Code?

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.

How do I install Folder Links Review in Codex?

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.

Can I use Folder Links Review in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Folder Links Review need to run?

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.

Does Folder Links Review access the network?

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.

Is Folder Links Review safe to install?

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.

What licence does Folder Links Review use?

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.

How many tokens does Folder Links Review use?

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.

What are the alternatives to Folder Links Review?

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.

Who maintains Folder Links Review?

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.