Not in the top 1,000 by GitHub stars
Pagepro/nexity
Nexity is an open source system for starting and growing AI-native websites on Next.js + Sanity.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
base/.agents/skills/create-section/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
base/.agents/skills/generate-alts/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
base/.agents/skills/link-fix/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
base/.agents/skills/pr-writeup/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → d66f0fd9976e
No earlier version was observed for comparison.
base/.agents/skills/project-setup/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → d66f0fd9976e
No earlier version was observed for comparison.
base/.agents/skills/sanity-module-catalog/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
base/.agents/skills/sanity-optimizations/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
base/.agents/skills/work-humanizer/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/create-section/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/generate-alts/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/link-fix/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/pr-writeup/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/product-mock/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/project-setup/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/sanity-module-catalog/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/sanity-optimizations/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → d66f0fd9976e
No earlier version was observed for comparison.
theme-meridian/.agents/skills/work-humanizer/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → d66f0fd9976e
No earlier version was observed for comparison.
Verified commit d66f0fd9976e15ca51d6fcd5352482c5c66c281b
git clone --filter=blob:none --no-checkout https://github.com/Pagepro/nexity.git .hotskills/pagepro-nexity && git -C .hotskills/pagepro-nexity checkout --detach d66f0fd9976e15ca51d6fcd5352482c5c66c281b
# Copy each selected skill directory from .hotskills/pagepro-nexity into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/Pagepro/nexity.git .hotskills/pagepro-nexity && git -C .hotskills/pagepro-nexity checkout --detach d66f0fd9976e15ca51d6fcd5352482c5c66c281b
# Copy each selected skill directory from .hotskills/pagepro-nexity into .agents/skills/<skill-name>/Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- create-section
base/.agents/skills/create-section - generate-alts
base/.agents/skills/generate-alts - link-fix
base/.agents/skills/link-fix - pr-writeup
base/.agents/skills/pr-writeup - project-setup
base/.agents/skills/project-setup - sanity-module-catalog
base/.agents/skills/sanity-module-catalog - sanity-optimizations
base/.agents/skills/sanity-optimizations - work-humanizer
base/.agents/skills/work-humanizer - create-section
theme-meridian/.agents/skills/create-section - generate-alts
theme-meridian/.agents/skills/generate-alts - link-fix
theme-meridian/.agents/skills/link-fix - pr-writeup
theme-meridian/.agents/skills/pr-writeup - product-mock
theme-meridian/.agents/skills/product-mock - project-setup
theme-meridian/.agents/skills/project-setup - sanity-module-catalog
theme-meridian/.agents/skills/sanity-module-catalog - sanity-optimizations
theme-meridian/.agents/skills/sanity-optimizations - work-humanizer
theme-meridian/.agents/skills/work-humanizer
How it works
create-section
When your agent uses it
Create a new page section in this Next.js + Sanity starter, after first checking whether an existing section already covers it (reuse as-is, add a layout option or fields, or build a new type). Takes the look from DESIGN.md (plus any Figma link, screenshot or mockup the user gives) and the copy from BRAND.md (placeholder copy while it is still the template), models the code on the 2–3 closest sections in web/src/ui/sections/, and ships the schema, GROQ branch, component, gallery fixture, Markdown serializer, insert-menu entry and tile. Use when the user asks for a new band, block or section, or whether the site already has one that fits a design.
What it loads into context
Frontmatter
153 tokensAlways available to the agent
SKILL.md
7,091 tokensWhen the skill is activated
Reference documents
2,641 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Phase 0 — Do we already have it?
- Phase 1 — Gather the three sources: look, code, content
- Phase 2 — Build the component in the starter's idiom
- Phase 3 — Model the schema by reading three neighbours
- Phase 4 — Register it in TWO files, query it, typegen, map it
- Phase 5 — The Sections Gallery (three edits, two enforced by typecheck)
- Phase 6 — Restart, then check the gallery, the tile and ONE instance
- Security gate — only for a section that takes input, posts, or renders a URL
- Verify
- Report
- The one-line version
Files
../../../../.claude-plugin/marketplace.jsonasset1,356 bytesSKILL.mdcore28,061 bytesSKILL.mdcore28,061 bytesreferences/gotchas.mddoc10,349 bytes
Read SKILL.md
# Create a section
The **existing sections** decide whether anything needs building, **`DESIGN.md`** how it
**looks**, **`BRAND.md`** what it **says**, the **closest sections** the starting **code**, and
the registries whether an editor can ever **find** it.
Paths are relative to the project root (the folder that holds `web/` and `studio/`) and are
the same in projects made from `base/` and `theme-meridian/`; only the web package name
differs, so commands use `pnpm -C web …`.
This skill is the executable form of the checklist in `docs/agents/new-section.md` (root
`AGENTS.md` → **"Creating a New Section"**); keep the two in sync. Skim
[`references/gotchas.md`](references/gotchas.md) before Phase 2.
View the complete source on GitHubgenerate-alts
When your agent uses it
Write alt text for the images in the Sanity dataset. A script lists every image usage (document, field, current alt, the asset's title/description/alt text, a caption, the section heading and the text around it), downloads one small preview per asset into a local cache (`.alts/`, never the same image twice), the agent looks at each image and proposes one alt per usage in the site's content language (or marks it decorative), then the script builds an HTML page where the user reviews, edits and approves them and exports `approved.json`; approved alts go into drafts with a dry-run-first script (`--apply` to write). Use when the user asks to "generate/write/fill alt texts", "images without alt", "alt audit", "accessibility of images", "describe our images", after a content import or migration, or before an accessibility or SEO review. Works on Nexity projects (`img` objects) and on similar Sanity sites.
What it loads into context
Frontmatter
207 tokensAlways available to the agent
SKILL.md
3,784 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What the site reads
- The script
- Step 1: scan
- Step 2: fetch
- Step 3: describe
- Step 4: report and review
- Step 5: apply
- Step 6: verify
- Report back
Scripts executed separately
scripts/alts.mjsscripts/lib.mjsscripts/lib.test.mjsscripts/report.mjs
Files
SKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesscripts/alts.mjsruns18,722 bytesscripts/lib.mjsruns20,514 bytesscripts/lib.test.mjsruns12,183 bytesscripts/report.mjsruns11,815 bytes
Read SKILL.md
# Generate alt texts
Flow: **scan → fetch → describe → report → the user reviews → apply (dry run, then
`--apply`) → scan again.** Nothing is written to the dataset before the user has approved
the alts in the report and said go.
## What the site reads
Every image in the starter is an `img` object (`studio/src/sanity/schemaTypes/objects/img.tsx`):
`image` (the asset, `image.asset._ref`), `responsive[]` (art-directed variants that share
the same alt) and **`alt`**. The web component (`web/src/ui/components/image/index.tsx`)
renders `alt` prop `||` `img.alt` `||` `image.asset->altText` `||` `""`:
| Where | What counts |View the complete source on GitHublink-fix
When your agent uses it
Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external link, CTA, header/footer link or rich-text annotation) into references or internal paths. http upgrades `http://` links and URL fields to `https://` per host, optionally only where https answers. slash aligns internal paths, own-domain URLs and slugs with the trailing-slash convention in `web/next.config.*` and fixes double or missing slashes. The user picks the rules; a dry-run-first script writes them (`--apply`) and re-checks, then the code goes to `link-reviewer`. Use when the user asks to "fix links", "convert absolute URLs to relative", "editors pasted full URLs", "links to our own site open in a new tab", "replace http with https", "trailing slashes are inconsistent", "check our slugs", after a content import or migration, or before a domain change.
What it loads into context
Frontmatter
230 tokensAlways available to the agent
SKILL.md
4,621 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The script
- Step 1: check, report numbers
- Step 2: ask which rules, and how
- Step 3: dry run, then apply
- Step 4: verify
- Step 5: check the code
- Report back
Scripts executed separately
scripts/lib.mjsscripts/lib.test.mjsscripts/links.mjs
Files
SKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesscripts/lib.mjsruns26,140 bytesscripts/lib.test.mjsruns12,596 bytesscripts/links.mjsruns14,786 bytes
Read SKILL.md
# Link fix: own-domain URLs, http and slashes
Three kinds of link go wrong in the dataset, mostly through pasting and imports:
- **Own domain as external.** Editors paste `https://example.com/pricing` into an
**external** link. It works, but the site opens every `http(s)` link in a **new
tab** (`opensInNewTab`, `web/src/ui/components/Link/BaseLink/utils.ts`), preview
and staging deployments send visitors to production, a domain change breaks every
one of them, and nothing stops someone deleting or renaming the target page.
- **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dead
link at worst, and some hosts never got https.
- **Slashes.** The site has one trailing-slash convention; a link that doesn't
follow it costs a 308 redirect on every click and splits link signals between two
URLs. A page slug with a slash at either end is never served at its URL.View the complete source on GitHubpr-writeup
When your agent uses it
Write or refresh a pull/merge request description a reviewer can follow in one read: the problem as a visitor saw it, a before/after table of the values that changed, reviewer notes, matching before/after screenshots committed with the PR under `.github/pr-assets/<topic>/` (the branch name, `/` → `-`), and a concrete test plan, with the text put through the `work-humanizer` skill and its check before it goes up. Use it when a PR/MR is opened or updated and needs a description, e.g. "write the PR description", "add screenshots to the PR", "update the PR after review", "refresh the before/after shots". Not for commit messages or release notes. Optional argument: the PR/MR number or URL.
What it loads into context
Frontmatter
183 tokensAlways available to the agent
SKILL.md
3,545 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1 — Collect the facts
- Step 2 — Draft the body
- Step 3 — Screenshots
- Step 4 — Humanize, then sweep
- Step 5 — Publish
- Step 6 — After review
- Hard rules
- Fallback paths
Scripts executed separately
scripts/compose.pyscripts/crop.pyscripts/prepare.jsscripts/region.js
Files
SKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesscripts/compose.pyruns3,272 bytesscripts/crop.pyruns1,542 bytesscripts/prepare.jsruns821 bytesscripts/region.jsruns1,353 bytes
Read SKILL.md
# PR write-up
**When to use:** a PR/MR exists (or is about to) and its description has to carry the
change to a reviewer: what was wrong, what changed, with numbers, what the reviewer should
know, how it looks before and after, and how to test it. Also when review feedback changes
the work and the description, table and screenshots need a refresh.
Stack-agnostic. Requirements, all optional except the forge CLI:
- **Forge CLI:** `gh` (GitHub) or `glab` (GitLab), picked from the remote host
(`git remote get-url origin`).
- **A browser you can drive** for screenshots: the `agent-browser` CLI, Playwright, or the
Chrome DevTools MCP. Without one, skip screenshots and say so.
- **python3** for the humanizer check, plus **Pillow** (or ImageMagick) for cropping.
View the complete source on GitHubproject-setup
When your agent uses it
Set up a new project from this Next.js + Sanity starter step by step, from `sanity init --template` or a plain `git clone` to a running site and go-live. Checks what is already done, then walks through Node and pnpm, `pnpm install`, the Sanity project and tokens, `web/.env.local` and `studio/.env(.local)`, linking `sanity.blueprint.ts` (CORS + revalidate webhook, `pnpm blueprints:plan` / `blueprints:deploy`), the first content (Studio, or `pnpm seed` when the project has it), checking `pnpm dev` and the Studio, the optional rename and brand files, and go-live on Vercel, stopping for confirmation after each step. Use when the user asks how to set up, bootstrap or start a project from the starter, to continue a half-done setup, which env vars to set, what the Next steps screen means, or why a fresh clone doesn't run.
What it loads into context
Frontmatter
219 tokensAlways available to the agent
SKILL.md
5,492 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Project layout
- Ground rules
- Step 0: where are we?
- Step 1: get the code and install
- Step 2: Sanity login, project and tokens
- Step 3: environment files
- Step 4: link the Sanity blueprint (CORS + webhook)
- Step 5: first content
- Step 6: verify locally
- Step 7: rename the starter (optional, any time)
- Step 8: brand and design (optional, any time)
- Step 9: go live (when the domain is known)
- Finish
Files
SKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytes
Read SKILL.md
# Set up a new project, step by step
Walk the user through the steps below **in order, one at a time**:
- **Check first.** Each step starts with a check. If it shows the step is done, say so
in one line and move on. The skill often starts on a half-set-up repo.
- **Done when.** Each step ends with a condition. Don't move on until it holds, or the
user chooses to skip (then tell them what will break).
- **Stop between steps.** After each step, report in one or two lines what is done
and what the next step is, and wait for the user to confirm before you start it.
- **Ask only for what you can't detect**, at the step that needs it.
The user runs the commands that need their accounts or change Sanity or hosting. In
this file a leading `!` marks such a command: give it to the user to run in theirView the complete source on GitHubsanity-module-catalog
When your agent uses it
Pictures of the project's sections. Main mode, insert-menu tiles — photograph each section's Sections Gallery fixture, drawn with the project's own components and tokens, into `web/public/admin/thumbnails/<type>.webp`, the tiles of the Studio "Add item…" grid view, and report types with no tile. Use when the insert menu shows blank or placeholder tiles, after /create-section, after restyling a section or changing tokens, fonts or `app.css`, or for "section thumbnails in the Studio" or "which sections have no tile". Optional mode, live-site catalog — screenshot every section instance on a deployed Sanity + Next.js site into a gitignored folder, with a URL→sections manifest and HTML viewers by page and by type (used vs unused). Use for "which sections are used on the live site", "module inventory", "screenshot all modules" or auditing which CMS blocks editors use.
What it loads into context
Frontmatter
195 tokensAlways available to the agent
SKILL.md
2,849 tokensWhen the skill is activated
Reference documents
2,409 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Mode A: insert-menu tiles
- Mode B: live-site catalog
Scripts executed separately
../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjs../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjsscripts/capture.mjsscripts/lib.mjsscripts/lib.test.mjs
Files
../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjsruns14,458 bytes../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjsruns14,458 bytesSKILL.mdcore11,503 bytesSKILL.mdcore11,503 bytesSKILL.mdcore11,503 bytesSKILL.mdcore11,503 bytesreferences/live-catalog.mddoc8,980 bytesscripts/capture.mjsruns14,458 bytesscripts/lib.mjsruns2,216 bytesscripts/lib.test.mjsruns3,508 bytes
Read SKILL.md
# Section pictures: insert-menu tiles and live-site catalog
Two modes. Pick by what the user asks; when unclear, it is the tiles.
| Mode | Output | Committed |
|---|---|---|
| **A. Insert-menu tiles** (default) | `web/public/admin/thumbnails/<type>.webp`, one 800×600 tile per section type, from the Sections Gallery | Yes, with the change that caused it |
| **B. Live-site catalog** (only on request) | Screenshots of every section instance on a deployed site + a manifest and two HTML viewers | No, a gitignored folder |
The script lives in this skill's folder; in a project that is
`.agents/skills/sanity-module-catalog/`. Commands below run from the project root.
## Mode A: insert-menu tiles
View the complete source on GitHubsanity-optimizations
When your agent uses it
Audit whether a Next.js + Sanity site uses Sanity efficiently and what it will cost. Runs three read-only auditors in parallel (`sanity-query-auditor` for GROQ over-fetching, query size and Sanity reads per route; `sanity-image-auditor` for image CDN use, widths and `sizes`, LQIP, preload; `sanity-delivery-auditor` for API CDN vs live API, draft-only Live/stega, static vs dynamic routes, cache tags, webhook scope), merges their findings into one report ranked by impact, and estimates Sanity and Vercel usage for 100–5,000 daily visitors against the Free and Growth quotas. Use when the user asks "optimize Sanity", "are we over-fetching", "how many queries per page", "is the CDN used", "are images the right size", "is the site static", "Sanity usage / quota / bill", "why is the site stale", or before the launch of a Next + Sanity site. Reports first; changes code only after the user picks the fixes.
What it loads into context
Frontmatter
236 tokensAlways available to the agent
SKILL.md
2,364 tokensWhen the skill is activated
Reference documents
4,147 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Phase 0: Scope
- Phase 1: Audit in parallel
- Phase 2: Merge
- Phase 3: Usage estimate
- Phase 4: Report
- Phase 5: Fix what the user picks
Scripts executed separately
../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjsscripts/usage-estimate.mjs
Files
../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjsruns9,819 bytes../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjsruns9,819 bytesSKILL.mdcore9,130 bytesSKILL.mdcore9,130 bytesreferences/starter-baseline.mddoc8,629 bytesreferences/usage-model.mddoc6,484 bytesscripts/usage-estimate.mjsruns9,819 bytes
Read SKILL.md
# Sanity optimizations audit
Read-only until the user picks which findings to fix. The output is one findings report, a
fetches-per-route table, a usage estimate and an offer to fix.
| File | Use |
|---|---|
| `.agents/agents/sanity-query-auditor.md` | Checks Q1–Q11: GROQ shape and size, reads per route |
| `.agents/agents/sanity-image-auditor.md` | Checks I1–I10: transformer, widths and `sizes`, variants, raw URLs |
| `.agents/agents/sanity-delivery-auditor.md` | Checks C1–C8, K1–K10, B1–B3: CDN, draft mode, rendering, cache tags, bundles |
| [`references/starter-baseline.md`](references/starter-baseline.md) | What the starter already does right and its known gaps, by check ID |
| [`references/usage-model.md`](references/usage-model.md) | Pricing and quotas (with sources and date), definitions, formulas |
| [`scripts/usage-estimate.mjs`](scripts/usage-estimate.mjs) | Monthly Sanity + Vercel usage calculator, no dependencies |
View the complete source on GitHubwork-humanizer
When your agent uses it
Edit AI-sounding text so it reads like a careful person wrote it, without changing what it says or commits to. Built for work writing where the wording matters: sales and marketing copy, support replies, HR and legal letters, emails, docs, release notes, posts, landing pages. Two modes. Rewrite: edit the text you are given. Interview: when a draft is AI-composed and thin, ask the writer 3-5 sharp questions and build the piece from their answers, in their words. Also writes from the writer's own notes or a voice-memo transcript. Calibrated on measured differences between human and AI writing.
What it loads into context
Frontmatter
153 tokensAlways available to the agent
SKILL.md
5,085 tokensWhen the skill is activated
Reference documents
815 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Pick the mode
- Interview mode
- Rewrite mode
- The tells, strongest first
- Sound like a person, not a costume
- Keep what is already human
- Genre notes
- Final checks (every time)
- What to return
Scripts executed separately
check.py
Files
LICENSEasset1,068 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytescheck.pyruns4,437 bytestells.mddoc3,453 bytes
Read SKILL.md
# work-humanizer
Make the text read like a specific person wrote it for a specific reader. Keep every fact. Invent nothing.
Three things we measured shape everything below:
1. **Readers notice texture.** Emphasis with no information in it, uniform rhythm, generic claims, and sentences that do the reader's thinking for them. Those are fixable by editing.
2. **Detectors read composition, not words.** A human-written article stayed 99-100% human on a commercial detector after AI formatting, an AI copyedit, and a full AI sentence-by-sentence rephrase. The same piece composed by AI from its outline scored 68% human, and a style-targeted rewrite of that AI version moved it one point. In our October 2026 test, rewrites of AI drafts by this skill, by blader/humanizer, and by a bare prompt all stayed AI on that detector, while versions built from the writer's own sentences scored human roughly in proportion to how many of those sentences survived. An assistant model rewording a draft does not change who composed it. (A paraphrase model trained against detectors did flip the score, and in the same test it cost meaning and quality.) Never promise "undetectable". If the writer needs text that is genuinely theirs, use interview mode.
3. **Specifics carry the human signal.** Density of numbers, names, and dates was the one signal that tracked reader response across the creators we studied. You may only use specifics that are in the source or that the writer gives you.
## Pick the mode
**Rewrite mode** (default). The user gives you text; you edit it.
View the complete source on GitHubcreate-section
When your agent uses it
Create a new page section in this Next.js + Sanity starter, after first checking whether an existing section already covers it (reuse as-is, add a layout option or fields, or build a new type). Takes the look from DESIGN.md (plus any Figma link, screenshot or mockup the user gives) and the copy from BRAND.md (placeholder copy while it is still the template), models the code on the 2–3 closest sections in web/src/ui/sections/, and ships the schema, GROQ branch, component, gallery fixture, Markdown serializer, insert-menu entry and tile. Use when the user asks for a new band, block or section, or whether the site already has one that fits a design.
What it loads into context
Frontmatter
153 tokensAlways available to the agent
SKILL.md
7,091 tokensWhen the skill is activated
Reference documents
2,641 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Phase 0 — Do we already have it?
- Phase 1 — Gather the three sources: look, code, content
- Phase 2 — Build the component in the starter's idiom
- Phase 3 — Model the schema by reading three neighbours
- Phase 4 — Register it in TWO files, query it, typegen, map it
- Phase 5 — The Sections Gallery (three edits, two enforced by typecheck)
- Phase 6 — Restart, then check the gallery, the tile and ONE instance
- Security gate — only for a section that takes input, posts, or renders a URL
- Verify
- Report
- The one-line version
Files
SKILL.mdcore28,061 bytesSKILL.mdcore28,061 bytesreferences/gotchas.mddoc10,349 bytes
Read SKILL.md
# Create a section
The **existing sections** decide whether anything needs building, **`DESIGN.md`** how it
**looks**, **`BRAND.md`** what it **says**, the **closest sections** the starting **code**, and
the registries whether an editor can ever **find** it.
Paths are relative to the project root (the folder that holds `web/` and `studio/`) and are
the same in projects made from `base/` and `theme-meridian/`; only the web package name
differs, so commands use `pnpm -C web …`.
This skill is the executable form of the checklist in `docs/agents/new-section.md` (root
`AGENTS.md` → **"Creating a New Section"**); keep the two in sync. Skim
[`references/gotchas.md`](references/gotchas.md) before Phase 2.
View the complete source on GitHubgenerate-alts
When your agent uses it
Write alt text for the images in the Sanity dataset. A script lists every image usage (document, field, current alt, the asset's title/description/alt text, a caption, the section heading and the text around it), downloads one small preview per asset into a local cache (`.alts/`, never the same image twice), the agent looks at each image and proposes one alt per usage in the site's content language (or marks it decorative), then the script builds an HTML page where the user reviews, edits and approves them and exports `approved.json`; approved alts go into drafts with a dry-run-first script (`--apply` to write). Use when the user asks to "generate/write/fill alt texts", "images without alt", "alt audit", "accessibility of images", "describe our images", after a content import or migration, or before an accessibility or SEO review. Works on Nexity projects (`img` objects) and on similar Sanity sites.
What it loads into context
Frontmatter
207 tokensAlways available to the agent
SKILL.md
3,784 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What the site reads
- The script
- Step 1: scan
- Step 2: fetch
- Step 3: describe
- Step 4: report and review
- Step 5: apply
- Step 6: verify
- Report back
Scripts executed separately
scripts/alts.mjsscripts/lib.mjsscripts/lib.test.mjsscripts/report.mjs
Files
SKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesSKILL.mdcore15,028 bytesscripts/alts.mjsruns18,722 bytesscripts/lib.mjsruns20,514 bytesscripts/lib.test.mjsruns12,183 bytesscripts/report.mjsruns11,815 bytes
Read SKILL.md
# Generate alt texts
Flow: **scan → fetch → describe → report → the user reviews → apply (dry run, then
`--apply`) → scan again.** Nothing is written to the dataset before the user has approved
the alts in the report and said go.
## What the site reads
Every image in the starter is an `img` object (`studio/src/sanity/schemaTypes/objects/img.tsx`):
`image` (the asset, `image.asset._ref`), `responsive[]` (art-directed variants that share
the same alt) and **`alt`**. The web component (`web/src/ui/components/image/index.tsx`)
renders `alt` prop `||` `img.alt` `||` `image.asset->altText` `||` `""`:
| Where | What counts |View the complete source on GitHublink-fix
When your agent uses it
Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external link, CTA, header/footer link or rich-text annotation) into references or internal paths. http upgrades `http://` links and URL fields to `https://` per host, optionally only where https answers. slash aligns internal paths, own-domain URLs and slugs with the trailing-slash convention in `web/next.config.*` and fixes double or missing slashes. The user picks the rules; a dry-run-first script writes them (`--apply`) and re-checks, then the code goes to `link-reviewer`. Use when the user asks to "fix links", "convert absolute URLs to relative", "editors pasted full URLs", "links to our own site open in a new tab", "replace http with https", "trailing slashes are inconsistent", "check our slugs", after a content import or migration, or before a domain change.
What it loads into context
Frontmatter
230 tokensAlways available to the agent
SKILL.md
4,621 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The script
- Step 1: check, report numbers
- Step 2: ask which rules, and how
- Step 3: dry run, then apply
- Step 4: verify
- Step 5: check the code
- Report back
Scripts executed separately
scripts/lib.mjsscripts/lib.test.mjsscripts/links.mjs
Files
SKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesSKILL.mdcore18,398 bytesscripts/lib.mjsruns26,140 bytesscripts/lib.test.mjsruns12,596 bytesscripts/links.mjsruns14,786 bytes
Read SKILL.md
# Link fix: own-domain URLs, http and slashes
Three kinds of link go wrong in the dataset, mostly through pasting and imports:
- **Own domain as external.** Editors paste `https://example.com/pricing` into an
**external** link. It works, but the site opens every `http(s)` link in a **new
tab** (`opensInNewTab`, `web/src/ui/components/Link/BaseLink/utils.ts`), preview
and staging deployments send visitors to production, a domain change breaks every
one of them, and nothing stops someone deleting or renaming the target page.
- **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dead
link at worst, and some hosts never got https.
- **Slashes.** The site has one trailing-slash convention; a link that doesn't
follow it costs a 308 redirect on every click and splits link signals between two
URLs. A page slug with a slash at either end is never served at its URL.View the complete source on GitHubpr-writeup
When your agent uses it
Write or refresh a pull/merge request description a reviewer can follow in one read: the problem as a visitor saw it, a before/after table of the values that changed, reviewer notes, matching before/after screenshots committed with the PR under `.github/pr-assets/<topic>/` (the branch name, `/` → `-`), and a concrete test plan, with the text put through the `work-humanizer` skill and its check before it goes up. Use it when a PR/MR is opened or updated and needs a description, e.g. "write the PR description", "add screenshots to the PR", "update the PR after review", "refresh the before/after shots". Not for commit messages or release notes. Optional argument: the PR/MR number or URL.
What it loads into context
Frontmatter
183 tokensAlways available to the agent
SKILL.md
3,545 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1 — Collect the facts
- Step 2 — Draft the body
- Step 3 — Screenshots
- Step 4 — Humanize, then sweep
- Step 5 — Publish
- Step 6 — After review
- Hard rules
- Fallback paths
Scripts executed separately
scripts/compose.pyscripts/crop.pyscripts/prepare.jsscripts/region.js
Files
SKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesSKILL.mdcore13,643 bytesscripts/compose.pyruns3,272 bytesscripts/crop.pyruns1,542 bytesscripts/prepare.jsruns821 bytesscripts/region.jsruns1,353 bytes
Read SKILL.md
# PR write-up
**When to use:** a PR/MR exists (or is about to) and its description has to carry the
change to a reviewer: what was wrong, what changed, with numbers, what the reviewer should
know, how it looks before and after, and how to test it. Also when review feedback changes
the work and the description, table and screenshots need a refresh.
Stack-agnostic. Requirements, all optional except the forge CLI:
- **Forge CLI:** `gh` (GitHub) or `glab` (GitLab), picked from the remote host
(`git remote get-url origin`).
- **A browser you can drive** for screenshots: the `agent-browser` CLI, Playwright, or the
Chrome DevTools MCP. Without one, skip screenshots and say so.
- **python3** for the humanizer check, plus **Pillow** (or ImageMagick) for cropping.
View the complete source on GitHubproduct-mock
When your agent uses it
Add, change or re-export an HTML-rendered product mock for a project with tools/product-mocks and pnpm mocks:build. Use for a new product screen, changes to an existing one, or fresh PNGs for Sanity.
What it loads into context
Frontmatter
56 tokensAlways available to the agent
SKILL.md
908 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Input
- Steps
- Don't
Files
SKILL.mdcore3,501 bytesSKILL.mdcore3,501 bytesSKILL.mdcore3,501 bytes
Read SKILL.md
# Product mock
The generator lives in `tools/product-mocks/` and the root script `pnpm mocks:build`
runs it. If that directory is missing, this skill does not apply; product images
are ordinary Sanity image assets.
```bash
test -d tools/product-mocks && echo "product mocks: yes" || echo "product mocks: no"
```
The product images on the site are HTML mocks in `tools/product-mocks/`, rendered on
the **product** tokens (the dashboard, `product.py`) and placed on the tinted dune
panel (`mocks.py`). `pnpm mocks:build` writes the gallery
`tools/product-mocks/out/index.html`; each panel has a **Save PNG** button thatView the complete source on GitHubproject-setup
When your agent uses it
Set up a new project from this Next.js + Sanity starter step by step, from `sanity init --template` or a plain `git clone` to a running site and go-live. Checks what is already done, then walks through Node and pnpm, `pnpm install`, the Sanity project and tokens, `web/.env.local` and `studio/.env(.local)`, linking `sanity.blueprint.ts` (CORS + revalidate webhook, `pnpm blueprints:plan` / `blueprints:deploy`), the first content (Studio, or `pnpm seed` when the project has it), checking `pnpm dev` and the Studio, the optional rename and brand files, and go-live on Vercel, stopping for confirmation after each step. Use when the user asks how to set up, bootstrap or start a project from the starter, to continue a half-done setup, which env vars to set, what the Next steps screen means, or why a fresh clone doesn't run.
What it loads into context
Frontmatter
219 tokensAlways available to the agent
SKILL.md
5,492 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Project layout
- Ground rules
- Step 0: where are we?
- Step 1: get the code and install
- Step 2: Sanity login, project and tokens
- Step 3: environment files
- Step 4: link the Sanity blueprint (CORS + webhook)
- Step 5: first content
- Step 6: verify locally
- Step 7: rename the starter (optional, any time)
- Step 8: brand and design (optional, any time)
- Step 9: go live (when the domain is known)
- Finish
Files
SKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytesSKILL.mdcore21,174 bytes
Read SKILL.md
# Set up a new project, step by step
Walk the user through the steps below **in order, one at a time**:
- **Check first.** Each step starts with a check. If it shows the step is done, say so
in one line and move on. The skill often starts on a half-set-up repo.
- **Done when.** Each step ends with a condition. Don't move on until it holds, or the
user chooses to skip (then tell them what will break).
- **Stop between steps.** After each step, report in one or two lines what is done
and what the next step is, and wait for the user to confirm before you start it.
- **Ask only for what you can't detect**, at the step that needs it.
The user runs the commands that need their accounts or change Sanity or hosting. In
this file a leading `!` marks such a command: give it to the user to run in theirView the complete source on GitHubsanity-module-catalog
When your agent uses it
Pictures of the project's sections. Main mode, insert-menu tiles — photograph each section's Sections Gallery fixture, drawn with the project's own components and tokens, into `web/public/admin/thumbnails/<type>.webp`, the tiles of the Studio "Add item…" grid view, and report types with no tile. Use when the insert menu shows blank or placeholder tiles, after /create-section, after restyling a section or changing tokens, fonts or `app.css`, or for "section thumbnails in the Studio" or "which sections have no tile". Optional mode, live-site catalog — screenshot every section instance on a deployed Sanity + Next.js site into a gitignored folder, with a URL→sections manifest and HTML viewers by page and by type (used vs unused). Use for "which sections are used on the live site", "module inventory", "screenshot all modules" or auditing which CMS blocks editors use.
What it loads into context
Frontmatter
195 tokensAlways available to the agent
SKILL.md
2,849 tokensWhen the skill is activated
Reference documents
2,409 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Mode A: insert-menu tiles
- Mode B: live-site catalog
Scripts executed separately
../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjs../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjsscripts/capture.mjsscripts/lib.mjsscripts/lib.test.mjs
Files
../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjsruns14,458 bytes../../../../.agents/skills/sanity-module-catalog/scripts/capture.mjsruns14,458 bytesSKILL.mdcore11,503 bytesSKILL.mdcore11,503 bytesSKILL.mdcore11,503 bytesSKILL.mdcore11,503 bytesreferences/live-catalog.mddoc8,980 bytesscripts/capture.mjsruns14,458 bytesscripts/lib.mjsruns2,216 bytesscripts/lib.test.mjsruns3,508 bytes
Read SKILL.md
# Section pictures: insert-menu tiles and live-site catalog
Two modes. Pick by what the user asks; when unclear, it is the tiles.
| Mode | Output | Committed |
|---|---|---|
| **A. Insert-menu tiles** (default) | `web/public/admin/thumbnails/<type>.webp`, one 800×600 tile per section type, from the Sections Gallery | Yes, with the change that caused it |
| **B. Live-site catalog** (only on request) | Screenshots of every section instance on a deployed site + a manifest and two HTML viewers | No, a gitignored folder |
The script lives in this skill's folder; in a project that is
`.agents/skills/sanity-module-catalog/`. Commands below run from the project root.
## Mode A: insert-menu tiles
View the complete source on GitHubsanity-optimizations
When your agent uses it
Audit whether a Next.js + Sanity site uses Sanity efficiently and what it will cost. Runs three read-only auditors in parallel (`sanity-query-auditor` for GROQ over-fetching, query size and Sanity reads per route; `sanity-image-auditor` for image CDN use, widths and `sizes`, LQIP, preload; `sanity-delivery-auditor` for API CDN vs live API, draft-only Live/stega, static vs dynamic routes, cache tags, webhook scope), merges their findings into one report ranked by impact, and estimates Sanity and Vercel usage for 100–5,000 daily visitors against the Free and Growth quotas. Use when the user asks "optimize Sanity", "are we over-fetching", "how many queries per page", "is the CDN used", "are images the right size", "is the site static", "Sanity usage / quota / bill", "why is the site stale", or before the launch of a Next + Sanity site. Reports first; changes code only after the user picks the fixes.
What it loads into context
Frontmatter
236 tokensAlways available to the agent
SKILL.md
2,364 tokensWhen the skill is activated
Reference documents
4,147 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Phase 0: Scope
- Phase 1: Audit in parallel
- Phase 2: Merge
- Phase 3: Usage estimate
- Phase 4: Report
- Phase 5: Fix what the user picks
Scripts executed separately
../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjsscripts/usage-estimate.mjs
Files
../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjsruns9,819 bytes../../../../.agents/skills/sanity-optimizations/scripts/usage-estimate.mjsruns9,819 bytesSKILL.mdcore9,130 bytesSKILL.mdcore9,130 bytesreferences/starter-baseline.mddoc8,629 bytesreferences/usage-model.mddoc6,484 bytesscripts/usage-estimate.mjsruns9,819 bytes
Read SKILL.md
# Sanity optimizations audit
Read-only until the user picks which findings to fix. The output is one findings report, a
fetches-per-route table, a usage estimate and an offer to fix.
| File | Use |
|---|---|
| `.agents/agents/sanity-query-auditor.md` | Checks Q1–Q11: GROQ shape and size, reads per route |
| `.agents/agents/sanity-image-auditor.md` | Checks I1–I10: transformer, widths and `sizes`, variants, raw URLs |
| `.agents/agents/sanity-delivery-auditor.md` | Checks C1–C8, K1–K10, B1–B3: CDN, draft mode, rendering, cache tags, bundles |
| [`references/starter-baseline.md`](references/starter-baseline.md) | What the starter already does right and its known gaps, by check ID |
| [`references/usage-model.md`](references/usage-model.md) | Pricing and quotas (with sources and date), definitions, formulas |
| [`scripts/usage-estimate.mjs`](scripts/usage-estimate.mjs) | Monthly Sanity + Vercel usage calculator, no dependencies |
View the complete source on GitHubwork-humanizer
When your agent uses it
Edit AI-sounding text so it reads like a careful person wrote it, without changing what it says or commits to. Built for work writing where the wording matters: sales and marketing copy, support replies, HR and legal letters, emails, docs, release notes, posts, landing pages. Two modes. Rewrite: edit the text you are given. Interview: when a draft is AI-composed and thin, ask the writer 3-5 sharp questions and build the piece from their answers, in their words. Also writes from the writer's own notes or a voice-memo transcript. Calibrated on measured differences between human and AI writing.
What it loads into context
Frontmatter
153 tokensAlways available to the agent
SKILL.md
5,085 tokensWhen the skill is activated
Reference documents
815 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Pick the mode
- Interview mode
- Rewrite mode
- The tells, strongest first
- Sound like a person, not a costume
- Keep what is already human
- Genre notes
- Final checks (every time)
- What to return
Scripts executed separately
check.py
Files
LICENSEasset1,068 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytesSKILL.mdcore21,927 bytescheck.pyruns4,437 bytestells.mddoc3,453 bytes
Read SKILL.md
# work-humanizer
Make the text read like a specific person wrote it for a specific reader. Keep every fact. Invent nothing.
Three things we measured shape everything below:
1. **Readers notice texture.** Emphasis with no information in it, uniform rhythm, generic claims, and sentences that do the reader's thinking for them. Those are fixable by editing.
2. **Detectors read composition, not words.** A human-written article stayed 99-100% human on a commercial detector after AI formatting, an AI copyedit, and a full AI sentence-by-sentence rephrase. The same piece composed by AI from its outline scored 68% human, and a style-targeted rewrite of that AI version moved it one point. In our October 2026 test, rewrites of AI drafts by this skill, by blader/humanizer, and by a bare prompt all stayed AI on that detector, while versions built from the writer's own sentences scored human roughly in proportion to how many of those sentences survived. An assistant model rewording a draft does not change who composed it. (A paraphrase model trained against detectors did flip the score, and in the same test it cost meaning and quality.) Never promise "undetectable". If the writer needs text that is genuinely theirs, use interview mode.
3. **Specifics carry the human signal.** Density of numbers, names, and dates was the one signal that tracked reader response across the creators we studied. You may only use specifics that are in the source or that the writer gives you.
## Pick the mode
**Rewrite mode** (default). The user gives you text; you edit it.
View the complete source on GitHubSkills included
- create-section
- generate-alts
- link-fix
- pr-writeup
- project-setup
- sanity-module-catalog
- sanity-optimizations
- work-humanizer
- create-section
- generate-alts
- link-fix
- pr-writeup
- product-mock
- project-setup
- sanity-module-catalog
- sanity-optimizations
- work-humanizer
Repository facts
- License
- MIT
- Created
- Oct 28, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 1
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 96 notes
base/.agents/skills/create-section/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/generate-alts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/link-fix/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/link-fix/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/link-fix/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/link-fix/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/link-fix/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/link-fix/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/pr-writeup/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/pr-writeup/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/pr-writeup/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbase/.agents/skills/pr-writeup/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 12 dangerous shell commandsin 6 files: sanity-module-catalog/references/live-catalog.md:117 sanity-module-catalog/references/live-catalog.md:117 pr-writeup/SKILL.md:150 and 3 more
- 389 network referencesin 33 files: link-fix/scripts/lib.test.mjs:21 link-fix/scripts/lib.test.mjs:21 project-setup/SKILL.md:156 and 30 more
- No hidden or obfuscated text
- No instruction overrides
- 40 executable scriptsin 34 files: .agents/skills/sanity-module-catalog/scripts/capture.mjs:1 .agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:1 generate-alts/scripts/alts.mjs:1 and 31 more
- 22 references to secretsin 6 files: generate-alts/scripts/alts.mjs:124 link-fix/scripts/links.mjs:97 generate-alts/scripts/alts.mjs:124 and 3 more
- No requests to vote in Hot
Show all 463 signals by file
.agents/skills/sanity-module-catalog/scripts/capture.mjs
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file; content unavailable - Network accessline 3
// node capture.mjs --project=path/to/project // node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 3
// node capture.mjs --project=path/to/project // node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 4
// node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 // node capture.mjs --project=. --report # coverage only, no capture - Network accessline 4
// node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 // node capture.mjs --project=. --report # coverage only, no capture - Network accessline 5
// node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 5
// node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 8
// Flags: // --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 8
// Flags: // --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 9
// --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) // --only=a,b Capture these section types only - Network accessline 9
// --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) // --only=a,b Capture these section types only - Network accessline 10
// --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 10
// --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 35
const DEFAULT_BASE = "http://localhost:3000"; - Network accessline 35
const DEFAULT_BASE = "http://localhost:3000"; - Network accessline 141
for (let attempt = 0; attempt < 60 && !webSocketUrl; attempt++) { try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); - Network accessline 141
for (let attempt = 0; attempt < 60 && !webSocketUrl; attempt++) { try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); - Network accessline 142
try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); webSocketUrl = (await response.json()).webSocketDebuggerUrl; - Network accessline 142
try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); webSocketUrl = (await response.json()).webSocketDebuggerUrl; - Network accessline 143
const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); - Network accessline 143
const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`);
.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs
- Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Network accessline 7
const SANITY = { source: "https://www.sanity.io/pricing", - Network accessline 7
const SANITY = { source: "https://www.sanity.io/pricing", - Network accessline 8
source: "https://www.sanity.io/pricing", - Network accessline 8
source: "https://www.sanity.io/pricing", - Network accessline 23
const VERCEL = { source: "https://vercel.com/pricing", - Network accessline 23
const VERCEL = { source: "https://vercel.com/pricing", - Network accessline 24
source: "https://vercel.com/pricing", - Network accessline 24
source: "https://vercel.com/pricing",
.claude-plugin/marketplace.json
- Network accessline 4
"owner": { "name": "Pagepro", "url": "https://pagepro.co" - Network accessline 5
"name": "Pagepro", "url": "https://pagepro.co" }, - Network accessline 6
"url": "https://pagepro.co" - Network accessline 15
"author": { "name": "Pagepro", "url": "https://pagepro.co" - Network accessline 16
"name": "Pagepro", "url": "https://pagepro.co" }, - Network accessline 17
"url": "https://pagepro.co" - Network accessline 18
}, "homepage": "https://github.com/Pagepro/nexity/blob/main/MARKETING-SKILLS-README.md", "repository": "https://github.com/Pagepro/nexity", - Network accessline 19
"homepage": "https://github.com/Pagepro/nexity/blob/main/MARKETING-SKILLS-README.md", - Network accessline 20
"repository": "https://github.com/Pagepro/nexity",
base/.agents/skills/create-section/SKILL.md
- Network accessline 405
pnpm format:check # oxfmt; `pnpm format` fixes it (long test expectations get rewrapped) pnpm build curl -s localhost:3000/<page-with-the-section>.md # after Phase 6: read what an agent gets - Network accessline 407
curl -s localhost:3000/<page-with-the-section>.md # after Phase 6: read what an agent gets
base/.agents/skills/generate-alts/SKILL.md
- Network accessline 54
| `--include-existing` | `fetch`/`batches` also take images that already have an alt (to review their quality). Default: only missing and decorative ones | | `--lang=` | Content language. Default: `<html lang>` in `web/src/app/(frontend)/la - Network accessline 55
| `--lang=` | Content language. Default: `<html lang>` in `web/src/app/(frontend)/layout.tsx` | | `--studio=` | Studio URL for the report's links. Default: `NEXT_PUBLIC_BASE_URL` + `/admin`, else `http://localhost:3000/admin` | | `--dir=` | - Network accessline 56
| `--studio=` | Studio URL for the report's links. Default: `NEXT_PUBLIC_BASE_URL` + `/admin`, else `http://localhost:3000/admin` |
base/.agents/skills/generate-alts/scripts/alts.mjs
- Executable scriptline 1
Executable file - Network accessline 35
--dir=<path> Working folder (default: ../.alts, the project root) --dataset=<name> Overrides NEXT_PUBLIC_SANITY_DATASET (scan) --studio=<url> Studio base URL for links (default: NEXT_PUBLIC_BASE_URL/admin or http:// - Network accessline 36
--dataset=<name> Overrides NEXT_PUBLIC_SANITY_DATASET (scan) --studio=<url> Studio base URL for links (default: NEXT_PUBLIC_BASE_URL/admin or http://localhost:3000/admin) --lang=<code> Content language (default: <htm - Network accessline 37
--studio=<url> Studio base URL for links (default: NEXT_PUBLIC_BASE_URL/admin or http://localhost:3000/admin) --lang=<code> Content language (default: <html lang> of src/app/(frontend)/layout.tsx) --include-existing fe - Access to secretsline 124
[Credential-related source omitted] - Access to secretsline 129
[Credential-related source omitted] - Access to secretsline 130
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Network accessline 163
const documents = []; for (let lastId = ""; ; ) { const page = await client.fetch( - Network accessline 164
for (let lastId = ""; ; ) { const page = await client.fetch( `*[!(_type match "sanity.*") && !(_id in path("_.**")) && _id > $lastId] | order(_id) [0...${PAGE_SIZE}]`, - Network accessline 165
const page = await client.fetch( - Network accessline 177
const assets = {}; for (let start = 0; start < assetIds.length; start += ASSET_CHUNK) { const chunk = await client.fetch( - Network accessline 178
for (let start = 0; start < assetIds.length; start += ASSET_CHUNK) { const chunk = await client.fetch( `*[_type == "sanity.imageAsset" && _id in $ids]{ - Network accessline 179
const chunk = await client.fetch( - Network accessline 194
dataset, projectId, studioUrl: readArgument("studio") ?? `${baseUrl || "http://localhost:3000"}/admin`, - Network accessline 195
projectId, studioUrl: readArgument("studio") ?? `${baseUrl || "http://localhost:3000"}/admin`, lang: await detectLang(), - Network accessline 196
studioUrl: readArgument("studio") ?? `${baseUrl || "http://localhost:3000"}/admin`, - Network accessline 223
const download = async (url, file) => { const response = await fetch(url); - Network accessline 224
const response = await fetch(url); - Network accessline 364
const ids = [...new Set(items.flatMap((item) => [item.documentId, `drafts.${item.documentId}`]))]; const documents = ids.length ? await client.fetch(`*[_id in $ids]`, { ids }) : []; - Network accessline 365
const documents = ids.length ? await client.fetch(`*[_id in $ids]`, { ids }) : [];
base/.agents/skills/generate-alts/scripts/lib.mjs
- Executable scriptline 1
Executable file
base/.agents/skills/generate-alts/scripts/lib.test.mjs
- Executable scriptline 1
Executable file - Network accessline 66
_type: "videoEmbed", _key: "v1", url: "https://video.example/1", - Network accessline 67
_key: "v1", url: "https://video.example/1", caption: "Product walkthrough", - Network accessline 68
url: "https://video.example/1", - Network accessline 76
const ASSETS = { [ASSET_A]: { _id: ASSET_A, url: "https://cdn.sanity.io/images/p/d/a-800x600.jpg", mimeType: "image/jpeg", title: "Team at work", description: "Office photo", altText: null, hasAlpha: false }, - Network accessline 77
[ASSET_A]: { _id: ASSET_A, url: "https://cdn.sanity.io/images/p/d/a-800x600.jpg", mimeType: "image/jpeg", title: "Team at work", description: "Office photo", altText: null, hasAlpha: false }, - Network accessline 78
[ASSET_B]: { _id: ASSET_B, url: "https://cdn.sanity.io/images/p/d/b-120x40.svg", mimeType: "image/svg+xml", title: null, description: null, altText: "Acme logo", hasAlpha: true }, - Network accessline 81
const manifestOf = (documents, cache = { assets: {}, usages: {} }) => buildManifest({ documents, assets: ASSETS, cache, dataset: "production", projectId: "p", studioUrl: "http://localhost:3000/admin", lang: "en", generatedAt: "2026-01-01T - Network accessline 82
buildManifest({ documents, assets: ASSETS, cache, dataset: "production", projectId: "p", studioUrl: "http://localhost:3000/admin", lang: "en", generatedAt: "2026-01-01T00:00:00.000Z" }); - Network accessline 139
assert.deepEqual(hero.variants, { published: "", draft: "Draft alt" }); assert.equal(hero.status, "has-alt"); assert.equal(hero.studio, "http://localhost:3000/admin/intent/edit/id=page-1;type=page"); - Network accessline 140
assert.equal(hero.status, "has-alt"); assert.equal(hero.studio, "http://localhost:3000/admin/intent/edit/id=page-1;type=page"); assert.equal(manifest.counts.versionsSkipped, 1); - Network accessline 141
assert.equal(hero.studio, "http://localhost:3000/admin/intent/edit/id=page-1;type=page"); - Network accessline 173
test("previewUrl asks the CDN for a small JPEG, PNG with alpha, SVG as is", () => { assert.deepEqual(previewUrl(ASSETS[ASSET_A]), { url: `${ASSETS[ASSET_A].url}?w=640&fit=max&fm=jpg&q=75`, ext: "jpg" }); assert.equal(previewUrl({ url: " - Network accessline 174
assert.deepEqual(previewUrl(ASSETS[ASSET_A]), { url: `${ASSETS[ASSET_A].url}?w=640&fit=max&fm=jpg&q=75`, ext: "jpg" }); assert.equal(previewUrl({ url: "https://x/y.png", hasAlpha: true }, 320).url, "https://x/y.png?w=320&fit=max&fm=png"); - Network accessline 175
assert.equal(previewUrl({ url: "https://x/y.png", hasAlpha: true }, 320).url, "https://x/y.png?w=320&fit=max&fm=png");
base/.agents/skills/generate-alts/scripts/report.mjs
- Executable scriptline 1
Executable file
base/.agents/skills/link-fix/SKILL.md
- Network accessline 1
--- name: link-fix description: Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external - Network accessline 2
name: link-fix description: Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external lin - Network accessline 3
description: Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external link, CTA, header/ - Network accessline 10
- **Own domain as external.** Editors paste `https://example.com/pricing` into an - Network accessline 13
and staging deployments send visitors to production, a domain change breaks every one of them, and nothing stops someone deleting or renaming the target page. - **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dea - Network accessline 14
one of them, and nothing stops someone deleting or renaming the target page. - **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dead link at worst, and some hosts never got https. - Network accessline 15
- **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dead - Network accessline 46
| `--trailing-slash=` | `auto` (default): read `trailingSlash` from `web/next.config.*`. `never` / `always` overrides it | | `--verify-https` | Requests every upgraded URL (HEAD, then GET; 8 s timeout). `check` shows the result per host; `f - Network accessline 47
| `--verify-https` | Requests every upgraded URL (HEAD, then GET; 8 s timeout). `check` shows the result per host; `fix` upgrades only URLs whose https answers below 400 | | `--keep-http=` | Hosts to leave on `http://` | | `--drafts=` | `bo - Network accessline 48
| `--keep-http=` | Hosts to leave on `http://` | - Network accessline 113
Every `http://` value in an external link or a URL field. The check lists the - Network accessline 114
**hosts** with their counts; read them back, because an upgrade is only safe where the host serves https. Local and private hosts (`localhost`, `*.local`, `*.test`, IP addresses) are reported and never upgraded. An own-domain `http://` link - Network accessline 115
the host serves https. Local and private hosts (`localhost`, `*.local`, `*.test`, IP addresses) are reported and never upgraded. An own-domain `http://` link is counted under both rules; when own-domain converts it, the upgrade is moot. - Network accessline 116
IP addresses) are reported and never upgraded. An own-domain `http://` link is - Network accessline 245
Spot-check one fixed page in the browser: an internal link should be root-relative in the site's convention (`href="/pricing"`) and open in the same tab; an upgraded external link should start with `https://`. - Network accessline 247
external link should start with `https://`. - Network accessline 251
The dataset is half of it: hardcoded `http://` URLs, own-domain links in
base/.agents/skills/link-fix/scripts/lib.mjs
- Executable scriptline 1
Executable file - Network accessline 55
let host; try { host = new URL(/^[a-z]+:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`).hostname; - Network accessline 56
try { host = new URL(/^[a-z]+:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`).hostname; } catch { - Network accessline 57
host = new URL(/^[a-z]+:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`).hostname; - Network accessline 121
export const upgradeHttp = (value) => typeof value === "string" && /^http:\/\//i.test(value.trim()) ? `https://${value.trim().slice("http://".length)}` - Network accessline 122
typeof value === "string" && /^http:\/\//i.test(value.trim()) ? `https://${value.trim().slice("http://".length)}` : null; - Network accessline 123
? `https://${value.trim().slice("http://".length)}` - Network accessline 176
/** The site root (`https://example.com` or `…/`) is never flagged; the origin text stays verbatim. */
base/.agents/skills/link-fix/scripts/lib.test.mjs
- Executable scriptline 1
Executable file - Network accessline 21
const ownHosts = buildOwnHosts(["https://www.example.com", "old-example.com"]); - Network accessline 30
_type: "page", _rev: "r7", metadata: { slug: { current: "landing" }, canonical: "http://example.com/landing/" }, - Network accessline 31
_rev: "r7", metadata: { slug: { current: "landing" }, canonical: "http://example.com/landing/" }, sections: [ - Network accessline 32
metadata: { slug: { current: "landing" }, canonical: "http://example.com/landing/" }, - Network accessline 36
_type: "hero", ctas: [ { _key: "c1", _type: "cta", link: { _type: "link", type: "external", external: "http://www.example.com/pricing/?plan=pro" } }, - Network accessline 37
ctas: [ { _key: "c1", _type: "cta", link: { _type: "link", type: "external", external: "http://www.example.com/pricing/?plan=pro" } }, { _key: "c2", _type: "cta", link: { _type: "link", type: "external", external: "http: - Network accessline 38
{ _key: "c1", _type: "cta", link: { _type: "link", type: "external", external: "http://www.example.com/pricing/?plan=pro" } }, - Network accessline 39
{ _key: "c2", _type: "cta", link: { _type: "link", type: "external", external: "http://partner.com/docs" } }, - Network accessline 40
{ _key: "c3", _type: "cta", link: { _type: "link", type: "path", internalPath: "Pricing/" } }, { _key: "c4", _type: "cta", link: { _type: "link", type: "external", external: "mailto:hi@example.com" } }, { _key: "c5", _ty - Network accessline 41
{ _key: "c4", _type: "cta", link: { _type: "link", type: "external", external: "mailto:hi@example.com" } }, { _key: "c5", _type: "cta", link: { _type: "link", type: "external", external: "http://localhost:3000/x" } }, ], - Network accessline 42
{ _key: "c5", _type: "cta", link: { _type: "link", type: "external", external: "http://localhost:3000/x" } }, - Network accessline 48
_key: "b1", _type: "block", children: [{ _key: "t1", _type: "span", text: "see http://example.com/pricing", marks: ["m1"] }], - Network accessline 49
_type: "block", children: [{ _key: "t1", _type: "span", text: "see http://example.com/pricing", marks: ["m1"] }], markDefs: [{ _key: "m1", _type: "link", type: "external", external: "/pricing#faq" }], - Network accessline 50
children: [{ _key: "t1", _type: "span", text: "see http://example.com/pricing", marks: ["m1"] }], - Network accessline 52
}, ], sameAs: ["http://linkedin.com/company/example"], - Network accessline 53
], sameAs: ["http://linkedin.com/company/example"], }, - Network accessline 54
sameAs: ["http://linkedin.com/company/example"], - Network accessline 63
describe("URL helpers", () => { it("parses own-domain URLs with www, http and protocol-relative forms", () => { assert.deepEqual(parseOwnUrl("http://www.example.com/pricing/?plan=pro#top", ownHosts), { - Network accessline 64
it("parses own-domain URLs with www, http and protocol-relative forms", () => { assert.deepEqual(parseOwnUrl("http://www.example.com/pricing/?plan=pro#top", ownHosts), { path: "/pricing", - Network accessline 65
assert.deepEqual(parseOwnUrl("http://www.example.com/pricing/?plan=pro#top", ownHosts), { - Network accessline 68
}); assert.deepEqual(parseOwnUrl("//old-example.com", ownHosts), { path: "/", params: "" }); assert.equal(parseOwnUrl("https://partner.com/pricing", ownHosts), null); - Network accessline 69
assert.deepEqual(parseOwnUrl("//old-example.com", ownHosts), { path: "/", params: "" }); assert.equal(parseOwnUrl("https://partner.com/pricing", ownHosts), null); }); - Network accessline 70
assert.equal(parseOwnUrl("https://partner.com/pricing", ownHosts), null); - Network accessline 79
it("upgrades only http:// and leaves other schemes alone", () => { assert.equal(upgradeHttp("http://partner.com/a?b=1"), "https://partner.com/a?b=1"); - Network accessline 80
assert.equal(upgradeHttp("http://partner.com/a?b=1"), "https://partner.com/a?b=1"); - Network accessline 81
assert.equal(upgradeHttp("HTTP://partner.com"), "https://partner.com"); - Network accessline 82
for (const value of ["https://partner.com", "mailto:a@b.c", "tel:+48123", "#top", "/x"]) - Network accessline 127
it("reports what it cannot fix safely", () => { for (const value of ["https://example.com/x", "//example.com/x", "/a b", "#faq"]) { - Network accessline 128
for (const value of ["https://example.com/x", "//example.com/x", "/a b", "#faq"]) { - Network accessline 136
describe("checkAbsoluteUrl", () => { it("keeps the origin text and the query", () => { assert.equal(checkAbsoluteUrl("https://Example.com//a/b/?x=1", "never").fixed, "https://Example.com/a/b?x=1"); - Network accessline 137
it("keeps the origin text and the query", () => { assert.equal(checkAbsoluteUrl("https://Example.com//a/b/?x=1", "never").fixed, "https://Example.com/a/b?x=1"); assert.equal(checkAbsoluteUrl("https://example.com/a", "always").fixed, - Network accessline 138
assert.equal(checkAbsoluteUrl("https://Example.com//a/b/?x=1", "never").fixed, "https://Example.com/a/b?x=1"); - Network accessline 139
assert.equal(checkAbsoluteUrl("https://example.com/a", "always").fixed, "https://example.com/a/"); - Network accessline 142
it("never flags the site root", () => { assert.deepEqual(checkAbsoluteUrl("https://example.com/", "never").issues, []); - Network accessline 143
assert.deepEqual(checkAbsoluteUrl("https://example.com/", "never").issues, []); - Network accessline 144
assert.deepEqual(checkAbsoluteUrl("https://example.com", "always").issues, []); - Network accessline 203
assert.equal(find(findings, "slash", "metadata.canonical").suggested, "http://example.com/landing"); - Network accessline 231
assert.equal(landing.set[`${base}.external`], undefined); assert.ok(landing.unset.includes(`${base}.external`)); assert.equal(landing.set["metadata.canonical"], "https://example.com/landing"); - Network accessline 232
assert.ok(landing.unset.includes(`${base}.external`)); assert.equal(landing.set["metadata.canonical"], "https://example.com/landing"); assert.equal(landing.set["sections[_key==\"s1\"].ctas[_key==\"c2\"].link.external"], "https://par - Network accessline 233
assert.equal(landing.set["metadata.canonical"], "https://example.com/landing"); - Network accessline 234
assert.equal(landing.set["sections[_key==\"s1\"].ctas[_key==\"c2\"].link.external"], "https://partner.com/docs"); - Network accessline 235
assert.equal(landing.set["sameAs[0]"], "https://linkedin.com/company/example"); - Network accessline 241
assert.equal( landing.set["sections[_key==\"s1\"].ctas[_key==\"c1\"].link.external"], "https://www.example.com/pricing/?plan=pro", - Network accessline 242
landing.set["sections[_key==\"s1\"].ctas[_key==\"c1\"].link.external"], "https://www.example.com/pricing/?plan=pro", ); - Network accessline 243
"https://www.example.com/pricing/?plan=pro", - Network accessline 277
it("combines the http upgrade and the slash fix on one URL", () => { assert.equal( rewriteValue("http://example.com/a/", [{ rule: "slash", fieldType: "url" }, { rule: "http" }], "never"), - Network accessline 278
assert.equal( rewriteValue("http://example.com/a/", [{ rule: "slash", fieldType: "url" }, { rule: "http" }], "never"), "https://example.com/a", - Network accessline 279
rewriteValue("http://example.com/a/", [{ rule: "slash", fieldType: "url" }, { rule: "http" }], "never"), - Network accessline 280
"https://example.com/a",
base/.agents/skills/link-fix/scripts/links.mjs
- Executable scriptline 1
Executable file - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Network accessline 138
let lastId = ""; for (;;) { const page = await client.fetch( - Network accessline 139
for (;;) { const page = await client.fetch( `*[!(_type match "sanity.*") && !(_id in path("_.**")) && _id > $lastId] | order(_id) [0...${PAGE_SIZE}]`, - Network accessline 140
const page = await client.fetch( - Network accessline 152
for (const method of ["HEAD", "GET"]) { try { const response = await fetch(url, { - Network accessline 153
try { const response = await fetch(url, { method, - Network accessline 154
const response = await fetch(url, {
base/.agents/skills/pr-writeup/SKILL.md
- Dangerous shell operationline 150
agent-browser eval "$(cat "$S/prepare.js")" - Dangerous shell operationline 151
agent-browser eval "($(cat "$S/region.js"))('h2|Key takeaways', 'h2|Next heading', 32)" > /tmp/<topic>/region.json - Network accessline 186
https://github.com/<owner>/<repo>/blob/<SHA>/.github/pr-assets/<topic>/after-<page>-<width>.png?raw=true
base/.agents/skills/pr-writeup/scripts/compose.py
- Executable scriptline 1
#!/usr/bin/env python3
base/.agents/skills/pr-writeup/scripts/crop.py
- Executable scriptline 1
#!/usr/bin/env python3
base/.agents/skills/pr-writeup/scripts/prepare.js
- Executable scriptline 1
Executable file
base/.agents/skills/pr-writeup/scripts/region.js
- Executable scriptline 1
Executable file
base/.agents/skills/project-setup/SKILL.md
- Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Network accessline 156
| `SANITY_API_READ_TOKEN` | recommended | Viewer token | | `SANITY_REVALIDATE_SECRET` | recommended | A random string: `openssl rand -hex 32`. The webhook signs with it, so production must have the same value. Without it a published change - Network accessline 157
| `SANITY_REVALIDATE_SECRET` | recommended | A random string: `openssl rand -hex 32`. The webhook signs with it, so production must have the same value. Without it a published change waits for the 30-day cache | | `NEXT_PUBLIC_BASE_URL` | n - Network accessline 158
| `NEXT_PUBLIC_BASE_URL` | no | Unset falls back to the Vercel URL, else `http://localhost:3000` (`web/src/setup/base-url.ts`). Set it to the real domain once known. **No trailing slash** | - Network accessline 163
| `NEXT_PUBLIC_GTM_ID` | no | Google Tag Manager. Cookie consent needs no env: it runs offline | | `RESEND_API_KEY`, `CONTACT_FORM_RECIPIENT_EMAIL`, `CONTACT_FORM_FROM_EMAIL` | no | Contact form. Without them the form can't send | | `SANITY - Network accessline 164
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Network accessline 165
| `SANITY_BLUEPRINT_SITE_URL` | no | The site's origin with the protocol and no trailing slash (`https://acme.com`). Empty until there is a domain. Read only by `sanity.blueprint.ts` | - Network accessline 166
| `SANITY_BLUEPRINT_EXTRA_ORIGINS` | no | Comma-separated origins, each with the protocol (`https://www.acme.com`), or empty | - Network accessline 175
| `SANITY_STUDIO_DATASET` | Same dataset | | `SANITY_STUDIO_API_VERSION` | `2024-12-01` unless there's a reason to change it | | `SANITY_STUDIO_APP_URL` | `http://localhost:3000`. The Styleguide tool, the SEO preview and preview links use i - Network accessline 177
| `SANITY_STUDIO_APP_URL` | `http://localhost:3000`. The Styleguide tool, the SEO preview and preview links use it | - Network accessline 201
Write the value the user gives you, or tell them which line to set. If `init` or `plan` fails with `[blueprint] "…" is not an origin`, one of these holds a bare host (`acme.vercel.app`) or a placeholder: add `https://` or empty it, then rer - Network accessline 203
(`acme.vercel.app`) or a placeholder: add `https://` or empty it, then rerun. - Network accessline 214
**Localhost.** The blueprint declares no localhost origin. Sanity creates `http://localhost:3333` with every new project, and `sanity init` adds - Network accessline 215
`http://localhost:3333` with every new project, and `sanity init` adds - Network accessline 216
`http://localhost:3000`, both outside the stack. On a **hand clone**, have the user add - Network accessline 217
`:3000` once (the site and `/admin` need it): `! pnpm --filter <scope>/studio exec sanity cors add http://localhost:3000 --credentials`. Another local port goes into `SANITY_BLUEPRINT_EXTRA_ORIGINS` (`http://localhost:3001`). - Network accessline 218
`! pnpm --filter <scope>/studio exec sanity cors add http://localhost:3000 --credentials`. - Network accessline 219
Another local port goes into `SANITY_BLUEPRINT_EXTRA_ORIGINS` (`http://localhost:3001`). - Network accessline 238
Never tell them to delete `http://localhost:3000` or `:3333`: the blueprint doesn't - Network accessline 244
**Done when:** the blueprint is linked, the deploy succeeded (or the plan is empty because there is no domain yet), and `http://localhost:3000` is a CORS origin. - Network accessline 245
because there is no domain yet), and `http://localhost:3000` is a CORS origin. - Network accessline 249
**Check:** `pnpm dev` and open `http://localhost:3000`. If the site renders, this step - Network accessline 277
1. Open `http://localhost:3000/admin` and log in. - Network accessline 285
**Done when:** `http://localhost:3000` shows the homepage, not the Next steps screen. - Network accessline 300
- `http://localhost:3000` renders the homepage. - Network accessline 301
- `http://localhost:3000/admin` lets the user log in and lists the documents. - Network accessline 371
Add `www` or a preview wildcard with `SANITY_BLUEPRINT_EXTRA_ORIGINS` (`https://*-<team-slug>.vercel.app`, never `https://*.vercel.app`; the blueprint - Network accessline 372
(`https://*-<team-slug>.vercel.app`, never `https://*.vercel.app`; the blueprint
base/.agents/skills/sanity-module-catalog/SKILL.md
- Network accessline 57
|---|---| | **Project dir** (`--project`) | The project root holding `web/` and `studio/`. | | **Running web app** (`--base`, default `http://localhost:3000`) | `pnpm dev`. It must be a **dev** server: outside `next dev` the gallery is gate - Network accessline 58
| **Project dir** (`--project`) | The project root holding `web/` and `studio/`. | | **Running web app** (`--base`, default `http://localhost:3000`) | `pnpm dev`. It must be a **dev** server: outside `next dev` the gallery is gated to logge - Network accessline 59
| **Running web app** (`--base`, default `http://localhost:3000`) | `pnpm dev`. It must be a **dev** server: outside `next dev` the gallery is gated to logged-in Studio editors and the script would photograph the gate. If 3000 is taken, pas - Network accessline 74
2. **Start the app**: `pnpm dev` in a separate terminal or background process (seed the demo data first if the fixtures need it). Wait until `http://localhost:3000/styleguide/sections` answers. - Network accessline 76
`http://localhost:3000/styleguide/sections` answers. - Dangerous shell operationline 94
5. **Delete orphans** the report lists (`git rm web/public/admin/thumbnails/<name>.webp`).
base/.agents/skills/sanity-module-catalog/references/live-catalog.md
- Network accessline 36
[Credential-related source omitted] - Network accessline 37
[Credential-related source omitted] - Network accessline 38
"https://${PROJECT_ID}.api.sanity.io/v2024-01-01/data/query/${DATASET}?perspective=published&query=$(jq -rn --arg q "$1" '$q|@uri')" - Network accessline 59
{ "url": "/en/partners", "liveUrl": "https://example.com/en/partners", - Network accessline 60
"url": "/en/partners", "liveUrl": "https://example.com/en/partners", "title": "Partners", - Network accessline 61
"liveUrl": "https://example.com/en/partners", - Dangerous shell operationline 117
CURRENT=$(agent-browser eval 'location.pathname' 2>/dev/null | jq -r '.') - Dangerous shell operationline 120
CURRENT=$(agent-browser eval 'location.pathname' 2>/dev/null | jq -r '.') - Network accessline 152
SITE=https://example.com - Dangerous shell operationline 153
rm -f "$OUT"/screenshots/*.png
base/.agents/skills/sanity-module-catalog/scripts/capture.mjs
- Executable scriptline 1
Executable file - Network accessline 3
// node capture.mjs --project=path/to/project // node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 4
// node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 // node capture.mjs --project=. --report # coverage only, no capture - Network accessline 5
// node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 8
// Flags: // --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 9
// --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) // --only=a,b Capture these section types only - Network accessline 10
// --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 35
const DEFAULT_BASE = "http://localhost:3000"; - Network accessline 141
for (let attempt = 0; attempt < 60 && !webSocketUrl; attempt++) { try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); - Network accessline 142
try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); webSocketUrl = (await response.json()).webSocketDebuggerUrl; - Network accessline 143
const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`);
base/.agents/skills/sanity-module-catalog/scripts/lib.mjs
- Executable scriptline 1
Executable file
base/.agents/skills/sanity-module-catalog/scripts/lib.test.mjs
- Executable scriptline 1
Executable file
base/.agents/skills/sanity-optimizations/references/usage-model.md
- Network accessline 11
**Sanity** ([sanity.io/pricing](https://www.sanity.io/pricing)) - Network accessline 24
API CDN facts that matter for the model ([API CDN docs](https://www.sanity.io/docs/content-lake/api-cdn)): - Network accessline 34
- Image and file requests to `cdn.sanity.io` count against **bandwidth**, not against API request quotas. Image transformation responses carry `cache-control: public, max-age=31536000, s-maxage=2592000` (checked with `curl -sI`). - Network accessline 35
API request quotas. Image transformation responses carry `cache-control: public, max-age=31536000, s-maxage=2592000` (checked with `curl -sI`). - `auto=format` serves AVIF to browsers that accept it (since 2024-11-13); the first - Network accessline 36
`cache-control: public, max-age=31536000, s-maxage=2592000` (checked with `curl -sI`). - Network accessline 37
- `auto=format` serves AVIF to browsers that accept it (since 2024-11-13); the first request can get WebP while AVIF is encoded in the background ([changelog](https://www.sanity.io/docs/changelog/690b41ac-cc92-41c3-b219-b1bcfd06379f)). - Network accessline 39
([changelog](https://www.sanity.io/docs/changelog/690b41ac-cc92-41c3-b219-b1bcfd06379f)). - Network accessline 41
**Vercel** ([vercel.com/pricing](https://vercel.com/pricing))
base/.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 7
const SANITY = { source: "https://www.sanity.io/pricing", - Network accessline 8
source: "https://www.sanity.io/pricing", - Network accessline 23
const VERCEL = { source: "https://vercel.com/pricing", - Network accessline 24
source: "https://vercel.com/pricing",
base/.agents/skills/work-humanizer/check.py
- Executable scriptline 1
#!/usr/bin/env python3
theme-meridian/.agents/skills/create-section/SKILL.md
- Network accessline 405
pnpm format:check # oxfmt; `pnpm format` fixes it (long test expectations get rewrapped) pnpm build curl -s localhost:3000/<page-with-the-section>.md # after Phase 6: read what an agent gets - Network accessline 407
curl -s localhost:3000/<page-with-the-section>.md # after Phase 6: read what an agent gets
theme-meridian/.agents/skills/generate-alts/SKILL.md
- Network accessline 54
| `--include-existing` | `fetch`/`batches` also take images that already have an alt (to review their quality). Default: only missing and decorative ones | | `--lang=` | Content language. Default: `<html lang>` in `web/src/app/(frontend)/la - Network accessline 55
| `--lang=` | Content language. Default: `<html lang>` in `web/src/app/(frontend)/layout.tsx` | | `--studio=` | Studio URL for the report's links. Default: `NEXT_PUBLIC_BASE_URL` + `/admin`, else `http://localhost:3000/admin` | | `--dir=` | - Network accessline 56
| `--studio=` | Studio URL for the report's links. Default: `NEXT_PUBLIC_BASE_URL` + `/admin`, else `http://localhost:3000/admin` |
theme-meridian/.agents/skills/generate-alts/scripts/alts.mjs
- Executable scriptline 1
Executable file - Network accessline 35
--dir=<path> Working folder (default: ../.alts, the project root) --dataset=<name> Overrides NEXT_PUBLIC_SANITY_DATASET (scan) --studio=<url> Studio base URL for links (default: NEXT_PUBLIC_BASE_URL/admin or http:// - Network accessline 36
--dataset=<name> Overrides NEXT_PUBLIC_SANITY_DATASET (scan) --studio=<url> Studio base URL for links (default: NEXT_PUBLIC_BASE_URL/admin or http://localhost:3000/admin) --lang=<code> Content language (default: <htm - Network accessline 37
--studio=<url> Studio base URL for links (default: NEXT_PUBLIC_BASE_URL/admin or http://localhost:3000/admin) --lang=<code> Content language (default: <html lang> of src/app/(frontend)/layout.tsx) --include-existing fe - Access to secretsline 124
[Credential-related source omitted] - Access to secretsline 129
[Credential-related source omitted] - Access to secretsline 130
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Network accessline 163
const documents = []; for (let lastId = ""; ; ) { const page = await client.fetch( - Network accessline 164
for (let lastId = ""; ; ) { const page = await client.fetch( `*[!(_type match "sanity.*") && !(_id in path("_.**")) && _id > $lastId] | order(_id) [0...${PAGE_SIZE}]`, - Network accessline 165
const page = await client.fetch( - Network accessline 177
const assets = {}; for (let start = 0; start < assetIds.length; start += ASSET_CHUNK) { const chunk = await client.fetch( - Network accessline 178
for (let start = 0; start < assetIds.length; start += ASSET_CHUNK) { const chunk = await client.fetch( `*[_type == "sanity.imageAsset" && _id in $ids]{ - Network accessline 179
const chunk = await client.fetch( - Network accessline 194
dataset, projectId, studioUrl: readArgument("studio") ?? `${baseUrl || "http://localhost:3000"}/admin`, - Network accessline 195
projectId, studioUrl: readArgument("studio") ?? `${baseUrl || "http://localhost:3000"}/admin`, lang: await detectLang(), - Network accessline 196
studioUrl: readArgument("studio") ?? `${baseUrl || "http://localhost:3000"}/admin`, - Network accessline 223
const download = async (url, file) => { const response = await fetch(url); - Network accessline 224
const response = await fetch(url); - Network accessline 364
const ids = [...new Set(items.flatMap((item) => [item.documentId, `drafts.${item.documentId}`]))]; const documents = ids.length ? await client.fetch(`*[_id in $ids]`, { ids }) : []; - Network accessline 365
const documents = ids.length ? await client.fetch(`*[_id in $ids]`, { ids }) : [];
theme-meridian/.agents/skills/generate-alts/scripts/lib.mjs
- Executable scriptline 1
Executable file
theme-meridian/.agents/skills/generate-alts/scripts/lib.test.mjs
- Executable scriptline 1
Executable file - Network accessline 66
_type: "videoEmbed", _key: "v1", url: "https://video.example/1", - Network accessline 67
_key: "v1", url: "https://video.example/1", caption: "Product walkthrough", - Network accessline 68
url: "https://video.example/1", - Network accessline 76
const ASSETS = { [ASSET_A]: { _id: ASSET_A, url: "https://cdn.sanity.io/images/p/d/a-800x600.jpg", mimeType: "image/jpeg", title: "Team at work", description: "Office photo", altText: null, hasAlpha: false }, - Network accessline 77
[ASSET_A]: { _id: ASSET_A, url: "https://cdn.sanity.io/images/p/d/a-800x600.jpg", mimeType: "image/jpeg", title: "Team at work", description: "Office photo", altText: null, hasAlpha: false }, - Network accessline 78
[ASSET_B]: { _id: ASSET_B, url: "https://cdn.sanity.io/images/p/d/b-120x40.svg", mimeType: "image/svg+xml", title: null, description: null, altText: "Acme logo", hasAlpha: true }, - Network accessline 81
const manifestOf = (documents, cache = { assets: {}, usages: {} }) => buildManifest({ documents, assets: ASSETS, cache, dataset: "production", projectId: "p", studioUrl: "http://localhost:3000/admin", lang: "en", generatedAt: "2026-01-01T - Network accessline 82
buildManifest({ documents, assets: ASSETS, cache, dataset: "production", projectId: "p", studioUrl: "http://localhost:3000/admin", lang: "en", generatedAt: "2026-01-01T00:00:00.000Z" }); - Network accessline 139
assert.deepEqual(hero.variants, { published: "", draft: "Draft alt" }); assert.equal(hero.status, "has-alt"); assert.equal(hero.studio, "http://localhost:3000/admin/intent/edit/id=page-1;type=page"); - Network accessline 140
assert.equal(hero.status, "has-alt"); assert.equal(hero.studio, "http://localhost:3000/admin/intent/edit/id=page-1;type=page"); assert.equal(manifest.counts.versionsSkipped, 1); - Network accessline 141
assert.equal(hero.studio, "http://localhost:3000/admin/intent/edit/id=page-1;type=page"); - Network accessline 173
test("previewUrl asks the CDN for a small JPEG, PNG with alpha, SVG as is", () => { assert.deepEqual(previewUrl(ASSETS[ASSET_A]), { url: `${ASSETS[ASSET_A].url}?w=640&fit=max&fm=jpg&q=75`, ext: "jpg" }); assert.equal(previewUrl({ url: " - Network accessline 174
assert.deepEqual(previewUrl(ASSETS[ASSET_A]), { url: `${ASSETS[ASSET_A].url}?w=640&fit=max&fm=jpg&q=75`, ext: "jpg" }); assert.equal(previewUrl({ url: "https://x/y.png", hasAlpha: true }, 320).url, "https://x/y.png?w=320&fit=max&fm=png"); - Network accessline 175
assert.equal(previewUrl({ url: "https://x/y.png", hasAlpha: true }, 320).url, "https://x/y.png?w=320&fit=max&fm=png");
theme-meridian/.agents/skills/generate-alts/scripts/report.mjs
- Executable scriptline 1
Executable file
theme-meridian/.agents/skills/link-fix/SKILL.md
- Network accessline 1
--- name: link-fix description: Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external - Network accessline 2
name: link-fix description: Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external lin - Network accessline 3
description: Audit and fix the links stored in the Sanity dataset, three rules counted in one table first. own-domain turns links to the site's own domain (`https://example.com/pricing` or a bare `/pricing` in an external link, CTA, header/ - Network accessline 10
- **Own domain as external.** Editors paste `https://example.com/pricing` into an - Network accessline 13
and staging deployments send visitors to production, a domain change breaks every one of them, and nothing stops someone deleting or renaming the target page. - **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dea - Network accessline 14
one of them, and nothing stops someone deleting or renaming the target page. - **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dead link at worst, and some hosts never got https. - Network accessline 15
- **`http://`.** Costs a redirect hop at best, a mixed-content warning or a dead - Network accessline 46
| `--trailing-slash=` | `auto` (default): read `trailingSlash` from `web/next.config.*`. `never` / `always` overrides it | | `--verify-https` | Requests every upgraded URL (HEAD, then GET; 8 s timeout). `check` shows the result per host; `f - Network accessline 47
| `--verify-https` | Requests every upgraded URL (HEAD, then GET; 8 s timeout). `check` shows the result per host; `fix` upgrades only URLs whose https answers below 400 | | `--keep-http=` | Hosts to leave on `http://` | | `--drafts=` | `bo - Network accessline 48
| `--keep-http=` | Hosts to leave on `http://` | - Network accessline 113
Every `http://` value in an external link or a URL field. The check lists the - Network accessline 114
**hosts** with their counts; read them back, because an upgrade is only safe where the host serves https. Local and private hosts (`localhost`, `*.local`, `*.test`, IP addresses) are reported and never upgraded. An own-domain `http://` link - Network accessline 115
the host serves https. Local and private hosts (`localhost`, `*.local`, `*.test`, IP addresses) are reported and never upgraded. An own-domain `http://` link is counted under both rules; when own-domain converts it, the upgrade is moot. - Network accessline 116
IP addresses) are reported and never upgraded. An own-domain `http://` link is - Network accessline 245
Spot-check one fixed page in the browser: an internal link should be root-relative in the site's convention (`href="/pricing"`) and open in the same tab; an upgraded external link should start with `https://`. - Network accessline 247
external link should start with `https://`. - Network accessline 251
The dataset is half of it: hardcoded `http://` URLs, own-domain links in
theme-meridian/.agents/skills/link-fix/scripts/lib.mjs
- Executable scriptline 1
Executable file - Network accessline 55
let host; try { host = new URL(/^[a-z]+:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`).hostname; - Network accessline 56
try { host = new URL(/^[a-z]+:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`).hostname; } catch { - Network accessline 57
host = new URL(/^[a-z]+:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`).hostname; - Network accessline 121
export const upgradeHttp = (value) => typeof value === "string" && /^http:\/\//i.test(value.trim()) ? `https://${value.trim().slice("http://".length)}` - Network accessline 122
typeof value === "string" && /^http:\/\//i.test(value.trim()) ? `https://${value.trim().slice("http://".length)}` : null; - Network accessline 123
? `https://${value.trim().slice("http://".length)}` - Network accessline 176
/** The site root (`https://example.com` or `…/`) is never flagged; the origin text stays verbatim. */
theme-meridian/.agents/skills/link-fix/scripts/lib.test.mjs
- Executable scriptline 1
Executable file - Network accessline 21
const ownHosts = buildOwnHosts(["https://www.example.com", "old-example.com"]); - Network accessline 30
_type: "page", _rev: "r7", metadata: { slug: { current: "landing" }, canonical: "http://example.com/landing/" }, - Network accessline 31
_rev: "r7", metadata: { slug: { current: "landing" }, canonical: "http://example.com/landing/" }, sections: [ - Network accessline 32
metadata: { slug: { current: "landing" }, canonical: "http://example.com/landing/" }, - Network accessline 36
_type: "hero", ctas: [ { _key: "c1", _type: "cta", link: { _type: "link", type: "external", external: "http://www.example.com/pricing/?plan=pro" } }, - Network accessline 37
ctas: [ { _key: "c1", _type: "cta", link: { _type: "link", type: "external", external: "http://www.example.com/pricing/?plan=pro" } }, { _key: "c2", _type: "cta", link: { _type: "link", type: "external", external: "http: - Network accessline 38
{ _key: "c1", _type: "cta", link: { _type: "link", type: "external", external: "http://www.example.com/pricing/?plan=pro" } }, - Network accessline 39
{ _key: "c2", _type: "cta", link: { _type: "link", type: "external", external: "http://partner.com/docs" } }, - Network accessline 40
{ _key: "c3", _type: "cta", link: { _type: "link", type: "path", internalPath: "Pricing/" } }, { _key: "c4", _type: "cta", link: { _type: "link", type: "external", external: "mailto:hi@example.com" } }, { _key: "c5", _ty - Network accessline 41
{ _key: "c4", _type: "cta", link: { _type: "link", type: "external", external: "mailto:hi@example.com" } }, { _key: "c5", _type: "cta", link: { _type: "link", type: "external", external: "http://localhost:3000/x" } }, ], - Network accessline 42
{ _key: "c5", _type: "cta", link: { _type: "link", type: "external", external: "http://localhost:3000/x" } }, - Network accessline 48
_key: "b1", _type: "block", children: [{ _key: "t1", _type: "span", text: "see http://example.com/pricing", marks: ["m1"] }], - Network accessline 49
_type: "block", children: [{ _key: "t1", _type: "span", text: "see http://example.com/pricing", marks: ["m1"] }], markDefs: [{ _key: "m1", _type: "link", type: "external", external: "/pricing#faq" }], - Network accessline 50
children: [{ _key: "t1", _type: "span", text: "see http://example.com/pricing", marks: ["m1"] }], - Network accessline 52
}, ], sameAs: ["http://linkedin.com/company/example"], - Network accessline 53
], sameAs: ["http://linkedin.com/company/example"], }, - Network accessline 54
sameAs: ["http://linkedin.com/company/example"], - Network accessline 63
describe("URL helpers", () => { it("parses own-domain URLs with www, http and protocol-relative forms", () => { assert.deepEqual(parseOwnUrl("http://www.example.com/pricing/?plan=pro#top", ownHosts), { - Network accessline 64
it("parses own-domain URLs with www, http and protocol-relative forms", () => { assert.deepEqual(parseOwnUrl("http://www.example.com/pricing/?plan=pro#top", ownHosts), { path: "/pricing", - Network accessline 65
assert.deepEqual(parseOwnUrl("http://www.example.com/pricing/?plan=pro#top", ownHosts), { - Network accessline 68
}); assert.deepEqual(parseOwnUrl("//old-example.com", ownHosts), { path: "/", params: "" }); assert.equal(parseOwnUrl("https://partner.com/pricing", ownHosts), null); - Network accessline 69
assert.deepEqual(parseOwnUrl("//old-example.com", ownHosts), { path: "/", params: "" }); assert.equal(parseOwnUrl("https://partner.com/pricing", ownHosts), null); }); - Network accessline 70
assert.equal(parseOwnUrl("https://partner.com/pricing", ownHosts), null); - Network accessline 79
it("upgrades only http:// and leaves other schemes alone", () => { assert.equal(upgradeHttp("http://partner.com/a?b=1"), "https://partner.com/a?b=1"); - Network accessline 80
assert.equal(upgradeHttp("http://partner.com/a?b=1"), "https://partner.com/a?b=1"); - Network accessline 81
assert.equal(upgradeHttp("HTTP://partner.com"), "https://partner.com"); - Network accessline 82
for (const value of ["https://partner.com", "mailto:a@b.c", "tel:+48123", "#top", "/x"]) - Network accessline 127
it("reports what it cannot fix safely", () => { for (const value of ["https://example.com/x", "//example.com/x", "/a b", "#faq"]) { - Network accessline 128
for (const value of ["https://example.com/x", "//example.com/x", "/a b", "#faq"]) { - Network accessline 136
describe("checkAbsoluteUrl", () => { it("keeps the origin text and the query", () => { assert.equal(checkAbsoluteUrl("https://Example.com//a/b/?x=1", "never").fixed, "https://Example.com/a/b?x=1"); - Network accessline 137
it("keeps the origin text and the query", () => { assert.equal(checkAbsoluteUrl("https://Example.com//a/b/?x=1", "never").fixed, "https://Example.com/a/b?x=1"); assert.equal(checkAbsoluteUrl("https://example.com/a", "always").fixed, - Network accessline 138
assert.equal(checkAbsoluteUrl("https://Example.com//a/b/?x=1", "never").fixed, "https://Example.com/a/b?x=1"); - Network accessline 139
assert.equal(checkAbsoluteUrl("https://example.com/a", "always").fixed, "https://example.com/a/"); - Network accessline 142
it("never flags the site root", () => { assert.deepEqual(checkAbsoluteUrl("https://example.com/", "never").issues, []); - Network accessline 143
assert.deepEqual(checkAbsoluteUrl("https://example.com/", "never").issues, []); - Network accessline 144
assert.deepEqual(checkAbsoluteUrl("https://example.com", "always").issues, []); - Network accessline 203
assert.equal(find(findings, "slash", "metadata.canonical").suggested, "http://example.com/landing"); - Network accessline 231
assert.equal(landing.set[`${base}.external`], undefined); assert.ok(landing.unset.includes(`${base}.external`)); assert.equal(landing.set["metadata.canonical"], "https://example.com/landing"); - Network accessline 232
assert.ok(landing.unset.includes(`${base}.external`)); assert.equal(landing.set["metadata.canonical"], "https://example.com/landing"); assert.equal(landing.set["sections[_key==\"s1\"].ctas[_key==\"c2\"].link.external"], "https://par - Network accessline 233
assert.equal(landing.set["metadata.canonical"], "https://example.com/landing"); - Network accessline 234
assert.equal(landing.set["sections[_key==\"s1\"].ctas[_key==\"c2\"].link.external"], "https://partner.com/docs"); - Network accessline 235
assert.equal(landing.set["sameAs[0]"], "https://linkedin.com/company/example"); - Network accessline 241
assert.equal( landing.set["sections[_key==\"s1\"].ctas[_key==\"c1\"].link.external"], "https://www.example.com/pricing/?plan=pro", - Network accessline 242
landing.set["sections[_key==\"s1\"].ctas[_key==\"c1\"].link.external"], "https://www.example.com/pricing/?plan=pro", ); - Network accessline 243
"https://www.example.com/pricing/?plan=pro", - Network accessline 277
it("combines the http upgrade and the slash fix on one URL", () => { assert.equal( rewriteValue("http://example.com/a/", [{ rule: "slash", fieldType: "url" }, { rule: "http" }], "never"), - Network accessline 278
assert.equal( rewriteValue("http://example.com/a/", [{ rule: "slash", fieldType: "url" }, { rule: "http" }], "never"), "https://example.com/a", - Network accessline 279
rewriteValue("http://example.com/a/", [{ rule: "slash", fieldType: "url" }, { rule: "http" }], "never"), - Network accessline 280
"https://example.com/a",
theme-meridian/.agents/skills/link-fix/scripts/links.mjs
- Executable scriptline 1
Executable file - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Network accessline 138
let lastId = ""; for (;;) { const page = await client.fetch( - Network accessline 139
for (;;) { const page = await client.fetch( `*[!(_type match "sanity.*") && !(_id in path("_.**")) && _id > $lastId] | order(_id) [0...${PAGE_SIZE}]`, - Network accessline 140
const page = await client.fetch( - Network accessline 152
for (const method of ["HEAD", "GET"]) { try { const response = await fetch(url, { - Network accessline 153
try { const response = await fetch(url, { method, - Network accessline 154
const response = await fetch(url, {
theme-meridian/.agents/skills/pr-writeup/SKILL.md
- Dangerous shell operationline 150
agent-browser eval "$(cat "$S/prepare.js")" - Dangerous shell operationline 151
agent-browser eval "($(cat "$S/region.js"))('h2|Key takeaways', 'h2|Next heading', 32)" > /tmp/<topic>/region.json - Network accessline 186
https://github.com/<owner>/<repo>/blob/<SHA>/.github/pr-assets/<topic>/after-<page>-<width>.png?raw=true
theme-meridian/.agents/skills/pr-writeup/scripts/compose.py
- Executable scriptline 1
#!/usr/bin/env python3
theme-meridian/.agents/skills/pr-writeup/scripts/crop.py
- Executable scriptline 1
#!/usr/bin/env python3
theme-meridian/.agents/skills/pr-writeup/scripts/prepare.js
- Executable scriptline 1
Executable file
theme-meridian/.agents/skills/pr-writeup/scripts/region.js
- Executable scriptline 1
Executable file
theme-meridian/.agents/skills/project-setup/SKILL.md
- Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Network accessline 156
| `SANITY_API_READ_TOKEN` | recommended | Viewer token | | `SANITY_REVALIDATE_SECRET` | recommended | A random string: `openssl rand -hex 32`. The webhook signs with it, so production must have the same value. Without it a published change - Network accessline 157
| `SANITY_REVALIDATE_SECRET` | recommended | A random string: `openssl rand -hex 32`. The webhook signs with it, so production must have the same value. Without it a published change waits for the 30-day cache | | `NEXT_PUBLIC_BASE_URL` | n - Network accessline 158
| `NEXT_PUBLIC_BASE_URL` | no | Unset falls back to the Vercel URL, else `http://localhost:3000` (`web/src/setup/base-url.ts`). Set it to the real domain once known. **No trailing slash** | - Network accessline 163
| `NEXT_PUBLIC_GTM_ID` | no | Google Tag Manager. Cookie consent needs no env: it runs offline | | `RESEND_API_KEY`, `CONTACT_FORM_RECIPIENT_EMAIL`, `CONTACT_FORM_FROM_EMAIL` | no | Contact form. Without them the form can't send | | `SANITY - Network accessline 164
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Network accessline 165
| `SANITY_BLUEPRINT_SITE_URL` | no | The site's origin with the protocol and no trailing slash (`https://acme.com`). Empty until there is a domain. Read only by `sanity.blueprint.ts` | - Network accessline 166
| `SANITY_BLUEPRINT_EXTRA_ORIGINS` | no | Comma-separated origins, each with the protocol (`https://www.acme.com`), or empty | - Network accessline 175
| `SANITY_STUDIO_DATASET` | Same dataset | | `SANITY_STUDIO_API_VERSION` | `2024-12-01` unless there's a reason to change it | | `SANITY_STUDIO_APP_URL` | `http://localhost:3000`. The Styleguide tool, the SEO preview and preview links use i - Network accessline 177
| `SANITY_STUDIO_APP_URL` | `http://localhost:3000`. The Styleguide tool, the SEO preview and preview links use it | - Network accessline 201
Write the value the user gives you, or tell them which line to set. If `init` or `plan` fails with `[blueprint] "…" is not an origin`, one of these holds a bare host (`acme.vercel.app`) or a placeholder: add `https://` or empty it, then rer - Network accessline 203
(`acme.vercel.app`) or a placeholder: add `https://` or empty it, then rerun. - Network accessline 214
**Localhost.** The blueprint declares no localhost origin. Sanity creates `http://localhost:3333` with every new project, and `sanity init` adds - Network accessline 215
`http://localhost:3333` with every new project, and `sanity init` adds - Network accessline 216
`http://localhost:3000`, both outside the stack. On a **hand clone**, have the user add - Network accessline 217
`:3000` once (the site and `/admin` need it): `! pnpm --filter <scope>/studio exec sanity cors add http://localhost:3000 --credentials`. Another local port goes into `SANITY_BLUEPRINT_EXTRA_ORIGINS` (`http://localhost:3001`). - Network accessline 218
`! pnpm --filter <scope>/studio exec sanity cors add http://localhost:3000 --credentials`. - Network accessline 219
Another local port goes into `SANITY_BLUEPRINT_EXTRA_ORIGINS` (`http://localhost:3001`). - Network accessline 238
Never tell them to delete `http://localhost:3000` or `:3333`: the blueprint doesn't - Network accessline 244
**Done when:** the blueprint is linked, the deploy succeeded (or the plan is empty because there is no domain yet), and `http://localhost:3000` is a CORS origin. - Network accessline 245
because there is no domain yet), and `http://localhost:3000` is a CORS origin. - Network accessline 249
**Check:** `pnpm dev` and open `http://localhost:3000`. If the site renders, this step - Network accessline 277
1. Open `http://localhost:3000/admin` and log in. - Network accessline 285
**Done when:** `http://localhost:3000` shows the homepage, not the Next steps screen. - Network accessline 300
- `http://localhost:3000` renders the homepage. - Network accessline 301
- `http://localhost:3000/admin` lets the user log in and lists the documents. - Network accessline 371
Add `www` or a preview wildcard with `SANITY_BLUEPRINT_EXTRA_ORIGINS` (`https://*-<team-slug>.vercel.app`, never `https://*.vercel.app`; the blueprint - Network accessline 372
(`https://*-<team-slug>.vercel.app`, never `https://*.vercel.app`; the blueprint
theme-meridian/.agents/skills/sanity-module-catalog/SKILL.md
- Network accessline 57
|---|---| | **Project dir** (`--project`) | The project root holding `web/` and `studio/`. | | **Running web app** (`--base`, default `http://localhost:3000`) | `pnpm dev`. It must be a **dev** server: outside `next dev` the gallery is gate - Network accessline 58
| **Project dir** (`--project`) | The project root holding `web/` and `studio/`. | | **Running web app** (`--base`, default `http://localhost:3000`) | `pnpm dev`. It must be a **dev** server: outside `next dev` the gallery is gated to logge - Network accessline 59
| **Running web app** (`--base`, default `http://localhost:3000`) | `pnpm dev`. It must be a **dev** server: outside `next dev` the gallery is gated to logged-in Studio editors and the script would photograph the gate. If 3000 is taken, pas - Network accessline 74
2. **Start the app**: `pnpm dev` in a separate terminal or background process (seed the demo data first if the fixtures need it). Wait until `http://localhost:3000/styleguide/sections` answers. - Network accessline 76
`http://localhost:3000/styleguide/sections` answers. - Dangerous shell operationline 94
5. **Delete orphans** the report lists (`git rm web/public/admin/thumbnails/<name>.webp`).
theme-meridian/.agents/skills/sanity-module-catalog/references/live-catalog.md
- Network accessline 36
[Credential-related source omitted] - Network accessline 37
[Credential-related source omitted] - Network accessline 38
"https://${PROJECT_ID}.api.sanity.io/v2024-01-01/data/query/${DATASET}?perspective=published&query=$(jq -rn --arg q "$1" '$q|@uri')" - Network accessline 59
{ "url": "/en/partners", "liveUrl": "https://example.com/en/partners", - Network accessline 60
"url": "/en/partners", "liveUrl": "https://example.com/en/partners", "title": "Partners", - Network accessline 61
"liveUrl": "https://example.com/en/partners", - Dangerous shell operationline 117
CURRENT=$(agent-browser eval 'location.pathname' 2>/dev/null | jq -r '.') - Dangerous shell operationline 120
CURRENT=$(agent-browser eval 'location.pathname' 2>/dev/null | jq -r '.') - Network accessline 152
SITE=https://example.com - Dangerous shell operationline 153
rm -f "$OUT"/screenshots/*.png
theme-meridian/.agents/skills/sanity-module-catalog/scripts/capture.mjs
- Executable scriptline 1
Executable file - Network accessline 3
// node capture.mjs --project=path/to/project // node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 4
// node capture.mjs --project=path/to/project --only=hero,faq // node capture.mjs --project=. --base=http://localhost:3001 // node capture.mjs --project=. --report # coverage only, no capture - Network accessline 5
// node capture.mjs --project=. --base=http://localhost:3001 - Network accessline 8
// Flags: // --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 9
// --project=DIR Project root holding web/ and studio/ (default: cwd) // --base=URL Web app to photograph (default: http://localhost:3000) // --only=a,b Capture these section types only - Network accessline 10
// --base=URL Web app to photograph (default: http://localhost:3000) - Network accessline 35
const DEFAULT_BASE = "http://localhost:3000"; - Network accessline 141
for (let attempt = 0; attempt < 60 && !webSocketUrl; attempt++) { try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); - Network accessline 142
try { const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`); webSocketUrl = (await response.json()).webSocketDebuggerUrl; - Network accessline 143
const response = await fetch(`http://127.0.0.1:${DEBUG_PORT}/json/version`);
theme-meridian/.agents/skills/sanity-module-catalog/scripts/lib.mjs
- Executable scriptline 1
Executable file
theme-meridian/.agents/skills/sanity-module-catalog/scripts/lib.test.mjs
- Executable scriptline 1
Executable file
theme-meridian/.agents/skills/sanity-optimizations/references/usage-model.md
- Network accessline 11
**Sanity** ([sanity.io/pricing](https://www.sanity.io/pricing)) - Network accessline 24
API CDN facts that matter for the model ([API CDN docs](https://www.sanity.io/docs/content-lake/api-cdn)): - Network accessline 34
- Image and file requests to `cdn.sanity.io` count against **bandwidth**, not against API request quotas. Image transformation responses carry `cache-control: public, max-age=31536000, s-maxage=2592000` (checked with `curl -sI`). - Network accessline 35
API request quotas. Image transformation responses carry `cache-control: public, max-age=31536000, s-maxage=2592000` (checked with `curl -sI`). - `auto=format` serves AVIF to browsers that accept it (since 2024-11-13); the first - Network accessline 36
`cache-control: public, max-age=31536000, s-maxage=2592000` (checked with `curl -sI`). - Network accessline 37
- `auto=format` serves AVIF to browsers that accept it (since 2024-11-13); the first request can get WebP while AVIF is encoded in the background ([changelog](https://www.sanity.io/docs/changelog/690b41ac-cc92-41c3-b219-b1bcfd06379f)). - Network accessline 39
([changelog](https://www.sanity.io/docs/changelog/690b41ac-cc92-41c3-b219-b1bcfd06379f)). - Network accessline 41
**Vercel** ([vercel.com/pricing](https://vercel.com/pricing))
theme-meridian/.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 7
const SANITY = { source: "https://www.sanity.io/pricing", - Network accessline 8
source: "https://www.sanity.io/pricing", - Network accessline 23
const VERCEL = { source: "https://vercel.com/pricing", - Network accessline 24
source: "https://vercel.com/pricing",
theme-meridian/.agents/skills/work-humanizer/check.py
- Executable scriptline 1
#!/usr/bin/env python3
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 454 facts
- Executable script in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:1Low confidence
- Executable script in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:1Low confidence
- Executable script in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:1Low confidence
- Executable script in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:1Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:3Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:3Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:4Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:4Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:5Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:5Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:8Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:8Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:9Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:9Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:10Low confidence
- Network access in a comment of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:10Low confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:35High confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:35High confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:141High confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:141High confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:142High confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:142High confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:143High confidence
- Network access in code of a file that runs.agents/skills/sanity-module-catalog/scripts/capture.mjs:143High confidence
- Executable script in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:1High confidence
- Executable script in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:1High confidence
- Executable script in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:1High confidence
- Executable script in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:1High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:7High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:7High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:8High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:8High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:23High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:23High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:24High confidence
- Network access in code of a file that runs.agents/skills/sanity-optimizations/scripts/usage-estimate.mjs:24High confidence
- Network access in code of the SKILL.mdcreate-section/SKILL.md:405High confidence
- Network access in code of the SKILL.mdcreate-section/SKILL.md:407High confidence
- Network access in prose of the SKILL.mdgenerate-alts/SKILL.md:54Low confidence
- Network access in prose of the SKILL.mdgenerate-alts/SKILL.md:55Low confidence
- Network access in prose of the SKILL.mdgenerate-alts/SKILL.md:56Low confidence
- Executable script in a comment of a file that runsgenerate-alts/scripts/alts.mjs:1Low confidence
- Network access in code of a file that runsgenerate-alts/scripts/alts.mjs:35High confidence
- Network access in code of a file that runsgenerate-alts/scripts/alts.mjs:36High confidence
- Network access in code of a file that runsgenerate-alts/scripts/alts.mjs:37High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuegenerate-alts/scripts/alts.mjs:124Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuegenerate-alts/scripts/alts.mjs:129Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuegenerate-alts/scripts/alts.mjs:130Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuegenerate-alts/scripts/alts.mjs:133Low confidence
- Network access in code of a file that runsgenerate-alts/scripts/alts.mjs:163High confidence
and 404 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md base/.agents/skills/create-section/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md base/.agents/skills/create-section/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md base/.agents/skills/create-section/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md base/.agents/skills/create-section/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.