83f73c5cea
tea and tdl were two repositories, each carrying its own
.claude-plugin/marketplace.json — two marketplaces to register for what
is one collection. Fold them into one.
The repo root is now the marketplace and nothing else: a single
.claude-plugin/marketplace.json whose entries point at ./plugins/tea and
./plugins/tdl. A plugin's root is its own directory under plugins/, so
${CLAUDE_PLUGIN_ROOT} still resolves inside it and every path a plugin
uses stays relative to itself — the hooks and the test roots needed no
adjustment beyond the move.
tea's files move with git mv, so its history and blame follow. tdl
arrives as a plain copy; its history stays in claude-skills/threedotslab.
test_payload_root asserted `tmp/` was ignored by REPO/.gitignore. The
rule is that tmp/ is ignored, not which file says so, and git reads every
.gitignore on the way up — so the test now walks up to the repo root the
same way git does.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
64 lines
2.0 KiB
Markdown
64 lines
2.0 KiB
Markdown
# claude-skills — a Claude Code plugin marketplace
|
|
|
|
One repository, one marketplace, several plugins. Register it once and install
|
|
whichever pieces you want; each plugin is independent and carries its own
|
|
manifest, docs, and tests.
|
|
|
|
## Installation
|
|
|
|
```
|
|
/plugin marketplace add https://git.noodles.cam/claude-skills/marketplace.git
|
|
```
|
|
|
|
Working from a local clone? Point at the directory instead:
|
|
|
|
```
|
|
/plugin marketplace add /path/to/marketplace
|
|
```
|
|
|
|
Then install what you need:
|
|
|
|
```
|
|
/plugin install tea@claude-skills
|
|
/plugin install tdl@claude-skills
|
|
```
|
|
|
|
Use `/plugin` to enable, disable, or update them later.
|
|
|
|
## What ships here
|
|
|
|
| Plugin | Commands | What it does |
|
|
|---|---|---|
|
|
| [`tea`](plugins/tea) | `/tea:auth` `/tea:issue` `/tea:sync` `/tea:use` | Gitea issues as local markdown, cleanly layered. Issues are units of work offline first and tracker rows second; a PreToolUse hook blocks any `tea` command that would run under a login Claude picked instead of the operator |
|
|
| [`tdl`](plugins/tdl) | `/tdl:audit` | Three Dots Labs Go conventions as an enforceable rule set — audits a Go project against 63 CQRS/DDD/Clean-Architecture rules by severity, or scaffolds services, handlers, entities, repositories and Watermill adapters from templates that already follow them |
|
|
|
|
## Layout
|
|
|
|
```
|
|
.claude-plugin/
|
|
marketplace.json the catalog — one entry per plugin, source is a
|
|
path into plugins/
|
|
plugins/
|
|
tea/
|
|
.claude-plugin/plugin.json
|
|
agents/ hooks/ skills/ tests/
|
|
README.md AGENTS.md
|
|
tdl/
|
|
.claude-plugin/plugin.json
|
|
skills/
|
|
```
|
|
|
|
A plugin's root is its directory under `plugins/`, so `${CLAUDE_PLUGIN_ROOT}`
|
|
resolves inside it and every path a plugin uses stays relative to itself.
|
|
Adding a plugin means adding a directory here plus one entry in
|
|
`marketplace.json` — nothing else in the repo needs to know about it.
|
|
|
|
## Development
|
|
|
|
`tea` has a test suite; run it from its own directory so the tests resolve
|
|
their root correctly:
|
|
|
|
```
|
|
cd plugins/tea && python3 -m unittest discover -s tests
|
|
```
|