| name | market-scan |
| description | Weekly agentic-AI market signals sweep for the active company's GTM. Scans news, competitor moves, regulatory bodies, and standards activity; rates signals by strength (H / M / L); and produces a dated brief with ready-to-use LinkedIn posts, a campaign idea, a blog brief, a carousel concept, and a technical POC flag. Reads target_markets and language from the colleague's PROFILE, and the competitor / regulator / pillar config from the profile knowledge pack — never hardcodes any geography or company. All sources are free (web search, browser) — no metered calls, no budget impact. This skill should be used when the user says "run my market scan", "weekly market scan", "what's moving in the market this week", "scan for market signals", "what should I be posting about", "catch me up on agentic AI", "content ideas", or on the Monday weekly cadence. |
| metadata | {"version":"0.2.0","phase":"2","capability_tier":"core"} |
Market Scan
Run the weekly agentic-AI market signals sweep for the active company. Produce a dated brief with rated signals and ready-to-use content across five formats. Runs entirely on free tools (web search, browser) — no metered calls, no budget impact, no credentials needed.
Resolve the active profile (the agent provides it; everything loads from profiles/<active>/, never plugin/). Read company brand, handle, and byline from PROFILE.md (brand_name, social_handle, deck_byline) — never hardcode a company name.
When this runs
Weekly on Monday, before the prospecting run — signals can seed outreach angles and hook-matrix updates. Also on demand when the user asks for a market catch-up or content ideas. Two things feed from this output: (1) the prospecting routine's §7.3 hook matrix — apply any new "why now" signals before the week's prospecting run; (2) the content pipeline — posts and briefs ready for the colleague's review.
Step 0 — Read the PROFILE and scan config
Read profiles/<active>/PROFILE.md. Extract:
target_markets — scales which regulators and regional news sources to emphasize; also shapes which competitor moves are most relevant to surface
language — posts and briefs default to English; if set to another language, write all draft content in that language
home_base — used if a signal has a local conference or event tie-in worth noting
brand_name, social_handle, deck_byline, products[] — the active company's brand, posting identity, and product names (used for the own-brand signal queries in 1D and the "what it means for us" framing)
content_pillars — source of truth for the content-ideation pillars
Knowledge resolution (product-aware). Wherever this skill loads a per-product knowledge file —
icp-personas.md or market-scan-config.md — resolve its path with
python -m gtm_core.resolve_knowledge <file> --profile <active> [--product <slug>] and read whatever
path it prints, instead of opening knowledge/<file> directly. The helper returns the product-level
file (products/<slug>/<file>) when present and falls back to the profile-level knowledge/<file>
otherwise. Pass --product when the run is bound to one product (the lead default_product from
PROFILE.md, or a product the operator named); omit it for profile-wide work — a profile that keeps one
shared knowledge pack always falls back to the profile level, so nothing changes for it.
Then read profiles/<active>/knowledge/market-scan-config.md (resolved as above) — the company-specific scan config: the competitor watchlist (1B), the regulatory & standards bodies (1C), the content pillars elaboration, and the own-brand signal queries (1D).
If no active profile is resolved, ask the user to run the setup skill first.
Step 1 — Headline triage
Run web searches across four source categories. Skip any source that clearly has not published in the relevant window.
1A — Market & developer news (last 7 days)
Use the news & developer source list and its query templates from profiles/<active>/knowledge/market-scan-config.md (§1A) — the publications, communities, and developer feeds to sweep for the company's domain, plus the ready-to-run queries. Scale to PROFILE target_markets. Skip any source that clearly has not published in the window.
1B — Competitor moves (last 7 days)
Use the competitor watchlist from profiles/<active>/knowledge/market-scan-config.md. For each competitor, run: "{company}" agent OR agentic OR "agent identity" OR governance — last 7 days. Also check the company's official blog or newsroom directly.
The config file holds the core list (always scan) plus the market-scaled additions to apply based on PROFILE target_markets. Add or drop based on what's active in the colleague's markets.
1C — Regulatory & policy (last 14 days)
Use the regulatory & standards bodies list from profiles/<active>/knowledge/market-scan-config.md. It holds the always-scan bodies (NIST, EU AI Act, W3C/OpenID Foundation) plus the market-scaled regulators to add per PROFILE target_markets. For any market in the colleague's PROFILE not covered by the config, identify and add the relevant AI governance body.
1D — Own-brand signals (last 7 days)
Use the own-brand signal queries from profiles/<active>/knowledge/market-scan-config.md, resolving {brand_name} and product names from PROFILE.md (brand_name, products[]). The query is of the form:
"{brand_name}" OR "{product names from PROFILE.products[]}" — last 7 days
Check the active company's blog/newsroom. Scan LinkedIn and X/Twitter for mentions. If anything published should update the knowledge pack (profiles/<active>/knowledge/company.md or product.md), flag it explicitly.
Rating:
Tag each hit: [news | competitor | regulatory | standards | incident]. Rate strength:
- H — reshapes the market or the active company's narrative; warrants a post or hook update
- M — relevant, worth tracking; may generate content or a note
- L — minor; log only
For every H/M signal also note two things that decide whether it's worth acting on:
- Fault-line — the one arguable angle (a claim to take a side on, or a lazy consensus to
challenge). A signal with no tension is inert. The fault-line is always a belief or status-quo
default, never a named competitor or vendor — complementary-positioning holds.
- Velocity —
rising | peaked | fading. Favour rising signals; a peaked one has already had its
conversation. Skip tragedy, crisis, or toxic-partisan hits — silence is the correct call there.
Discard hits older than 7 days (news/competitor) or 14 days (regulatory/standards).
Step 2 — Deep-read H-signals
For each H-strength signal: fetch the full article or announcement using the browser or web fetch. Extract:
- (a) What happened — 2–3 factual sentences
- (b) What it means for the agentic-AI identity/governance space
- (c) What it means for the active company specifically — competitive threat, narrative validation, or outreach angle
- Verbatim quote if useful for a social post
Step 3 — Competitor landscape snapshot
For each competitor in the 1B list, assess: No change, Moved, or Threat. Record what shipped and a one-line implication. Flag: Has any competitor closed a gap the active company currently owns? Has any competitor shifted positioning in a way that requires a messaging response?
Step 4 — Regulatory pulse
For each 1C signal: note the regulator, the signal, any enforcement deadline, and which ICP account types it creates urgency for (use the ICP personas in profiles/<active>/knowledge/icp-personas.md). If a signal is strong enough to be a "why now" hook in prospecting outreach, write the hook as a ready-to-paste block — note it as a §7.3 hook update to apply before the week's prospecting run.
Step 5 — Content ideation
For each H or M signal, assess which of the five formats fit and generate accordingly. Not every format applies to every signal — pick 2–3 that fit naturally. Anchor each piece to one of the active company's content_pillars (from PROFILE.md / the scan config) so output stays on-narrative.
Format 1 — LinkedIn post (draft it now)
150–250 words. Strong POV. Opens on the signal stated bluntly (not "I've been thinking about…" — the thing that happened). States the insight others are missing or softening. One concrete implication for builders or enterprise buyers. Closes with a question or a provocative statement that invites engagement without asking "what do you think?".
Voice rules: same as profiles/<active>/knowledge/voice.md (and the condensed voice_style in PROFILE.md) — direct, signal-first, no fluff — but posts can be slightly more opinionated than outreach. No listicles.
Draft it now; it's 150 words, short enough to complete during the scan. Aim for 2–3 posts per week from H-signals. If PROFILE language is not English, write posts in the colleague's language.
Format 2 — Campaign idea
A themed 3-post series (or 3-email newsletter issues) when 2–3 signals cluster around a shared theme. Output: campaign name, 3-post outline (one paragraph each), suggested Mon/Wed/Fri cadence and week. Flag as "Idea — needs colleague approval before drafting posts."
Format 3 — Blog post brief
800–1,200 word post. Not a news recap — an argument, a framework, or a prediction grounded in the signal. Output: 3 title options, 2-sentence angle, unique claim (what the active company is asserting that others aren't saying), 5–7 bullet outline, 2–3 proof points to cite. Flag as "Brief — full draft on request."
Format 4 — Carousel / visual concept
5–8 frame concept for LinkedIn carousel or conference slide. Data-driven where possible. Output: carousel title, frame-by-frame outline (one bullet per frame describing what's shown), data sources to pull, production note (pptx skill / Canva / image generation). Flag as "Concept — needs visual brief before production."
Format 5 — Technical POC post
Highest-credibility format: business context + working code snippet + compliance/policy framing. Use only for H-signals where the technical angle is specifically relevant to developers building on MCP/A2A. Output: title, 1-sentence business hook, technical angle (what code or architecture to demonstrate), compliance tie-in (1 sentence), estimated build time. Flag as "Sprint item — not this week."
Step 6 — Write the output file
Save to the working folder as market-signals/YYYY-WW-signals.md (create the folder if it doesn't exist). Use the output template in this skill's references/scan-routine.md. If last week's file exists, check its "Content pipeline" section — carry forward any draft-ready post that hasn't been published or any idea > 0 days old and still timely. Park stale ideas (> 30 days without action) rather than carrying them forward indefinitely.
After saving, report in chat:
- Signal count: N H / N M / N L this week
- Draft-ready LinkedIn posts: N
- §7.3 hook updates to apply before the prospecting run (list them as ready-to-paste blocks)
- Any product/knowledge pack discrepancies flagged from 1D
Hygiene
Every run: Check market-signals/ — if last week's draft-ready post hasn't been published, carry it or note it as parked. Don't let the queue pile up silently.
Monthly: Surface patterns from the last 4 signals files. Are there themes in what's driving H-signal density? Feed these into ICP messaging and the prospecting hook matrix.
Quarterly: Flag if the competitor list (1B) or regulatory source list (1C) needs updating — new entrants, acquisitions, new governance bodies.
Guardrails
- Free tools only: web search and browser. No Firecrawl, no metered API calls. Never ask for or record credentials.
- Never hardcode geography, competitors, or regulators — always derive from PROFILE
target_markets.
- Never auto-publish, auto-send, or auto-post any content. All output is review-staged for the colleague.
- If a §7.3 hook update is flagged, produce it as a ready-to-paste block — do not modify the prospecting routine file directly without asking.
- The profile knowledge pack (
profiles/<active>/knowledge/) and the scan config (profiles/<active>/knowledge/market-scan-config.md) are read-only during a scan — flag discrepancies, do not edit.