Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add AtlasOmnia/hermes-custom-pack --skill site-mappinggit clone --depth 1 https://github.com/AtlasOmnia/hermes-custom-packWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/atlasomnia/hermes-custom-pack/site-mapping)<a href="https://agentmods.dev/skills/atlasomnia/hermes-custom-pack/site-mapping"><img src="https://agentmods.dev/badge/skills/atlasomnia/hermes-custom-pack/site-mapping.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00028 | $0.00841 |
| Opus 5 | $0.00014 | $0.00420 |
| Sonnet 5 | $0.00006 | $0.00168 |
| Haiku 4.5 | $0.00003 | $0.00084 |
Grade A, and why
site-mapping scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
This is a copy
100% identical to site-mapping — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 91 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Site Mapping
Map the complete structure of a website: extract all URLs from sitemaps, analyze navigation hierarchy, classify content by section, and produce a structured overview.
When to Use
- User asks to "map out," "audit," or "review" a website's structure
- Need to understand a site's URL taxonomy, content sections, or SEO footprint
- Preparing competitive analysis, content gap assessment, or migration planning
Workflow
1. Discover sitemaps
Check these in order:
https://site.com/sitemap.xml(may redirect tositemap_index.xml)https://site.com/robots.txt— look forSitemap:directive- Common patterns:
/page-sitemap.xml,/post-sitemap.xml, numbered variants (sitemap2.xml)
2. Extract URLs programmatically
Use browser_console with JS to fetch and parse XML sitemaps — DO NOT rely on reading rendered HTML tables (they truncate):
(async()=>{
const urls=[];
for(const sm of ['page-sitemap.xml','post-sitemap.xml']){
const r=await fetch('https://site.com/'+sm);
const t=await r.text();
const parser=new DOMParser();
const doc=parser.parseFromString(t,'text/xml');
doc.querySelectorAll('loc').forEach(l=>urls.push(l.textContent));
}
return urls;
})()
3. Classify by path segments
Group URLs by first/second path segment to identify sections:
const paths={};
urls.forEach(u=>{
const path=u.replace('https://site.com/','');
const parts=path.split('/').filter(Boolean);
// Group by [product][section] pattern
});
4. Extract navigation structure
From the homepage, pull:
- Primary nav menu items (expand dropdowns)
- Footer links
- Use
document.querySelectorAll('nav .sub-menu li a')andfooter a
5. Produce structured output
Deliver as a table or hierarchy showing:
- Section name | URL prefix | Page count | Notes
Pitfalls
- Don't guess the URL — if the user says "I have a site" without naming it, ask for the URL first. Do not assume based on context (e.g., assuming
acme.combecause the user works at Acme Corp). - Reddit is not sitemap-mappable in the normal sense —
old.reddit.com/robots.txtcurrently disallows/, and Reddit's useful structure is operational surfaces (old.redditHTML,.jsonendpoints, new Reddit SPA verification), not public XML sitemaps. For Reddit, load a Reddit-specific browsing skill (e.g. reddit-browse-and-post) and use it instead of crawling sitemaps. - Sitemap HTML tables truncate — Yoast-generated sitemaps render as HTML tables but cut off after ~100 rows. Always fetch raw XML via
fetch()+ DOMParser in browser_console. - Image/media URLs pollute counts — filter out
/wp-content/uploads/and similar asset paths when counting "pages." - Multiple sitemap files — Yoast commonly splits into numbered variants (
page-sitemap.xml,page-sitemap2.xml). Check the index file to find all sub-sitemaps. - web_extract on XML returns summarized markdown, not raw data — for sitemaps specifically, use browser_console fetch instead.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 91 lines · 28 tokens per session scan A eb190dc602f9
site-mapping is a skill published in the GitHub repository AtlasOmnia/hermes-custom-pack (56 stars, last pushed 24d ago), licensed MIT. It adds 28 tokens to every session and 841 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. It is 100% identical to site-mapping, differing in 0 lines, and is treated as a copy.
Other skills, from other repositories
config
Use when configuring obshare-cli credentials, checking saved settings, testing connectivity, clearing local config, or setting optional Obsidian bridge values used by the V0.2.0 direct-share stack.
obshare-cli
Use when setting up obshare-cli 0.2.0, reviewing available commands, or choosing the right command for config, upload, permission, history, delete, and the plugin-first direct-share workflow.
agent-dreaming-agnostic
Memory-agnostic background consolidation — reviews sessions, scores candidates, promotes durable insights to the active memory backend (built-in MEMORY.md or Holographic). Three-phase (Light/Deep/Condensation/REM). Run via cron or manually.
permission
Use when changing Feishu document visibility, copy permissions, or download permissions for an uploaded document token.
upload
Use when uploading a Markdown note to Feishu, optionally applying public or copy/download permissions, or requesting JSON upload results for automation or the Obsidian plugin direct-share flow.
list
Use when checking obshare-cli upload history, finding document tokens, or reviewing previous upload URLs and permission snapshots.