From local-seo-skills
Manages persistent briefs for local SEO engagements per business/location, automating first-run setup with targeted questions, folder structures for reports/scans/drafts/alerts, and resumption from existing state.
npx claudepluginhub garrettjsmith/localseoskillsThis skill uses the workspace's default tool permissions.
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.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
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-pa