Bringing AI Agents to RISC-V64: The First cagent Distribution Package

Bringing AI Agents to RISC-V64: The First cagent Distribution Package

Bringing AI Agents to RISC-V64: The First cagent Distribution Package

Bruno Verachten
version 1.0, 2025-11-14

Table of Contents

Bringing AI Agents to RISC-V64

Photo from Unsplash - Abstract geometric patterns representing the convergence of AI agents and architecture

When Docker Engineering released cagent, their multi-agent AI runtime, I knew immediately it belonged in our RISC-V64 repository. What started as “just another package” turned into something special: the first Linux distribution package for cagent ever created. Here’s the story of how we brought orchestrated AI agents to RISC-V64, complete with automated builds, dual package formats, and all the quirks of packaging Go binaries.

1. The Discovery: What is cagent?

I discovered cagent while browsing Docker’s GitHub repositories. The README caught my attention immediately:

A powerful, easy to use, customizable multi-agent runtime that orchestrates AI agents with specialized capabilities and tools.

This wasn’t just another tool. This was Docker Engineering’s vision of how to build intelligent agent systems. Think of it as letting you quickly build and run a team of virtual experts that collaborate to solve complex problems.

1.1. Why cagent Matters

The concept is elegant: instead of asking a single AI model to be an expert at everything, you create specialized agents. One agent might be a Golang expert, another might handle DevOps tasks, and a third might coordinate between them. Each agent has:

  • Specialized knowledge - Domain-specific expertise defined in YAML

  • Custom tools - Integration with external services via MCP (Model Context Protocol)

  • Smart delegation - Ability to hand off tasks to more specialized agents

  • Provider flexibility - Support for OpenAI, Anthropic, Gemini, xAI, Mistral

Here’s what a basic agent looks like:

agents:
  root:
    model: openai/gpt-5-mini
    description: A helpful AI assistant
    instruction: |
      You are a knowledgeable assistant that helps users with various tasks.
      Be helpful, accurate, and concise in your responses.

But it gets better. You can give agents access to real tools through MCP servers:

agents:
  root:
    model: openai/gpt-5-mini
    description: A helpful AI assistant with search capabilities
    instruction: |
      You are a knowledgeable assistant. Use DuckDuckGo to search for
      current information when needed.
    toolsets:
      - type: mcp
        ref: docker:duckduckgo

Now your agent can search the web, read files, interact with APIs - all defined declaratively in YAML.

2. The Decision: Why Package cagent for RISC-V64?

When I saw cagent, several thoughts hit me immediately:

2.1. Natural Ecosystem Fit

We’re already packaging Docker Engine, Docker CLI, Docker Compose, and Docker Buildx for RISC-V64. Adding cagent was a natural extension:

  • Same parent organization - Developed by Docker Engineering

  • Complementary tool - Extends Docker’s AI capabilities

  • Go-based - Same language and build toolchain as other Docker tools

  • Similar users - Developers using our other packages would want this

2.2. Strategic Positioning

RISC-V64 is positioned as an open, innovative architecture. AI agents represent cutting-edge development. Bringing cagent to RISC-V64 sends a message: this architecture is ready for modern AI workflows.

2.3. First-to-Market Opportunity

Here’s what made me move fast: cagent had no distribution packages yet. Not on Debian, not on Fedora, not on Ubuntu. Docker provides binaries via GitHub releases and Homebrew on macOS, but no Linux distribution had packaged it.

We could be first. And for a relatively young platform like RISC-V64, being first to support cutting-edge tools matters.

3. The Implementation: Building for RISC-V64

Go’s portability makes it ideal for RISC-V64. Building natively on our BananaPi F3 hardware is straightforward thanks to Go’s excellent RISC-V64 support.

3.1. Creating the Build Script

I started with build-cagent-riscv64.sh:

#!/usr/bin/env bash
set -euo pipefail

build_cagent() {
    echo "Building cagent for RISC-V64..."

    if [ ! -d "cagent" ]; then
        echo "Error: cagent directory not found"
        echo "Please initialize the submodule with:"
        echo "  git submodule update --init --recursive"
        exit 1
    fi

    cd cagent

    # Get version info
    GIT\_TAG=\$\(git describe --tags --exact-match 2>/dev/null \|| echo \"dev\")
    GIT_COMMIT=$(git rev-parse HEAD)

    echo "Version: ${GIT_TAG}"
    echo "Commit: ${GIT_COMMIT}"

    # Build with ldflags for version info
    GOOS=linux GOARCH=riscv64 go build \
        -ldflags "-X 'github.com/docker/cagent/pkg/version.Version=${GIT_TAG}' -X 'github.com/docker/cagent/pkg/version.Commit=${GIT_COMMIT}'" \
        -o ../bin/cagent-linux-riscv64 \
        ./main.go

    cd ..

    echo "Build complete: bin/cagent-linux-riscv64"
}

Key decisions here:

  1. Submodule approach - Following our pattern of using official upstream sources as git submodules rather than vendoring or forking. This keeps us synchronized with upstream, eliminates fork maintenance burden, and makes it trivial to update to any version (just git submodule update --remote)

  2. Version embedding - Using ldflags to bake version info into the binary

  3. Static naming - Output to cagent-linux-riscv64 for consistency with our other packages

3.1.1. Build Performance

On our BananaPi F3 RISC-V64 hardware:

  • Build time: 5-8 minutes (depending on Go cache state)

  • Resource requirements:

    • RAM: 2GB minimum, 4GB recommended

    • Disk space: ~1GB for Go dependencies and build artifacts

    • Network: ~200MB initial download for Go modules

  • Go version: Requires Go 1.21 or later for RISC-V64 support

3.2. The CI/CD Pipeline

I created three workflows following our established patterns:

3.2.1. Weekly Builds (cagent-weekly-build.yml)

Runs every Sunday at 06:00 UTC, building the latest cagent from the main branch.

The complete workflow is available at cagent-weekly-build.yml.

Key sections:

jobs:
  build-cagent:
    runs-on: [self-hosted, riscv64]

    steps:
      - name: Build cagent binary
        run: |
          cd cagent
          GIT\_TAG=\$\(git describe --tags --exact-match 2>/dev/null \|| echo \"dev\")
          GIT_COMMIT=$(git rev-parse HEAD)

          GOOS=linux GOARCH=riscv64 CGO_ENABLED=0 go build \
            -ldflags "-X 'github.com/docker/cagent/pkg/version.Version=${GIT_TAG}' -X 'github.com/docker/cagent/pkg/version.Commit=${GIT_COMMIT}'" \
            -o cagent-linux-riscv64 \
            ./main.go

Note CGO_ENABLED=0 - we want truly static binaries that don’t depend on glibc or other C libraries, ensuring maximum portability across different RISC-V64 systems. This eliminates runtime dependencies and makes the binary work identically on any RISC-V64 Linux system, regardless of library versions.

3.2.2. Release Tracking (track-cagent-releases.yml)

Checks daily for new upstream releases and automatically triggers builds.

The complete workflow is available at track-cagent-releases.yml.

Key logic:

- name: Check for new cagent release
  run: |
    # Get latest release from docker/cagent
    LATEST=$(gh api repos/docker/cagent/releases/latest --jq '.tag_name')

    # Check if we've built it (cagent-v1.9.13-riscv64 format)
    CLEAN_VERSION="${LATEST#v}"
    OUR_TAG="cagent-v${CLEAN_VERSION}-riscv64"

    if gh release view "${OUR_TAG}" >/dev/null 2>&1; then
      echo "already_built=true"
    else
      echo "already_built=false"
      # Trigger build workflow
      gh workflow run cagent-weekly-build.yml -f cagent_ref=$LATEST
    fi

This gives us automatic version tracking with zero manual intervention.

3.2.3. Package Builds (Debian and RPM)

The package workflows trigger automatically after successful binary builds. More on this in the packaging section.

4. The Packaging Challenge: Go Binaries Are Special

Here’s where things got interesting. Go binaries have quirks that make packaging different from traditional C/C++ software.

4.1. The Debian Package

Creating the Debian package structure in debian-cagent/.

4.1.1. Package Control File

The control file defines metadata and dependencies:

Source: cagent
Section: devel
Priority: optional
Maintainer: Bruno Verachten <myself@gmail.com>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.7.2.0
Homepage: https://github.com/docker/cagent

Package: cagent
Architecture: riscv64
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: Multi-agent AI runtime by Docker Engineering for RISC-V64
 cagent is a powerful, easy to use, customizable multi-agent runtime that
 orchestrates AI agents with specialized capabilities and tools.

4.1.2. The debian/rules Magic

The real magic is in debian/rules, where we tell dpkg how to handle our pre-built binary:

#!/usr/bin/make -f

%:
    dh $@

override_dh_auto_build:
    # Binary is pre-built, skip build

override_dh_auto_install:
    install -d debian/cagent/usr/bin
    install -m 0755 bin/cagent-linux-riscv64 debian/cagent/usr/bin/cagent

override_dh_strip:
    # Skip stripping Go binaries

override_dh_shlibdeps:
    # Skip shlib dependency detection for Go binaries

override_dh_dwz:
    # Skip dwz compression for Go binaries

4.1.3. Understanding the Overrides

Let me explain these overrides, because they’re critical for Go binary packaging:

Why Skip Stripping?

Go binaries embed metadata that tools like strip can corrupt. The version information we baked in with ldflags? Stripping can damage it.

Why Skip Shlib Dependencies?

Go programs are typically statically linked. They don’t depend on system shared libraries the way C programs do. Running dh_shlibdeps would either fail or add bogus dependencies.

Why Skip dwz?

The dwz tool compresses DWARF debug information, but Go’s debug format doesn’t play nicely with it. You’ll get errors about “unsupported compressed debug sections.”

These overrides were hard-won knowledge from earlier Go packaging attempts.

4.2. The RPM Package

The RPM spec file (rpm-cagent/cagent.spec) has similar considerations:

Name:           cagent
Version:        1.9.13
Release:        1%{?dist}
Summary:        Multi-agent AI runtime by Docker Engineering for RISC-V64

BuildArch:      riscv64

# Disable Go binary processing
%global __brp_strip %{nil}
%global __brp_strip_static_archive %{nil}
%global __brp_strip_comment_note %{nil}
%global _enable_debug_packages 0
%global debug_package %{nil}

%install
install -d %{buildroot}%{_bindir}
install -p -m 0755 %{SOURCE0} %{buildroot}%{_bindir}/cagent

Same principle: tell RPM to leave our Go binary alone. Don’t strip it, don’t analyze it, don’t debug-package it, just install it.

4.3. Package Detection Logic

Here’s a subtle bug I had to fix. The package build workflow needs to detect whether a release already has packages.

Initially, I used a pattern that was too strict:

# Broken (too strict - doesn't match version-suffixed filenames):
if echo \"\$ASSETS\" | grep -q 'cagent\.deb'; then
    echo "Release already has Debian packages - skipping build"
    exit 0
fi

This failed to match versioned filenames like cagent_1.9.13-1_riscv64.deb because it looked for an exact .deb extension without accounting for the version string.

The corrected version:

# Fixed (properly matches versioned filenames):
ASSETS=$(gh release view "$LATEST_RELEASE" --json assets --jq '.assets[].name')
if echo "$ASSETS" | grep -q 'cagent.*\.deb$'; then
    echo "Release already has Debian packages - skipping build"
    exit 0
fi

The regex

cagent.

\deb$ uses . to match any characters (including underscores, version numbers, and architecture tags) between “cagent” and “.deb”, properly matching filenames like cagent_1.9.13-1_riscv64.deb.

5. Repository Integration: Making it Available

With packages built correctly and automation detecting releases properly, the next challenge was making them easily discoverable and installable through standard package managers. Building the packages is only half the battle. Users need a way to install them.

5.1. APT Repository Updates

The update-apt-repo.yml workflow now includes cagent in its triggers:

on:
  workflow_run:
    workflows:
      - "Build Debian Package"
      - "Build Docker Compose Debian Package"
      - "Build Docker CLI Debian Package"
      - "Build Docker Buildx Debian Package"
      - "Build cagent Debian Package"  # <-- Added this
    types: [completed]

When a cagent Debian package is built, the workflow:

  1. Downloads the .deb from the release

  2. Checks out the apt-repo branch

  3. Uses reprepro to add the package

  4. Signs it with our GPG key

  5. Commits and pushes to GitHub Pages

Users can now install cagent alongside Docker:

# Add our repository
wget -qO - https://github.com/gounthar/docker-for-riscv64/releases/download/gpg-key/docker-riscv64.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/docker-riscv64.gpg

echo "deb [arch=riscv64 signed-by=/usr/share/keyrings/docker-riscv64.gpg] \
  https://gounthar.github.io/docker-for-riscv64 trixie main" \
  | sudo tee /etc/apt/sources.list.d/docker-riscv64.list

# Install cagent
sudo apt-get update
sudo apt-get install cagent

The installation output should look like this:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  cagent
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/26.6 MB of archives.
After this operation, 73.9 MB of additional disk space will be used.
Selecting previously unselected package cagent.
(Reading database ... 145234 files and directories currently installed.)
Preparing to unpack .../cagent_1.9.13-1_riscv64.deb ...
Unpacking cagent (1.9.13-1) ...
Setting up cagent (1.9.13-1) ...

5.1.1. Verification

After installation, verify the package is working correctly:

# Check version
cagent version

# Expected output:
# cagent version 1.9.13 (commit: abc123...)

# Verify binary location
which cagent
# /usr/bin/cagent

# Test basic functionality
cagent new --help
# Should display help for creating new agent configurations

5.2. RPM Repository Updates

Similarly for RPM (update-rpm-repo.yml):

on:
  workflow_run:
    workflows:
      - "Build Docker RPM Package"
      - "Build Docker Compose RPM Package"
      - "Build Docker CLI RPM Package"
      - "Build Tini RPM Package"
      - "Build Docker Buildx RPM Package"
      - "Build cagent RPM Package"  # <-- Added this

The process is similar but uses createrepo_c instead of reprepro. Fedora RISC-V users can now:

# Add our repository
sudo tee /etc/yum.repos.d/docker-riscv64.repo << EOF
[docker-riscv64]
name=Docker for RISC-V64
baseurl=https://gounthar.github.io/docker-for-riscv64/rpm
enabled=1
gpgcheck=1
gpgkey=https://github.com/gounthar/docker-for-riscv64/releases/download/gpg-key/docker-riscv64.gpg
EOF

# Install cagent
sudo dnf install cagent

The installation output should look like this:

Last metadata expiration check: 0:00:23 ago on Thu 14 Nov 2025 06:30:15 PM UTC.
Dependencies resolved.
================================================================================
 Package        Architecture    Version              Repository           Size
================================================================================
Installing:
 cagent         riscv64         1.9.13-1             docker-riscv64       26 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 26 M
Installed size: 74 M
Is this ok [y/N]: y
Downloading Packages:
cagent-1.9.13-1.riscv64.rpm                     26 MB/s |  26 MB     00:01
--------------------------------------------------------------------------------
Total                                           26 MB/s |  26 MB     00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : cagent-1.9.13-1.riscv64                                1/1
  Verifying        : cagent-1.9.13-1.riscv64                                1/1

Installed:
  cagent-1.9.13-1.riscv64

Complete!

5.2.1. Verification

After installation, verify the package is working correctly:

# Check version
cagent version

# Expected output:
# cagent version 1.9.13 (commit: abc123...)

# Verify binary location
which cagent
# /usr/bin/cagent

# Verify RPM package info
rpm -qi cagent
# Should show package information including version and description

# Test basic functionality
cagent new --help
# Should display help for creating new agent configurations

6. The First Package: What It Means

Let me emphasize this again: this is the first Linux distribution package for cagent. Period.

6.1. Why This Matters

Docker provides several distribution methods:

  • GitHub releases - Manual downloads of static binaries

  • Homebrew - Automated installation on macOS

  • Docker Hub - Agent configurations as OCI images

But no Linux distribution had packaged it. Not Debian, not Fedora, not Ubuntu, not Arch. We’re first.

6.2. Implications for cagent

Being packaged in a distribution (even a small, specialized one) has benefits:

  1. Dependency management - Package managers handle updates

  2. System integration - Standard paths, predictable locations

  3. Distribution channels - Easier discovery for users

  4. Validation - Packages go through quality checks

Our packaging work could serve as a template when mainstream distributions eventually package cagent.

6.3. Implications for RISC-V64

Every modern, cutting-edge tool we bring to RISC-V64 strengthens the ecosystem:

  • Developer mindshare - “I can run cagent on RISC-V? Interesting…​”

  • Use case expansion - RISC-V64 as an AI development platform

  • Ecosystem completeness - Docker + Docker Compose + Buildx + cagent = full stack

We’re not just porting old software. We’re bringing tomorrow’s tools to RISC-V64 today.

6.4. Distribution Availability Comparison

Here’s how cagent availability looks across different Linux distributions and architectures:

Distribution Architecture Package Available Installation Method
Debian Trixie riscv64 Yes (First!) apt-get install cagent
Fedora riscv64 Yes (First!) dnf install cagent
Ubuntu riscv64 ⚠️ Compatible Our .deb packages compatible1
Ubuntu amd64/arm64 ❌ No Manual download from GitHub
Debian amd64/arm64 ❌ No Manual download from GitHub
Fedora x86_64/aarch64 ❌ No Manual download from GitHub
Arch Linux Any ❌ No Manual download or AUR
macOS arm64/amd64 ✅ Yes brew install cagent
Any Linux Any ⚠️ Binary Download from docker/cagent releases

1 Our Debian Trixie packages use .deb format and should work on Ubuntu RISC-V64 systems, though we haven’t officially tested or certified this configuration. Ubuntu uses the same package format (dpkg/apt), so compatibility is likely but not guaranteed.

Key insight: As of November 2025, RISC-V64 is the only Linux architecture with native distribution packages for cagent. Not x86_64, not aarch64 - RISC-V64 is leading in cagent packaging support.

7. Lessons Learned

7.1. Go Binary Packaging is Different

The biggest lesson: Go binaries need special handling. Document these overrides clearly:

  • Skip stripping (corrupts embedded metadata)

  • Skip shlib detection (static linking)

  • Skip dwz compression (incompatible debug format)

These aren’t optional workarounds. They’re requirements for correct Go packaging.

7.2. Automation Prevents Drift

Our automated tracking caught cagent 1.9.13’s release within 24 hours. Without automation, we’d need manual monitoring and would likely lag weeks behind upstream.

The pattern we’ve established - weekly builds + daily release tracking + automatic packaging - scales beautifully. Adding cagent required minimal new code because the infrastructure was already there.

7.3. First-Mover Advantage Exists

Being the first to package cagent gives us visibility. When people search “cagent linux package,” we’re the answer. When upstream Docker considers distribution packaging, we’re the reference implementation.

Speed matters in open source. Being first isn’t everything, but it’s something.

8. Current Status and Future Work

8.1. What Works Today

As of November 14, 2025:

  • ✅ cagent 1.9.13-1 available for Debian Trixie (riscv64)

  • ✅ cagent 1.9.13-1 available for Fedora (riscv64)

  • ✅ Automated weekly builds from upstream main

  • ✅ Automated release tracking and packaging

  • ✅ Signed APT and RPM repositories

  • ✅ Full GitHub Pages distribution

Installation requires adding our repository first:

# Debian/Trixie - Add repository
wget -qO - https://github.com/gounthar/docker-for-riscv64/releases/download/gpg-key/docker-riscv64.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/docker-riscv64.gpg

echo "deb [arch=riscv64 signed-by=/usr/share/keyrings/docker-riscv64.gpg] \
  https://gounthar.github.io/docker-for-riscv64 trixie main" \
  | sudo tee /etc/apt/sources.list.d/docker-riscv64.list

# Install cagent
sudo apt-get update
sudo apt-get install cagent

# Verify
cagent version

For Fedora:

# Fedora - Add repository
sudo tee /etc/yum.repos.d/docker-riscv64.repo << EOF
[docker-riscv64]
name=Docker for RISC-V64
baseurl=https://gounthar.github.io/docker-for-riscv64/rpm/fedora/riscv64
enabled=1
gpgcheck=1
gpgkey=https://github.com/gounthar/docker-for-riscv64/releases/download/gpg-key/docker-riscv64.gpg
EOF

# Install cagent
sudo dnf install cagent

# Verify
cagent version

8.2. Troubleshooting

8.2.1. Build Issues

Problem: “cagent directory not found” error

Error: cagent directory not found
Please initialize the submodule with:
  git submodule update --init --recursive

Solution: Initialize the git submodule:

git submodule update --init --recursive

Problem: “unsupported GOOS/GOARCH pair linux/riscv64” error

Solution: Update to Go 1.21 or later, which includes official RISC-V64 support:

go version  # Should show go1.21 or later

Problem: Build runs out of memory

Solution: Ensure at least 2GB RAM is available. On constrained systems, reduce concurrent builds:

GOMAXPROCS=1 go build ...

8.2.2. Installation Issues

Problem: “Signature verification failed” when installing

E: The repository 'https://gounthar.github.io/docker-for-riscv64 trixie Release' is not signed.

Solution: Re-import the GPG key:

wget -qO - https://github.com/gounthar/docker-for-riscv64/releases/download/gpg-key/docker-riscv64.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/docker-riscv64.gpg

# Verify key was imported
gpg --list-keys --keyring /usr/share/keyrings/docker-riscv64.gpg

Problem: “Package cagent is not available” on apt-get install

Solution: Ensure the architecture matches:

# Check your architecture
dpkg --print-architecture
# Should show: riscv64

# Update package lists
sudo apt-get update

# Verify repository is added
apt-cache policy cagent

Problem: cagent binary fails with “cannot execute binary file: Exec format error”

Solution: This means you’re trying to run a RISC-V64 binary on a different architecture. Verify:

uname -m
# Should show: riscv64

file /usr/bin/cagent
# Should show: ELF 64-bit LSB executable, UCB RISC-V, ...

8.2.3. Runtime Issues

Problem: cagent fails with “API key not found”

Solution: cagent requires API keys for AI providers. Set them as environment variables:

export OPENAI_API_KEY="your-key-here"
export ANTHROPIC_API_KEY="your-key-here"

Or create a .env file in your agent configuration directory.

Problem: MCP server connection fails

Solution: Verify MCP servers are installed and accessible:

# Check if MCP server binary exists
which docker-mcp-server

# Test MCP server directly
docker-mcp-server --help

8.3. Real-World Example: DevOps Assistant

To demonstrate cagent’s capabilities, here’s a complete working configuration for a DevOps assistant specialized in RISC-V64 systems:

# devops-assistant.yaml
agents:
  root:
    model: anthropic/claude-3-5-sonnet-20241022
    description: |
      DevOps specialist for RISC-V64 Docker systems with expertise in
      container management, system monitoring, and troubleshooting.
    instruction: |
      You are an expert DevOps engineer specializing in:
      - Docker container management on RISC-V64 architecture
      - System performance monitoring and optimization
      - Build automation and CI/CD pipelines
      - Linux package management (apt, dnf, rpm)

      You have access to filesystem operations and can help users:
      - Inspect Docker configurations and logs
      - Analyze system resource usage
      - Debug container issues
      - Review build scripts and workflows

      Always provide clear explanations and consider RISC-V64 specific
      constraints like limited binary availability and build times.

    toolsets:
      - type: mcp
        ref: docker:filesystem
        config:
          allowed_directories:
            - /var/log/docker
            - /etc/docker
            - /home/${USER}/.docker
            - ${PWD}

settings:
  providers:
    anthropic:
      api_key_env: ANTHROPIC_API_KEY
      model_aliases:
        sonnet: claude-3-5-sonnet-20241022

Save this to devops-assistant.yaml and run:

# Set your API key
export ANTHROPIC_API_KEY="your-key-here"

# Run the agent
cagent run devops-assistant.yaml

# Example interaction:
# User: "Check my Docker daemon logs for errors"
# Agent: *uses filesystem MCP to read /var/log/docker/daemon.log*
#        *analyzes logs and provides diagnostics*

This demonstrates:

  • Specialized knowledge - DevOps and RISC-V64 expertise in the instruction

  • Tool access - Filesystem MCP for reading logs and configs

  • Security constraints - Limited to specific directories

  • Provider configuration - Anthropic with model aliases

8.4. What’s Next

Several possibilities for future enhancement:

8.4.1. Configuration Package

cagent supports pre-configured agent definitions. We could create a cagent-examples package with useful agent configurations:

  • Development assistants (Golang expert, Python expert, DevOps specialist)

  • Multi-agent teams (software development team, research team)

  • MCP-integrated agents (GitHub integration, file system access, web search)

8.4.2. Systemd Integration

For long-running agent services, systemd units could automate:

  • Agent daemon management

  • Log rotation and monitoring

  • Resource limits and security constraints

8.4.3. MCP Server Packages

The Model Context Protocol ecosystem is growing. We could package popular MCP servers:

  • rust-mcp-filesystem - File system tools

  • mcp-server-git - Git operations

  • mcp-server-docker - Docker control

Combined with cagent, this creates a complete agent development environment.

9. Conclusion

Adding cagent to our RISC-V64 repository was straightforward technically - Go’s native RISC-V64 support made building trivial on our BananaPi F3 hardware, and our established packaging infrastructure made integration smooth.

But the significance goes beyond the technical implementation. We’ve brought a cutting-edge AI agent runtime to RISC-V64 before any mainstream Linux distribution packaged it. We’ve shown that RISC-V64 isn’t just catching up to existing software - it’s ready for the future.

When someone wants to build intelligent agent systems on RISC-V64, they can now:

sudo apt-get install cagent
cagent new  # Generate an agent configuration
cagent run my-agent.yaml  # Deploy it immediately

That’s the power of proper packaging: turning a GitHub project into a first-class system tool.

The Docker ecosystem on RISC-V64 now includes:

  • Docker Engine - Container runtime

  • Docker CLI - Command-line interface

  • Docker Compose - Multi-container applications

  • Docker Buildx - Multi-platform builds

  • Tini - Container init system

  • cagent - Multi-agent AI runtime

We’re not just building containers anymore. We’re building intelligent systems.

And that’s exciting.

10. Resources

11. License

This article is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).

Code examples in this article are dual-licensed under:

You are free to use, modify, and distribute the code examples under either license.

The cagent software itself is licensed under the Apache License 2.0. See the upstream repository for details.


This work is part of the ongoing effort to bring Docker and modern development tools to RISC-V64 architecture. All code and packaging materials are available under open source licenses.

Version 1.0
Last updated 2025-11-14 17:33:44 +0100