YouTube Channel Operator
Build a channel-agnostic YouTube operations core with two interfaces:
- typed raw API methods for trusted power users;
- guided workflows that resolve exact resources, preview a change set, and apply it after approval.
Use slackbot-builder for Slack transport maturity and data-chatbots for
proposal/apply semantics. Use this skill for the YouTube-specific domain layer
that joins them.
The one rule
Raw and guided operations must share one deterministic executor.
The model may choose an operation and draft parameters. It must never construct
authorization, call arbitrary URLs, or independently decide what was applied.
The server resolves the account and resource, builds the provider request,
persists the exact reviewed action, applies it once, and verifies the result.
Route the task
| Need |
Load |
| Determine whether an operation exists, its scope, quota, or API limitation |
references/capabilities.md |
| Design OAuth accounts, raw tools, proposals, execution, idempotency, or audit |
references/architecture.md |
| Implement common Slack workflows and approval cards |
references/slack-playbooks.md |
| Download captions or generate summaries, chapters, clips, quotes, and titles |
references/transcripts.md |
| Measure performance after title, thumbnail, description, or playlist changes |
references/analytics-experiments.md |
| Reconcile paid reach, organic lift, subscriber quality, and Google Ads evidence |
references/analytics-experiments.md |
| Run recurring canonical-link, event, sponsor, or other description/comment CTA campaigns |
references/cta-campaigns.md |
| Build or review the test matrix |
references/test-cases.md |
Do not load every reference automatically.
Distinguish the three execution surfaces
| Surface |
Use it for |
| Official API |
Stable reads and writes: metadata, thumbnails, captions, comments, playlists, channel layout, uploads, live, analytics, reporting |
| Studio/browser |
Native title/thumbnail A/B tests, pinning comments, Community posts, end screens/cards, Studio editor, Shorts thumbnail frames, and other undocumented controls |
| Local atomic skill |
One-off scriptable uploads, thumbnail sets, metadata changes, and channel listing through youtube-api |
Never claim an MCP or private endpoint can perform a Studio-only action unless
the owning UI is actually controlled and verified.
Non-negotiable invariants
- Pin the account. Map an immutable account key to one expected channel ID
and one credential namespace. Verify
channels.list(mine=true) before
drafting and applying.
- Isolate channels. Use separate OAuth grants and secrets per brand/channel.
Never infer routing from a title or reuse one channel's refresh token.
- Expose methods, not arbitrary HTTP. Raw tools accept a registered method
ID, typed parameters, body, and optional immutable media asset. Reject custom
URLs, hosts, headers, tokens, or an unreviewed
execute flag.
- Use full metadata for content work. Treat catalogs, search hits, and
descriptionExcerpt fields as discovery records only. After resolving exact
video IDs, fetch videos.list(part=snippet,...) and use the complete
snippet.description before extracting, comparing, or rewriting content.
Never conclude text is absent because it is absent from an excerpt. YouTube
detail reads should use 50-video pages to match YouTube's native request
limit and continue larger sets with an explicit page or cursor.
YouTube update endpoints use replacement semantics for included parts, so
merge a patch into the full current mutable part and review the complete
outgoing representation.
- Apply exactly what was reviewed. Persist the exact resource ID, base
ETag, before state, desired patch, normalized provider request, actor, and
expiry. If live state drifts, conflict and create a fresh proposal.
- Keep Slack thin. Verify/ack/dedupe/render in Slack; resolve, validate,
persist, execute, and audit in a channel-agnostic core.
- Make external writes durable. Use a workflow or queue for uploads,
scheduled rotations, multi-step packages, retries, and analytics follow-ups.
- Verify the owning surface. Refetch the resource after every API mutation.
For Studio-only work, reopen the exact Studio/video record.
- Keep immutable audit history. Record the actual human proposer and
approver, provider/account, exact request, before/after, attempts, and outcome.
Never store OAuth tokens or Authorization headers in D1, logs, traces, or Slack.
- Separate change proof from performance impact. A successful write proves
state changed. Analytics later describe correlation, not causality, unless
YouTube's native concurrent experiment supplies the result.
- Separate acquisition objectives and evidence. Cheap paid views can be a
valid awareness outcome. Report paid reach, organic behavior, attributed
subscribers, and repeat engagement separately; do not collapse them into a
single quality score or dismiss inexpensive views by default.
Build the two capability layers
Raw power-user layer
Expose a compact typed surface:
youtube.data.call
youtube.live.call
youtube.analytics.query
youtube.reporting.call
youtube.transcript.get
Require accountKey, a registered method ID, exact IDs/parameters, a validated
body, and an optional immutable asset ID. Show the normalized provider request
before execution. Keep the method registry complete even when common workflows
cover only a subset. youtube.transcript.get is a read-only convenience tool
over registered captions.list and captions.download calls; it must preserve
the selected caption track and timestamps rather than scrape watch-page HTML.
Guided workflow layer
Promote frequently repeated operations into domain workflows:
- title/thumbnail candidate package;
- complete video metadata refresh;
- create or update the channel-owned top-level comment;
- playlist create/update/add/remove/reorder/shelf;
- upload package with thumbnail, captions, playlists, scheduling, and comment;
- scheduled-release batch for already uploaded unpublished videos;
- caption download and transcript-derived summary/chapter/clip/quote package;
- comment moderation and reply queue;
- canonical-link and time-bounded CTA campaign;
- live broadcast setup and operations;
- before/after analytics checkpoints.
Each workflow lowers to the same typed raw methods. Do not maintain a second
mutation implementation.
Proposal-to-apply lifecycle
request
→ resolve exact channel + resource IDs
→ read current resource + ETag
→ validate ownership and provider constraints
→ merge full mutable API part
→ persist immutable draft + idempotency key
→ render before/after, effects, quota, and deep link
→ signed human approval
→ atomically claim the draft
→ refetch + reject drift
→ execute/reconcile once
→ refetch owning API
→ append audit result
→ schedule measurement checkpoints
For a multi-step package, report each step independently. YouTube does not
provide a transaction spanning metadata, thumbnail, comment, playlist, and
caption calls. Store rollback inputs, but never describe compensation as atomic.
Design the approval card
Show:
- account label and exact channel ID;
- resource kind, exact ID, URL, and current owner;
- compact before → after diff;
- API method, affected
parts, and media asset;
- irreversible or public side effects;
- idempotency/expiry and drift behavior;
- analytics baseline and planned follow-ups;
- full-review deep link when Slack truncates content.
Button values contain only an opaque proposal ID. Load all executable content
from server-side storage. Resolve buttons in place after approve, reject,
conflict, or failure.
Handle the common API gaps explicitly
- Native title/thumbnail A/B testing is Studio-only. API title/thumbnail changes
stop a running native experiment.
- Comment creation/editing is supported; pin/unpin is not.
- Community posts, end screens/cards, Studio editing, handles/avatar changes,
Shorts thumbnail-frame selection, and most VOD monetization controls are not
public Data API operations.
- Native A/B arm allocation and winner data are not exposed in Analytics or
Reporting APIs.
Offer an exact Studio handoff or supervised browser workflow. Do not silently
substitute a sequential rotation and call it a native A/B test.
Google Ads campaign creation and mutation belong to an Ads operator. This skill
may ingest Ads campaign evidence and reconcile it with YouTube analytics, but it
must not invent Ads mutation methods inside the YouTube executor.
Implementation order
- Record product decisions: account keys/IDs, Slack-to-role mapping, which
mutations require approval, public/private delivery, deterministic
channel-comment marker, native versus sequential experiment policy, media
storage, reporting windows, and any winner thresholds.
- Inventory channels, exact IDs, OAuth ownership, runtimes, and current API
grants.
- Build account routing and token refresh with fail-closed channel verification.
- Implement the typed raw method registry and read-only dry-run/normalization.
- Add a provider-neutral external-action proposal, attempt, and audit ledger.
- Add Slack/web proposal rendering and signed approval.
- Ship metadata, thumbnail, comment, and playlist guided workflows.
- Add Reporting API reach jobs and durable impact checkpoints.
- Add resumable uploads, captions, live operations, and Studio handoffs.
- Provision each additional channel independently and run live canaries.
Completion proof
Do not report the operator complete until all applicable evidence exists:
- OAuth grant stored in the intended runtime secret store;
- exact channel ID verified from the active grant;
- raw read and reversible write canary;
- approval actor and immutable audit row;
- drift conflict test;
- duplicate delivery/retry test;
- API readback or Studio owning-surface verification;
- analytics job/checkpoint proof when measurement is promised;
- paid/organic and attribution reconciliation when promotion is measured;
- refresh-token health check and explicit reauthorization failure handling;
- independent proof for every configured channel and runtime.
1---2name: youtube-channel-operator3description: Design, build, review, or extend a production YouTube channel operator that combines complete typed YouTube Data, Analytics, Reporting, and Live API access with guided Slack or chatbot workflows, human approval, durable execution, audit history, multi-channel OAuth isolation, caption downloads, transcript summaries, viewer timestamps, paid-versus-organic acquisition analysis, and post-change measurement. Use for YouTube operations bots, creator-management copilots, raw power-user API tools, transcript processing, chapters, pull quotes, clips, title or thumbnail experiments, description and comment workflows, playlist management, uploads, moderation, live operations, Google Ads/paid-promotion measurement, or analytics tied to channel changes. Hand atomic one-off API execution to youtube-api and Studio-only browser work to youtube-studio-computer-use.4---56# YouTube Channel Operator78Build a channel-agnostic YouTube operations core with two interfaces:9101. typed raw API methods for trusted power users;112. guided workflows that resolve exact resources, preview a change set, and apply it after approval.1213Use `slackbot-builder` for Slack transport maturity and `data-chatbots` for14proposal/apply semantics. Use this skill for the YouTube-specific domain layer15that joins them.1617## The one rule1819**Raw and guided operations must share one deterministic executor.**2021The model may choose an operation and draft parameters. It must never construct22authorization, call arbitrary URLs, or independently decide what was applied.23The server resolves the account and resource, builds the provider request,24persists the exact reviewed action, applies it once, and verifies the result.2526## Route the task2728| Need | Load |29| --- | --- |30| Determine whether an operation exists, its scope, quota, or API limitation | [references/capabilities.md](references/capabilities.md) |31| Design OAuth accounts, raw tools, proposals, execution, idempotency, or audit | [references/architecture.md](references/architecture.md) |32| Implement common Slack workflows and approval cards | [references/slack-playbooks.md](references/slack-playbooks.md) |33| Download captions or generate summaries, chapters, clips, quotes, and titles | [references/transcripts.md](references/transcripts.md) |34| Measure performance after title, thumbnail, description, or playlist changes | [references/analytics-experiments.md](references/analytics-experiments.md) |35| Reconcile paid reach, organic lift, subscriber quality, and Google Ads evidence | [references/analytics-experiments.md](references/analytics-experiments.md) |36| Run recurring canonical-link, event, sponsor, or other description/comment CTA campaigns | [references/cta-campaigns.md](references/cta-campaigns.md) |37| Build or review the test matrix | [references/test-cases.md](references/test-cases.md) |3839Do not load every reference automatically.4041## Distinguish the three execution surfaces4243| Surface | Use it for |44| --- | --- |45| Official API | Stable reads and writes: metadata, thumbnails, captions, comments, playlists, channel layout, uploads, live, analytics, reporting |46| Studio/browser | Native title/thumbnail A/B tests, pinning comments, Community posts, end screens/cards, Studio editor, Shorts thumbnail frames, and other undocumented controls |47| Local atomic skill | One-off scriptable uploads, thumbnail sets, metadata changes, and channel listing through `youtube-api` |4849Never claim an MCP or private endpoint can perform a Studio-only action unless50the owning UI is actually controlled and verified.5152## Non-negotiable invariants53541. **Pin the account.** Map an immutable account key to one expected channel ID55 and one credential namespace. Verify `channels.list(mine=true)` before56 drafting and applying.572. **Isolate channels.** Use separate OAuth grants and secrets per brand/channel.58 Never infer routing from a title or reuse one channel's refresh token.593. **Expose methods, not arbitrary HTTP.** Raw tools accept a registered method60 ID, typed parameters, body, and optional immutable media asset. Reject custom61 URLs, hosts, headers, tokens, or an unreviewed `execute` flag.624. **Use full metadata for content work.** Treat catalogs, search hits, and63 `descriptionExcerpt` fields as discovery records only. After resolving exact64 video IDs, fetch `videos.list(part=snippet,...)` and use the complete65 `snippet.description` before extracting, comparing, or rewriting content.66 Never conclude text is absent because it is absent from an excerpt. YouTube67 detail reads should use 50-video pages to match YouTube's native request68 limit and continue larger sets with an explicit page or cursor.69 YouTube update endpoints use replacement semantics for included `part`s, so70 merge a patch into the full current mutable part and review the complete71 outgoing representation.725. **Apply exactly what was reviewed.** Persist the exact resource ID, base73 ETag, before state, desired patch, normalized provider request, actor, and74 expiry. If live state drifts, conflict and create a fresh proposal.756. **Keep Slack thin.** Verify/ack/dedupe/render in Slack; resolve, validate,76 persist, execute, and audit in a channel-agnostic core.777. **Make external writes durable.** Use a workflow or queue for uploads,78 scheduled rotations, multi-step packages, retries, and analytics follow-ups.798. **Verify the owning surface.** Refetch the resource after every API mutation.80 For Studio-only work, reopen the exact Studio/video record.819. **Keep immutable audit history.** Record the actual human proposer and82 approver, provider/account, exact request, before/after, attempts, and outcome.83 Never store OAuth tokens or Authorization headers in D1, logs, traces, or Slack.8410. **Separate change proof from performance impact.** A successful write proves85 state changed. Analytics later describe correlation, not causality, unless86 YouTube's native concurrent experiment supplies the result.8711. **Separate acquisition objectives and evidence.** Cheap paid views can be a88 valid awareness outcome. Report paid reach, organic behavior, attributed89 subscribers, and repeat engagement separately; do not collapse them into a90 single quality score or dismiss inexpensive views by default.9192## Build the two capability layers9394### Raw power-user layer9596Expose a compact typed surface:9798```text99youtube.data.call100youtube.live.call101youtube.analytics.query102youtube.reporting.call103youtube.transcript.get104```105106Require `accountKey`, a registered method ID, exact IDs/parameters, a validated107body, and an optional immutable asset ID. Show the normalized provider request108before execution. Keep the method registry complete even when common workflows109cover only a subset. `youtube.transcript.get` is a read-only convenience tool110over registered `captions.list` and `captions.download` calls; it must preserve111the selected caption track and timestamps rather than scrape watch-page HTML.112113### Guided workflow layer114115Promote frequently repeated operations into domain workflows:116117- title/thumbnail candidate package;118- complete video metadata refresh;119- create or update the channel-owned top-level comment;120- playlist create/update/add/remove/reorder/shelf;121- upload package with thumbnail, captions, playlists, scheduling, and comment;122- scheduled-release batch for already uploaded unpublished videos;123- caption download and transcript-derived summary/chapter/clip/quote package;124- comment moderation and reply queue;125- canonical-link and time-bounded CTA campaign;126- live broadcast setup and operations;127- before/after analytics checkpoints.128129Each workflow lowers to the same typed raw methods. Do not maintain a second130mutation implementation.131132## Proposal-to-apply lifecycle133134```text135request136 → resolve exact channel + resource IDs137 → read current resource + ETag138 → validate ownership and provider constraints139 → merge full mutable API part140 → persist immutable draft + idempotency key141 → render before/after, effects, quota, and deep link142 → signed human approval143 → atomically claim the draft144 → refetch + reject drift145 → execute/reconcile once146 → refetch owning API147 → append audit result148 → schedule measurement checkpoints149```150151For a multi-step package, report each step independently. YouTube does not152provide a transaction spanning metadata, thumbnail, comment, playlist, and153caption calls. Store rollback inputs, but never describe compensation as atomic.154155## Design the approval card156157Show:158159- account label and exact channel ID;160- resource kind, exact ID, URL, and current owner;161- compact before → after diff;162- API method, affected `part`s, and media asset;163- irreversible or public side effects;164- idempotency/expiry and drift behavior;165- analytics baseline and planned follow-ups;166- full-review deep link when Slack truncates content.167168Button values contain only an opaque proposal ID. Load all executable content169from server-side storage. Resolve buttons in place after approve, reject,170conflict, or failure.171172## Handle the common API gaps explicitly173174- Native title/thumbnail A/B testing is Studio-only. API title/thumbnail changes175 stop a running native experiment.176- Comment creation/editing is supported; pin/unpin is not.177- Community posts, end screens/cards, Studio editing, handles/avatar changes,178 Shorts thumbnail-frame selection, and most VOD monetization controls are not179 public Data API operations.180- Native A/B arm allocation and winner data are not exposed in Analytics or181 Reporting APIs.182183Offer an exact Studio handoff or supervised browser workflow. Do not silently184substitute a sequential rotation and call it a native A/B test.185186Google Ads campaign creation and mutation belong to an Ads operator. This skill187may ingest Ads campaign evidence and reconcile it with YouTube analytics, but it188must not invent Ads mutation methods inside the YouTube executor.189190## Implementation order1911921. Record product decisions: account keys/IDs, Slack-to-role mapping, which193 mutations require approval, public/private delivery, deterministic194 channel-comment marker, native versus sequential experiment policy, media195 storage, reporting windows, and any winner thresholds.1962. Inventory channels, exact IDs, OAuth ownership, runtimes, and current API197 grants.1983. Build account routing and token refresh with fail-closed channel verification.1994. Implement the typed raw method registry and read-only dry-run/normalization.2005. Add a provider-neutral external-action proposal, attempt, and audit ledger.2016. Add Slack/web proposal rendering and signed approval.2027. Ship metadata, thumbnail, comment, and playlist guided workflows.2038. Add Reporting API reach jobs and durable impact checkpoints.2049. Add resumable uploads, captions, live operations, and Studio handoffs.20510. Provision each additional channel independently and run live canaries.206207## Completion proof208209Do not report the operator complete until all applicable evidence exists:210211- OAuth grant stored in the intended runtime secret store;212- exact channel ID verified from the active grant;213- raw read and reversible write canary;214- approval actor and immutable audit row;215- drift conflict test;216- duplicate delivery/retry test;217- API readback or Studio owning-surface verification;218- analytics job/checkpoint proof when measurement is promised;219- paid/organic and attribution reconciliation when promotion is measured;220- refresh-token health check and explicit reauthorization failure handling;221- independent proof for every configured channel and runtime.