Aller au contenu principal
Agent skills

Configure a Custom Agent Skill for
YOUR Inventory in Google Ad Manager

Your AI agent re-discovers the same context every session: "what are your ad units?", "which key-values?". A house skill turns that context into durable procedural memory — so Claude, Codex, or Gemini already know your operation from the first instruction.

OA
OrbiAds Engineering
Published June 11, 2026 · 9 min read
TL;DR
  • Pin your stable inventory IDs (ad units, placements, targeting keys) in the skill — but never the tenant/network identity.
  • Customize your forecast defaults: which ad units to forecast, your availability threshold, your standard flight windows.
  • Lean on OrbiAds Campaign Presets — map each brief type to a preset.
  • Declare your house targeting: standard key-values, geo defaults, device splits.
  • Encode your advertiser/sector exclusions (competitive labels, blocklists, Ad Exchange creative blocking) — enforced every session.

Why a house skill?

Every new chat session starts from zero. The agent re-asks "what are your ad units?" and fires repeated targeting(action="list_ad_units") or inventory(action="get_ad_unit_tree") calls against an inventory tree that can run to hundreds of nodes. The result is slow, token-heavy, and repetitive — you re-explain the same context every time.

A skill (a folder with a SKILL.md file, the open Agent Skills standard) is durable procedural memory. It encodes the how; the tools supply the what at runtime. You write your house conventions once, and the agent loads them on demand every session.

Pin stable IDs — but never identity

Critical distinction. The tenant/network identity is always derived at runtime via the standalone auth tools check_credentials and get_my_tenant_id — never hardcoded. An invented tenantId or networkCode is a security mistake.

Your stable inventory constants, however, belong in the skill: homepage ad unit IDs, placement IDs, key custom-targeting key IDs, standard sizes. These values almost never change — pinning them saves the agent from re-walking the tree every time.

House constantTypeID
Homepage ATFAd unit123456789
Homepage RoadblockPlacement234567890
sectionTargeting key345678901
Standard MPU sizeConstant300×250

To capture these IDs the first time (or refresh them if your tree changes), run the free reads targeting(action="list_ad_units") and targeting(action="list_custom_targeting_keys"), then copy the stable IDs into the skill's table.

Customize for forecasts

Encode your forecast discipline in the skill: which ad units to always forecast, your availability threshold, your default flight windows. The agent applies your rules instead of improvising.

  • What to forecast: a prospective forecast on the homepage ad units before any campaign via reporting(action="get_prospective_delivery_forecast"), or a per-size forecast via reporting(action="get_standalone_forecast").
  • Availability threshold: for example, stop and warn if availability drops below 95% of goal for a homepage sponsorship.
  • Default windows: your standard flight lengths (e.g. 7 days for a takeover, 30 days for a section sponsorship).

For the underlying forecasting mechanics, see the inventory forecasting guide.

Use Campaign Presets

OrbiAds tenant settings include Campaign Presets (name + advertiserId + adUnitIds + keyValues), configured at /settings/gam. Auto-suggestions even surface from your recurring patterns. The backend applies the preset; the skill says which preset maps to which brief type.

Example mapping to write into the skill: "homepage takeover" → Pack Homepage preset. Also record your naming conventions (an orderTemplate like {YYYY}{MM}-{advertiser}-{campaign}) and delivery defaults (lineItemType, priority, frequency caps) — applied automatically by the backend.

Declare your house targeting

List your standard targeting in the skill so the agent applies it instead of asking: your standard key-values, your geo defaults, your device splits.

  • Standard key-values: e.g. section, pos, consent (see the key-values guide).
  • Geo defaults: your primary market by default, unless the brief says otherwise.
  • Device splits: your usual desktop / mobile / tablet breakdown.

To verify or refresh the available keys, the agent runs the free read targeting(action="list_custom_targeting_keys"), then pins the stable IDs into the skill's table (previous section).

Advertiser & sector exclusions

The skill is where your house exclusion rules live — so every session enforces them, without relying on the operator's memory:

  • Competitive exclusion: your GAM competitive labels. The agent lists them via gam_admin(action="labels.list") and creates them when needed via gam_admin(action="labels.create").
  • Sector blocklists: e.g. "never book crypto / gambling on kids inventory." A prose rule the agent enforces before any booking.
  • Ad Exchange creative blocking: via ad_review_center(action="search") to inspect, then ad_review_center(action="block_batch") to block (or ad_review_center(action="allow_batch") to allow).

Ship & maintain the skill

Follow the full authoring guide (frontmatter, routing triggers, MCP/CLI dual-surface pattern) on the public repo: github.com/OrbiAds/Orbiads-GAM-MCP — docs/custom-skills.

Any skill that can write must embed the OrbiAds safety contract: reads are free, every write goes through preview → confirm → execute (never a blind write). Finally, treat the skill as a living document: append gotchas as the agent hits real failures.

Safety contract (non-negotiable)
  • Identity derived at runtime via check_credentials / get_my_tenant_id — never hardcoded.
  • Reads are free (0 credits) — call them liberally.
  • Every write: preview → confirm → execute with a confirmation_token.

Write your first house skill

Configure your Campaign Presets and conventions at /settings/gam, then follow the authoring guide to turn your operation's context into procedural memory shared by all your agents.