launch — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited launch (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Requires a connected platform — run /ads:setup first if needed.
The structure is the same across platforms — only entity names differ:
| Level | Meta | TikTok | |
|---|---|---|---|
| Campaign | campaigns | campaigns | campaigns |
| Ad group | adsets | ad-groups | ad-groups |
| Ad | ads | ads | ads |
Every adkit_manage call takes: platform, entity, action, and params.
Call adkit_help path: "manage <platform> <entity> create" for the exact params. Universal params that work on every platform:
| Param | Description |
|---|---|
name | Entity name (required) |
budget | { daily: N } or { lifetime: N } |
status | active or paused (default: paused) |
Platform-specific params (targeting, optimization, bidding, pixel, channel) vary. Always discover them with adkit_help before your first mutation on a platform.
Create example (platform-agnostic pattern):
adkit_manage platform: "<platform>" entity: "campaigns" action: "create" params: { name: "Spring Sale", objective: "sales", budget: { daily: 50 } }Then create the ad group referencing the campaign, then the ad referencing the ad group. Each returns a draft ID.
Two upload methods:
Direct upload (default — handles most files):
adkit_manage platform: "<platform>" entity: "media" action: "upload" params: { source: "url", url: "<public-url>" }Temporary upload URL (for local files or large assets):
entity: "media" action: "request_upload_url" with filename and contentType → returns a signed PUT URL and uploadIdentity: "media" action: "upload" with { source: "temporary_upload", uploadId: "<id>" }Or use adkit_studio to generate AI creatives instead of uploading.
For multiple creatives, repeat the upload flow for each file. Each upload returns a separate media ID. Then create one ad per media ID referencing the same ad group.
Call entity: "drafts" action: "list" — the response includes a review URL for each draft.
Only after explicit user approval: entity: "drafts" action: "publish" ids: ["<draftId>"]
entity: "drafts" action: "update".ids for publish/delete must be an array, even for one draft.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.