From cw
Use when fetching articles from help.imagineedgenuity.com (EdgeEX or heritage Edgenuity) to cite product-side terminology, behavior, or permissions. The site is Cloudflare-protected — WebFetch and curl get 403; this skill documents the Playwright MCP workflow that works.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cw:fetch-edgenuity-help-articlesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The Imagine Edgenuity help center is the customer-facing documentation surface for both EdgeEX and heritage Edgenuity. It's where product describes feature behavior in customer-readable terms — useful when you want to cite "what customers are told the feature does" alongside engineering-side citations of "what the code does."
The Imagine Edgenuity help center is the customer-facing documentation surface for both EdgeEX and heritage Edgenuity. It's where product describes feature behavior in customer-readable terms — useful when you want to cite "what customers are told the feature does" alongside engineering-side citations of "what the code does."
The site is fronted by Cloudflare bot protection. Both WebFetch and curl --user-agent ... get HTTP 403 with a "Just a moment..." challenge page. The fetch fails before any article content is returned. To get past it, you need a real browser — the mcp__plugin_il_playwright__browser_* tools are sufficient because they drive a real headless Chromium that completes the challenge automatically.
This skill is the "yes, this is annoying; here's the working workflow" reference for that.
The help center is structured as: Categories → Sections → Articles.
Stable URL patterns:
Category index: https://help.imagineedgenuity.com/hc/en-us/categories/{category-id}-{slug}
Section index: https://help.imagineedgenuity.com/hc/en-us/sections/{section-id}-{slug}
Article: https://help.imagineedgenuity.com/hc/en-us/articles/{article-id}-{slug}
The numeric IDs are stable. The slugs can drift (article titles get rewritten) but redirects from old slugs to current ones generally work. Prefer the numeric-ID-only form when citing an article you don't want to re-find later:
https://help.imagineedgenuity.com/hc/en-us/articles/{article-id}
The site will redirect that to the slugged URL.
Two starting points worth knowing (verify against the live site if navigation looks wrong — Zendesk reorganizations can rotate these IDs):
/hc/en-us/categories/10238163705879-EdgeEX — top-level EdgeEX docs./hc/en-us/sections/12637964872855-Course-options/hc/en-us/sections/15673548805143-Customizing-coursesIf you're after a single article you already have a URL for, skip to Step 2.
If you're crawling a topic area (e.g., "everything about course options"), navigate to the section index page first. The section page lists all articles in that section, which lets you build a complete inventory before you start fetching individual articles.
mcp__plugin_il_playwright__browser_navigate
url: https://help.imagineedgenuity.com/hc/en-us/sections/12637964872855-Course-options
mcp__plugin_il_playwright__browser_snapshot
filename: <abs-path>/section-index.md
Then extract the article URLs:
grep -oE '/hc/en-us/articles/[0-9]+-[^"]*' <abs-path>/section-index.md | sort -u
That gives you the complete article list to crawl.
Per article:
mcp__plugin_il_playwright__browser_navigate
url: https://help.imagineedgenuity.com/hc/en-us/articles/{article-id}
mcp__plugin_il_playwright__browser_snapshot
filename: <abs-path>/article-{article-id}.md
Always pass filename to browser_snapshot. Without it, the full accessibility-tree snapshot comes back inline and pollutes the conversation. With filename, only a confirmation comes back inline and the snapshot is on disk.
The snapshot path you pass must be inside one of the agent's allowed roots. Cleanest is a working directory under your current task — e.g., <repo>/.playwright-mcp/article-{id}.md.
Snapshots come back in YAML-like accessibility-tree format with a lot of nav chrome (header, breadcrumbs, footer, sidebar with "Articles in this section"). The actual article content sits between the article heading and the "Articles in this section" sidebar.
Use the extract-article-body.sh helper in this skill's scripts/ directory:
./scripts/extract-article-body.sh <abs-path>/article-12345.md > /tmp/article-body.md
Or inline:
awk 'BEGIN{p=0} /heading "EdgeEX|heading "Edgenuity/{p=1} /Articles in this section/{p=0} p{print}' \
<abs-path>/article-12345.md > /tmp/article-body.md
The output is still in accessibility-tree format but stripped of chrome. From there grep/Read is sufficient to find the substantive content.
Each article snapshot includes an "Articles in this section" sidebar. If you started from a single article and want to expand to the rest of its topic, the sidebar shows the article's siblings. Extract URLs from the snapshot the same way as Step 1.
mcp__plugin_il_playwright__browser_close
Cleans up the headless browser session.
/hc/en-us/articles/{id}) so the link survives slug renames.filename and read selectively (offset / grep) rather than reading the whole file.[ref=eXX] placeholders for the body — it may not include the actual answer text. If you need the FAQ body, you may need to interact with the page (browser_click) to expand it.extract-article-body.sh returns nothing, the heading prefix probably doesn't match. The script keys off heading "EdgeEX / heading "Edgenuity — inspect the snapshot for the actual heading shape and either adjust the regex inline or update the script.mcp__atlassian__*, mcp__plugin_atlassian_atlassian__*). Use those, not this.WebFetch first; if it works, you don't need a browser.A real flow used to produce a research note in a separate edgeex-architecture repo (course customization / supplemental cascade):
grep -oE '/hc/en-us/articles/[0-9]+-[^"]*'.extract-article-body.sh over each.Total time: about 5 minutes of automation per dozen articles, mostly waiting on the browser. Result: a complete cross-referenced view of how product describes a feature, suitable for citing in architecture docs.
mcp__atlassian__*, mcp__plugin_atlassian_atlassian__*) — for internal Confluence pages and Jira tickets. Use those for IL-internal docs; this skill is only for the public, Cloudflare-fronted help center.il:mermaid-render — once you've extracted product flows from help-center articles, render them as diagrams for architecture docs.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub imaginelearning/dp-claude-plugin --plugin cw