Geo Run
onvoyage-ai/voyage-geo-agent
Run a full GEO analysis — guides you through setup, brand research, query generation, execution, analysis, and reporting
Audit and optimize frontmatter description fields across documentation pages to keep them concise and token-efficient.
$ npx skills add lynx-family/lynx-website --skill doc-description-governance -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install lynx-family/lynx-website doc-description-governance --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/lynx-family/lynx-website.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/doc-description-governance .claude/skills/doc-description-governance && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "doc-description-governance" agent skill from https://github.com/lynx-family/lynx-website/tree/main/.agents/skills/doc-description-governance into .claude/skills/doc-description-governance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doc-description-governance", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/lynx-family/lynx-website/tree/main/.agents/skills/doc-description-governanceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add lynx-family/lynx-website --skill doc-description-governance -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install lynx-family/lynx-website doc-description-governance --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lynx-family/lynx-website.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/doc-description-governance .agents/skills/doc-description-governance && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "doc-description-governance" agent skill from https://github.com/lynx-family/lynx-website/tree/main/.agents/skills/doc-description-governance into .agents/skills/doc-description-governance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doc-description-governance", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lynx-family/lynx-website --skill doc-description-governance -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install lynx-family/lynx-website doc-description-governance --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lynx-family/lynx-website.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/doc-description-governance .cursor/skills/doc-description-governance && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "doc-description-governance" agent skill from https://github.com/lynx-family/lynx-website/tree/main/.agents/skills/doc-description-governance into .cursor/skills/doc-description-governance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doc-description-governance", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/lynx-family/lynx-website.git --path .agents/skills/doc-description-governance--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add lynx-family/lynx-website --skill doc-description-governance -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install lynx-family/lynx-website doc-description-governance --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lynx-family/lynx-website.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/doc-description-governance .gemini/skills/doc-description-governance && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "doc-description-governance" agent skill from https://github.com/lynx-family/lynx-website/tree/main/.agents/skills/doc-description-governance into .gemini/skills/doc-description-governance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doc-description-governance", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install lynx-family/lynx-website doc-description-governanceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add lynx-family/lynx-website --skill doc-description-governance -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/lynx-family/lynx-website.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/doc-description-governance .github/skills/doc-description-governance && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "doc-description-governance" agent skill from https://github.com/lynx-family/lynx-website/tree/main/.agents/skills/doc-description-governance into .github/skills/doc-description-governance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doc-description-governance", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lynx-family/lynx-website --skill doc-description-governance -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install lynx-family/lynx-website doc-description-governance --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lynx-family/lynx-website.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/doc-description-governance .opencode/skills/doc-description-governance && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "doc-description-governance" agent skill from https://github.com/lynx-family/lynx-website/tree/main/.agents/skills/doc-description-governance into .opencode/skills/doc-description-governance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doc-description-governance", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
doc-description-governanceAudit and optimize frontmatter description fields across documentation pages to keep them concise and token-efficient.
Doc Description Governance is an agent skill from lynx-family/lynx-website. Audit and optimize frontmatter description fields across documentation pages to keep them concise and token-efficient. Use this skill when the user wants to add missing descriptions, trim verbose ones, enforce a token budget on page descriptions, or ensure every doc page has a proper frontmatter description. Also trigger when the user mentions 'description is too long', 'add description frontmatter', 'optimize page descriptions', 'llms.txt is too big', or 'descriptions are eating too many tokens'.
Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Marketing & SEO, covering AI search optimization and LLM cost and token optimization. The repository describes itself as: Official Website of the Lynx Family. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f78e8a9. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodepnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Doc Description Governance loads about 1.7k tokens when it runs. Until then it costs about 133 tokens; SKILL.md has 496 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from lynx-family/lynx-website at commit f78e8a9, republished under its Apache-2.0 licence (© lynx-family). 496 words, ~1,691 tokens.
.claude/skills/doc-description-governance/SKILL.md (or your agent's skills folder).This skill helps you audit and optimize frontmatter description fields across documentation pages. Well-governed descriptions keep generated outputs (like llms.txt) compact and meaningful, and also improve SEO and link previews.
Pages without explicit description frontmatter fall back to their first paragraph — often hundreds of tokens of prose, unresolved MDX variables, JSX tags, or import statements. This bloats any consumer of the description (llms.txt, meta tags, link previews). The goal is to ensure every page has a deliberate, concise description that stays within a token budget (typically 30 tokens as measured by tiktoken gpt-4o).
Use the built llms.txt as a detection surface — it exposes every page's effective description in one file. Identify entries exceeding the token budget:
import { encodingForModel } from 'js-tiktoken';
import fs from 'node:fs/promises';
const enc = encodingForModel('gpt-4o');
const TOKEN_LIMIT = 30;
const llmsTxt = await fs.readFile('doc_build/llms.txt', 'utf-8');
const appendixStart = llmsTxt.indexOf('## 98. Appendix: Links');
const appendixContent = llmsTxt.slice(appendixStart);
const lines = appendixContent.split('\n').filter((l) => l.startsWith('* ['));
for (const line of lines) {
const match = line.match(/^\* \[([^\]]*)\]\(([^)]+)\): (.+)$/);
if (!match) continue;
const [, title, url, desc] = match;
const tokens = enc.encode(desc).length;
if (tokens > TOKEN_LIMIT) {
console.log(`${tokens} tokens: ${url} | ${desc.slice(0, 80)}`);
}
}Count tokens with tiktoken, not word count. Word-splitting (split(/\s+/)) severely undercounts Chinese/Japanese text where each character is 1-2 tokens.
For each entry exceeding the budget, determine the fix strategy:
| Situation | Fix |
|---|---|
| File has no frontmatter description | Add description field to frontmatter |
| File already has a frontmatter description that's too long | Do NOT modify the source — rely on postprocess truncation |
Description contains unresolved MDX variables ({someVar['key']}) | Add a proper description frontmatter to override |
| Description contains JSX/import leakage | Add a proper description frontmatter to override |
The key rule: never modify an existing description that was already in the file. Someone wrote it deliberately. Instead, rely on the build-time truncation safety net to clip it at output time.
For files that need a new description:
---
description: "Concise summary of the page's purpose."
---Guidelines for writing descriptions:
description as the first field if adding to existing frontmatterAdd a postprocess step that automatically truncates any description exceeding the token budget. This catches entries from files with long pre-existing descriptions without modifying source files.
import { encodingForModel } from 'js-tiktoken';
const enc = encodingForModel('gpt-4o');
function truncateLongDescriptions(markdown: string, maxTokens: number): string {
const ellipsis = '…';
const ellipsisTokens = enc.encode(ellipsis).length;
return markdown
.split('\n')
.map((line) => {
const match = line.match(/^(\* \[[^\]]*\]\([^)]+\)): (.+)$/);
if (!match) return line;
const [, prefix, desc] = match;
const tokens = enc.encode(desc);
if (tokens.length <= maxTokens) return line;
const truncated = enc.decode(tokens.slice(0, maxTokens - ellipsisTokens));
return `${prefix}: ${truncated}${ellipsis}`;
})
.join('\n');
}The ellipsis itself costs tokens — always subtract its token count from the budget before slicing.
After building, verify all language variants pass:
node --experimental-transform-types -e "
import { encodingForModel } from 'js-tiktoken';
import fs from 'node:fs/promises';
const enc = encodingForModel('gpt-4o');
const TOKEN_LIMIT = 30;
for (const file of ['doc_build/llms.txt', 'doc_build/zh/llms.txt']) {
const llms = await fs.readFile(file, 'utf-8');
const start = llms.indexOf('## 98. Appendix: Links');
const lines = llms.slice(start).split('\n').filter(l => l.startsWith('* ['));
let exceeding = 0;
for (const line of lines) {
const match = line.match(/^\* \[([^\]]*]\)\(([^)]+\)): (.+)$/);
if (!match) continue;
if (enc.encode(match[3]).length > TOKEN_LIMIT) exceeding++;
}
console.log(file + ': ' + exceeding + ' exceeding');
}
"/react/start/X, /rspeedy/start/X). Adding frontmatter to the source fixes all routes at once.{someVar['key']} in their first paragraph will have that raw expression appear in llms.txt because the llms.txt generator doesn't execute JS. Adding a proper description frontmatter overrides this.… (U+2026) is 1 token in gpt-4o. ... (three dots) is also 1 token. Account for it when truncating.js-tiktoken — for accurate token counting (install with pnpm add -D js-tiktoken)llms.txt generation (rspress with llms: true, or similar)© lynx-family, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/doc-description-governance of lynx-family/lynx-website.
Open the folder on GitHubat commit f78e8a9
Doc Description Governance next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Doc Description Governance this skilllynx-family/lynx-website | 130 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Geo Runonvoyage-ai/voyage-geo-agent | 384 | — | ~1.3k | Automated safety check: Notes | MIT | |
| Geo Fundamentalswasp-lang/wasp | 19k | 9 repos | ~861 | Automated safety check: Pass | MIT | |
| SEO GeoReScienceLab/opc-skills | 1.8k | 4 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| GEO-First SEO Audit Toolzubair-trabzada/geo-seo-claude | 11k | — | ~2.8k | Automated safety check: Notes | MIT | |
| GEO Monthly Delta Reportzubair-trabzada/geo-seo-claude | 11k | — | ~2.4k | Automated safety check: Notes | MIT |
onvoyage-ai/voyage-geo-agent
Run a full GEO analysis — guides you through setup, brand research, query generation, execution, analysis, and reporting
wasp-lang/wasp
Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).
ReScienceLab/opc-skills
SEO & GEO (Generative Engine Optimization) for websites. An agent skill from ReScienceLab/opc-skills.
zubair-trabzada/geo-seo-claude
Audits a website for AI search visibility across ChatGPT, Claude, Perplexity and Google AI Overviews while checking traditional SEO, schema and E-E-A-T content quality.
zubair-trabzada/geo-seo-claude
Compares a baseline and a current GEO audit for a client, calculates score changes and action item progress, and writes a monthly progress report.
AgriciDaniel/codex-seo
Live SEO data via DataForSEO MCP server. An agent skill from AgriciDaniel/codex-seo.
lynx-family/lynx-website
Generate or check the Lynx DevTool CDP API reference from the authoritative generated manifest using packages/lynx-cdp/generatecdpdocs.py, with mandatory Chinese translation after English generation.
Categories
Audit and optimize frontmatter description fields across documentation pages to keep them concise and token-efficient. Doc Description Governance is an agent skill from lynx-family/lynx-website. Audit and optimize frontmatter description fields across documentation pages to keep them concise and token-efficient.
Doc Description Governance fits situations like: the user wants to add missing descriptions; trim verbose ones; enforce a token budget on page descriptions; ensure every doc page has a proper frontmatter description.
Run `npx skills add lynx-family/lynx-website --skill doc-description-governance -a claude-code`. Or copy the skill folder (.agents/skills/doc-description-governance in lynx-family/lynx-website) into .claude/skills/doc-description-governance in your project. Claude Code loads it when a task matches its description.
Run `npx skills add lynx-family/lynx-website --skill doc-description-governance -a codex`. Or copy the skill folder (.agents/skills/doc-description-governance in lynx-family/lynx-website) into .agents/skills/doc-description-governance in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add lynx-family/lynx-website --skill doc-description-governance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/doc-description-governance, .gemini/skills/doc-description-governance, .github/skills/doc-description-governance and .opencode/skills/doc-description-governance in your project.
Going by SKILL.md and its folder, Doc Description Governance needs the command-line tools its instructions call (node and pnpm).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Doc Description Governance is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Doc Description Governance: Geo Run (onvoyage-ai/voyage-geo-agent, 384 stars), Geo Fundamentals (wasp-lang/wasp, 19k stars), SEO Geo (ReScienceLab/opc-skills, 1.8k stars) and GEO-First SEO Audit Tool (zubair-trabzada/geo-seo-claude, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
lynx-family (a GitHub organization) maintains it in lynx-family/lynx-website, which has 130 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 10, 2026.
Source: lynx-family/lynx-website on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.