agentleFS
uplikauplika/uplika-plugin/skills/yt-chapters/SKILL.md

yt-chapters

Skill3 starsChanged 34 days agoMITView on GitHub

Write YouTube chapters from a transcript, checked against YouTube's chapter rules so they render, and add them to the video. For chapters, timestamps.

6 other projects use a version of this, 4 of them edited.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 4 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Put the block into that description (after the first two lines and any link, the way the yt-seo skill lays it out) and show the whole new …

    line 47
  2. Very specific:

    If a call answers workspace_required, show the workspaces it lists, ask which one, and pass workspaceId.

    line 50

“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Adapted from Jakeschincariol/youtube-agent-skill (MIT). Not affiliated with the original author.

yt-chapters

Chapters from a timestamped transcript. Use it for "add chapters", "timestamps", "break this video into sections". From this skill's folder:

python3 scripts/chapters.py transcript.srt --target 8

The input is the transcript (srt, vtt or whisper json). When a shell is available and the video is on YouTube, this saves its automatic captions (use the video's language code):

yt-dlp --skip-download --write-auto-subs --sub-langs ko --convert-subs srt "<video link>"

Without a shell (claude.ai, ChatGPT) the script cannot run: draft the boundaries by hand from the transcript and check the rules below yourself.

The rules, which are not optional

A chapter list that breaks any of these silently does not become chapters at all: the block just sits in the description doing nothing.

  • The first entry must be 00:00.
  • There must be at least three.
  • Each must be at least 10 seconds long.

These are YouTube's chapter rules as chapters.py checks them; no Uplika tool returns them. The tool checks all three and tells you when a list is invalid rather than letting you paste it.

Retitle every line

chapters.py finds the BOUNDARIES well: it scores the pauses the speaker actually took by how much the vocabulary shifts across them. The titles it emits are the topic words, and they are a draft. A chapter called "Thumbnails Titles Packaging" is a placeholder. Rewrite each one as the promise of that section, in the person's voice (read ~/.uplika/<workspace-slug>/voice.md if it exists; if not, the voice-profile skill can create it), three to five words.

Chapters are also a retention diagnostic: if a section cannot be named in five words, it is two sections or it is filler.

Korean transcripts: chapters.py reads Hangul words for the vocabulary shift and the draft titles (the original read none, so every Korean title came out as "Section"). The words keep their particles, and the run is marked Korean: heuristic, not calibrated. Rewrite every title anyway.

With Uplika connected

The chapter block goes in the description. After the person approves the block and where it sits:

  1. Find the YouTube account in list_accounts and read the video's current title and description from list_channel_posts (each item's text is the title, a blank line, then the description). For an older video that is not in the list, ask the person to paste the current description.
  2. Put the block into that description (after the first two lines and any link, the way the yt-seo skill lays it out) and show the whole new description.
  3. Call update_post with the video link as id, wait: true, the new description as content, and the current options.youtube.title. Always send the title: for a video uploaded through Uplika, options replaces what Uplika has on record and YouTube needs a title. Send no other options.youtube field; the rest stay as they are on YouTube.
  4. YouTube measures the description with its own rule (list_platforms has it); if the new one is too long, the call says so. Read the result and any warning out to the person.
  5. If a call answers workspace_required, show the workspaces it lists, ask which one, and pass workspaceId. A channel that is not connected: https://uplika.com/dashboard/connections. Other errors: get_help with the code; account_disconnected goes to the troubleshoot skill.
  6. youtube_quota_exhausted from update_post or list_channel_posts, or an update_post result with youtube_daily_cap: Uplika's daily YouTube limit, which everyone on Uplika shares, ran out: stop and do not repeat the call, tell the person when it refills (resetsAt, or the time in the message), and do not ask them to reconnect, because it is not their account (faq:youtube-daily-limit).

Without Uplika

The person pastes the block under the video in YouTube Studio themselves.

The gate

Nothing goes out until the person says yes. Every output ends in a block they can copy, and the last line of every run is the question: ship it, or change it? With Uplika connected, "ship it" means you add the block with update_post.

Tools

  • list_accounts: the YouTube account id
  • list_channel_posts: the video's current title and description
  • update_post: put the approved chapter block into the description
  • list_platforms: YouTube's description rule
  • get_help: the answer for an error code

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.