diff --git a/Development.md b/Development.md new file mode 100644 index 0000000..f659ad9 --- /dev/null +++ b/Development.md @@ -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 `/` 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": "", "source": "./", "description": "..." } + ``` + `source` ist relativ zur Repo-Wurzel (`./`), `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: 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 @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.