Install
$ agentstack add skill-antonioblago-peec-ai-skills-peec-content-intel ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Peec Content Intel
Role
For one Peec prompt that the brand is losing, produce one publish-ready content brief: sub-queries, verbatim buyer pains, competitor breakdown, outline, focus keywords, and outreach targets.
Input
project_id— Peec project (read fromsetup_state.jsonper pre-flight; do not re-resolve)prompt_id— the target prompt (must have ≥24h of data)- optional
date_range— default last 28 days language— read fromsetup_state.json(prompt_language); user can override per-run, but never default toensilentlytarget_country— read fromsetup_state.json; drives forum source picks (DE→reddit/r/de+gutefrage+t3n, AT→reddit+derstandard, US→reddit+quora, CH→reddit/r/de+r/fr) and SERP/GSC market filterspage_type— required. Must be one of the values insetup_state.page_type_taxonomy. If the user doesn't pass it, the skill infers the best fit from the funnel stage of the target prompt + competitor top-url classifications, then ASKS the user to confirm ("Suggested pagetype:landing_page(Decision-stage, competitors use PRODUCTPAGE). OK? [y/n/override]"). Never guess silently — a brief with the wrong page_type is a wasted publish cycle.business_type— read fromsetup_state.json. Used to validatepage_typeselection against the allowed taxonomy matrix.audience— read fromsetup_state.json.audience.primaryandaudience.pain_pointsfeed the brief's "Why this page wins" + "Voice / tonality" sections directly; do not restate them in the brief prose, USE them.
Output
One markdown brief per prompt, saved at briefs/_/brief.md, plus the raw data next to it (competitor-urls.json, forum-pains.json, scoring.json). No dashboards.
Every brief starts with a front-matter block that downstream skills (peec-report, peec-learn) consume for attribution:
---
brief_id: _
prompt_id: pr_xxxxxx
business_type: b2b-service
page_type: landing_page # MUST be in setup_state.page_type_taxonomy
target_url: /seo-retainer # planned publish path
funnel_stage: Decision # from the prompt's topic
audience:
primary: "Shop-Owner DACH, 3-20 MA, Shopify"
pain_hook: "3 Agenturen gewechselt, keine Ergebnisse"
success_metric_4w:
prompt_visibility: "0% → ≥15%"
zone_visibility: "4% → ≥20%"
---
A brief without this front-matter block is invalid and will be rejected by peec-report.
When to use
- "Which content wins Peec prompt X?"
- "Analyze the sources competitors get cited for on prompt X"
- "What's the content gap between me and competitor.de?"
- Runs after
peec-setup— the project must exist with structured prompts.
Do not use when:
- Prompt has /growthloop/setupstate.json
If missing OR completedat missing OR phasescompleted lacks {competitors, prompts, topics, tags}: STOP. Output: "No Peec setup state found at /growthloop/setupstate.json. Run /peec-setup first." If completedat older than 90 days: WARN once, continue. Use peecprojectid from state — don't re-resolve via listprojects.
### 1. Find the gap URLs
mcp__peec-ai__getbrandreport( projectid, startdate, enddate, dimensions=["promptid"], filters=[{field: "promptid", operator: "in", values: [promptid]}] ) mcp__peec-ai__geturlreport( projectid, startdate, enddate, dimensions=["promptid"], filters=[ {field: "promptid", operator: "in", values: [promptid]}, {field: "gap", operator: "gt", value: 0} ], limit=25 )
Output: up to 25 URLs, sorted by retrieval frequency, each with a `classification` (LISTICLE / ARTICLE / COMPARISON / HOW_TO_GUIDE / PROFILE / DISCUSSION).
Interpretation:
- **LISTICLE / COMPARISON** → outreach targets (get included)
- **HOW_TO_GUIDE / ARTICLE** → own-content targets (write and publish)
- **PROFILE / DISCUSSION (reddit, youtube)** → community targets (participate)
### 2. Query Fan-Out
**Primary path — `mcp__visiblyai__query_fanout`** (Visibly MCP ≥ v0.6.0, ~3–5 credits):
mcp__visiblyai__queryfanout( url="https:///", keyword="", datasource="dataforseo", # or "gsc" / "both" gscproperty=null, # required if datasource includes gsc language="de" # or "en" )
Returns: `fanout_queries[]`, `coverage_score` (0–1), `covered_count` / `total_count`, `gaps[]` (sub-queries not addressed on the URL — this is the content backlog), `coverage_details[]`.
Fire once per top gap URL from Phase 1. Replaces sub-query generation + crawling + semantic match in one call.
**Fallback — inline heuristic** (if Visibly MCP unavailable or credits tight):
Generate 6 sub-queries along fixed intent axes:
1. Synonym (same intent, different wording)
2. Decision ("what does it cost", "when to switch")
3. Comparison ("X vs Y")
4. Problem ("why doesn't X work")
5. Long-tail (narrow niche)
6. Forum / community (informal phrasing)
Coverage matching is then skipped — flag that explicitly in the brief.
### 3. Mine forum pain per sub-query
**Reddit** (tested 2026-04-19): `WebFetch` against `reddit.com` is blocked. The workaround that works: Peec has already scraped Reddit threads, so use
mcp__peec-ai__geturlcontent(project_id, url="https://reddit.com/r//comments//...")
Procedure:
1. From Phase 1, list all `classification=DISCUSSION` + `domain=reddit.com` URLs
2. For the top 3 by retrieval, call `get_url_content`
3. Extract: verbatim pain quotes, tool mentions, competitor mentions, sentiment
**Gutefrage / t3n / OMR**:
WebSearch("site:gutefrage.net ") WebSearch("site:t3n.de/forum ") WebSearch("site:omr.com ") WebFetch(url, "Extract the original question verbatim, plus top 3 answers. Note frustrations, decision triggers, competitor/brand mentions.")
Gutefrage blocks WebFetch with 403. Fallback: Google search snippets + archive.org.
Per sub-query, aggregate: 3–5 verbatim pain quotes, competitor mentions with sentiment, top 2–3 thread URLs for later engagement.
### 4. Score competitor URLs (Visibly deep-dive)
Per top gap URL from Phase 1:
mcp__visiblyai__getbacklinks(domain="", limit=10, location="Germany") mcp_visiblyai__onpageanalysis(url="", keyword="") # 15 credits, top 3 only mcp_peec-ai__geturlcontent(projectid, url="") # for outline mining mcp_visiblyai__get_keywords(domain="", limit=200, location="Germany")
**Backlinks caution**: `get_backlinks` can return 260 KB+ (2,836 backlinks for noahlutz.de). Always pass `limit: 10-20` or delegate to a subagent. For headline metrics (`total_count`, `rank`, `domain_from_rank`), `limit=1` is enough.
DR interpretation:
- **DR 50** → hard to beat head-on; flank with long-tail instead
### 5. Opportunity scoring
score = (retrievalfreq × gapsize × forumpaindensity) / (domainDR × (1 + contentquality_diff))
Tiers:
- **Tier 1 (score >50)** — attack now: write + outreach
- **Tier 2 (20–50)** — 3–6 month horizon
- **Tier 3 (_/brief.md`. Schema below.
---
## Brief schema
```markdown
## Content Brief:
### Goal
Win Peec prompt: ""
Funnel stage: Awareness | Consideration | Decision | Retention
Current own visibility: X% → Target: Y% in 90 days
### Buyer language (forum pain, verbatim)
- "" (source: r/selbststaendig, 2026-03)
- "" (source: Gutefrage)
- ""
### Sub-queries (Query Fan-Out)
1.
2.
...
### Competitor landscape
| URL | Class | Retrieval | DR | Opp score | Note |
|---|---|---|---|---|---|
| evergreen.media/ki-seo | ARTICLE | 22% | 47 | 35 | high DR, pitch as contributor |
| noahlutz.de/ki-seo | LISTICLE | 9% | 22 | 68 | direct attack, similar DR |
### Recommended format
— based on dominant URL class
### Title (draft, ≤60 chars)
### Meta description (≤155 chars)
### Outline (H2 / H3)
1.
2.
3.
4.
5.
6.
### Focus + secondary keywords
- Focus: (volume, intent)
- Secondary: , , (from keyword gap)
### Backlink strategy
- : editorial pitch (template)
- : join thread (URL)
- : contribute to existing article
### KPI
- Prompt visibility after 90 days: Y%
- GSC position for focus keyword: top 10
- ≥3 backlinks from DR >30
Quick reference
| Step | Tool | |---|---| | Gap URLs | mcp__peec-ai__get_url_report(filters: gap>0) | | AI response + sources | mcp__peec-ai__list_chats → get_chat | | Scraped competitor content | mcp__peec-ai__get_url_content | | Query Fan-Out + coverage | mcp__visiblyai__query_fanout (≥v0.6.0) | | Backlink profile | mcp__visiblyai__get_backlinks | | 24-point onpage audit | mcp__visiblyai__onpage_analysis (15 cr) | | Competitor keywords | mcp__visiblyai__get_keywords | | Intent classification | mcp__visiblyai__classify_keywords | | Full-site crawl | mcp__visiblyai__crawl_website (15–60 cr) |
Credit budget (Visibly)
Per prompt analysis: ~45–75 credits.
- 1×
get_backlinksper top-3 competitor domain (cheap, often ~0) - 3×
onpage_analysis→ 45 - 1×
get_keywordsper top-2 competitor (cheap)
Batch of 10 prompts: ~500–750 credits.
Guardrails (do not do these)
- Do not analyze prompts with <24h of Peec history — phase 1 returns empty
- Do not
WebFetchGutefrage (403) — use WebSearch snippets instead - Do not run
onpage_analysison more than the top-3 URLs — credit drain - Do not mix funnel stages in the fan-out — a MOFU parent must not pull in TOFU sub-queries, or the brief dilutes
- Do not judge a competitor by DR alone — weak content at high DR is still attackable; read the actual content via
get_url_content - Do not run this skill before
peec-setup— depends on structured prompts/topics/tags
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: AntonioBlago
- Source: AntonioBlago/peec-ai-skills
- License: MIT
- Homepage: https://antonioblago.de
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.