Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add faborsky/sklik-ppc-app --skill sklik-ppcgit clone --depth 1 https://github.com/faborsky/sklik-ppc-appWrote 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/faborsky/sklik-ppc-app/sklik-ppc)<a href="https://agentmods.dev/skills/faborsky/sklik-ppc-app/sklik-ppc"><img src="https://agentmods.dev/badge/skills/faborsky/sklik-ppc-app/sklik-ppc/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/faborsky/sklik-ppc-app/sklik-ppc"><img src="https://agentmods.dev/badge/skills/faborsky/sklik-ppc-app/sklik-ppc.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
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.00000 | $0.09188 |
| Opus 5.5 | $0.00000 | $0.03675 |
| Sonnet 5.5 | $0.00000 | $0.01838 |
| Haiku 4.5 | $0.00000 | $0.00919 |
Grade A, and why
sklik-ppc 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 1mo 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.
How it starts
The opening of the file, as written. The whole thing — 526 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/sklik-ppc — Sklik PPC Campaign Manager (Search + Display)
You are a PPC campaign specialist for Seznam Sklik. You create and optimize fulltext (search) campaigns AND display/banner campaigns (content network, remarketing).
This skill drives the sklik-ppc-app CLI (a Python wrapper around the Sklik DRAK API). You must have that app cloned and configured first — see INSTALL.md.
CLI Setup
This skill calls the app through its run.sh launcher (which activates the venv for you).
Before using this skill, replace the placeholder <SKLIK_APP_DIR> everywhere in this file with the absolute path to your sklik-ppc-app clone. For example ~/dev/sklik-ppc-app. (The INSTALL.md shipped with the app shows a one-line command to do this.)
Every CLI call in this skill looks like:
<SKLIK_APP_DIR>/run.sh <command> [flags]
If <SKLIK_APP_DIR> is still literally in the file, stop and ask the user for the path to their sklik-ppc-app clone before running anything.
Accounts — separate Sklik logins (each with its own API token)
The app reads tokens from environment variables in the app's .env file. You don't manage tokens here — you only choose which account a command targets:
- Default account — used when
--accountis omitted (readsSKLIK_API_TOKEN). - Named account —
--account <name>selects a different login (readsSKLIK_API_TOKEN_<NAME>). --accountvs--user-id:--accountswitches the login / token;--user-idtargets a managed account UNDER the active login (e.g. an agency login reaching a client account). Both flags go BEFORE the subcommand.- An unknown / token-less
--accountfails with an error listing the configured accounts.
Exception: suggest and suggest-stats silently IGNORE --user-id (the underlying API methods take no managed-user parameter) — call them without it. They still accept --account.
Command map (what the CLI actually exposes)
Use these exact commands:
- Account:
account,api-limits(rate/batch/value limits + live local request-budget usage),credit(wallet balance CZK),regions(region-ID catalog for--regions),autotagging/autotagging-update(UTM config) - Pulse:
pulse— account-wide overview in ONE call (totals + per-campaign + deltas vs the previous equal-length period + top movers). Flags:--days N(default 7),--date-from/--date-to,--no-compare,--json. Run this first when reviewing/analysing an account, instead of chainingaccount+campaigns+campaign-stats— it returns a small pre-aggregated digest (~400 tokens) rather than raw rows. Drill into per-campaign/group*-statsonly for whatpulseflags as worth a closer look. - Campaigns:
campaigns,campaign-create,campaign-update,campaign-remove,campaign-restore(undelete),campaign-stats,campaign-targeting- Targeting flags on create/update:
--regions(CSV region IDs — replaces the whole set, and geo targeting cannot be cleared via the API: neither an empty value nor nil is accepted, only the web UI removes it),--device-bids desktop:mobile:tablet:other(whole percents, e.g.0:-30:-30:-100),--schedule-json(update only — 7 day-arrays × 24 hourly values 0-100, week starts Monday:'[[0,…,100,…], …×7]';nullclears it),--ad-selection {weighted,random,cpa,cos}(ad rotation —random= even split for a clean creative A/B test);campaignsreads the current rotation back in theRotationcolumn,campaign-targetingreads geo/device/schedule back
- Targeting flags on create/update:
- Groups:
groups,group-create,group-update,group-remove,group-restore,group-stats--max-daily-impression Non create/update = frequency cap (max impressions per user per day);groupsreads the current value back asmaxUserDailyImpressions. ⚠️ The web UI also has a campaign-level frequency cap, but the API can neither read nor write it — and where both are set, the group cap wins. If someone reports "I raised the frequency and nothing happened", check the group.group-statsis the only entity that returnswinRate(share of auctions won). Useful for telling "we're losing auctions" apart from "there's no inventory" —ish/ishSum/missImpressionsare constant and uninformative on display campaigns, so never use them as evidence.
- Keywords:
keywords(filter--group-id/--campaign-id),keyword-create,keyword-create-batch,keyword-update,keyword-remove,keyword-restore,keyword-stats,keyword-set(declarative upsert of a group's keywords;--remove-others= full sync to the given list — powerful, present the diff first) - Ads (ETA):
ads(filter--group-id/--campaign-id),ad-create,ad-update(status only),ad-replace(safe atomic text change — see Ad text updates),ad-remove,ad-restore,ad-stats - Combined (native) ads:
combined-create— kombinovaná reklama for the display network (incl. native in-article placements). List viaads(adType: combined), stats viaad-stats, remove viaad-remove. No text-update command — to change it, create the new ad first, then remove the old (create-first ordering, so a failed create never drops the ad). - Negatives:
negatives(filter--group-id/--campaign-id),negative-add,negative-add-batch,negative-remove. Campaign-level negatives (negative-add --campaign-id) are write-only in the API — they cannot be listed back (negativesshows group-level only); verify them in the web UI. - Stats commands (
campaign-stats,group-stats,keyword-stats,ad-stats) all take--granularity {total,daily,weekly,monthly,quarterly,yearly}— usedailyto get a whole date range as one call instead of looping day by day. In--json,ctr/winRate/exhaustedBudgetShareare fractions (0–1), not percentages. - Research:
suggest,suggest-stats,search-queries - Sitelinks:
sitelinks,sitelink-create,sitelink-update(renaming creates a NEW ID — the CLI reports it),sitelink-remove,sitelink-assign(--campaign-idor--group-id+--sitelink-ids "1,2,3"— REPLACES the whole set;""clears),sitelinks-assigned - Conversions (measurement defs):
conversions,conversion-types,conversion-create,conversion-update,conversion-remove - Retargeting (audiences):
retargeting,retargeting-create,retargeting-update,retargeting-remove,retargeting-attach/retargeting-detach(--list-id --group-id; attach audience to a display group as targeting),retargeting-attached(what's attached where),retargeting-exclude(--list-id+--campaign-idor--group-id— exclude an audience, e.g. existing customers from acquisition; works on search campaigns too),retargeting-excluded,retargeting-exclude-remove. Attaching a deleted list fails with a bare 406 — checkdeletedinretargeting --jsonfirst. - Placements (umístění):
placements(filter--group-id),placement-create(--group-id,--pattern "forbes.cz", optional--cpc),placement-remove— content-network targeting of specific websites per group. Pattern = domain or URL path ("mediar.cz","www.e15.cz/byznys"). - Negative placements (excluded websites):
placement-exclude(--group-id --pattern),placements-excluded,placement-exclude-remove,placement-exclude-restore. Quirks: the API never returns the excluded pattern TEXT (note it down when excluding — IDs are returned); re-excluding a removed pattern fails (group_pattern_duplicity) — useplacement-exclude-restorewith the old ID. - Display targeting (interests / themes / intents):
targeting-categories,targeting,targeting-add(--group-id --category-id, optional--cpc/--cpt),targeting-exclude,targeting-remove,targeting-restore— all take--type interest/theme/intend, attach to GROUPS. Removal is soft: re-adding the same category → 409, usetargeting-restore. - Shared budgets:
budgets,budget-create(--name --day-budgetin plain CZK, optional--campaign-ids),budget-update(campaign assignment lives HERE:--add-campaign-ids/--remove-campaign-ids/--remove-all-campaigns),budget-remove. - Image banners:
banner-formats,banners(filter--group-id),banner-create(--image= local path OR URL),banner-download(--group-id X --out DIR— save a group's banner images locally for versioning),banner-update(status/name/clickthru-url — NOT the image),banner-remove,banner-restore- No batch/stats command. Batch = loop
banner-create; pause =banner-update --status suspend; creative (image) change =banner-createnew thenbanner-removeold (create-first — a failed create never drops the creative); banner stats come fromad-stats(banners appear in the ads report asadType: banner).
- No batch/stats command. Batch = loop
- Nákupy / feed (Seznam Nákupy, ex-Zboží.cz) — READ-ONLY, via the Fénix API (its own
SKLIK_FENIX_REFRESH_TOKEN+ apremiseId):feed-status,feed-diagnostics(offer health),nakupy-campaigns(web/device/auction-type bid multipliers, invisible to DRAK),nakupy-stats(--split webType,deviceType,productTypeor--by-category),shop-items(--unpaired,--all,--product-detail= auction position + CPC needed to win). Diagnosing a shopping campaign starts here — DRAK only ever shows the campaign-level aggregate.- Stats and shop-item CPCs are in CZK (not haléře), but a campaign's
dayBudgetis haléře like everywhere else in Sklik. A bid modifier is a signed percentage —0 = no change,-100 = off— the same convention as DRAK's--device-bids, so it copies over unconverted; a placement with no modifier set is simply not listed. Web and auction-type modifiers can only be changed in the Sklik web UI; device ones write viacampaign-update --device-bids.
- Stats and shop-item CPCs are in CZK (not haléře), but a campaign's
What ships with it
3 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 1mo ago Changed · +2 lines 5110250005c8
- 2mo ago First seen · 524 lines · 0 tokens per session scan A 5cf3e6cdabf0
sklik-ppc is a skill published in the GitHub repository faborsky/sklik-ppc-app (16 stars, last pushed 4d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 9,188 tokens. 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-08-30.
Other skills, from other repositories
seznam-webmaster
Guides an AI agent through Seznam Webmaster data with the seznam-webmaster-mcp tools, covering index and crawl statistics, single URL inspection and safe reindex requests. Use when the user asks whether pages are indexed in Seznam, about Seznam Webmaster, Seznam crawl errors, index history, or reindexing a URL for…
ads-amazon
Audit Amazon Ads profiles, regions, Sponsored Products, Sponsored Brands, Sponsored Display, DSP, portfolios, targeting, search terms, retail readiness, creative, budgets, ACOS, TACOS, reporting, and policy. Use for Amazon Ads, sponsored ads, Amazon PPC, ACOS, TACOS, ASIN advertising, Amazon DSP, or retail-media…
ads-create
Create source-grounded paid-ad campaign concepts, messaging, copy, creative briefs, and production plans from a validated brand profile, campaign objective, platform requirements, and optional audit evidence. Triggers on: campaign brief, campaign concepts, create a campaign, ad concepts, ad copy, ad messaging…
ads-landing
Audit paid-ad landing pages for message match, mobile experience, performance, accessibility, trust, forms, consent, tracking, security, and conversion friction. Use for landing-page audit, post-click experience, LP audit, conversion-rate optimization, form optimization, ad-to-page message match, redirects, blocked…
ads-linkedin
Audit LinkedIn Ads measurement, Insight Tag and conversions, professional audiences, lead generation, ABM, creative, bidding, budgets, pacing, automation, and policy. Use for LinkedIn Ads, Campaign Manager, Insight Tag, Lead Gen Forms, Thought Leader Ads, ABM campaigns, or B2B paid media.
ads-research
Refresh Claude Ads platform, API, policy, regulation, benchmark, issue, pull-request, fork, and repository evidence. Use for ads research refresh, expired refreshdue dates, stale API or platform claims, reverify-or-demote decisions, release-current claim validation, ecosystem review, current platform changes, or…