Skip to content

EverythingAI-Pro/claude-skool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

claude-skool

Build your Skool.com community classroom from the command line — and let Claude Code do it for you.

The official Skool API has no public docs and the closest community tool (skool-pp-cli) is read-only for classroom. claude-skool fills the gap: list courses, create courses, write lessons, update lesson bodies — from natural-language conversation with Claude Code, or from a plain terminal.

Use it to publish written guides under video-only lessons, to scaffold a brand-new course from a markdown folder, or to operate your community alongside Claude as a co-pilot.


Install (60 seconds)

curl -fsSL https://raw.githubusercontent.com/EveryThingAI-Hub/claude-skool/main/install.sh | bash

That puts the skool command on your PATH and registers the skill with Claude Code (~/.claude/skills/claude-skool). Requires Python 3.9+. Nothing else — no Node, no Go, no Rust toolchain.

One-time auth

Open Chrome, log into skool.com, then grab your auth_token cookie:

  1. DevTools → ApplicationCookieshttps://www.skool.com
  2. Copy the Value of the auth_token row (a JWT, starts with eyJ...)
  3. Save it:
mkdir -p ~/.config/claude-skool
echo "auth_token=eyJ..." > ~/.config/claude-skool/token

Or, if you already have skool-pp-cli installed and logged in via Chrome, claude-skool will reuse that token automatically — nothing to set.

Or, for CI / agents:

export SKOOL_TOKEN=eyJ...

Quickstart

# List all courses in a community (use your community's URL slug)
skool list-courses --community your-community-slug

# Show the lesson tree inside a course
skool list-lessons --course-id <course-id-from-above>

# Create a brand-new course (dry-run by default)
skool create-course --community your-community-slug --title "Welcome to the Community"

# Add --confirm to actually send
skool create-course --community your-community-slug --title "Welcome to the Community" --confirm

# Write a markdown file as a new lesson under a course
skool create-lesson \
  --community your-community-slug \
  --course-id <course-id> \
  --title "Lesson One" \
  --md ./lesson_one.md \
  --confirm

# Replace a lesson's body — must match the current title exactly
skool update-lesson \
  --lesson-id <lesson-id> \
  --expect-title "Exact Current Title" \
  --md ./updated_body.md \
  --confirm

# Preview the TipTap JSON your markdown will turn into (no network)
skool md-preview --md ./lesson_one.md

Using it with Claude Code

After the installer runs, Claude Code will see the claude-skool skill in its skill list. Just talk to it:

"List my courses in my-community-slug. Then create a new lesson under the Onboarding course titled 'Quick Start' from the markdown file at ~/Documents/onboarding.md."

Claude will:

  1. Run skool list-courses --community my-community-slug and show you the IDs.
  2. Run skool create-lesson ... without --confirm first, show you the dry-run, and ask you to approve.
  3. Run it again with --confirm once you say go.

Safety model (don't bypass)

  • Dry-run by default. Every write command requires --confirm to actually send.
  • No delete capability. This tool can't delete courses or lessons. Use Skool's web UI by hand if you need to remove something.
  • update-lesson is title-guarded. You must pass --expect-title "Exact Current Title". If it doesn't match, the tool refuses to send. This is the guard that stops you from overwriting the wrong live lesson when paying members are watching.
  • First write goes to a throwaway course. Make a ZZ TEST - Delete Me course, write a test lesson into it, verify it looks right in Skool, then aim at your real course.

Markdown support

Dependency-free. Handles:

  • # ## ### headings
  • ``` fenced code blocks
  • - item and 1. item lists
  • --- horizontal rules
  • > quote blockquotes
  • Inline `code`, **bold**, [label](url)

How it works (the unfun details)

Skool's web app talks to https://api2.skool.com with cookie auth (NOT Bearer — Bearer returns 401). The classroom endpoints:

Action Method + Path
Resolve community slug → group_id GET /communities/<slug>
List courses GET /groups/<group_id>/courses
Get course + lessons GET /courses/<id>?withChildren=true
Create course/lesson POST /courses
Update lesson PUT /courses/<id>

Lesson bodies live in metadata.desc as TipTap JSON, prefixed with [v2]. This tool converts markdown to that format automatically.


Companion tools

This skill pairs with the official, MIT-licensed skool-pp-cli (the read-only CLI from the Printing Press Library family). If you have it installed, this skill will reuse its stored token. The two tools complement each other:

  • skool-pp-cli — leaderboard, posts, members, calendar, digest, full-text search over local sync
  • claude-skool — list/create/update classroom courses and lessons

License

MIT. See LICENSE.

Disclaimer

This tool uses Skool's private (undocumented) API. It is not affiliated with or endorsed by Skool. Skool may change those endpoints at any time. Use at your own risk; "claude-skool" is not responsible for any classroom content you publish.

About

Build your Skool.com community classroom from the CLI — and let Claude Code do it for you. The missing write half of the Skool API.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages