From local-seo-skills
Manages persistent briefs for local SEO projects per business/location, automating first-run setup with targeted questions and folder creation for reports, scans, audits, and drafts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/local-seo-skills:briefThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Briefs are persistent work state for local SEO engagements. One brief per location. Brand rollup for multi-location work. Scheduled task outputs extend the brief over time, building a compounding history of every scan, audit, report, and finding for each business.
Briefs are persistent work state for local SEO engagements. One brief per location. Brand rollup for multi-location work. Scheduled task outputs extend the brief over time, building a compounding history of every scan, audit, report, and finding for each business.
briefs/
{brand}/
_brand.brief.md ← config + rollup across all locations
reports/ ← brand-level rollup reports
{location}/
location.brief.md ← always current, always lean
reports/ ← weekly, monthly, QBR reports
scans/ ← geogrid scans, citation audits, page audits
drafts/ ← GBP posts, review responses awaiting approval
alerts/ ← monitoring alerts
This is the most important section. When a user mentions a specific business and no brief exists, do not proceed with their request yet. Run setup first, then circle back to what they asked for.
Before doing any work for a specific business, check for an existing brief:
briefs/{brand-slug}/{location-slug}/location.brief.mdTell the user:
"I don't have a brief for [Business Name] yet. Let me grab a few details so I can track everything going forward. This takes about 2 minutes."
Then ask these questions one at a time, not all at once:
Q1: "What's the primary keyword you want to rank for? (e.g. 'plumber buffalo ny')"
Q2: "What's the website URL?"
Q3: "How far does the service area extend? (e.g. 5 miles, 20 miles)"
Q4: "Are you managing this for a client, or is this your own business?"
Q5: "Do you want alerts and reports sent to a Slack channel?" (optional, skip if they say no)
That's it. Don't ask for more than these unless something is genuinely ambiguous.
Create brief folder structure:
briefs/{brand-slug}/{location-slug}/location.brief.mdbriefs/{brand-slug}/{location-slug}/reports/briefs/{brand-slug}/{location-slug}/scans/briefs/{brand-slug}/{location-slug}/drafts/briefs/{brand-slug}/{location-slug}/alerts/briefs/{brand-slug}/_brand.brief.mdPopulate Identity section from answers and any context already in the conversation
Configure _brand.brief.md approval block from Q4/Q5 answers
Run initial audit automatically, don't ask permission:
local_auditbusiness_profile + profile_healthgeogrid_scan (7x7, primary keyword, stated radius)citation_auditreview_velocity + google_reviewscompetitor_gapPopulate Findings from audit results
Set Next Action to the single highest-priority fix
Offer scheduled task setup:
"Brief created and initial audit done. I found [X critical, Y important issues]. [Top finding in one sentence].
Want me to set up automated monitoring? I can configure weekly ranking scans, review monitoring, GBP change detection, and monthly reports to run automatically."
If yes, go through task list from
tasks/README.md, recommend based on audit findings, configure via/scheduleIf no, proceed with original request
Then return to what the user originally asked for:
"Now let me [original request]..."
If no filesystem access: run the same conversation and audit, then output the brief as formatted text at the end of setup:
"Here's your brief. Add this to your Project knowledge base so I'll have it next time:" [brief content]
Outside of first run, create a brief mid-session if:
Do not create briefs for:
Claude Code / Cowork:
briefs/{brand-slug}/{location-slug}/location.brief.md
Claude Project: Upload brief file to Project knowledge base after creation. Tell user to do this if they haven't.
At end of every session:
When a scheduled task writes an output file:
[DATE] | {task type} → {one-line finding} → see {output path}_brand.brief.md Locations table row for this locationThe brief stays lean. Detail lives in the output files. The brief is the index.
When a user returns to a business:
Do not re-run tools with results in scans/ unless user asks or data is >30 days old.
After months of scheduled tasks writing to a brief, the history is queryable:
Never delete output files. Archive if the folder gets unwieldy. The history is the value.
During every session, manual or scheduled, watch for:
When observed, surface it explicitly:
"I noticed [X] during this session. This pattern isn't in the skill files. Want me to add it to
meta/lessons.mdfor review?"
Wait for confirmation. Then write the lesson.
After each location session:
_brand.brief.md Locations tableLowercase, hyphens, obvious:
keystone-insurance, mikes-plumbingbuffalo, downtown-chicago, pittsburgh-panpx claudepluginhub garrettjsmith/localseoskills --plugin local-seo-skillsGuides local SEO strategy including Google Business Profile optimization, NAP consistency audits, local pack rankings, citation building, and location page optimization.
Generates professional local SEO client deliverables: audit reports, proposals, scopes of work, competitive analyses, onboarding documents, and market intelligence reports. Useful for SEO practitioners creating client-facing docs.
First-run alias that redirects new Agentic SEO users to the canonical agentic-seo and project-init workflow without duplicating process rules.