peec-report — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited peec-report (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Close the loop. Three questions per cycle, answered in ≤400 words:
Output is a short narrative + actions, not a dashboard. Fifteen charts don't get read. 400 words do.
project_id — Peec projectreporting_window — weekly | monthly | quarterlybaseline_date — default 28 / 90 / 180 days backinclude_clusters — auto-detected via zone:* tags if peec-cluster has run<project>/growth_loop/YYYY-MM-DD_report.md (schema below)learnings.json with winners / losers / surprises / next_actions / stop_doing — consumed by the next peec-cluster and peec-outreach runs as priorspeec-cluster runDo not use when:
Per _shared/SETUP_STATE.md, this skill refuses to run without a completed setup:
Read <project>/growth_loop/setup_state.json
If missing OR completed_at missing OR phases_completed lacks
{competitors, prompts, topics, tags}:
STOP. Output:
"No Peec setup state found at <project>/growth_loop/setup_state.json.
Run /peec-setup first."
If completed_at older than 90 days: WARN once, continue.
Use peec_project_id from state — don't re-resolve via list_projects.# Overall brand visibility trend
mcp__peec-ai__get_brand_report(
project_id, start_date=baseline, end_date=now,
dimensions=["date"],
filters=[{field: "brand_id", operator: "in", values: [own_brand_id]}]
)
# Per prompt (top-N by weight)
mcp__peec-ai__get_brand_report(
project_id, start_date=baseline, end_date=now,
dimensions=["prompt_id", "date"],
filters=[{field: "brand_id", operator: "in", values: [own_brand_id]}]
)
# Per zone (if zone:* tags exist)
for each zone_tag:
mcp__peec-ai__get_brand_report(
project_id, start_date=baseline, end_date=now,
dimensions=["tag_id", "date"],
filters=[{field: "tag_id", values: [zone_tag_id]}]
)Per bucket (prompt or zone) compute:
visibility_t0 (start of window)visibility_t1 (end of window)delta = t1 − t0trend = linear-regression slope across the window# New content
git log --since=<baseline> --author=<user> -- "Content Automation/blog/"
# or: filesystem scan for blog/YYYY-MM-DD_*/
# Outreach
Read: <project>/outreach/*_outreach_log.md
# all pitches with status != 'queued' in the window
# Taxonomy changes in Peec
mcp__peec-ai__list_prompts + list_brands + list_tags
# diff against a snapshot from the start of the window (if one exists)Produce: one list of investments with date | type (content|outreach|taxonomy) | target (prompt_id or url) | description.
publish_<slug>.py (RANK_MATH_FOCUS)list_prompts via embedding or string-containstarget_url appears in get_url_reportmcp__peec-ai__get_url_report(filters=[{url in [target_url]}])attribution_score =
sum(affected_prompts[p].delta for p in matched_prompts)
- baseline_driftbaseline_drift = median delta of non-affected prompts in the same window. This isolates the intervention effect from general drift.
Winners (high attribution):
Losers (negative or zero attribution despite investment):
Surprises (positive delta without a direct investment):
Claude synthesizes a narrative ≤400 words using the schema below.
Save to <project>/growth_loop/YYYY-MM-DD_learnings.json — used by the next runs of peec-cluster and peec-outreach as priors.
# Growth loop — <project> (<window>)
## Headline
<One sentence: what's the most important insight of this period?>
## What moved
- Overall visibility: X% → Y% (<N pp>)
- Strongest zone: <name> (+Z%)
- Weakest zone: <name> (flat or −)
- Top-3 single-prompt lifts: <list>
## What actually worked
<2–3 sentences. Not "the content plan" — but: "Article X became a citation in 11 of 15
target prompts; the retainer pitch at evergreen.media produced Y citations within 10
days; the Shopify zone grew organically without new content there — likely spillover
from zone Z.">
## What did not work
<1–2 sentences: which investment had zero effect, and the most plausible reason.>
## DO NOW (prioritized, max 3)
1. <concrete action with deadline>
2. <concrete action>
3. <concrete action>
## STOP DOING
- <pattern that was identified as time-waste>{
"period": {"start": "...", "end": "...", "window": "weekly"},
"overall_visibility_delta": 0.04,
"winners": {
"content_types": [{"type": "HOW_TO_GUIDE", "avg_lift": 0.08, "n": 2}],
"outreach_domains": [{"domain": "evergreen.media", "citations_gained": 5}],
"zones": [{"zone_tag": "retainer-decision", "lift": 0.12}]
},
"losers": {
"content_types": [],
"outreach_domains": [{"domain": "<...>", "response_rate": 0.0}]
},
"surprises": [],
"next_actions": ["..."],
"stop_doing": ["..."]
}| Step | Tool |
|---|---|
| Overall visibility trend | mcp__peec-ai__get_brand_report(dimensions=["date"]) |
| Per prompt | mcp__peec-ai__get_brand_report(dimensions=["prompt_id", "date"]) |
| Per zone (if tagged) | mcp__peec-ai__get_brand_report(dimensions=["tag_id", "date"]) |
| Citation source check | mcp__peec-ai__get_url_report(filters: url in [...]) |
| Content log | git log on content-automation path |
| Outreach log | local <project>/outreach/*.md |
A growth report is only complete when:
learnings.json persisted — without it, no loop~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.