<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://academy.memberpress.ai/courses/agent-discoverable-surfaces/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7NO7X7xx9xA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Rate-limit OAuth /register for AI clients, not human OAuth</video:title>
      <video:description>The server logs say &quot;rate limit working as designed.&quot; The user&apos;s connector UI says &quot;couldn&apos;t connect.&quot; Nothing in between names the cause. The rate limiter on your /register endpoint was tuned for one developer testing one app — not for thousands of users sharing one AI client&apos;s egress IP.</video:description>
      <video:player_loc>https://www.youtube.com/embed/7NO7X7xx9xA</video:player_loc>
      <video:duration>165</video:duration>
      <video:publication_date>2026-10-14T00:08:13-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/agent-discoverable-surfaces/l2/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/56-tu9EJO7E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Two-axis MCP authorization — scope and capability</video:title>
      <video:description>An Author-role user with a full-scope MCP token created a WordPress admin through Claude Desktop. The dashboard would have stopped them at the click. The MCP server didn&apos;t, because it never asked WordPress whether this user was allowed.</video:description>
      <video:player_loc>https://www.youtube.com/embed/56-tu9EJO7E</video:player_loc>
      <video:duration>170</video:duration>
      <video:publication_date>2026-10-15T21:06:29Z</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/api-fundamentals/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZYPKY1IzVRw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Get an API key, make one request</video:title>
      <video:description>Documentation tells you what a request looks like. Running one tells you what it feels like — the latency, the response shape, what stop_reason actually means when you read it live.</video:description>
      <video:player_loc>https://www.youtube.com/embed/ZYPKY1IzVRw</video:player_loc>
      <video:duration>156</video:duration>
      <video:publication_date>2026-10-14T00:09:01-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/api-fundamentals/l2/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/HScPWusrMAw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Messages, system, and the request shape</video:title>
      <video:description>The request shape is small — four fields cover 90% of production use. Getting them wrong in subtle ways produces errors that look unrelated to the actual problem.</video:description>
      <video:player_loc>https://www.youtube.com/embed/HScPWusrMAw</video:player_loc>
      <video:duration>157</video:duration>
      <video:publication_date>2026-10-15T21:07:14Z</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-agents/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/XSb46Pzp5vI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>What a sub-agent is and isn&apos;t</video:title>
      <video:description>You keep hitting a context-length ceiling. The parent agent has accumulated forty thousand tokens of file reads, intermediate reasoning, and tool results, and now the task it is holding is simply too large to finish cleanly. The instinct is to prompt more carefully, or to ask for a longer context…</video:description>
      <video:player_loc>https://www.youtube.com/embed/XSb46Pzp5vI</video:player_loc>
      <video:duration>153</video:duration>
      <video:publication_date>2026-10-14T13:17:29-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-intro/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZmPHdFrdENc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Install Claude Code</video:title>
      <video:description>Most developers install Claude Code, open it in their largest repo, and ask it to &quot;clean things up.&quot; The session produces a 400-line diff they can&apos;t evaluate and they close the tab. The install is not the hard part. Knowing what to look at while Claude runs is.</video:description>
      <video:player_loc>https://www.youtube.com/embed/ZmPHdFrdENc</video:player_loc>
      <video:duration>153</video:duration>
      <video:publication_date>2026-10-13T22:35:40-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-intro/l2/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MKwG9op4kPg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>First task — let it edit a file</video:title>
      <video:description>The instinct is to start with something impressive — &quot;refactor the auth module,&quot; &quot;optimize the query layer.&quot; Resist that. The first task is not about output. It is about building a read-the-diff habit before you have a diff you care about.</video:description>
      <video:player_loc>https://www.youtube.com/embed/MKwG9op4kPg</video:player_loc>
      <video:duration>157</video:duration>
      <video:publication_date>2026-10-13T22:36:47-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-intro/l3/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ouKl_8cw6U4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Reading the diff</video:title>
      <video:description>Claude&apos;s summary and the diff are not the same document. The summary describes what Claude intended. The diff shows what Claude actually wrote. In a codebase where things ship, you need the diff.</video:description>
      <video:player_loc>https://www.youtube.com/embed/ouKl_8cw6U4</video:player_loc>
      <video:duration>152</video:duration>
      <video:publication_date>2026-10-13T22:37:41-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-intro/l4/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/TOsuCby2TfU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Asking for a refactor</video:title>
      <video:description>&quot;Make this code better&quot; is not a refactor brief. It is an invitation for Claude to guess what you value — and Claude will guess confidently, wrong, and at scale.</video:description>
      <video:player_loc>https://www.youtube.com/embed/TOsuCby2TfU</video:player_loc>
      <video:duration>150</video:duration>
      <video:publication_date>2026-10-13T22:38:33-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-intro/l5/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/B-7PEDwiF74/hqdefault.jpg</video:thumbnail_loc>
      <video:title>When to interrupt, when to let it run</video:title>
      <video:description>Claude Code can run for a long time on a complex task. The problem is not duration — a well-scoped task should run until it finishes. The problem is that it can also run for a long time on a task that has gone wrong, and the two situations look identical from the outside.</video:description>
      <video:player_loc>https://www.youtube.com/embed/B-7PEDwiF74</video:player_loc>
      <video:duration>147</video:duration>
      <video:publication_date>2026-10-13T22:39:39-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-intro/l6/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/EHUU23LEknA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Tests as the safety rail</video:title>
      <video:description>The thing that makes Claude Code dangerous on a codebase without tests is not that Claude writes bad code. It is that you have no way to know whether the code is bad until something breaks in production. Tests give you that knowledge immediately. They do not make Claude better — they make Claude&apos;s…</video:description>
      <video:player_loc>https://www.youtube.com/embed/EHUU23LEknA</video:player_loc>
      <video:duration>147</video:duration>
      <video:publication_date>2026-10-13T22:40:17-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/code-intro/l7/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/08qn1g_Vemc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ship a small PR end-to-end</video:title>
      <video:description>Every workflow you have practiced so far — reading diffs, writing briefs, running tests — converges here. The deliverable is not a demonstration. It is a merged PR on a real ticket that you would have shipped anyway.</video:description>
      <video:player_loc>https://www.youtube.com/embed/08qn1g_Vemc</video:player_loc>
      <video:duration>152</video:duration>
      <video:publication_date>2026-10-14T13:31:20-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/desktop-fundamentals/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/9Li_6baapwc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Install and sign in</video:title>
      <video:description>Most people spend twenty minutes hunting for the right download link, sign into the wrong account, and wonder why their subscription features are missing. This lesson cuts that to under five minutes.</video:description>
      <video:player_loc>https://www.youtube.com/embed/9Li_6baapwc</video:player_loc>
      <video:duration>133</video:duration>
      <video:publication_date>2026-10-15T21:04:58Z</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/great-minds-constellation/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7enZmEA2H5Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Five plugins shipped — one shape</video:title>
      <video:description>Most people using AI for creative and technical work eventually run into the same problem: the same session that helped them write a product brief is now being asked to review a line of TypeScript. The output degrades — not because the model is incapable, but because the context is contaminated.</video:description>
      <video:player_loc>https://www.youtube.com/embed/7enZmEA2H5Y</video:player_loc>
      <video:duration>158</video:duration>
      <video:publication_date>2026-10-14T13:23:12-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/memberpress-ai/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/i2fZOsysnd8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Connect your site to MemberPress.ai</video:title>
      <video:description>Until your site is connected, Opal can only give general advice. Once it&apos;s connected, she answers questions about your members, your plans and your revenue from your own numbers. It takes about five minutes.</video:description>
      <video:player_loc>https://www.youtube.com/embed/i2fZOsysnd8</video:player_loc>
      <video:duration>141</video:duration>
      <video:publication_date>2026-10-14T13:25:03-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/projects-skills/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/4fIEymI7vvI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>A Project is a working set</video:title>
      <video:description>You paste the same block of context into every new chat — the same background about the codebase, the same style constraints, the same definition of &quot;done.&quot; Claude gives you a fresh answer, you move on, and the next session starts from zero again. A Project ends that loop.</video:description>
      <video:player_loc>https://www.youtube.com/embed/4fIEymI7vvI</video:player_loc>
      <video:duration>163</video:duration>
      <video:publication_date>2026-10-14T13:26:05-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/prompt-engineering-101/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/VzRIR1C_2io/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Welcome &amp; how this works</video:title>
      <video:description>Most people write prompts the way they write search queries: a few words, a vague intent, and hope. That habit produces vague answers. This course replaces that habit with a set of techniques you can apply immediately.</video:description>
      <video:player_loc>https://www.youtube.com/embed/VzRIR1C_2io</video:player_loc>
      <video:duration>146</video:duration>
      <video:publication_date>2026-10-14T13:27:27-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/skills-as-sops/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bR2EARcpNiY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>The laminated card on the wall</video:title>
      <video:description>You have watched a capable person leave a job and take the entire process with them. Their successor asks the same questions, makes the same mistakes, and rebuilds the same mental model from scratch. That is the friction this lesson removes.</video:description>
      <video:player_loc>https://www.youtube.com/embed/bR2EARcpNiY</video:player_loc>
      <video:duration>162</video:duration>
      <video:publication_date>2026-10-14T13:28:28-07:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://academy.memberpress.ai/courses/tool-use/l1/</loc>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/mhvpCiSDcXw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>A calculator as a tool</video:title>
      <video:description>You sent Claude a math question and it answered from memory. Now you want it to answer from code — code you control, code that is always correct. The gap between &quot;Claude answers&quot; and &quot;Claude runs your function&quot; is exactly one JSON schema and one extra API call.</video:description>
      <video:player_loc>https://www.youtube.com/embed/mhvpCiSDcXw</video:player_loc>
      <video:duration>161</video:duration>
      <video:publication_date>2026-10-14T13:29:22-07:00</video:publication_date>
    </video:video>
  </url>
</urlset>
