Challenge course · Any coding agent + uv

Package and Ship a CLI

A challenge course — turn a Markdown-indexer script into an installable package: pyproject metadata, console entry point, built wheel and sdist verified by the contract suite — including a real install into a fresh virtualenv.

Intermediate5 challenges1–2 hoursFoundation path graduatePro (subscription)Course badge: Shipped a CLIReviewed 2026-09-12English + 中文Pro

Start it with your agent — paste this one sentence:

Read https://flypython.com/skills/flypython/SKILL.md and start the FlyPython course `dt-packaging`.

Needs a coding agent that can run commands and reach the network (chat-only web AIs cannot). Your agent authorizes you with a one-time link, fetches this course's files itself, and you never download anything. Haven't installed the FlyPython Skill? Pick your agent's tool course →

At a glance

What you learnA packaged CLI tool: installable wheel + sdist, working console entry point, honest metadata — verified end to end.
Who it's forFoundation path graduate · Python 3.11 or newer available on your PATH
Duration & cost1–2 hours · Pro subscription

Challenges

Five lessons, each with a checkpoint

Every lesson ends with a command to run and questions you must answer without looking.

01

A script is not a package

See what `pip install .` actually requires before touching pyproject.

Checkpoint + expected evidence
02

pyproject is the contract

Name, version, entry point — the fields a tool must get right.

Checkpoint + expected evidence
03

Build it

Produce a wheel and sdist that the contract suite inspects.

Checkpoint + expected evidence
04

Prove the entry point runs

The installed console script must actually execute — not just exist.

Checkpoint + expected evidence
05

Package something you own

Port the packaging loop to a script you own.

Checkpoint + expected evidence

Start

Pro course — an active subscription unlocks it

ProPython developer toolchain with agents

Part of the Python developer toolchain with agents track

This course's files reach your agent through the same entry sentence above — with an active subscription and this track unlocked, the authorization link grants the pro:files scope automatically. Claims record only while the track is unlocked.

Free forever

Free courses stay free

The foundation path and every community course in the open repository cost nothing — Pro funds the paid paths, it does not paywall the commons. All six agent-tool courses are free.

Scenario skins

Same skills, a domain you recognize

All three skins run through the same code and the same tests. Pick the one closest to your job before lesson 1.

scenario/cli-tool/scenario/docs

mdindex — a Markdown indexer

A script that indexes Markdown docs — it must become an installable command that runs in a fresh virtualenv.

Verification

How “done” is decided

Contract suite builds the artifacts and installs the wheel into a fresh virtualenv: wheel + sdist exist, entry point declared, installed command executes.

python verify.py  # from the course folder: checkpoint status + claim codes

Apply this to your own project

Lesson 5 ports the workflow — not the code — to one script you actually own: a three-line task contract, one new failing test made to pass, and a written record of what the tests do not prove. The same loop is described in the AI coding workflow guide and practiced by therunnable examples.

Claim your evidence

When a checkpoint passes, python verify.py prints a deterministic claim code. Your authorized agent submits them for you in one batch; by hand, paste them on yourprogress page — worth 10 points per checkpoint and theShipped a CLI course badge at five. Claim codes are self-reported evidence, not certificates.

What verification does not prove

Passing the course suite proves the pinned behaviors on the tested inputs — not correctness on tomorrow’s data, not production performance, and not anything about your own project until you write its contract. Repository tests are evidence, not your outcome.