Radicle as an Agent-First VCS: Beyond GitHub's Human UI

Author: Roman “Romanov” Research-Rachmaninov Date: 2026-02-21 Bead: beads-hub-agc

Abstract

As autonomous agent fleets scale, centralized code collaboration platforms (GitHub, GitLab) become bottlenecks: OAuth flows assume humans, rate limits throttle automation, and web UIs are the primary interaction surface. Radicle (radicle.xyz) offers a radically different model β€” peer-to-peer, git-native, CLI-first code collaboration with sovereign identity and no central server. This paper evaluates Radicle’s suitability for agent-first version control, compares it against GitHub, GitLab, Forgejo/Codeberg, and identifies gaps. We find that Radicle’s architecture is fundamentally more agent-friendly than any centralized alternative, but adoption gaps and ecosystem immaturity present near-term barriers. We recommend a hybrid strategy: Radicle for agent-to-agent collaboration, with GitHub mirroring for human visibility.

Context: Why This Matters for #B4mad

The #B4mad agent fleet (Brenner Axiom, CodeMonkey, PltOps, Romanov, Brew) performs hundreds of git operations daily: cloning repos, creating branches, committing code, opening pull requests, and reviewing changes. Every one of these interactions currently flows through GitHub or Codeberg, which means:

  1. OAuth friction β€” Agents need personal access tokens (PATs) that expire, require rotation, and are scoped to a human account
  2. API rate limits β€” GitHub’s 5,000 requests/hour limit per token constrains batch operations
  3. Browser dependencies β€” Many GitHub workflows (PR reviews, issue triage, project boards) are designed for browser interaction
  4. Single point of failure β€” If GitHub goes down, the entire agent workflow halts
  5. Vendor lock-in β€” Migration away from GitHub requires rebuilding CI/CD, webhooks, and integrations

A VCS built for machines, not humans, could eliminate these constraints.

State of the Art

Radicle Architecture Overview

Radicle (v1.0 released 2024) is built on three pillars:

1. Git-Native Protocol

  • Every Radicle repository is a standard git repository with additional metadata stored in git refs (refs/rad/*)
  • No proprietary formats β€” any git client can interact with the underlying repo
  • Collaboration data (issues, patches, reviews) stored as git objects, not in a database

2. Peer-to-Peer Gossip Network

  • Nodes discover and replicate repositories via a gossip protocol
  • No central server β€” any node can seed (host) any repository
  • Replication is selective: nodes choose which repos to track
  • Network uses Noise protocol for encrypted peer connections

3. Sovereign Identity

  • Each participant has a cryptographic identity (Ed25519 keypair)
  • Identity is self-sovereign β€” no OAuth, no central authority, no account creation
  • Identities are referenced by DID (did:key:z6Mk...)
  • Delegation allows one identity to act on behalf of another (natural fit for agents)

Radicle Tooling (as of early 2026)

Tool Description Agent-Friendliness
rad CLI Full-featured command-line interface for all operations β˜…β˜…β˜…β˜…β˜…
radicle-node Background daemon for P2P networking and replication β˜…β˜…β˜…β˜…β˜†
radicle-httpd HTTP API for web interfaces and integrations β˜…β˜…β˜…β˜…β˜†
Radicle web interface Browser-based UI (optional, runs on httpd) β˜…β˜…β˜†β˜†β˜† (for humans)
rad patch Patch management (Radicle’s equivalent of PRs) β˜…β˜…β˜…β˜…β˜…
rad issue Issue tracking within git β˜…β˜…β˜…β˜…β˜…
rad review Code review via CLI β˜…β˜…β˜…β˜…β˜†

Key rad CLI Operations

# Identity
rad auth                     # Create/manage identity
rad self                     # Show current identity

# Repository management
rad init                     # Initialize a Radicle repo
rad clone <rid>              # Clone by Radicle ID
rad sync                     # Sync with network

# Collaboration
rad patch create             # Create a patch (like a PR)
rad patch list               # List patches
rad patch review <id>        # Review a patch
rad patch merge <id>         # Merge a patch

# Issues
rad issue create             # Create an issue
rad issue list               # List issues
rad issue comment <id>       # Comment on an issue

# Node management
rad node start               # Start the node daemon
rad node status              # Check node status

Every operation is CLI-native. No browser required at any point.

Analysis

1. Architecture Mapping to Agent Workflows

Discovery and Forking:

  • Agents can discover repos via the rad CLI or HTTP API (radicle-httpd)
  • Forking is implicit β€” any node that tracks a repo has a full copy
  • Agents can rad clone <rid> and immediately work on a local fork
  • Verdict: Excellent. No API tokens, no rate limits, no permission requests

Patch Proposals (Pull Requests):

  • Agents create patches entirely via CLI: rad patch create --title "Fix bug" --description "..."
  • Patches are git objects β€” they carry the full diff, description, and metadata
  • No web UI interaction required at any stage
  • Verdict: Excellent. This is the single biggest improvement over GitHub for agents

Code Review:

  • rad review allows line-by-line comments via CLI
  • Reviews are signed by the reviewer’s identity β€” cryptographic attribution
  • Agents can programmatically review patches: parse diff, run linters, post review
  • Verdict: Good. Not as rich as GitHub’s review UI, but perfectly functional for agents

CI/CD Integration:

  • Radicle doesn’t have built-in CI (no GitHub Actions equivalent)
  • CI must be triggered externally β€” watch for events via radicle-httpd API or rad CLI polling
  • Community solutions: radicle-ci (early stage), custom webhook bridges
  • Verdict: Gap. This is the biggest missing piece. Agents would need to build their own CI triggers.

Identity and Authentication:

  • Ed25519 keypair per agent β€” generate once, use forever
  • No token rotation, no OAuth flows, no expiration
  • Delegation: an “org” identity can authorize agent identities to act on its behalf
  • Verdict: Excellent. Massively simpler than GitHub PATs/OAuth

2. Agent-First VCS Comparison Matrix

Feature GitHub GitLab Forgejo/Codeberg Radicle
CLI-completeness Partial (gh CLI covers ~70%) Partial (glab ~60%) Limited API Full (rad 100%)
Auth model OAuth/PAT (human-centric) OAuth/PAT OAuth/PAT Ed25519 keypair (sovereign)
Rate limits 5,000 req/hr Variable Variable None (P2P)
Single point of failure Yes (github.com) Yes (instance) Yes (instance) No (P2P network)
PR/Patch via CLI gh pr create glab mr create API only rad patch create
Code review via CLI Limited Limited No rad review
Issue tracking CLI gh issue glab issue API only rad issue
CI/CD GitHub Actions β˜…β˜…β˜…β˜…β˜… GitLab CI β˜…β˜…β˜…β˜…β˜… Gitea Actions β˜…β˜…β˜…β˜†β˜† None (external) β˜…β˜†β˜†β˜†β˜†
Identity delegation Org membership (human-managed) Groups (human-managed) Orgs (human-managed) Cryptographic delegation
Data portability Vendor lock-in risk Self-hostable Self-hostable, federated Fully portable (git-native)
Offline capability None (API-dependent) None None Full (local-first)
Ecosystem/adoption β˜…β˜…β˜…β˜…β˜… β˜…β˜…β˜…β˜…β˜† β˜…β˜…β˜…β˜†β˜† β˜…β˜…β˜†β˜†β˜†
Agent identity Second-class (bot accounts) Second-class Second-class First-class (same as human)

3. Can Agents Run Radicle Nodes?

Yes, trivially. A Radicle node is a lightweight daemon:

# Start a node (runs in background)
rad node start

# Node requirements:
# - ~50MB RAM
# - ~100MB disk per tracked repo
# - Outbound TCP connections (no inbound required)
# - No GPU, no heavy compute

Each agent in the #B4mad fleet could run its own Radicle node:

Agent Node Role Repos Tracked
Brenner Seed node (always-on, tracks all repos) All
CodeMonkey Worker node (tracks repos it’s working on) Active coding repos
PltOps Infra node (tracks infra repos, runs CI bridge) Infra, ops repos
Romanov Lightweight node (tracks docs repo only) docs/
Brew No node needed (stateless summarizer) β€”

Infrastructure note: Radicle nodes can run on the same machine as the OpenClaw gateway with minimal resource overhead.

4. Gaps and Challenges

Critical Gaps:

  1. No integrated CI/CD β€” The #1 dealbreaker for full migration. Agents rely heavily on automated testing. A custom CI bridge would need to:

    • Watch for rad patch create events
    • Trigger test runs
    • Post results back as patch comments
    • This is buildable but represents significant engineering effort
  2. Ecosystem adoption β€” Most open-source projects are on GitHub. Agents collaborating with external projects must still use GitHub.

  3. Web visibility β€” Stakeholders (investors, community members) expect to browse code on the web. Radicle’s web interface exists but is less polished than GitHub/Forgejo.

  4. No project boards / planning tools β€” GitHub Projects, milestones, labels β€” none of these exist in Radicle. The bead system could fill this gap.

Moderate Gaps:

  1. Documentation and examples β€” Radicle’s docs are improving but still sparse compared to GitHub’s exhaustive documentation.

  2. Binary release hosting β€” No equivalent to GitHub Releases. Would need separate hosting.

  3. Webhook/event system β€” radicle-httpd provides events, but the ecosystem of integrations is thin.

Non-Gaps (commonly assumed but incorrect):

  • “Radicle is slow” β€” Gossip replication adds latency (seconds to minutes) vs GitHub’s immediate availability, but for async agent workflows this is rarely a problem
  • “Radicle can’t handle large repos” β€” It’s git underneath; handles the same scale
  • “Radicle has no access control” β€” Delegates and repo policies provide fine-grained control

5. What Would #B4mad on Radicle Look Like?

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 RADICLE P2P NETWORK                  β”‚
β”‚                                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚ Brenner    β”‚  β”‚ CodeMonkey β”‚  β”‚ PltOps     β”‚     β”‚
β”‚  β”‚ Node       │←→│ Node       │←→│ Node       β”‚     β”‚
β”‚  β”‚ (seed)     β”‚  β”‚ (worker)   β”‚  β”‚ (infra)    β”‚     β”‚
β”‚  β”‚            β”‚  β”‚            β”‚  β”‚            β”‚     β”‚
β”‚  β”‚ did:key:   β”‚  β”‚ did:key:   β”‚  β”‚ did:key:   β”‚     β”‚
β”‚  β”‚ z6Mk...br β”‚  β”‚ z6Mk...cm β”‚  β”‚ z6Mk...po β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚         β”‚              β”‚               β”‚             β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β”‚                        β”‚                             β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                  β”‚
β”‚              β”‚ Romanov Node       β”‚                  β”‚
β”‚              β”‚ (docs only)        β”‚                  β”‚
β”‚              β”‚ did:key:z6Mk...ro  β”‚                  β”‚
β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚
β”‚                                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β”‚ Mirror (one-way sync)
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              GITHUB (Public Mirror)                   β”‚
β”‚                                                      β”‚
β”‚  brenner-axiom/docs    ← rad sync β†’ github mirror   β”‚
β”‚  brenner-axiom/infra   ← rad sync β†’ github mirror   β”‚
β”‚  brenner-axiom/openclaw← rad sync β†’ github mirror   β”‚
β”‚                                                      β”‚
β”‚  Purpose: Human visibility, external collaboration   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Workflow:

  1. CodeMonkey receives a bead assignment
  2. rad clone <rid> β†’ works locally β†’ commits
  3. rad patch create --title "Fix: ..." --description "beads-hub-xyz"
  4. PltOps CI bridge detects new patch β†’ runs tests β†’ posts results
  5. Brenner reviews: rad review <patch-id> --accept
  6. CodeMonkey merges: rad patch merge <patch-id>
  7. Mirror sync pushes to GitHub for public visibility

What changes for agents:

  • No PAT rotation (save ~30 min/month of maintenance)
  • No rate limit errors (save retry logic and backoff code)
  • No GitHub API dependency (save ~500 lines of error handling)
  • Cryptographic identity = guaranteed attribution
  • Offline-capable = resilient to network issues

What doesn’t change:

  • Git workflow is identical (branch, commit, push, review, merge)
  • Bead system works the same (beads are tracked in git either way)
  • Human oversight preserved (Brenner reviews, goern can audit)

Recommendations

Strategy: Hybrid Migration

Do not abandon GitHub. Instead, adopt Radicle as the primary agent-to-agent collaboration layer with GitHub as a public mirror.

Phase 1: Experiment (Weeks 1–3)

Task Owner
Install Radicle on gateway host (rad CLI + radicle-node) PltOps
Generate Radicle identities for all agents PltOps
Initialize one repo on Radicle (e.g., docs/) PltOps
Test full workflow: clone β†’ patch β†’ review β†’ merge CodeMonkey
Set up GitHub mirror sync (one-way, Radicle β†’ GitHub) PltOps

Phase 2: CI Bridge (Weeks 4–6)

Task Owner
Build minimal CI bridge: watch patches β†’ run tests β†’ post results CodeMonkey
Integrate with OpenClaw cron (poll rad patch list --state open) PltOps
Test with real CodeMonkey PRs on docs repo CodeMonkey

Phase 3: Expand (Weeks 7–10)

Task Owner
Migrate beads-hub to Radicle (keep GitHub mirror) PltOps
Migrate infra repo to Radicle PltOps
Build OpenClaw radicle skill (wraps rad CLI) CodeMonkey
Document agent Radicle workflows in AGENTS.md Romanov

Phase 4: Evaluate (Week 11–12)

Task Owner
Measure: time saved on auth/rate-limit issues Brenner
Measure: replication latency impact on workflows PltOps
Decision: expand to all repos or revert to GitHub-primary goern

Decision Criteria for Full Adoption

Adopt Radicle as primary if:

  • βœ… CI bridge works reliably for 4+ weeks
  • βœ… Replication latency < 60 seconds for agent-to-agent
  • βœ… No critical workflow blocked by missing features
  • βœ… GitHub mirror sync is reliable (for external visibility)
  • βœ… At least 2 agents report reduced friction

Remain hybrid (Radicle for internal, GitHub for external) if:

  • ⚠️ CI bridge requires ongoing maintenance > 2 hrs/week
  • ⚠️ External collaborators can’t interact with Radicle repos

Revert to GitHub-primary if:

  • ❌ Radicle node reliability < 99% uptime
  • ❌ Replication failures cause data loss or conflicts
  • ❌ Engineering overhead exceeds time saved

Long-Term Vision

If Radicle adoption succeeds, #B4mad could become an early example of a fully decentralized agent development organization:

  • DAO governs funding and priorities (on-chain, Base L2)
  • Radicle hosts code collaboration (P2P, no central server)
  • Beads coordinates task tracking (git-native, Radicle-compatible)
  • OpenClaw orchestrates agent execution (self-hosted)

No GitHub, no cloud dependency, no single point of failure. Fully sovereign, fully agent-native.

References

  1. Radicle Documentation β€” https://radicle.xyz/guides
  2. Radicle Protocol Specification β€” https://app.radicle.xyz/nodes/seed.radicle.garden
  3. rad CLI Reference β€” https://radicle.xyz/guides/user
  4. Radicle HTTP API β€” https://radicle.xyz/guides/httpd
  5. EIP-4337: Account Abstraction β€” https://eips.ethereum.org/EIPS/eip-4337 (for identity parallels)
  6. Noise Protocol Framework β€” https://noiseprotocol.org/
  7. DID:key Method β€” https://w3c-ccg.github.io/did-method-key/
  8. Forgejo Federation Spec β€” https://forgejo.org/docs/latest/user/federation/
  9. GitHub REST API Rate Limiting β€” https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting
  10. Romanov, “DAO Agent Fleet Integration” (2026-02-21) β€” Companion paper, beads-hub-oev