Skip to content

Commit 13f2333

Browse files
Naaremanclaude
andcommitted
Rename skill from pyckage to python-package-development
- Skill name: python-package-development (descriptive, follows posit-dev convention) - Future PyPI package will be: packright (separate repo) - GitHub repo renamed: Naareman/python-package-development - Updated all /pyckage references to /python-package-development - Updated README with new install/usage instructions - Added link to future packright companion package Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 0ca01dd commit 13f2333

File tree

3 files changed

+49
-53
lines changed

3 files changed

+49
-53
lines changed

README.md

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,55 @@
1-
# pyckage
1+
# python-package-development
22

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."*
44
5-
## What is pyckage?
5+
## What is this?
66

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.
88

99
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`.
1010

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.
1214
1315
## Installation
1416

1517
### For all your projects (personal scope)
1618

1719
```bash
18-
# Clone the repo
19-
git clone https://github.com/Naareman/pyckage.git
20-
21-
# Copy to your Claude skills directory
22-
cp -r pyckage ~/.claude/skills/pyckage
20+
git clone https://github.com/Naareman/python-package-development.git
21+
cp -r python-package-development ~/.claude/skills/python-package-development
2322
```
2423

2524
### For a single project (project scope)
2625

2726
```bash
28-
# From your project root
2927
mkdir -p .claude/skills
30-
cp -r /path/to/pyckage .claude/skills/pyckage
28+
cp -r /path/to/python-package-development .claude/skills/python-package-development
3129
```
3230

3331
### Verify it's installed
3432

35-
In Claude Code, run `/pyckage` — you should see it in the skill list.
33+
In Claude Code, run `/python-package-development` — you should see it in the skill list.
3634

3735
## Usage
3836

39-
pyckage activates automatically when you're working on Python package tasks. You can also invoke it explicitly:
37+
The skill activates automatically when you're working on Python package tasks. You can also invoke it explicitly:
4038

4139
```
42-
/pyckage scaffold my-new-package # Create a new package from scratch
43-
/pyckage api # Review and improve your API design
44-
/pyckage test # Set up or improve tests
45-
/pyckage docs # Set up mkdocs + docstrings
46-
/pyckage lifecycle # Manage deprecations and versioning
47-
/pyckage release # Walk through the PyPI release ritual
48-
/pyckage check # Audit your project for common mistakes
49-
/pyckage pre-commit # Set up pre-commit hooks
50-
/pyckage cli # Add a CLI to your package
51-
/pyckage # Assess your project against all 5 principles
40+
/python-package-development scaffold my-new-package
41+
/python-package-development api
42+
/python-package-development test
43+
/python-package-development docs
44+
/python-package-development lifecycle
45+
/python-package-development release
46+
/python-package-development check
47+
/python-package-development pre-commit
48+
/python-package-development cli
49+
/python-package-development
5250
```
5351

54-
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:
5553

5654
- *"I want to make a Python library"*
5755
- *"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
6159
## The Philosophy (what R taught us)
6260

6361
### 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.
6563

6664
### 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.
6866

6967
### 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.
7169

7270
### 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`.
7472

7573
### 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.
7775

78-
## What pyckage Covers
76+
## What This Skill Covers
7977

80-
| Stage | R equivalent | Python (pyckage) |
78+
| Stage | R equivalent | Python |
8179
|---|---|---|
8280
| Scaffold | `usethis::create_package()` | `uv init` + src layout |
8381
| Dependency management | `DESCRIPTION` + `devtools` | `pyproject.toml` + `uv` |
@@ -92,7 +90,7 @@ Before diving into details, you should be able to see the whole thing working en
9290
## Skill Structure
9391

9492
```
95-
pyckage/
93+
python-package-development/
9694
├── SKILL.md # Main skill definition (philosophy + routing)
9795
├── README.md # This file
9896
├── examples/
@@ -111,24 +109,22 @@ pyckage/
111109
│ └── 11-automated-release.md # Automated version bumps + changelog
112110
├── scripts/
113111
│ ├── count-tokens.py # Token budget checker
114-
│ └── check-structure.py # Audit project against pyckage conventions
112+
│ └── check-structure.py # Audit project against conventions
115113
└── .github/
116114
└── workflows/
117115
└── check-budget.yml # CI: token budget check on PRs
118116
```
119117

120118
## Token Budget
121119

122-
pyckage follows [posit-dev/skills](https://github.com/posit-dev/skills) conventions for skill size:
120+
Follows [posit-dev/skills](https://github.com/posit-dev/skills) (Posit, the company behind RStudio) conventions:
123121

124122
- SKILL.md description: under 100 tokens
125123
- SKILL.md body: under 5,000 tokens / 500 lines
126124
- Reference files: loaded on demand (no hard limit)
127125

128-
Check with:
129126
```bash
130127
python3 scripts/count-tokens.py .
131-
# Install tiktoken for exact counts: pip install tiktoken
132128
```
133129

134130
## Contributing

SKILL.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
name: pyckage
2+
name: python-package-development
33
description: >
44
Build Python packages the right way — R-inspired philosophy for scaffolding, API design,
55
testing, docs, deprecation lifecycle, and PyPI release using uv, rich, pytest, and
@@ -9,7 +9,7 @@ description: >
99
argument-hint: "[scaffold|api|test|docs|lifecycle|release|check|pre-commit|cli] [package-name]"
1010
---
1111

12-
# pyckage
12+
# python-package-development
1313

1414
A skill for building Python packages with the philosophy of the R package ecosystem:
1515
clear user communication, principled API design, living documentation, and ceremonial lifecycle management.
@@ -103,22 +103,22 @@ Key decisions encoded here:
103103

104104
## Argument Routing
105105

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:
107107

108108
| Invocation | Action |
109109
|---|---|
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:
122122

123123
1. **Structure** — Is there a `src/` layout? Does `__init__.py` have `__all__`?
124124
2. **Communication** — Is there an `errors.py` with a base exception? A `_messages.py` with `rich`?

scripts/count-tokens.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def main() -> None:
105105
files.extend(sorted(scripts_dir.glob("*.py")))
106106

107107
# Header
108-
print(f"\n pyckage token budget: {skill_name}")
108+
print(f"\n skill token budget: {skill_name}")
109109
print(f" Method: {method}")
110110
print(f" {'=' * 64}")
111111

0 commit comments

Comments
 (0)