docs: wiki Development
+75
@@ -0,0 +1,75 @@
|
|||||||
|
# Development
|
||||||
|
|
||||||
|
## Repo-Layout
|
||||||
|
|
||||||
|
```
|
||||||
|
.claude-plugin/marketplace.json # Marketplace-Manifest (name "luki-net" + plugins[])
|
||||||
|
knowledge-curator/ # Plugin
|
||||||
|
├── .claude-plugin/plugin.json
|
||||||
|
├── skills/knowledge-curator/SKILL.md
|
||||||
|
├── agents/{kg-graph-auditor,kg-entity-deduplicator,kg-relation-miner,kg-taxonomy-architect}.md
|
||||||
|
├── commands/{kg-curate,kg-apply}.md
|
||||||
|
├── hooks/{hooks.json,backup-memory.sh}
|
||||||
|
└── README.md
|
||||||
|
venture/ # Plugin
|
||||||
|
├── .claude-plugin/plugin.json
|
||||||
|
└── skills/{pitch-deck-builder,investor-materials,saas-financial-projections,market-research,executive-summary-writer}/SKILL.md
|
||||||
|
install.sh # local | marketplace (Installer)
|
||||||
|
push-to-gitea.sh # diesen Baum signiert ins Repo pushen
|
||||||
|
marketplace-entry.json # Snippet für einen fremden Marketplace
|
||||||
|
README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Neues Plugin / Skill / Agent anlegen
|
||||||
|
|
||||||
|
1. Unterordner `<plugin>/` mit `.claude-plugin/plugin.json` anlegen, plus `skills/`, `agents/`, `commands/`, `hooks/` nach Bedarf.
|
||||||
|
2. Eintrag ins `plugins`-Array von `.claude-plugin/marketplace.json`:
|
||||||
|
```json
|
||||||
|
{ "name": "<plugin>", "source": "./<plugin>", "description": "..." }
|
||||||
|
```
|
||||||
|
`source` ist relativ zur Repo-Wurzel (`./<ordner>`), `name` muss mit `plugin.json` übereinstimmen.
|
||||||
|
3. JSON validieren (`jq empty .claude-plugin/marketplace.json` und jede `plugin.json`).
|
||||||
|
|
||||||
|
## Signierter Commit-Workflow
|
||||||
|
|
||||||
|
Das Repo ist lokal auf **SSH-Signing** konfiguriert (`gpg.format=ssh`, `user.signingkey=~/.ssh/id_ed25519.pub`, `commit.gpgsign=true`, `gpg.ssh.allowedSignersFile` in `.git/`). Damit:
|
||||||
|
|
||||||
|
```
|
||||||
|
git add -A
|
||||||
|
git commit -S -m "feat: <plugin> hinzufügen"
|
||||||
|
git log --show-signature -1 # MUSS: Good "git" signature for lukirch1984@gmail.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Erst nach bestätigter „Good signature" pushen.
|
||||||
|
|
||||||
|
### Push: SSH vs. HTTPS
|
||||||
|
|
||||||
|
`origin` zeigt auf SSH (`ssh://git@gitea.luki-net.org:2222/...`). Ist der Gitea-SSH-Port **2222 nicht erreichbar**, über HTTPS pushen — die Signatur sitzt am Commit und bleibt erhalten:
|
||||||
|
|
||||||
|
```
|
||||||
|
git push https://gitea.luki-net.org/l.kirchner/claude-marketplace.git main
|
||||||
|
```
|
||||||
|
|
||||||
|
Credentials dabei nur transient verwenden (kein `credential.helper store`, kein `~/.git-credentials`). Das Hilfsskript `push-to-gitea.sh` automatisiert Init/Remote/Commit/Push (respektiert die lokale Signing-Config) und akzeptiert `REMOTE_URL=` zum Umschalten auf HTTPS.
|
||||||
|
|
||||||
|
## Verifikation in Gitea
|
||||||
|
|
||||||
|
Der SSH-Public-Key `luki-dev@luki-dev` liegt im Profil `l.kirchner`, daher zeigt Gitea signierte Commits als **Verified**. Prüfen per API:
|
||||||
|
|
||||||
|
```
|
||||||
|
tea api -X GET /repos/l.kirchner/claude-marketplace/branches/main \
|
||||||
|
| jq '.commit.verification'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Änderungen ausspielen
|
||||||
|
|
||||||
|
Nach dem Push in Claude Code:
|
||||||
|
|
||||||
|
```
|
||||||
|
/plugin marketplace update luki-net
|
||||||
|
/plugin install <plugin>@luki-net
|
||||||
|
```
|
||||||
|
|
||||||
|
## Schnelltest ohne Marketplace
|
||||||
|
|
||||||
|
`./install.sh local` kopiert Skill/Agents/Commands direkt nach `~/.claude/`; `./install.sh marketplace /pfad/zum/repo` fügt das Plugin in ein bestehendes Marketplace-Repo ein (braucht `jq`) und gibt die git-/`/plugin`-Befehle aus — pusht aber nicht selbst.
|
||||||
Reference in New Issue
Block a user