Manages persistent work state (briefs) for local SEO engagements. Automatically load this skill when starting work on a specific business or location, when a user says "resume," "continue," "pick up w…
Library skill — the default version is maintained in GitHub; edits you make live in your own clone.
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:
- Claude Code: look for briefs/{brand-slug}/{location-slug}/location.brief.md
- Claude Project: check Project knowledge base for a brief file for this business
- If found: go to Resuming from a Brief
- If not found: go to First Run Setup
Tell 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?" - If client, ask: "What's the client's email for reports?" - If own business, skip
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.md
- briefs/{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.md
Populate 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:
- LocalSEOData local_audit
- LocalSEOData business_profile + profile_health
- LocalSEOData geogrid_scan (7x7, primary keyword, stated radius)
- LocalSEOData citation_audit
- LocalSEOData review_velocity + google_reviews
- LocalSEOData competitor_gap
Populate 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: - A tool call is about to be made for a business with no brief - User explicitly asks to create one
Do not create briefs for: - General local SEO questions with no specific business - Tool or skill explanations - Single-question answers with no live data
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:
- Update that location's row in _brand.brief.md Locations table
- Add to Brand-Level Notes only if pattern appears in 3+ locations
Lowercase, hyphens, obvious:
- Brand: keystone-insurance, mikes-plumbing
- Location: buffalo, downtown-chicago, pittsburgh-pa