geo-client
Skill9 starsChanged 7 months agoMITView on GitHub
Per-site folder manager. Creates and maintains a folder per audited domain under `site-client/<slug>/` to group all artefacts (audits, PDFs, evolution reports, assets) of a same site together. Auto-generates an INDEX.md dashboard. Use when starting work on a new domain or to navigate existing audits.
In this repository7 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- geoSkill
- geo-auditSkill
- geo-content-healthSkill
- geo-crawlersSkill
- geo-rrfSkill
- geo-schemaSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 0 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 50
Keep subdomains (blog.example.com stays distinct from example.com)
- Very specific: line 58
Always use scripts/client_paths.py slug <url> to compute the slug — never do it manually.
- Very specific: line 84
If the symlinked path doesn't resolve, fall back to invoking the script from the repo root: python3 -m scripts.client_paths (run with the …
- Very specific: line 152
When another skill updates a site (e.g.
- Very specific: line 154
Update geo_score, last_audit_date, increment audit_count, set updated_at
- Very specific: line 156
Run client_paths.py index to refresh the dashboard
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
GEO Per-Site Folder Manager
Purpose
Organise all GEO audit artefacts (audits, PDFs, delta reports, generated assets) by audited site, not by file type. Each domain audited has a dedicated folder under site-client/.
This skill is the storage backbone used by /geo audit, /geo report, /geo report-pdf, /geo compare — they all route their output into the relevant site folder owned by this skill. It is a pure organisational layer with no CRM or commercial responsibilities.
Folder Convention
The client folder lives inside the repo, at <repo>/site-client/ — one level above skills/, agents/, scripts/. It's gitignored by default so client data stays local.
<repo>/site-client/
├── INDEX.md ← auto-generated dashboard
└── <slug>/ ← one folder per audited site
├── info.json ← minimal metadata (name, last score, audit count)
├── audits/
│ ├── YYYY-MM-DD-audit.md ← /geo audit output
│ ├── YYYY-MM-DD-audit.pdf ← /geo report-pdf output
│ ├── YYYY-MM-DD-data.json ← intermediate data for PDF generation
│ └── YYYY-MM-DD-report.md ← /geo report synthesis
├── reports/
│ └── YYYY-MM-delta.md ← /geo compare output (audit deltas)
└── assets/ ← screenshots, generated schema JSON, notesResolution: scripts/client_paths.py computes the absolute path via Path(__file__).resolve().parent.parent / "site-client" — so it works regardless of CWD or whether the skill was invoked via symlink. Override with env var SITE_CLIENT_ROOT if you need a different location.
Slug rules
A "slug" is a normalized domain used as folder name:
- Strip
http:///https:// - Strip leading
www. - Keep subdomains (
blog.example.comstays distinct fromexample.com) - Lowercase, drop path/query/fragment
Examples:
https://www.slidor.fr/→slidor.frExample.COM/path?q=1→example.comblog.example.co.uk→blog.example.co.uk
Always use scripts/client_paths.py slug <url> to compute the slug — never do it manually.
Commands
| Command | What It Does |
/geo client new <domain> [--name "Company"] | Create client folder + info.json |
/geo client list | Tabular view of all clients |
/geo client show <domain> | Client detail + artifact tree |
/geo client open <domain> | Open client folder in Finder |
/geo client index | Regenerate site-client/INDEX.md |
/geo client paths <url> | Print shell paths for a client (used by other skills) |
Orchestration
/geo client new <domain> [--name "Company"]
python3 ~/.claude/skills/geo/scripts/client_paths.py init "<domain>" --name "<Company>"
python3 ~/.claude/skills/geo/scripts/client_paths.py indexIf the symlinked path doesn't resolve, fall back to invoking the script from the repo root:
python3 -m scripts.client_paths (run with the repo as the current working directory).
Confirm to user:
✓ Client folder created: site-client/<slug>/
info.json, audits/, reports/, assets/ ready
Next: /geo audit https://<domain>/geo client list
python3 <path>/client_paths.py list/geo client show <domain>
python3 <path>/client_paths.py show "<domain>"/geo client open <domain>
eval "$(python3 ~/.claude/skills/geo/scripts/client_paths.py paths '<domain>')"
open "$CLIENT_DIR"/geo client index
python3 <path>/client_paths.py index/geo client paths <url> (internal helper)
Used by /geo audit, /geo report-pdf, etc. to get all output paths at once. Returns shell-evalable KEY=VALUE lines:
eval "$(python3 <path>/client_paths.py paths '<url>')"
# Now $CLIENT_DIR, $AUDIT_MD, $AUDIT_PDF, $PROPOSAL_MD, $COMPARE_MD, $INFO_JSON are setThe folder structure is auto-created by this call — no need to run /geo client new first.
info.json schema (minimal — audit metadata only)
{
"domain": "slidor.fr",
"name": "Slidor",
"url": "https://www.slidor.fr/",
"country": "FR",
"language": "fr",
"geo_score": null,
"last_audit_date": null,
"audit_count": 0,
"created_at": "2026-04-23",
"updated_at": "2026-04-23",
"tags": []
}The schema is intentionally minimal: domain, display name, URL, locale, last score, and free-form tags for the user to organise sites. No CRM fields (no status, monthly value, contacts, contract dates) — those belong to a separate sales tool, not to a GEO audit toolkit.
When another skill updates a site (e.g. /geo audit finishes), it should:
- Read
info.json - Update
geo_score,last_audit_date, incrementaudit_count, setupdated_at - Write
info.jsonback - Run
client_paths.py indexto refresh the dashboard
Integration points
/geo audit <url>→ callsclient_paths.py paths <url>→ writes to$AUDIT_MD, updatesinfo.json.geo_score, regenerates INDEX/geo report <url>→ writes to$REPORT_MD(synthesis)/geo report-pdf <url>→ writes to$AUDIT_PDFin same folder/geo compare <domain>→ writes to$COMPARE_MDinreports/
Notes
site-client/is visible in Finder (no dot prefix) — intentional, to let the user browse artifacts directly.- Legacy path
~/.geo-prospects/from upstream is deprecated and removed. All paths route through<repo>/site-client/<slug>/. info.jsonis the source of truth per audited site. No central JSON DB (scansite-client/*/info.jsonon demand).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

