From firefox-wiki
Add a fact, explanation, or note to the Firefox Knowledge Wiki in natural language. Claude decides which page to update or create.
How this skill is triggered — by the user, by Claude, or both
Slash command
/firefox-wiki:addThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read `$ARGUMENTS`. If empty, ask the user:
Read $ARGUMENTS. If empty, ask the user:
"What would you like to add to the wiki? Describe the fact, behavior, or concept, or provide a spec URL."
Classify the input:
| Pattern | Route |
|---|---|
Starts with http:// or https:// | → URL ingest path |
Local path ending in .pdf | → PDF ingest path |
Starts with bug followed by digits | → Bug ingest path: invoke the firefox-wiki:ingest skill with the bug ID |
| Anything else | → Fact path (existing behavior) |
When the source is a security bug (sec-* keyword or still restricted):
bugs/<id>.md page for it<!-- source: sec bug, <YYYY-MM-DD> --> with no bug numberAlways distill: extract the intent, rules, and facts and rewrite in your own words.
| Spec type | Examples | Reason |
|---|---|---|
| Public specs | WHATWG, W3C, IETF RFC, Khronos | Best practice — keep wiki concise |
| Private/paid specs | ISO, IEC, ITU-T (H.264, HEVC, MPEG-*, AAC) | Legal — verbatim reproduction is prohibited |
When ingesting a private spec, add a notice at the top of each created page:
> **Note**: This page contains distilled facts from a private/paid specification
> (ISO/IEC/ITU-T). No verbatim spec text is reproduced here.
Run:
which pandoc || echo "NOT FOUND"
which curl || echo "NOT FOUND"
If either is missing, offer to install it:
<tool> is required for URL ingestion. Would you like me to install it now?
brew install <tool>
Reply "yes" to install, or "no" to abort.
Wait for reply. If yes, run the install and verify it succeeds before continuing. If no, stop.
Determine target directory and ingest strategy based on the domain:
| Domain pattern | Directory | Strategy |
|---|---|---|
| whatwg.org, w3.org, ietf.org, iso.org, itu.int, khronos.org | specs/ | Section-based: one wiki page per major section |
| microsoft.com, docs.microsoft.com, learn.microsoft.com, developer.apple.com | platform/ | Single page: one wiki page for the whole resource |
| Everything else (MDN, blogs, postmortems, wikis, etc.) | others/ | Single page: one wiki page for the whole resource |
For specs/ sources, also derive a spec group subfolder from the URL path:
/ with -, strip .html/.txt/.pdfhtml.spec.whatwg.org/multipage/media.html → specs/html-media/w3.org/TR/webcodecs/ → specs/webcodecs/w3.org/TR/webaudio/ → specs/webaudio/ietf.org/rfc/rfc6381.txt → specs/rfc6381/w3.org/TR/media-source/ → specs/media-source/All section pages from a single spec ingest go into the same subfolder.
SRC_URL="<the URL from $ARGUMENTS>"
SRC_MD="/tmp/wiki-url-ingest.md"
curl -sI "$SRC_URL" > /tmp/wiki-url-headers.txt
curl -sL --max-time 120 "$SRC_URL" \
| pandoc -f html -t markdown --strip-comments --wrap=none \
> "$SRC_MD"
ETAG=$(grep -i "^etag:" /tmp/wiki-url-headers.txt | tr -d '\r' | awk '{print $2}')
LAST_MOD=$(grep -i "^last-modified:" /tmp/wiki-url-headers.txt | tr -d '\r' | cut -d' ' -f2-)
FETCH_DATE=$(date +%Y-%m-%d)
Scan headings:
grep "^#" "$SRC_MD" | head -60
Identify major sections — ## level headings that each represent a self-contained concept. Ignore navigation boilerplate (TOC, breadcrumbs, site headers/footers, cookie banners).
For each major section:
§x.y cross-references, implementor notes irrelevant to Firefox, pure navigation$WIKI_PATH/specs/<spec-group>/<slug>.md (create the subfolder if needed):# <Section title>
<!-- source-url: <SRC_URL>#<anchor> -->
<!-- source-fetched: <FETCH_DATE> -->
<!-- source-etag: <ETAG> -->
<!-- source-last-modified: <LAST_MOD> -->
## Summary
## Key Rules
## States / Attributes
## Firefox-Specific Notes
If the page already exists: update content sections, preserve ## Firefox-Specific Notes, refresh the metadata comments.
Distill the entire converted markdown into one wiki page. Cover:
Create or update $WIKI_PATH/<platform|others>/<slug>.md:
# <Resource title>
<!-- source-url: <SRC_URL> -->
<!-- source-fetched: <FETCH_DATE> -->
<!-- source-etag: <ETAG> -->
<!-- source-last-modified: <LAST_MOD> -->
## Summary
## Key Points
## Firefox-Specific Notes
If the page already exists: update content, preserve ## Firefox-Specific Notes, refresh metadata.
Add a row for each new page to the ## Specs & Platform table:
| [[<slug>]] | <one-line description> |
Update the "Last updated" date.
Append to usage-log.jsonl:
{"date":"<ISO timestamp>","event_type":"url-ingest","user":"<git -C $WIKI_PATH config user.email>","trigger":"user","url":"<SRC_URL>","directory":"<specs|platform|others>","pages_created":[...],"pages_updated":[...]}
Prepend an entry to log.md (after the --- separator, before any prior entries):
## <YYYY-MM-DD> — Ingest <domain/path>
Pages created: <list of relative paths>
Pages updated: <list, or "none">
Source: <SRC_URL>
cd $WIKI_PATH && git add -A && git commit -m "wiki: ingest <domain/path>" && git push
After pushing, check lint-log.json for pages overdue for correctness verification using the same logic as the ingest skill (Step 8). If any pages are overdue, print:
Note: <n> page(s) are overdue for correctness verification.
Run /firefox-wiki:verify to check them.
Ingested: <URL> → <specs|platform|others>/
Created: <list>
Updated: <list>
Re-run `/firefox-wiki:add <URL>` to refresh.
Determine whether the PDF is a public or private spec:
| Indicators | Classification |
|---|---|
| Filename/title contains ISO, IEC, ITU-T, MPEG, H.264, H.265, HEVC, AAC, MPEG-4 | Private — distill only, add notice |
| IETF RFC, W3C, WHATWG, Khronos, public domain | Public — distill only (best practice) |
| Internal doc, postmortem, design doc | Private — distill only |
Determine target directory and spec group:
specs/<spec-group>/ where spec group is derived from the filename (e.g. h264-spec.pdf → specs/h264/, rfc6381.pdf → specs/rfc6381/)platform/others/Use the Read tool with the pages parameter. For large PDFs (>10 pages):
Read tool: file_path="<path>", pages="1-3" # TOC / structure
Read tool: file_path="<path>", pages="4-20" # first section
... and so on
Follow the same distillation rules as URL ingest (S4a or S4b). For private specs, prepend the notice to each page:
> **Note**: This page contains distilled facts from a private/paid specification
> (ISO/IEC/ITU-T). No verbatim spec text is reproduced here.
Use this metadata block (no ETag — local file):
<!-- source-url: file://$HOME/<path-relative-to-home> -->
<!-- source-fetched: <FETCH_DATE> -->
<!-- source-md5: <md5 of the file> -->
Compute the path relative to $HOME by stripping the user's home directory prefix from the absolute path. Compute the MD5:
md5 "<path>" # macOS
Same as URL ingest step S5 (update INDEX.md). For the log entry, write pdf-ingest instead of url-ingest:
{"date":"<ISO timestamp>","event_type":"pdf-ingest","user":"<git -C $WIKI_PATH config user.email>","trigger":"user","file":"<$HOME-relative path>","directory":"<specs|platform|others>","pages_created":[...],"pages_updated":[...]}
Commit message: wiki: ingest <filename>.
Then run the verify nudge (same as S7).
Extract the bug ID from $ARGUMENTS (strip the bug prefix). Invoke the firefox-wiki:ingest skill passing the bug ID.
Check that $WIKI_PATH/INDEX.md exists. If not, tell the user:
"Wiki not initialized. Run
/firefox-wiki:initfirst."
Read $WIKI_PATH/INDEX.md to understand current wiki structure.
| Type | Criteria | Target path |
|---|---|---|
| Component fact | About a specific Firefox class or component | components/<Name>.md |
| Interaction/protocol | How two components relate or communicate | relations/<A>-<B>.md |
| Reusable pattern | A mechanism that appears in multiple contexts | patterns/<name>.md |
| Spec/standard behavior | Codec, container, or web spec behavior | specs/<name>.md or platform/<name>.md |
| Bug learning | Distilled insight from a resolved bug | bugs/<id>-<slug>.md |
| Triage pattern | How to recognize, route, or handle a class of bugs during triage | triage/<slug>.md |
| Glossary entry | Abbreviation, error code, or enum value | glossary.md |
If not obvious from context, ask the user:
- [High] — verified by reading source code
- [Medium] — inferred from observed behavior or documentation
- [Low] — extrapolated or from memory; needs future verification
Identify the source if available: bug number, revision hash, spec section, or colleague name.
If a relevant page already exists: append to the appropriate section.
If no page exists yet: create using the standard template for its type.
Format new content as:
<content> [High] <!-- source: bug 2026875, 2026-04-04 -->
Use [[wiki-links]] for every component, pattern, or bug name mentioned.
Component page (components/<Name>.md):
# <Name>
## Overview
## Key Behaviors
## Known Quirks
## Relations
Relation page (relations/<A>-<B>.md):
# <A> ↔ <B>
## Overview
## Protocol / Interaction
## Edge Cases
Pattern page (patterns/<name>.md):
# <Name> Pattern
## Summary
## Where Used
## Implementation Notes
Bug learning page (bugs/<id>-<slug>.md):
# Bug <id> — <slug>
## Root Cause
## Fix Summary
## Learnings
Triage pattern page (triage/<slug>.md):
# <Pattern name>
## Symptom
## What it usually is
## What to ask / check first
## Component / Meta bug
If a new page was created and $WIKI_PATH/index.json exists, also upsert its
record there so tiered lookup stays fresh until the next full lint rebuild:
TMP=$(mktemp)
jq --arg name "$NAME" --arg path "$REL" --arg dir "$DIR" \
--arg summary "$ONELINE" --arg conf "$CONFIDENCE" \
'.pages |= ((map(select(.name != $name))) +
[{name:$name, path:$path, dir:$dir, summary:$summary, aliases:[],
confidence:(if $conf=="" then null else $conf end)}])
| .source_index_mtime = (env.IDX_MTIME | tonumber)' \
"$WIKI_PATH/index.json" > "$TMP" && mv "$TMP" "$WIKI_PATH/index.json"
where IDX_MTIME is the new mtime of INDEX.md. Skip silently if index.json
is absent — lookup falls back to INDEX.md.
Append to usage-log.jsonl:
{"date":"<ISO 8601 timestamp>","event_type":"add","user":"<git -C $WIKI_PATH config user.email>","trigger":"user","file":"<relative path from WIKI_PATH>","confidence":"<High|Medium|Low>"}
Prepend an entry to log.md (after the --- separator, before any prior entries):
## <YYYY-MM-DD> — <one-line summary of what was added>
File: `<relative path>`
Confidence: <High|Medium|Low>
Source: <bug number, spec section, or colleague name>
Scan modified files for [[PageName]] references. Report any broken links.
cd $WIKI_PATH && git add -A && git commit -m "wiki: add <one-line summary>" && git push
Run the verify nudge (same as S7).
Added to `<relative file path>` with [<confidence>] tag. [[links]] verified. Pushed to remote.
npx claudepluginhub alastor0325/firefox-wiki-plugin --plugin firefox-wikiFetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.