Files
ruvnet__ruflo/v3/@claude-flow/cli/scripts/setup-ipfs-registry.md
rUv 617e55d332 feat: Add SemanticRouter and SONA WASM integration with verified benchmarks (#1007)
* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T14:51:49Z
- Changes: 6 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T14:52:35Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T14:53:20Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T14:54:04Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T14:56:07Z
- Changes: 5 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:01:14Z
- Changes: 3 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(plugins): complete IPFS plugin registry implementation v3.0.0-alpha.171

- Add live IPFS registry support with multi-gateway fallback
- Add Ed25519 signature verification for registries
- Add publish-registry.ts script for Pinata publishing
- Add comprehensive setup guide for Google Cloud + Pinata
- Fix ES module compatibility in publish script
- Demo mode fallback with real npm download stats

IPFS Capabilities:
- Resolve IPNS names via multiple gateways
- Fetch content from IPFS with automatic fallback
- Verify Ed25519 signatures on registries
- Check content availability across gateways
- Support for both CIDv0 and CIDv1 formats

Gateway Support:
- Pinata (primary)
- Cloudflare IPFS
- ipfs.io
- dweb.link
- w3s.link

Co-Authored-By: claude-flow <ruv@ruv.net>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:13:28Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:14:15Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:15:33Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:15:52Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:16:56Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(plugins): live IPFS plugin registry v3.0.0-alpha.172

IPFS Plugin Registry is now live:
- CID: bafkreictvxdrcuku2yivzvagm24aocjkuwsezg7hvnyxvqf2pksixvareq
- 6 official plugins pinned on Pinata
- Multi-gateway fallback (Pinata, ipfs.io, dweb.link)
- Direct CID detection (skips slow IPNS resolution)
- Ed25519 signature verification ready

Features:
- Plugin discovery from live IPFS
- Model import/export capability (Cloud Function)
- Plugin sharing and tracking analytics
- Download tracking support

Cloud Function included:
- Secure publishing via Secret Manager
- Live npm stats fetching
- Analytics tracking
- Model import/export endpoints

Tested: npx claude-flow@latest plugins list

Co-Authored-By: claude-flow <ruv@ruv.net>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:20:55Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(plugins): full 19-plugin IPFS registry v3.0.0-alpha.173

Updated CID with all 19 official plugins:
- CID: bafkreiahw4ufxwycbwwswt7rgbx6hkgnvg3rophhocatgec4bu5e7tzk2a

Plugins now live on IPFS:
- @claude-flow/embeddings (2,684 downloads)
- @claude-flow/security (520 downloads)
- @claude-flow/plugin-agentic-qe (289 downloads)
- @claude-flow/plugin-prime-radiant (216 downloads)
- @claude-flow/claims (156 downloads)
- @claude-flow/plugin-gastown-bridge (150 downloads)
- @claude-flow/neural (94 downloads)
- @claude-flow/plugins (44 downloads)
- @claude-flow/performance (22 downloads)
- Plus 10 more specialized plugins

Co-Authored-By: claude-flow <ruv@ruv.net>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:28:55Z
- Changes: 6 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:29:59Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:31:16Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:31:31Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:32:58Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:33:21Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:33:22Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:33:52Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:34:07Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:34:25Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:34:44Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:34:55Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:35:11Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:36:39Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:40:37Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:40:47Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:41:16Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:43:05Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:43:42Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:44:59Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T15:55:29Z
- Changes: 6 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:05:09Z
- Changes: 7 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:05:26Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:05:43Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:06:13Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:08:14Z
- Changes: 6 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:08:15Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:08:16Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:08:17Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:08:18Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:14:26Z
- Changes: 5 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:14:42Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:15:56Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:16:22Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:16:46Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:16:52Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:17:56Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:19:18Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:19:25Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:20:25Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:23:27Z
- Changes: 5 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:23:34Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:24:05Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:28:10Z
- Changes: 8 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:35:35Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:35:43Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:35:55Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:36:11Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:36:25Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:36:33Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:36:41Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:37:08Z
- Changes: 2 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:38:21Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:38:35Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:38:49Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:40:19Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:40:51Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:41:25Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:42:15Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:42:49Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:43:19Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:43:26Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:43:32Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:43:55Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:44:10Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T16:57:56Z
- Changes: 10 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T17:04:11Z
- Changes: 5 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T17:04:23Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T17:06:15Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T17:06:39Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T17:07:42Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T17:08:13Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T17:10:36Z
- Changes: 3 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:04:31Z
- Changes: 8 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:05:06Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:05:41Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:05:55Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:06:28Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:06:36Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:07:34Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:11:33Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:12:22Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Checkpoint: File edits

Automatic checkpoint created by Claude Code
- Branch: feature/ipfs-plugin-registry
- Timestamp: 2026-01-24T18:13:00Z
- Changes: 1 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:34:08 -05:00

9.7 KiB

IPFS Plugin Registry Setup Guide

This guide walks through setting up a live IPFS plugin registry using Google Cloud and Pinata.

Prerequisites

  • Google Cloud account with billing enabled
  • Node.js 20+
  • gcloud CLI installed

Step 1: Pinata Setup (IPFS Pinning Service)

1.1 Create Pinata Account

  1. Go to https://pinata.cloud and create an account
  2. Navigate to API Keys section
  3. Create a new API key with these permissions:
    • pinning/pinFileToIPFS: true
    • pinning/pinJSONToIPFS: true
    • pinning/unpin: true

1.2 Save Your Credentials

# Add to your shell profile (~/.zshrc or ~/.bashrc)
export PINATA_JWT="your-jwt-token-here"

1.3 Generate IPNS Key (Optional - for stable addressing)

If you have Pinata's paid plan with Dedicated Gateways:

# Via Pinata dashboard or API
curl -X POST "https://api.pinata.cloud/v3/ipfs/keys" \
  -H "Authorization: Bearer $PINATA_JWT" \
  -H "Content-Type: application/json" \
  -d '{"name": "claude-flow-registry"}'

Step 2: Google Cloud Setup

2.1 Create Project

# Create new project
gcloud projects create claude-flow-registry --name="Claude Flow Registry"

# Set as active project
gcloud config set project claude-flow-registry

# Enable billing (required for Cloud Functions)
gcloud beta billing projects link claude-flow-registry \
  --billing-account=YOUR_BILLING_ACCOUNT_ID

2.2 Enable Required APIs

gcloud services enable \
  cloudfunctions.googleapis.com \
  cloudbuild.googleapis.com \
  storage.googleapis.com \
  secretmanager.googleapis.com

2.3 Create Storage Bucket

# Create bucket for registry source data
gcloud storage buckets create gs://claude-flow-plugin-registry \
  --location=US \
  --uniform-bucket-level-access

# Enable versioning for rollback
gsutil versioning set on gs://claude-flow-plugin-registry

# Make registry.json publicly readable (optional)
gsutil iam ch allUsers:objectViewer gs://claude-flow-plugin-registry

2.4 Create Service Account

# Create service account
gcloud iam service-accounts create plugin-registry-publisher \
  --display-name="Plugin Registry Publisher"

# Grant permissions
gcloud projects add-iam-policy-binding claude-flow-registry \
  --member="serviceAccount:plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com" \
  --role="roles/storage.objectAdmin"

gcloud projects add-iam-policy-binding claude-flow-registry \
  --member="serviceAccount:plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com" \
  --role="roles/secretmanager.secretAccessor"

2.5 Store Secrets

# Store Pinata JWT
echo -n "$PINATA_JWT" | gcloud secrets create pinata-jwt --data-file=-

# Generate and store Ed25519 signing key
node -e "
const crypto = require('crypto');
const { subtle } = require('crypto').webcrypto;
(async () => {
  const keyPair = await subtle.generateKey(
    { name: 'Ed25519', namedCurve: 'Ed25519' },
    true,
    ['sign', 'verify']
  );
  const privateKey = await subtle.exportKey('pkcs8', keyPair.privateKey);
  const privateKeyHex = Buffer.from(privateKey).toString('hex');
  console.log(privateKeyHex);
})();
" | gcloud secrets create registry-private-key --data-file=-

Step 3: Deploy Cloud Function

3.1 Create Function Directory

mkdir -p cloud-functions/publish-registry
cd cloud-functions/publish-registry

3.2 Create package.json

{
  "name": "publish-registry",
  "version": "1.0.0",
  "main": "index.js",
  "type": "module",
  "dependencies": {
    "@google-cloud/storage": "^7.0.0",
    "@google-cloud/secret-manager": "^5.0.0",
    "@noble/ed25519": "^2.0.0"
  }
}

3.3 Create index.js

import { Storage } from '@google-cloud/storage';
import { SecretManagerServiceClient } from '@google-cloud/secret-manager';
import * as ed from '@noble/ed25519';

const storage = new Storage();
const secretManager = new SecretManagerServiceClient();

async function getSecret(name) {
  const [version] = await secretManager.accessSecretVersion({
    name: `projects/claude-flow-registry/secrets/${name}/versions/latest`,
  });
  return version.payload.data.toString();
}

export async function publishRegistry(req, res) {
  try {
    // Get secrets
    const pinataJwt = await getSecret('pinata-jwt');
    const privateKey = await getSecret('registry-private-key');

    // Fetch registry from GCS
    const bucket = storage.bucket('claude-flow-plugin-registry');
    const file = bucket.file('registry.json');
    const [content] = await file.download();
    const registry = JSON.parse(content.toString());

    // Update timestamp
    registry.updatedAt = new Date().toISOString();

    // Sign registry
    const registryToSign = { ...registry };
    delete registryToSign.registrySignature;
    delete registryToSign.registryPublicKey;

    const message = JSON.stringify(registryToSign);
    const signature = await ed.signAsync(
      new TextEncoder().encode(message),
      Buffer.from(privateKey, 'hex')
    );
    const publicKey = await ed.getPublicKeyAsync(Buffer.from(privateKey, 'hex'));

    registry.registrySignature = Buffer.from(signature).toString('hex');
    registry.registryPublicKey = `ed25519:${Buffer.from(publicKey).toString('hex')}`;

    // Pin to IPFS
    const pinResponse = await fetch('https://api.pinata.cloud/pinning/pinJSONToIPFS', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${pinataJwt}`,
      },
      body: JSON.stringify({
        pinataContent: registry,
        pinataMetadata: {
          name: 'claude-flow-plugin-registry',
          keyvalues: {
            version: registry.version,
            updatedAt: registry.updatedAt,
          },
        },
      }),
    });

    if (!pinResponse.ok) {
      throw new Error(`Pinata error: ${await pinResponse.text()}`);
    }

    const pinResult = await pinResponse.json();

    res.json({
      success: true,
      cid: pinResult.IpfsHash,
      updatedAt: registry.updatedAt,
      pluginCount: registry.plugins.length,
      gateways: [
        `https://gateway.pinata.cloud/ipfs/${pinResult.IpfsHash}`,
        `https://ipfs.io/ipfs/${pinResult.IpfsHash}`,
      ],
    });
  } catch (error) {
    console.error('Publish failed:', error);
    res.status(500).json({ error: error.message });
  }
}

3.4 Deploy Function

gcloud functions deploy publish-registry \
  --gen2 \
  --runtime=nodejs20 \
  --region=us-central1 \
  --source=. \
  --entry-point=publishRegistry \
  --trigger-http \
  --allow-unauthenticated \
  --service-account=plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com \
  --set-env-vars=GCP_PROJECT=claude-flow-registry

Step 4: Create Initial Registry

4.1 Upload Registry to GCS

# Generate initial registry
npx tsx scripts/publish-registry.ts --dry-run > registry.json

# Upload to GCS
gsutil cp registry.json gs://claude-flow-plugin-registry/registry.json

4.2 Trigger First Publish

# Get function URL
FUNCTION_URL=$(gcloud functions describe publish-registry \
  --gen2 --region=us-central1 --format='value(serviceConfig.uri)')

# Trigger publish
curl -X POST "$FUNCTION_URL"

Step 5: Automate with Cloud Build

5.1 Create cloudbuild.yaml

steps:
  # Update registry from npm stats
  - name: 'node:20'
    entrypoint: 'npx'
    args: ['tsx', 'scripts/publish-registry.ts', '--dry-run']
    dir: 'v3/@claude-flow/cli'

  # Upload to GCS
  - name: 'gcr.io/cloud-builders/gsutil'
    args: ['cp', 'registry.json', 'gs://claude-flow-plugin-registry/registry.json']

  # Trigger Cloud Function
  - name: 'gcr.io/cloud-builders/curl'
    args: ['-X', 'POST', '${_FUNCTION_URL}']

substitutions:
  _FUNCTION_URL: 'https://us-central1-claude-flow-registry.cloudfunctions.net/publish-registry'

# Run daily at 2am UTC
options:
  logging: CLOUD_LOGGING_ONLY

5.2 Create Cloud Scheduler Trigger

gcloud scheduler jobs create http publish-registry-daily \
  --location=us-central1 \
  --schedule="0 2 * * *" \
  --uri="https://us-central1-claude-flow-registry.cloudfunctions.net/publish-registry" \
  --http-method=POST

Step 6: Update Claude Flow CLI

Update DEFAULT_PLUGIN_STORE_CONFIG in discovery.ts:

export const DEFAULT_PLUGIN_STORE_CONFIG: PluginStoreConfig = {
  registries: [
    {
      name: 'claude-flow-official',
      description: 'Official Claude Flow plugin registry',
      // Use the CID from your first publish
      ipnsName: 'YOUR_IPNS_KEY_OR_CID',
      gateway: 'https://gateway.pinata.cloud',
      // Use your public key from the signing step
      publicKey: 'ed25519:YOUR_PUBLIC_KEY',
      trusted: true,
      official: true,
    },
  ],
  // ... rest of config
};

Cost Estimate

Service Free Tier Paid Tier
Pinata 1GB storage, 100 pins $20/mo for 100GB
GCS 5GB free ~$0.02/GB/mo
Cloud Functions 2M invocations free ~$0.40/million
Cloud Scheduler 3 jobs free $0.10/job/mo
Total $0 ~$20/mo

Troubleshooting

IPNS Resolution Fails

  • Ensure the CID is pinned on Pinata
  • Try different gateways (ipfs.io, cloudflare-ipfs.com)
  • IPNS can take 5-10 minutes to propagate

Signature Verification Fails

  • Ensure the public key in config matches the signing key
  • Check that the registry wasn't modified after signing

Cloud Function Errors

  • Check Cloud Logging for detailed errors
  • Verify service account has correct permissions
  • Test secrets access manually

References