Borrowing it
Nothing to install: this file belongs to duckduckgo/apple-browsers. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/duckduckgo/apple-browsers/main/.claude/skills/ddg-add-pixel/SKILL.mdgit clone --depth 1 https://github.com/duckduckgo/apple-browsersWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/duckduckgo/apple-browsers/ddg-add-pixel)<a href="https://agentmods.dev/skills/duckduckgo/apple-browsers/ddg-add-pixel"><img src="https://agentmods.dev/badge/skills/duckduckgo/apple-browsers/ddg-add-pixel/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/duckduckgo/apple-browsers/ddg-add-pixel"><img src="https://agentmods.dev/badge/skills/duckduckgo/apple-browsers/ddg-add-pixel.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00038 | $0.00942 |
| Opus 5.5 | $0.00015 | $0.00377 |
| Sonnet 5.5 | $0.00008 | $0.00188 |
| Haiku 4.5 | $0.00004 | $0.00094 |
Grade A, and why
ddg-add-pixel scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 25d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
What it actually says
Add or change a pixel
These steps cover the usual case. For anything they don't, the Swift API reference is
SharedPackages/PixelKit/Sources/PixelKit/README.md, and the definition rules are in
REVIEW-pixels.md, which Claude Code Review also applies to the PR.
- Find what exists.
git grepthe feature name iniOS/PixelDefinitions,macOS/PixelDefinitionsand*Pixel*.swift. Extend the feature's existingPixelKit.Eventenum when there is one; otherwise create one in its own file.iOS/Core/PixelEvent.swiftis closed to new cases, and Danger fails a PR that adds one. - Name it
feature_actionorfeature-subfeature_action: descriptive, without anm_orm-prefix, and without legacy shorthand likeml.- iOS: leave
iosout of the name. PixelKit appends_ios_phone/_ios_tablet. - macOS: end the name with
_macosand declarevar namePrefix: PixelKitNamePrefix { .none }, otherwise PixelKit prependsm_mac_. SeemacOS/DuckDuckGo/Statistics/FireButtonPixel.swift.
- iOS: leave
- Pick the frequency:
.standardsends every time;.dailyonce per day per device..dailyAndCountsends both, for anything that can spike, such as an error..uniqueByNamesends once per install, and the name must end_u.- The
legacy…cases exist only for pixels that already ship with their suffixes. The README's frequency table lists the rest.
- Fire through an injected
PixelFiring?that defaults toPixelKit.shared. Spell the concrete type,fire(MyPixel.someCase); the leading-dot form.someCasedoes not compile. Bucket numbers, and keep PII and URLs out of names and parameters.- Three or more pixels for one flow, or a wide event: put them behind a
<Feature>Instrumentationprotocol with a default implementation, likeiOS/DuckDuckGo/AIChat/WideEvent/DuckAISessionInstrumentation.swift. .withRetryor.withATB: stop and ask the user for privacy triage first.
- Three or more pixels for one flow, or a wide event: put them behind a
- Define it in
{iOS,macOS}/PixelDefinitions/pixels/definitions/, starting from theTEMPLATE.json5in that folder.- Set
triggersfrom the event that fires the pixel, using the procedure in the "Triggers" section ofREVIEW-pixels.md. Don't default to["other"]. - List every parameter the pixel sends:
appVersionunless the call opts out,errorCodeanderrorDomain(plus the underlying pair) when the event carries an error, andpixelSourcewhen the event declares it. - List suffixes in the order PixelKit emits them: frequency, then
platform, thenform_factor(the last two on iOS only). - A pixel fired from SharedPackages needs a definition on every platform that fires it.
- Set
- Wide events also follow the "Wide events" section of
REVIEW-pixels.md: both definition files, matching version bumps, anchoredkeyPatterns, and no edits togenerated_schemas/. - Test with
PixelKitMock(@_spi(Testing) import PixelKit), asserting on itsactualFireCalls. - Validate from
iOS/ormacOS/:npm ci --include-workspace-rootonce, thennpm run validate-pixel-defs,npm run check-wide-events, andnpm run pixel-lint.fixto format. CI also checksownersagainst an internal GitHub user map that local runs skip, so use GitHub usernames.
Done when every name the Swift code can send has a definition whose parameters and suffixes match, and the validators pass.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 25d ago Changed · +2 lines fb18cd6ba328
- 1mo ago First seen · 53 lines · 38 tokens per session scan A 870e73cb70d8
ddg-add-pixel is a skill published in the GitHub repository duckduckgo/apple-browsers (270 stars, last pushed today), licensed Apache-2.0. It adds 38 tokens to every session and 942 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-03.
ddg-add-pixel compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| ddg-add-pixelduckduckgo/apple-browsers | Skill | 270 | today | Apache-2.0 | A | 38 | Claude Code |
| cli-anything-nsloggerHKUDS/CLI-Anything | Skill | 58k | 1mo ago | Apache-2.0 | A | 36 | Claude Code, Codex |
| benchmarksoniqo/speech-swift | Skill | 1.3k | yesterday | Apache-2.0 | A | 0 | Claude Code |
| review-prsoniqo/speech-swift | Skill | 1.3k | yesterday | Apache-2.0 | A | 71 | Claude Code |
| boutique-best-practicesmergesort/Boutique | Skill | 1.1k | 5d ago | MIT | A | 56 | Claude Code |
| boutique-storemergesort/Boutique | Skill | 1.1k | 5d ago | MIT | A | 52 | Claude Code |
| boutique-stored-valuesmergesort/Boutique | Skill | 1.1k | 5d ago | MIT | A | 68 | Claude Code |