You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+33-37Lines changed: 33 additions & 37 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,57 +1,55 @@
1
-
# pyckage
1
+
# python-package-development
2
2
3
-
> *"Just as Hadley Wickham brought the Grammar of Graphics to R as ggplot2, pyckage brings the philosophy of R package development to Python."*
3
+
> *"Just as Hadley Wickham brought the Grammar of Graphics to R as ggplot2, this skill brings the philosophy of R package development to Python."*
4
4
5
-
## What is pyckage?
5
+
## What is this?
6
6
7
-
**pyckage** is a [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill that teaches Claude how to build Python packages the right way — using the hard-won wisdom of the R package ecosystem.
7
+
**python-package-development** is a [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill that teaches Claude how to build Python packages the right way — using the hard-won wisdom of the R package ecosystem.
8
8
9
9
Python has incredible packages. But it has never had a unified philosophy for *building* them. The R world has one: Hadley Wickham's [*R Packages*](https://r-pkgs.org/) book (with Jenny Bryan), backed by tools like `devtools`, `usethis`, `roxygen2`, `cli`, and `lifecycle`.
10
10
11
-
pyckage translates that philosophy into Python using modern tools: `uv`, `rich`, `pytest`, and `mkdocs-material`.
11
+
This skill translates that philosophy into Python using modern tools: `uv`, `rich`, `pytest`, and `mkdocs-material`.
12
+
13
+
> Looking for the CLI tool? See [packright](https://github.com/Naareman/packright) — the companion Python package that automates these conventions from the command line.
Or just describe what you need — pyckage will activate when it recognizes a Python packaging task:
52
+
Or just describe what you need — the skill activates when it recognizes a Python packaging task:
55
53
56
54
-*"I want to make a Python library"*
57
55
-*"Help me structure my code as a package"*
@@ -61,23 +59,23 @@ Or just describe what you need — pyckage will activate when it recognizes a Py
61
59
## The Philosophy (what R taught us)
62
60
63
61
### 1. User communication is a first-class concern
64
-
R's `cli` package made it easy to produce beautiful, structured messages. **pyckage**brings this to Python through `rich` and structured exception hierarchies.
62
+
R's `cli` package made beautiful, structured messages easy. This skill brings that to Python through `rich` and structured exception hierarchies.
65
63
66
64
### 2. Function names form a grammar
67
-
Tidyverse packages use `verb_noun()` consistently. Users can *guess* function names because the grammar is predictable.**pyckage** encodes naming conventions that make your API feel intentional.
65
+
Tidyverse packages use `verb_noun()` consistently. Users can *guess* function names because the grammar is predictable.
68
66
69
67
### 3. Lifecycle deserves ceremony
70
-
R's `lifecycle` package gave deprecations a formal process. Users are never surprised.**pyckage** brings the same discipline to Python's `warnings` system.
68
+
R's `lifecycle` package gave deprecations a formal process. Users are never surprised.
71
69
72
70
### 4. Documentation lives next to code
73
-
`roxygen2` made it impossible to forget documentation. **pyckage**enforces Google-style docstrings + `mkdocstrings` so docs are always a byproduct of writing good code.
71
+
`roxygen2` made it impossible to forget documentation. This skill enforces Google-style docstrings + `mkdocstrings`.
74
72
75
73
### 5. There is a whole game
76
-
Before diving into details, you should be able to see the whole thing working end-to-end. **pyckage** gives you a complete, working package skeleton from the first command.
74
+
Before diving into details, you should see the whole thing working end-to-end.
A skill for building Python packages with the philosophy of the R package ecosystem:
15
15
clear user communication, principled API design, living documentation, and ceremonial lifecycle management.
@@ -103,22 +103,22 @@ Key decisions encoded here:
103
103
104
104
## Argument Routing
105
105
106
-
When invoked with `/pyckage <subcommand>`, route based on the first argument:
106
+
When invoked with `/python-package-development <subcommand>`, route based on the first argument:
107
107
108
108
| Invocation | Action |
109
109
|---|---|
110
-
|`/pyckage scaffold <name>`| Read [references/01-scaffold.md](references/01-scaffold.md) and create a new package named `<name>`|
111
-
|`/pyckage api`| Read [references/02-api-design.md](references/02-api-design.md) and review/improve the current package's API |
112
-
|`/pyckage test`| Read [references/03-testing.md](references/03-testing.md) and set up or improve tests |
113
-
|`/pyckage docs`| Read [references/04-docs.md](references/04-docs.md) and set up or improve documentation |
114
-
|`/pyckage lifecycle`| Read [references/05-lifecycle.md](references/05-lifecycle.md) and manage deprecations |
115
-
|`/pyckage release`| Read [references/06-release.md](references/06-release.md) and walk through the release ritual |
116
-
|`/pyckage check`| Read [references/07-common-mistakes.md](references/07-common-mistakes.md) and audit current project for anti-patterns |
117
-
|`/pyckage pre-commit`| Read [references/08-pre-commit.md](references/08-pre-commit.md) and set up pre-commit hooks |
118
-
|`/pyckage cli`| Read [references/09-cli-entry-points.md](references/09-cli-entry-points.md) and add a CLI to the package |
119
-
|`/pyckage` (no args) | Assess the current project against all five principles (see checklist below) |
120
-
121
-
When invoked without a subcommand (auto-triggered or plain `/pyckage`), run this assessment:
110
+
|`/python-package-development scaffold <name>`| Read [references/01-scaffold.md](references/01-scaffold.md) and create a new package named `<name>`|
111
+
|`/python-package-development api`| Read [references/02-api-design.md](references/02-api-design.md) and review/improve the current package's API |
112
+
|`/python-package-development test`| Read [references/03-testing.md](references/03-testing.md) and set up or improve tests |
113
+
|`/python-package-development docs`| Read [references/04-docs.md](references/04-docs.md) and set up or improve documentation |
114
+
|`/python-package-development lifecycle`| Read [references/05-lifecycle.md](references/05-lifecycle.md) and manage deprecations |
115
+
|`/python-package-development release`| Read [references/06-release.md](references/06-release.md) and walk through the release ritual |
116
+
|`/python-package-development check`| Read [references/07-common-mistakes.md](references/07-common-mistakes.md) and audit current project for anti-patterns |
117
+
|`/python-package-development pre-commit`| Read [references/08-pre-commit.md](references/08-pre-commit.md) and set up pre-commit hooks |
118
+
|`/python-package-development cli`| Read [references/09-cli-entry-points.md](references/09-cli-entry-points.md) and add a CLI to the package |
119
+
|`/python-package-development` (no args) | Assess the current project against all five principles (see checklist below) |
120
+
121
+
When invoked without a subcommand (auto-triggered or plain `/python-package-development`), run this assessment:
122
122
123
123
1.**Structure** — Is there a `src/` layout? Does `__init__.py` have `__all__`?
124
124
2.**Communication** — Is there an `errors.py` with a base exception? A `_messages.py` with `rich`?
0 commit comments