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.
curl -fsSL https://raw.githubusercontent.com/EveryThingAI-Hub/claude-skool/main/install.sh | bashThat 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.
Open Chrome, log into skool.com, then grab your auth_token cookie:
- DevTools → Application → Cookies →
https://www.skool.com - Copy the Value of the
auth_tokenrow (a JWT, starts witheyJ...) - Save it:
mkdir -p ~/.config/claude-skool
echo "auth_token=eyJ..." > ~/.config/claude-skool/tokenOr, 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...# 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.mdAfter 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:
- Run
skool list-courses --community my-community-slugand show you the IDs. - Run
skool create-lesson ...without--confirmfirst, show you the dry-run, and ask you to approve. - Run it again with
--confirmonce you say go.
- Dry-run by default. Every write command requires
--confirmto 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-lessonis 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 Mecourse, write a test lesson into it, verify it looks right in Skool, then aim at your real course.
Dependency-free. Handles:
# ## ###headings```fenced code blocks- itemand1. itemlists---horizontal rules> quoteblockquotes- Inline
`code`,**bold**,[label](url)
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.
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 syncclaude-skool— list/create/update classroom courses and lessons
MIT. See LICENSE.
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.