From radicle
This skill should be used when the user asks to "initialize a radicle repo", "rad init", "create a patch", "open a patch", "rad patch", "clone from radicle", "rad clone", "work with radicle issues", "rad issue", "start radicle node", "rad node", "seed a repository", "sync with radicle", "push to radicle", "collaborate on radicle", or mentions RIDs, DIDs, patches, seeding, or peer-to-peer code collaboration.
npx claudepluginhub deanh/rad-skill --plugin radicleThis skill uses the workspace's default tool permissions.
Radicle is a decentralized, peer-to-peer code collaboration protocol built on Git. It enables sovereign code hosting without centralized platforms, using cryptographic identities and a gossip-based network for repository distribution.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Radicle is a decentralized, peer-to-peer code collaboration protocol built on Git. It enables sovereign code hosting without centralized platforms, using cryptographic identities and a gossip-based network for repository distribution.
Repository ID (RID): Globally unique URN identifying a repository (e.g., rad:z31hE1wco9132nedN3mm5qJjyotna)
Node ID (NID): Device identifier on the network, used for push operations
DID (Decentralized Identifier): Self-sovereign identity (e.g., did:key:z6Mkhp7VU...) for authentication
Delegates: Maintainers with authority to sign and manage repository metadata
Seeding: Hosting and synchronizing a repository across the network
Patches: Git-based collaborative objects similar to pull requests, with revision history
Before using Radicle commands, verify the installation and identity:
# Check if rad is installed
rad --version
# Check identity status
rad self
# Check node status
rad node status
If rad is not installed, direct the user to https://radicle.xyz/install or run:
curl -sSLf https://radicle.xyz/install | sh
source ~/.zshenv # Or open a new terminal
If no identity exists, create one:
rad auth
# Non-interactive (for scripting):
echo "" | rad auth --alias "name" --stdin # No passphrase
echo "pass" | rad auth --alias "name" --stdin # With passphrase
To publish an existing Git repository to Radicle:
# Initialize (interactive - prompts for name, description, visibility)
rad init
# Initialize with options
rad init --name "project-name" --description "Project description" --public
# Initialize without confirmation prompt
rad init --name "project-name" --description "Description" --public --no-confirm
# Initialize as private repository
rad init --private
# Show current repository's RID
rad .
After initialization, push changes with git push (the rad remote is configured automatically).
To clone from Radicle:
# Clone by RID (also starts seeding)
rad clone rad:z31hE1wco9132nedN3mm5qJjyotna
# Clone and specify working directory
rad clone rad:z31hE1wco9132nedN3mm5qJjyotna --path ./project-dir
Seeding replicates repositories across the network:
# Seed a repository (without working copy)
rad seed rad:<RID>
# Stop seeding
rad unseed rad:<RID>
# List seeded repositories
rad ls --seeded
For private repositories, manage access via delegates:
# Grant access to a peer
rad id update --title "Allow access" --allow <DID>
# Revoke access
rad id update --disallow <DID>
# Convert private to public
rad publish
Patches are Radicle's equivalent to pull requests, with built-in revision tracking.
To open a new patch, push to the magic ref:
# Create branch and make changes
git checkout -b feature-branch
# ... make changes and commit ...
# Open patch
git push rad HEAD:refs/patches
Subsequent pushes update the existing patch with a new revision:
# Add more commits to the branch
git commit -m "Address review feedback"
# Update the patch (creates new revision)
git push --force
# List all patches
rad patch list
# Show patch details with revision history
rad patch show <PATCH_ID>
# View patch diff without checkout
rad patch diff <PATCH_ID>
# Checkout patch branch for local testing
rad patch checkout <PATCH_ID>
After review, merge into the main branch:
# Checkout and merge
git checkout main
git merge <patch-branch>
# Push to mark patch as merged
git push rad main
Issues are collaborative objects stored in Git, synchronized across the network.
# Open new issue (launches editor)
rad issue open
# Open with title directly
rad issue open --title "Bug: login fails on mobile"
# List issues
rad issue list
# Show issue details
rad issue show <ISSUE_ID>
# Add comment
rad issue comment <ISSUE_ID>
# Assign to a peer
rad issue assign <ISSUE_ID> --add <DID>
# Close issue
rad issue state <ISSUE_ID> --closed
# Reopen issue
rad issue state <ISSUE_ID> --open
# Add label
rad issue label <ISSUE_ID> --add bug
# Remove label
rad issue label <ISSUE_ID> --remove bug
The Radicle node handles peer-to-peer networking and repository synchronization.
# Start node (required for network operations)
rad node start
# Stop node
rad node stop
# Check node status
rad node status
# Check sync status for current repository
rad sync status
# Force fetch from network
rad sync --fetch
# Sync with specific scope
rad sync --scope all # All seeded repos
rad sync --scope followed # Only followed delegates
# Announce local refs to network (after creating/updating repo)
rad sync --announce
# Pull canonical changes to working copy
git pull
# Connect to a specific peer
rad node connect <NID>@<address>
# View notifications (new issues/patches)
rad inbox
Track changes from collaborators:
# Add a peer's remote
rad remote add <NID> --name alice
# Fetch peer's branches
git fetch alice
# List tracked remotes
rad remote list
# Find untracked peers
rad remote list --untracked
rad clone rad:<RID>git checkout -b my-featuregit push rad HEAD:refs/patchesgit push --forcerad patch listrad patch show <ID> or rad patch checkout <ID>git checkout main && git merge <branch>git push rad mainrad init --privaterad id update --allow <DID1> --allow <DID2>rad clone rad:<RID>rad id update --disallow <DID>When initializing a Radicle repository that already has a GitHub remote, you can optionally keep both in sync.
Check for existing GitHub remote:
git remote -v | grep github
Manual sync:
git push rad main && git push github main
Automatic sync with post-commit hook:
To auto-push to both Radicle and GitHub after each commit, create .git/hooks/post-commit:
#!/bin/sh
# Auto-push to Radicle and mirror to GitHub after each commit
export PATH="$HOME/.radicle/bin:$PATH"
git push rad main 2>/dev/null || true
git push github main 2>/dev/null || true
Make it executable: chmod +x .git/hooks/post-commit
New project without GitHub:
If starting fresh, you can add GitHub later:
git remote add github https://github.com/username/repo.git
git push -u github main
Note: Radicle remains the source of truth for patches and issues. GitHub serves as a read-only mirror for discoverability.
If commands fail with connection errors:
rad node start
rad node status # Verify running
If changes aren't appearing:
rad sync --fetch
rad sync status
If authentication fails:
rad self # Check current identity
rad auth # Re-authenticate if needed
The rad node status output uses these indicators:
| Symbol | Meaning |
|---|---|
✓ | Connected |
! | Connection attempted |
✗ | Disconnected |
↗ | Outbound connection |
↘ | Inbound connection |
"Not configured to listen for inbound connections" is normal for nodes behind NAT/firewall. The node can still:
For inbound connections, configure port forwarding or use Tor mode.
For detailed command reference and advanced patterns:
references/commands.md - Complete command reference with all flags and options