Skip to content

Commit 2fc70f1

Browse files
mwbrookszimeg
andauthored
docs: add local development and testing to maintainer's guide (#77)
* docs: add local development & testing guide Document how maintainers run the test suite (make targets) and load the plugin locally in Claude Code (claude --plugin-dir) and Cursor (make cursor-install), and cross-reference it from the Releases step that already assumes tests are run locally. * docs: simplify setup sentence to venv + deps * docs: genericize test descriptions away from Ollama specifics * docs: refine testing section wording and .env setup steps * docs: block-format the `claude plugin validate` command Applies Eden's suggestion from PR #77 review. Co-authored-by: Eden Zimbelman <18134219+zimeg@users.noreply.github.com> * docs: add Cursor to the tools list Responds to Eden's question on PR #77 — Cursor is a supported alternative to Claude Code for verifying skills locally. --------- Co-authored-by: Eden Zimbelman <18134219+zimeg@users.noreply.github.com>
1 parent 6af155a commit 2fc70f1

1 file changed

Lines changed: 81 additions & 1 deletion

File tree

.github/maintainers_guide.md

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Maintaining this repo requires:
1313
- **[Claude Code][claude-code]**: the primary development and maintenance tool.
1414
Most tasks (authoring skills, reviewing diffs) are performed through Claude
1515
Code rather than traditional CLI tooling.
16+
- **[Cursor][cursor]**: an alternative agentic coding environment. Useful for
17+
verifying that skills and commands work outside Claude Code before release.
1618
- **Git**: standard version control.
1719
- **[GitHub CLI (`gh`)][gh-cli]**: for creating PRs as drafts and managing
1820
issues.
@@ -44,6 +46,83 @@ source .venv/bin/activate
4446

4547
---
4648

49+
## Local Development & Testing
50+
51+
Before you release (or open a PR), exercise your changes locally: run the test
52+
suite, and load the plugin into Claude Code or Cursor to try the skills and
53+
commands by hand.
54+
55+
### Setup
56+
57+
Run the one-time setup, which creates the virtualenv and installs the test and
58+
lint dependencies (requires Python 3.14+, see above):
59+
60+
```sh
61+
make install
62+
```
63+
64+
The tests read configuration from environment variables. Copy the example file
65+
and fill in what you need — each variable is documented inline, and the
66+
`Makefile` auto-loads `.env`:
67+
68+
```sh
69+
cp .env.example .env
70+
vim .env
71+
# Set the environment variables
72+
```
73+
74+
### Running the tests
75+
76+
Always use the `make` targets — never invoke `pytest`, `ruff`, or `python`
77+
directly. The targets manage the virtualenv, load `.env`, and set up the test
78+
dependencies for you.
79+
80+
```sh
81+
make test-unit # fast structural + frontmatter checks (this is what CI runs)
82+
make test-eval # LLM-judged skill evaluations (local only)
83+
make test # both
84+
make lint # Ruff linter (line-length 120)
85+
make format # Ruff auto-format + fix
86+
```
87+
88+
### Testing in Claude Code
89+
90+
Load your local changes into Claude Code for a single session with the
91+
`--plugin-dir` flag:
92+
93+
```sh
94+
claude --plugin-dir ./
95+
```
96+
97+
This loads the `slack` plugin from your checkout — its skills and commands, and
98+
the HTTP MCP server from `.mcp.json`. If you already have the published
99+
`slack` plugin installed, the local copy takes precedence **for that session
100+
only**: nothing is written to your settings, and the installed version is
101+
untouched when you exit. After editing a skill or command, run `/reload-plugins`
102+
inside the session to pick up the change without restarting.
103+
104+
Check the plugin's structure without launching a session:
105+
106+
```sh
107+
claude plugin validate
108+
```
109+
110+
### Testing in Cursor
111+
112+
Install the plugin into your local Cursor, then reload plugins in Cursor to pick
113+
up the changes:
114+
115+
```sh
116+
make cursor-install
117+
```
118+
119+
This copies the plugin into `~/.cursor/plugins/slack@local` and registers it.
120+
121+
To remove it, run `make cursor-uninstall`. (`make clean` also runs the Cursor
122+
uninstall, in addition to removing the virtualenv and other generated files.)
123+
124+
---
125+
47126
## Versioning
48127

49128
Follow the [conventional commit specification][conv-commits]. PR titles and commit messages use prefixes like `feat:`, `fix:`, `chore:`, `docs:`, etc. First letter after the prefix is lowercase unless it's a proper noun.
@@ -80,7 +159,7 @@ Releasing can feel intimidating at first, but don't fret! Venture on!
80159

81160
New official package versions are published when the release PR created from changesets is merged. Follow these steps to build confidence:
82161

83-
1. **Run the tests locally**: Before merging the release PR please run all the tests especially the eval ones. If they no longer pass we may need fix it before releasing the changes.
162+
1. **Run the tests locally**: Before merging the release PR please run all the tests (see [Local Development & Testing](#local-development--testing)), especially the eval ones. If they no longer pass we may need fix it before releasing the changes.
84163

85164
2. **Check GitHub**: Please check if issues or pull requests are still open either decide to postpone the release or save those changes for a future update.
86165

@@ -123,6 +202,7 @@ Patch and minor updates are auto-approved and auto-merged via the
123202
---
124203

125204
[claude-code]: https://claude.ai/code
205+
[cursor]: https://cursor.com
126206
[gh-cli]: https://cli.github.com
127207
[conv-commits]: https://www.conventionalcommits.org
128208
[semver]: https://semver.org

0 commit comments

Comments
 (0)