IMPACT by PressTitan Get the pack
IMPACT by PressTitan · docs · v1.4

The manual.
One run, fully documented.

Get started in ten minutes, then read the operator book.

Getting started.Six steps, ten minutes.

1

Unzip

Copy every folder that contains SKILL.md into Grok ~/.grok/skills/ or Claude ~/.claude/skills/. Not only impact/ — commands are separate folders.

2

Confirm Python

python3 ~/.grok/skills/impact/scripts/expected_ctr.py 3

JSON comes back. If Python is missing, chat still runs; probes and scoring will not.

3

Connect mcp-gsc (optional)

Live Search Console via mcp-gsc — Google OAuth or a service account. IMPACT never stores your Google secrets.

4

Open a new thread

Old threads will not see new folders. Say:

Run IMPACT on example.com
5

Feed it real data

First run creates the vault. If MCP is off, paste a GSC Pages CSV into imports/.

6

You still ship

IMPACT writes tickets, maps, and drafts. You publish, deploy, and send mail.

The operator book.Manual · v1.4.

Sections 1–14
01

What you have

IMPACT is a skill pack for Grok and Claude. You copy folders into the client's skills directory, name a domain, and the model follows the skills: measure, rank, do one thing, write a ticket.

It will not log into Google by itself. Live Search Console numbers come from mcp-gsc, or from a CSV you drop in the vault. Missing data is labeled unknown — required, not optional. It will not publish the site or send outreach.

02

Install

Unzip IMPACT-by-PressTitan.zip. Copy every folder that contains SKILL.md:

Grok~/.grok/skills/
Claude~/.claude/skills/

Confirm Python 3.10+ — expected_ctr.py 3 should return JSON.

Optional, live GSC: follow github.com/AminForou/mcp-gsc, use OAuth or a service account, enable the Search Console API, add the MCP server to your client. Open a new thread after install.

03

First run

Say Run IMPACT on example.com. Then:

  1. A vault is created if missing.
  2. Public pages are probed — home plus a few templates.
  3. Candidates are scored.
  4. One action is taken, or the run records "nothing beats the bar."
  5. A ticket and a run record are written.

Name the domain every new thread. State is per domain.

04

The vault

One folder per client. The action log, KPIs, and memory live here. Locations in order: config.json → vault_path, <site-repo>/.seo/, artifacts/impact/<domain-slug>/.

python3 $S/init_state.py --dir .seo --domain example.com
python3 $S/init_vault.py --dir .seo --name "Client Name"
config.jsoncms, watchlist, client_name
memory.mddated facts only
intake.mdfill via intake, never invented
kpis.mdtargets + last-measured
brand.mdvoice, offers
truth-ledger.mdsourced claims
radar.mddemand seeds — not PR angles
content-ledger.mdURLs seen or shipped
link-inventory.mdmoney pages, internal targets
action-log.mdone row per execute
human-queue.mdasks only a person can do
watchlist.txt5–15 money URLs
imports/GSC / crawl CSVs
snapshots/probe history
runs/dated records + tickets
pr/angles + coverage bank

Say open the vault to print path, KPIs, last memory lines, and the queue.

05

What to say

Run IMPACT on example.comimpact → full loop, one action, ticket
IMPACT measure on example.comvitals only
IMPACT fix https://…repair / claim
IMPACT write for example.comone editorial URL
IMPACT sprint — alternativesone programmatic URL
IMPACT tool — calculatorspec / MVP
IMPACT aeo on https://…citable passage
IMPACT tech on example.comone technical defect
IMPACT censusprune / merge / refresh
IMPACT offpage for this URLbrief, not mail
IMPACT distribute https://…two channels
IMPACT setupwhat is missing
Open the vaultmemory / intake / KPIs
IMPACT reportticket or weekly wrap
IMPACT portfolioone line per vault
Audit example.comreport, not a loop
Analyze https://…one URL deep

seo-ops is the old name — it loads impact. Speak as IMPACT.

06

Scoring

score = (impact × confidence × learn) / cost

Clears the bar when score ≥ 2.0 and confidence ≥ 0.35.

Impact: 5 blocked money URL or false claim · 4 snippet or template speed on a converting URL · 3 refresh with demand · 2 new page for a missing winnable intent · 1 hygiene · 0 speculative post.

Cost is hours, minimum 0.25 — field name cost. Learn starts at 1.0 per lane and moves toward 0.4–1.4 after four scored outcomes. Creation loses to repair / refresh / correct when the protected score is at least 85% of the creation score.

python3 $S/score_actions.py candidates.json
07

Search Console

Live (MCP): a measure pass calls get_capabilities, list_properties, get_search_analytics (28 days, pages and queries), compare_search_periods, and inspect watchlist URLs. Save a slice under imports/gsc-mcp-YYYY-MM-DD.json. Do not add/delete properties or submit sitemaps unless you asked.

Offline (CSV): export Pages (and Queries), put them in imports/.

python3 $S/gsc_ingest.py imports/pages.csv --prior imports/pages-last-month.csv

You get totals, striking distance (position 4–15), low CTR vs expected-at-position, and decay when a prior file exists. If neither MCP nor CSV exists: clicks = unknown. Do not invent position 8.

08

Daily ticket

Every default run closes in this shape:

Decision:
Evidence:
Patch:
Verify:
Client ask:
KPI it should move:

IMPACT report weekly: what we did, what moved, what did not, queue, next ticket. Movement stays blank unless GSC exists.

09

Scripts

All under impact/scripts/ — vault, measure, GSC/claims/score, and record. The full 24-tool list with commands: script reference.

python3 $S/health_probe.py https://example.com --site-checks --timeout 20
python3 $S/watchlist_probe.py --dir .seo
python3 $S/claim_check.py page.html --dir .seo
python3 $S/indexnow_ping.py --host example.com --key test --url https://example.com/ --dry-run

HTTP 404 on robots/sitemaps is JSON, not a crash.

10

Diagnostics vs commands

Diagnostics print readings: seo-audit, seo-page, seo-technical, seo-content, seo-schema, seo-geo, seo-local, seo-plan, seo-pr, seo-aeo-teardown, seo-content-brief.

After a report, say run IMPACT to get the next action. Do not treat a 40-row audit as today's execute list. Companions load when present; voice gets generic if client-context is empty.

11

CMS patches

If config.cms is webflow, wordpress, hubspot, or next — write the change in that tool's fields. If unknown, ship HTML <title>, meta, and a 301 row.

12

Limits

  • No invented rankings, referring domains, or field Core Web Vitals.
  • No guaranteed answer-engine citation.
  • No paid links. No production publish.
  • IndexNow POST only with a real key and a clear ask.
  • Radar is demand; pr/angles.md is stories. Do not merge them.
13

When it is broken

Script traceback: run --help, then against https://example.com. Still tracebacks? That is a script bug.

Model wrote a new blog while /pricing 404s — the run ignored scoring. Reject it. Point at the vault log.

Two vaults for one client: run upgrade_state.py and delete the empty one.

GSC numbers look wrong: check whether CTR in the CSV carries a % sign. gsc_ingest.py handles both.

14

File map in the zip

impact/                 operator, scripts, references, templates
impact-*/               command + report skills
seo-ops/                alias
seo*/                   diagnostic family
humanizer/ client-context/ …   companions
README.md  INSTALL.txt  docs/
IMPACT-user-manual.md   this file, at zip root as shipped

Start with section 3. Come back to section 7 when you have a GSC file.