feat: initialize plugin marketplace with core plugins
- add marketplace.json, README, and .gitignore - add git-tools plugin with commit-format skill - add numencore-core plugin with skill-creator skill
This commit is contained in:
commit
5e7054deb6
7 changed files with 314 additions and 0 deletions
22
.claude-plugin/marketplace.json
Normal file
22
.claude-plugin/marketplace.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"name": "numencore-toolkit",
|
||||
"description": "Personal plugin marketplace — phatch",
|
||||
"owner": {
|
||||
"name": "Parley Hatch",
|
||||
"email": "parley.hatch@gmail.com"
|
||||
},
|
||||
"plugins": [
|
||||
{
|
||||
"name": "numencore-core",
|
||||
"description": "Core toolkit skills — skill authoring, project scaffolding",
|
||||
"category": "development",
|
||||
"source": "./plugins/numencore-core"
|
||||
},
|
||||
{
|
||||
"name": "git-tools",
|
||||
"description": "Git workflow skills — commit formatting, branch management",
|
||||
"category": "development",
|
||||
"source": "./plugins/git-tools"
|
||||
}
|
||||
]
|
||||
}
|
||||
20
.gitignore
vendored
Normal file
20
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Editor
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# Temp
|
||||
*.tmp
|
||||
.claude/temp/
|
||||
|
||||
# Local environment
|
||||
.claude/
|
||||
docs/
|
||||
CLAUDE.md
|
||||
|
||||
73
README.md
Normal file
73
README.md
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# numencore-toolkit
|
||||
|
||||
Personal Claude Code plugin marketplace. Self-hosted on Forgejo.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
git clone ssh://git@git.numencore.com:2222/phatch/numencore-toolkit.git
|
||||
claude plugin marketplace add ~/numencore-toolkit
|
||||
claude plugin install numencore-core@numencore-toolkit
|
||||
claude plugin install git-tools@numencore-toolkit
|
||||
```
|
||||
|
||||
Verify with `claude plugin list` or `/reload-plugins` in an active session.
|
||||
|
||||
## Plugin management
|
||||
|
||||
```bash
|
||||
# List installed
|
||||
claude plugin list
|
||||
|
||||
# Update marketplace (re-reads from disk)
|
||||
claude plugin marketplace update numencore-toolkit
|
||||
|
||||
# Reinstall after editing skills (re-caches)
|
||||
claude plugin install <plugin>@numencore-toolkit
|
||||
|
||||
# Disable/enable
|
||||
claude plugin disable <plugin>@numencore-toolkit
|
||||
claude plugin enable <plugin>@numencore-toolkit
|
||||
|
||||
# Uninstall
|
||||
claude plugin uninstall <plugin>@numencore-toolkit
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
After editing skills in the source directory, reinstall the plugin to update the cache:
|
||||
|
||||
```bash
|
||||
claude plugin install <plugin>@numencore-toolkit
|
||||
```
|
||||
|
||||
In an active session, run `/reload-plugins` to pick up changes.
|
||||
|
||||
For faster iteration, bypass the cache entirely:
|
||||
|
||||
```bash
|
||||
claude --plugin-dir ~/numencore-toolkit/plugins/<plugin-name>
|
||||
```
|
||||
|
||||
### Structure
|
||||
|
||||
```
|
||||
plugins/<plugin-name>/
|
||||
├── .claude-plugin/plugin.json
|
||||
└── skills/<skill-name>/SKILL.md
|
||||
```
|
||||
|
||||
### Adding a new plugin
|
||||
|
||||
1. Create `plugins/<name>/.claude-plugin/plugin.json`
|
||||
2. Add skills under `plugins/<name>/skills/<skill-name>/SKILL.md`
|
||||
3. Register in `.claude-plugin/marketplace.json`
|
||||
4. Run `claude plugin marketplace update numencore-toolkit`
|
||||
5. Run `claude plugin install <name>@numencore-toolkit`
|
||||
|
||||
## Plugins
|
||||
|
||||
| Plugin | Description |
|
||||
|--------|-------------|
|
||||
| `numencore-core` | Core toolkit — skill authoring, project scaffolding |
|
||||
| `git-tools` | Git workflow — commit formatting, branch management |
|
||||
12
plugins/git-tools/.claude-plugin/plugin.json
Normal file
12
plugins/git-tools/.claude-plugin/plugin.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"name": "git-tools",
|
||||
"version": "0.1.0",
|
||||
"description": "Git workflow skills — commit formatting, branch management",
|
||||
"author": {
|
||||
"name": "Parley Hatch",
|
||||
"email": "parley.hatch@gmail.com"
|
||||
},
|
||||
"repository": "ssh://git@git.numencore.com:2222/phatch/numencore-toolkit.git",
|
||||
"license": "MIT",
|
||||
"skills": "./skills/"
|
||||
}
|
||||
54
plugins/git-tools/skills/commit-format/SKILL.md
Normal file
54
plugins/git-tools/skills/commit-format/SKILL.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
name: commit-format
|
||||
description: Generate a conventional commit message from staged changes and commit after user approval. Use when the user wants to commit staged work.
|
||||
user-invocable: true
|
||||
argument-hint: "[type] [scope] [description]"
|
||||
allowed-tools: Bash(git *)
|
||||
---
|
||||
|
||||
# Commit Format
|
||||
|
||||
## Steps
|
||||
|
||||
1. Read the staged change summary:
|
||||
- `git diff --cached --stat` for file summary
|
||||
- Do NOT read the full diff — infer intent from the stat summary and file names
|
||||
- If nothing is staged, run `git status --short` and offer:
|
||||
- Stage all changes
|
||||
- Stage by file type or directory
|
||||
- Let the user specify which files
|
||||
- Wait for the user's choice and stage accordingly before continuing
|
||||
|
||||
2. Determine commit metadata:
|
||||
- If arguments were provided, use them as type/scope/description
|
||||
- If no arguments, infer from the diff:
|
||||
- **type**: `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `build`, `ci`, `perf`, `style`
|
||||
- **scope**: infer from the primary area of change (module, component, file group) — omit if unclear
|
||||
- **description**: one line summarizing what changed
|
||||
|
||||
3. Build the commit message:
|
||||
- Subject line: `type(scope): description` or `type: description` if no scope
|
||||
- Subject line must be under 72 characters
|
||||
- If the change warrants it, add a body separated by a blank line — short bullet points only
|
||||
- No emojis, no attributions, no co-authored-by lines
|
||||
- Body is for non-obvious context only — skip it if the subject says enough
|
||||
|
||||
4. Present the message to the user in a fenced block:
|
||||
```
|
||||
feat(parser): add support for nested expressions
|
||||
|
||||
- handle recursive descent for grouped terms
|
||||
- update token precedence table
|
||||
```
|
||||
|
||||
5. Wait for user response:
|
||||
- If confirmed: run `git commit -m` with the message (use HEREDOC for multiline)
|
||||
- If edits requested: revise and present again
|
||||
- Never commit without explicit approval
|
||||
|
||||
## Constraints
|
||||
|
||||
- One sentence subject lines — not paragraphs
|
||||
- Prefer active voice, imperative mood ("add", "fix", "remove" — not "added", "fixes", "removing")
|
||||
- If the diff is large, focus the message on intent, not listing every file
|
||||
- When in doubt about type, ask the user rather than guess wrong
|
||||
12
plugins/numencore-core/.claude-plugin/plugin.json
Normal file
12
plugins/numencore-core/.claude-plugin/plugin.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"name": "numencore-core",
|
||||
"version": "0.1.0",
|
||||
"description": "Core toolkit skills — skill authoring, project scaffolding",
|
||||
"author": {
|
||||
"name": "Parley Hatch",
|
||||
"email": "parley.hatch@gmail.com"
|
||||
},
|
||||
"repository": "ssh://git@git.numencore.com:2222/phatch/numencore-toolkit.git",
|
||||
"license": "MIT",
|
||||
"skills": "./skills/"
|
||||
}
|
||||
121
plugins/numencore-core/skills/skill-creator/SKILL.md
Normal file
121
plugins/numencore-core/skills/skill-creator/SKILL.md
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
---
|
||||
name: skill-creator
|
||||
description: Build a new Claude Code skill from a user's description. Use when the user wants to create, author, or write a new skill or slash command.
|
||||
user-invocable: true
|
||||
argument-hint: "[what the skill should do]"
|
||||
allowed-tools: Read, Write, Bash(mkdir *), Glob, Grep
|
||||
---
|
||||
|
||||
# Skill Creator
|
||||
|
||||
You are building a Claude Code skill to the numencore-toolkit standard.
|
||||
|
||||
## Phase 1: Understand
|
||||
|
||||
Extract these six answers from the user's input. Ask for missing answers ONE AT A TIME. Do not proceed until all six are resolved.
|
||||
|
||||
1. **What does it do?** — One sentence. If it takes more, the skill is too broad.
|
||||
2. **What does it take in?** — Arguments shape, or none.
|
||||
3. **What does it produce?** — File, diff, terminal output. Where does it go?
|
||||
4. **What tools does it need?** — Explicit list (Read, Write, Bash, Grep, Glob, etc).
|
||||
5. **What is the interaction shape?** — Execute immediately, or back-and-forth with user?
|
||||
6. **Does output have a specific format?** — If yes, define the shape.
|
||||
|
||||
If the user is vague, push for clarity. If they say red, do not build blue.
|
||||
|
||||
When all six are answered, play back a tight spec:
|
||||
|
||||
```
|
||||
Skill: [name]
|
||||
Does: [one sentence]
|
||||
Input: [arguments or none]
|
||||
Output: [what and where]
|
||||
Tools: [list]
|
||||
Interaction: [shape]
|
||||
Format: [description or "none"]
|
||||
```
|
||||
|
||||
Wait for explicit confirmation before proceeding.
|
||||
|
||||
## Phase 2: Write
|
||||
|
||||
Build the skill following these principles. Every line must earn its place.
|
||||
|
||||
### Frontmatter rules
|
||||
|
||||
- `name`: lowercase, hyphens, max 64 chars
|
||||
- `description`: pushy and specific — this is a routing mechanism, not documentation
|
||||
- `allowed-tools`: explicit list, never implicit
|
||||
- `argument-hint`: include if skill takes arguments
|
||||
- `disable-model-invocation`: set `true` for side-effect skills (deploy, send, delete)
|
||||
- Only include fields that have non-default values
|
||||
|
||||
### Body rules
|
||||
|
||||
- Every line is HOW or WHERE
|
||||
- Constraint-level WHY is allowed when it prevents bad judgment calls — but it earns its place
|
||||
- No filler, no commentary, no emojis, no preamble
|
||||
- Never repeat what frontmatter already declares
|
||||
- If output has a specific format, include ONE example of good output
|
||||
- Use `${CLAUDE_SKILL_DIR}` to reference bundled templates or scripts
|
||||
- Use `!`command`` preprocessor for dynamic context injection
|
||||
- Use `$ARGUMENTS`, `$0`, `$1` for argument substitution
|
||||
|
||||
### Size rules
|
||||
|
||||
- Target under 200 lines
|
||||
- If exceeding 200, move reference material to supporting files
|
||||
- Supporting files go in the skill directory alongside SKILL.md
|
||||
- Reference them with markdown links — they load on demand, not automatically
|
||||
|
||||
### Structure rules
|
||||
|
||||
- Self-contained — one job, no skill chaining
|
||||
- Instruction sections use `##` headers
|
||||
- Steps within sections are numbered
|
||||
- Constraints within steps are bulleted
|
||||
|
||||
## Phase 3: Place
|
||||
|
||||
1. Determine which plugin the skill belongs in
|
||||
2. Create the directory: `plugins/<plugin>/skills/<skill-name>/`
|
||||
3. Write `SKILL.md`
|
||||
4. Write any supporting files (templates, scripts, examples)
|
||||
5. Update `plugin.json` if this is a new plugin
|
||||
|
||||
## Example Output
|
||||
|
||||
A well-formed skill:
|
||||
|
||||
```yaml
|
||||
---
|
||||
name: changelog
|
||||
description: Generate a changelog entry from staged git changes. Use when committing features, fixes, or breaking changes.
|
||||
user-invocable: true
|
||||
argument-hint: "[version]"
|
||||
allowed-tools: Bash(git *), Read, Write
|
||||
---
|
||||
|
||||
# Changelog Generator
|
||||
|
||||
## Steps
|
||||
|
||||
1. Read staged diff: `git diff --cached --stat`
|
||||
2. Read recent changelog format from `CHANGELOG.md` if it exists
|
||||
3. Categorize changes into: Added, Changed, Fixed, Removed
|
||||
4. Write entry under `## [$0]` header at top of CHANGELOG.md
|
||||
|
||||
Only include categories that have entries.
|
||||
|
||||
## Format
|
||||
|
||||
```markdown
|
||||
## [1.2.0]
|
||||
|
||||
### Added
|
||||
- User authentication via OAuth2
|
||||
|
||||
### Fixed
|
||||
- Connection timeout on large file uploads
|
||||
```
|
||||
```
|
||||
Loading…
Reference in a new issue