10x-cli
CLI tool for 10xDevs course content. Fetch and apply AI coding skills, prompts, and configs directly into your workspace.
Requirements
- Node 20+ — this is the only runtime dependency.
Install
# Zero-install — run directly with npx (no global install needed)
npx @przeprogramowani/10x-cli auth
npx @przeprogramowani/10x-cli get m1l1
# Or install globally for shorter commands
npm install -g @przeprogramowani/10x-cli
# Or download a standalone binary from GitHub Releases
# https://github.com/przeprogramowani/10x-cli/releases
Agentic Installation
Let your AI coding agent handle the setup. This repo ships a 10x-cli-setup skill that walks your agent through installing, authenticating, and configuring the CLI — all driven by the latest README.
Install the skill with skills.sh:
# Add the skill to your current project (symlinked)
npx skills add przeprogramowani/10x-cli
# Or install globally so it's available in every project
npx skills add przeprogramowani/10x-cli -g
# Target a specific agent
npx skills add przeprogramowani/10x-cli -a claude-code
npx skills add przeprogramowani/10x-cli -a cursor
Once installed, just tell your agent to set up 10x-cli and it will pick up the skill automatically.
Quick Start
10x auth # Authenticate with your email
10x list # Browse available modules and lessons
10x get m1l1 # Fetch and apply lesson artifacts
10x sync # Update everything you've downloaded; show what changed
10x doctor # Check everything is working
10x bench # Show the 10xBench top-10 model leaderboard
Commands
| Command | Description |
|---|---|
10x auth |
Magic-link login with your Circle-registered email |
10x list |
Browse modules and lessons in your course |
10x get <ref> |
Fetch a lesson and apply artifacts to your workspace |
10x sync |
Bulk-download / refresh lessons and report what changed upstream |
10x doctor |
Diagnose auth, API connectivity, and local config |
10x bench |
Live top-10 AI model leaderboard from 10xbench.ai — no login needed |
10x bench-kit <action> |
Create (init) and update (update) a company benchmark instance from the 10x-bench-kit template |
10x get Flags
| Flag | Description |
|---|---|
--tool <tool> |
AI coding tool: claude-code, cursor, copilot, codex, devin-desktop, gemini, generic |
--print |
Output artifact content to stdout instead of writing files |
--type <type> |
Filter by artifact type: skills, prompts, rules, configs |
--name <name> |
Filter by artifact name (requires --type) |
--dry-run |
Show what would be written without touching the filesystem |
--course <slug> |
Select an entitled course ID or slug; default is the project edition or API recommendation |
--no-course-rules |
Skip the course rules block in your rules file (CLAUDE.md/AGENTS.md); removes an unchanged block whose ownership and baseline are known. Use --course-rules to re-enable. |
Examples
# Fetch full lesson — writes skills, prompts, rules, configs
10x get m1l1
# Write only skills (skip prompts, rules, configs)
10x get m1l1 --type skills
# Write a single artifact
10x get m1l1 --type skills --name code-review
# Print to stdout (pipe-friendly)
10x get m1l1 --print --type skills --name code-review
10x get m1l1 --print --type skills --name code-review | pbcopy
# Use with a different AI coding tool
10x get m1l1 --tool cursor
# Skip the course rules block (use only your rules). Persisted across runs;
# an unchanged block with a known baseline is removed. Re-enable later with --course-rules.
10x get m1l1 --no-course-rules
10x get m1l2 --course-rules
# An explicit rules request always applies, even with the opt-out persisted
10x get m1l1 --type rules
The
--no-course-rules/--course-ruleschoice is saved ascourseRulesinconfig.jsonand applies to subsequent plain10x getruns. An explicit--type rulesrequest overrides the opt-out for that run. Skills, prompts, and config-templates are unaffected.
10x sync
10x sync keeps your downloaded lessons up to date and tells you what changed
upstream since you last fetched. By default it refreshes only the lessons you've
already downloaded; --all pulls every unlocked lesson at once.
Unchanged lessons are skipped without a download — the catalog advertises a
per-lesson contentHash that the CLI compares against what it last applied, so the
common "nothing changed" case avoids lesson downloads. Skipping also requires the same language/tool/rules representation and intact tracked local files; missing files are repaired and local edits still surface as conflicts.
| Flag | Description |
|---|---|
--all |
Sync every unlocked lesson, not just the ones you've downloaded |
--module <m> |
Limit to one module (e.g. m2 or 2) |
--dry-run |
Preview what would change without writing anything |
--force |
Fetch again and overwrite local skill/prompt edits; protected rules and config templates remain guarded |
--tool <tool> |
AI coding tool (same set as get) |
--lang <lang> |
Content language: en (default) or pl |
--course <slug> |
Select an entitled course ID or slug; default is the project edition or API recommendation |
--no-course-rules |
Skip the course rules block (same semantics as get) |
# Refresh everything you've already downloaded; report what moved
10x sync
# Pull every unlocked lesson in one shot (fresh project)
10x sync --all
# Preview changes without writing
10x sync --dry-run
# Only module 2
10x sync --module m2
# Take all upstream updates, overwriting local edits
10x sync --force
The report classifies every resource as upstream-updated, created, unchanged, skipped (conflict), or removed. When a file you edited locally also changed upstream, sync keeps your edit and prints the exact command to take the update, e.g.:
m2l3 — conflicts (1 skipped)
skipped skills/auth-skill (SKILL.md) — you edited it → 10x get m2l3 --type skills --name auth-skill
Run that 10x get … to take a single update, or 10x sync --force to take them
all for skills and prompts. Config templates are create-only. Course rules retain a separate upstream baseline: local edits or a missing baseline require explicit resolution, including when --force or --no-course-rules is used. Text outside the managed markers is preserved.
Exit code is worst-outcome: 0 when everything is clean/unchanged (a skipped
conflict is reported, not a failure), 1 if any lesson failed to fetch. The full
report is still emitted on a partial failure.
10x bench
Shows the 10xBench leaderboard — the top 10 AI models benchmarked on vibe-coding the Przeprogramowani.pl website — rendered as color-coded score bars in your terminal. Public data, works without logging in.
10x bench # Top 10 models with scores, runs, and cost per run
10x bench --limit 5 # Just the top 5
10x bench --json # Machine-readable (also auto-selected when piped)
The data refreshes whenever new benchmark results are published on 10xbench.ai.
Colors honor NO_COLOR and are disabled automatically when output is piped.
10x bench-kit
Creates and maintains a company benchmark instance from the 10x-bench-kit template — a self-hosted benchmark that scores AI agents on tasks embedded in your own repositories. The CLI is a thin installer/updater; tasks, assertions, and scoring live in the template and the instance.
| Action | Description |
|---|---|
init [dir] |
Materialize a fresh instance from the template (no git history, fresh git init), register the detected base repo, install runner dependencies |
update [dir] |
Upgrade the instance to a newer template: runtime zone replaced wholesale, skills proposed as a reviewable diff, company content untouched |
| Flag | Description |
|---|---|
--template-version <tag> |
Template tag to install (default: latest) |
--tool <id> |
Agent tool for skill placement (claude-code, cursor, copilot, codex, devin-desktop, gemini, generic) |
--yes |
Run non-interactively, accepting defaults |
# Create an instance next to your product repo (run inside it to auto-register)
10x bench-kit init my-benchmark
# Pin the template version
10x bench-kit init my-benchmark --template-version v0.8.0
# Upgrade an existing instance to the latest template
10x bench-kit update
Re-running init on an existing instance is a repair: missing template
files are restored, company content is never touched. After update, run the
instance's bench validate to confirm the content still matches the new kit.
Global Flags
--json— Machine-readable JSON output (auto-detected when piped)--verbose— Request/response diagnostics on stderr--version— Print CLI version--help— Show help
Lesson References
Lessons are referenced by module and lesson number:
m1l1— Module 1, Lesson 1m2l3— Module 2, Lesson 3
Multi-Tool Support
On first run, the CLI prompts you to choose your AI coding tool. Artifacts are written to the correct directory for your tool:
| Tool | Directory | Rules file |
|---|---|---|
| Claude Code | .claude/ |
CLAUDE.md |
| Cursor | .cursor/ |
.cursor/rules/10x-course.mdc |
| GitHub Copilot | .github/ |
.github/copilot-instructions.md |
| Codex CLI | .agents/ |
AGENTS.md |
| Devin Desktop | .devin/ |
AGENTS.md |
| Gemini CLI | .gemini/ |
GEMINI.md |
| Generic | .ai/ |
AGENTS.md |
Override with --tool <name>. Validated writing commands save your choice in ~/.config/10x-cli/config.json. Previews leave it unchanged.
The former windsurf ID remains accepted as an alias and is upgraded to
devin-desktop; existing .windsurf/ artifacts can be migrated by the normal
tool-switch prompt.
Development
bun install
bun run dev -- --help # Run CLI from source
bun run build # Build dist/index.mjs (node target)
bun run build:binary # Build standalone binary (~59MB)
bun test # Run tests
bun run typecheck # tsc --noEmit
bun run lint # oxlint
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Commit using conventional commits (
feat:,fix:, etc.) - Push and open a pull request
CI runs lint, typecheck, tests, and build checks on every PR. Releases are automated on merge to master via conventional-commit analysis.
License
MIT
Course selection and project edition
get, list, and sync select the explicit --course first, then the project's edition, then the live API recommendation. A new project with only v3 access selects v3, with only v4 selects v4, and with both selects published, available v4. An unpublished v4 can leave v3 as the recommendation; network or backend failures are reported instead of falling back. Output includes the course and selection reason.
The first validated write records { "version": 1, "course": "10xdevs4" } (or 10xdevs3) in the root .10x-cli.json, shared across AI tool profiles. Existing supported v2/v3 manifests preserve their recorded edition. All profiles, including legacy Windsurf, must agree. Corrupt, unknown-version, or conflicting manifests block writes and must be preserved for repair. Artifact names never infer an edition.
Ordinary get and sync cannot change a bound project's edition. Start v4 in a separate directory while retaining the v3 project. Read-only inspection of another entitled edition is allowed with --course. Do not delete the binding or manifests to bypass an edition conflict. Course edition and manifest schema version are separate concepts.
list, get --print, get --dry-run, sync --dry-run, and doctor preserve project files and tool/language preferences, including interactive tool choices. Auth token rotation may update only the credential store. Failed download, signature, course, or path validation leaves a new project unbound. Once writing starts, its binding remains even if an I/O operation fails, so retry stays on the same edition. auth --status and doctor distinguish token expiry from live course access.
Candidate verification and v4 release
Using v4 requires a CLI version with course discovery and project edition binding.
Existing v3 projects remain usable without a new flag or an edition migration.
Start v4 in a separate project directory; this release includes no edition migration
command. Support files inside each skill directory are downloaded together with
SKILL.md, including selector and stack-assessment references.
Before publication, CI tests the exact CLI and Toolkit candidate commits together on Linux and Windows using real local auth callback, polling and token refresh. It also exercises the actual released npm 1.20.0 CLI against the candidate API and this candidate against existing v2/v3-manifest projects. Automated fixtures send no emails. npm latest or a different branch cannot stand in for the candidate binary.
The private Toolkit release runbook docs/how-to/release-10xdevs4-cli.md documents
the required full candidate SHA pair, vetted v3 fixture artifact, exact v4 stage
and secured preparation Worker/content revisions. Publication depends on the
coordinated gate plus normal Linux/Windows tests, builds and smoke checks. The
operator must still verify secured production access and final v4 content before
npm publication; passing a local test does not execute that rollout.
For deterministic contract checks, export /openapi.json from the exact local
candidate Worker, then run:
OPENAPI_SPEC_PATH=/absolute/candidate-openapi.json bun run generate-types --check
Check mode reads that file and compares the generated result without changing
src/generated/api-types.ts. To regenerate, omit --check while keeping the same
source file. Do not regenerate candidate contracts from the production API.