<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yechua Silva</title>
    <description>The latest articles on DEV Community by Yechua Silva (@yechuasilva).</description>
    <link>https://dev.to/yechuasilva</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3998991%2Fe9767bc5-9f38-4968-9215-935e185f9d80.jpg</url>
      <title>DEV Community: Yechua Silva</title>
      <link>https://dev.to/yechuasilva</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yechuasilva"/>
    <language>en</language>
    <item>
      <title>AMD Had Zero Agent Skills. I Built the First 10.</title>
      <dc:creator>Yechua Silva</dc:creator>
      <pubDate>Fri, 10 Jul 2026 02:47:28 +0000</pubDate>
      <link>https://dev.to/yechuasilva/amd-had-zero-agent-skills-i-built-the-first-10-4mi5</link>
      <guid>https://dev.to/yechuasilva/amd-had-zero-agent-skills-i-built-the-first-10-4mi5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;NVIDIA has 428+ agent skills on skills.sh. AMD had &lt;strong&gt;zero&lt;/strong&gt;. This is the story of building the first open-source collection of agent skills for AMD ROCm GPU workloads — and why it matters for the entire AI ecosystem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you've used AI coding agents like Claude Code, OpenCode, Cursor, or Codex, you've probably encountered &lt;strong&gt;agent skills&lt;/strong&gt; — reusable instruction sets that teach agents how to perform specific tasks. Skills are the building blocks of agent workflows: "set up my GPU", "deploy vLLM", "run YOLO inference", "check PPE compliance".&lt;/p&gt;

&lt;p&gt;The agent skills ecosystem is powered by &lt;a href="https://skills.sh" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt;, a registry that indexes skill repositories from GitHub. When you run &lt;code&gt;npx skills add owner/repo&lt;/code&gt;, the CLI clones the repo and installs skills into your agent's configuration directory.&lt;/p&gt;

&lt;p&gt;Here's the problem:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;GPU Vendor&lt;/th&gt;
&lt;th&gt;Agent Skills on skills.sh&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA&lt;/td&gt;
&lt;td&gt;428+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Zero. Not a single skill for AMD ROCm. If you're a developer using AMD MI300X, MI250, or even a Radeon RX 7900 with an AI coding agent, you had nothing. Every GPU setup, every Docker configuration, every inference deployment required manual documentation lookup and copy-paste.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;&lt;a href="https://github.com/yechua-silva/amd-rocm-skills" rel="noopener noreferrer"&gt;amd-rocm-skills&lt;/a&gt;&lt;/strong&gt; — 10 production-ready agent skills covering the full AMD ROCm GPU workflow:&lt;/p&gt;

&lt;h3&gt;
  
  
  Core (4 skills)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rocm-setup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Install, verify, and configure ROCm on AMD GPUs with PyTorch. Auto-detects NVIDIA CUDA and CPU fallback.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rocm-docker&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Docker with AMD GPU passthrough (&lt;code&gt;--device=/dev/kfd&lt;/code&gt;), NVIDIA runtime, and CPU profiles. docker-compose multi-profile.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;vllm-rocm-deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deploy vLLM for LLM/VLM inference on ROCm. InternVL2, Qwen2-VL, LLaVA. OpenAI-compatible API.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;yolo-rocm-deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;YOLOv8 on PyTorch ROCm. Inference, model export (ONNX, TorchScript), benchmarking.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Pipeline (3 skills)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;video-pipeline-rocm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Video inference pipeline with GStreamer + ROCm. RTSP capture, hardware decode (AMD VCN / NVIDIA NVDEC), frame extraction, batch inference.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;vlm-rocm-inference&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;VLM inference directly with PyTorch on ROCm. InternVL2, Qwen2-VL. Multimodal (text + image).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rocm-benchmark&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPU benchmarking: matmul, memory bandwidth, inference latency, VRAM monitoring. ROCm + CUDA + CPU comparison.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Industrial (3 skills)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ppe-detection-pipeline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PPE (Personal Protective Equipment) detection in video for industrial safety. YOLOv8 + tracking + alerts (webhook, MQTT, log). Multi-camera, multi-GPU.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ds132-compliance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chilean DS 132 mining safety compliance checker. Zone-based EPP requirements, audit logging, compliance reports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rocm-troubleshoot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Diagnostics and troubleshooting for ROCm. Error codes, compatibility checks, quick fixes, optimization checklist.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  agentskills.io Specification
&lt;/h3&gt;

&lt;p&gt;Every skill follows the &lt;a href="https://agentskills.io/specification" rel="noopener noreferrer"&gt;agentskills.io&lt;/a&gt; specification — the open standard for agent skills:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;skills/&amp;lt;skill-name&amp;gt;/
├── SKILL.md          # Required: YAML frontmatter + instructions
├── scripts/          # Required: executable Python/Bash scripts
└── references/       # Optional: technical documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;SKILL.md&lt;/code&gt; frontmatter uses only standard, portable fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rocm-setup&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="s"&gt;Install, verify, and configure AMD ROCm on Linux for AI/ML workloads&lt;/span&gt;
  &lt;span class="s"&gt;with PyTorch. Use this skill when setting up AMD GPUs (MI300X, MI250,&lt;/span&gt;
  &lt;span class="s"&gt;RX 7900) for GPU-accelerated PyTorch, verifying ROCm installation, or&lt;/span&gt;
  &lt;span class="s"&gt;diagnosing GPU detection issues. Keywords: rocm, amd, gpu, pytorch,&lt;/span&gt;
  &lt;span class="s"&gt;hip, setup, mi300x, detect-gpu, rocm-smi, rocminfo, cuda, check-rocm&lt;/span&gt;
&lt;span class="na"&gt;license&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Apache-2.0&lt;/span&gt;
&lt;span class="na"&gt;compatibility&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="s"&gt;Compatible with Claude Code, OpenCode, Codex, Cursor, Cline, Roo Code,&lt;/span&gt;
  &lt;span class="s"&gt;Windsurf, Gemini CLI, and Kiro CLI. Requires Linux with AMD ROCm or&lt;/span&gt;
  &lt;span class="s"&gt;NVIDIA CUDA GPU (CPU fallback supported).&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.1.0"&lt;/span&gt;
  &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yechua-silva&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;No Claude Code-specific fields.&lt;/strong&gt; No &lt;code&gt;context: fork&lt;/code&gt;, no &lt;code&gt;agent: Explore&lt;/code&gt;, no &lt;code&gt;model: claude-sonnet-*&lt;/code&gt;. Every skill works identically across 9+ agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-GPU Design
&lt;/h3&gt;

&lt;p&gt;The key differentiator: &lt;strong&gt;every skill supports three backends with automatic detection&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Auto-detection pattern used across all skills
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_available&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rocm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;        &lt;span class="c1"&gt;# AMD ROCm
&lt;/span&gt;        &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cuda:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;       &lt;span class="c1"&gt;# torch.cuda works on both!
&lt;/span&gt;    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cuda&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;        &lt;span class="c1"&gt;# NVIDIA CUDA
&lt;/span&gt;        &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cuda:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cpu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cpu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the critical insight: &lt;strong&gt;PyTorch's &lt;code&gt;torch.cuda&lt;/code&gt; API works on both AMD ROCm and NVIDIA CUDA&lt;/strong&gt;. There is no &lt;code&gt;torch.rocm&lt;/code&gt;. ROCm uses the standard &lt;code&gt;torch.cuda&lt;/code&gt; namespace transparently. Use &lt;code&gt;torch.version.hip&lt;/code&gt; to distinguish AMD from NVIDIA.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;AMD ROCm&lt;/th&gt;
&lt;th&gt;NVIDIA CUDA&lt;/th&gt;
&lt;th&gt;CPU&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PyTorch&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;torch.cuda&lt;/code&gt; + &lt;code&gt;torch.version.hip&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;torch.cuda&lt;/code&gt; + &lt;code&gt;torch.version.cuda&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;device='cpu'&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vLLM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;vllm-openai-rocm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;vllm-openai&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--device cpu&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--device /dev/kfd --device /dev/dri&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--gpus all&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No flags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video decode&lt;/td&gt;
&lt;td&gt;VAAPI / VCN&lt;/td&gt;
&lt;td&gt;NVDEC&lt;/td&gt;
&lt;td&gt;avdec (software)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Docker Multi-Profile
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;rocm-docker&lt;/code&gt; skill includes a &lt;code&gt;docker-compose.yml&lt;/code&gt; with three profiles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# AMD ROCm&lt;/span&gt;
docker compose &lt;span class="nt"&gt;--profile&lt;/span&gt; rocm up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# NVIDIA CUDA&lt;/span&gt;
docker compose &lt;span class="nt"&gt;--profile&lt;/span&gt; nvidia up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# CPU fallback&lt;/span&gt;
docker compose &lt;span class="nt"&gt;--profile&lt;/span&gt; cpu up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Agent Compatibility
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Supported&lt;/th&gt;
&lt;th&gt;How&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenCode&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.agents/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.codex/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.cursor/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cline&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.cline/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roo Code&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.roo/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windsurf&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.windsurf/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini CLI&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.gemini/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kiro CLI&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.kiro/skills/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install all skills
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List available skills&lt;/span&gt;
npx skills add yechua-silva/amd-rocm-skills &lt;span class="nt"&gt;--list&lt;/span&gt;

&lt;span class="c"&gt;# Install a single skill&lt;/span&gt;
npx skills add yechua-silva/amd-rocm-skills &lt;span class="nt"&gt;--skill&lt;/span&gt; rocm-setup &lt;span class="nt"&gt;--agent&lt;/span&gt; opencode &lt;span class="nt"&gt;--yes&lt;/span&gt;

&lt;span class="c"&gt;# Install all skills in multiple agents&lt;/span&gt;
npx skills add yechua-silva/amd-rocm-skills &lt;span class="nt"&gt;-a&lt;/span&gt; claude-code &lt;span class="nt"&gt;-a&lt;/span&gt; opencode &lt;span class="nt"&gt;-a&lt;/span&gt; cursor &lt;span class="nt"&gt;--yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example: Setting up an AMD MI300X
&lt;/h3&gt;

&lt;p&gt;After installing the &lt;code&gt;rocm-setup&lt;/code&gt; skill, just tell your agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Set up this AMD server for GPU workloads"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;detect-gpu.py&lt;/code&gt; to identify your backend (ROCm, CUDA, or CPU)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;check-rocm.sh&lt;/code&gt; for a full health check&lt;/li&gt;
&lt;li&gt;Install ROCm if missing&lt;/li&gt;
&lt;li&gt;Configure environment variables (&lt;code&gt;HIP_VISIBLE_DEVICES&lt;/code&gt;, &lt;code&gt;ROCm_PATH&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Verify PyTorch can access the GPU&lt;/li&gt;
&lt;li&gt;Run a smoke test (tensor allocation, matmul, memory info)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example: PPE Detection Pipeline
&lt;/h3&gt;

&lt;p&gt;After installing &lt;code&gt;ppe-detection-pipeline&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Detect PPE in this RTSP stream and alert when workers are missing helmets"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Auto-detect GPU backend (ROCm / CUDA / CPU)&lt;/li&gt;
&lt;li&gt;Load YOLOv8 model for PPE detection&lt;/li&gt;
&lt;li&gt;Track persons across frames with IoU matching&lt;/li&gt;
&lt;li&gt;Check compliance per person (hardhat, vest, gloves, glasses, boots)&lt;/li&gt;
&lt;li&gt;Send alerts via webhook, MQTT, or log&lt;/li&gt;
&lt;li&gt;Export annotated video + JSON results&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Technical Deep Dive: Multi-GPU Detection
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;detect-gpu.py&lt;/code&gt; script (from &lt;code&gt;rocm-setup&lt;/code&gt;) is the foundation of all 10 skills. It detects the GPU backend in three levels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Level 1: PyTorch
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_available&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hip&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ROCM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;device_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_device_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# e.g., "AMD Instinct MI300X"
&lt;/span&gt;    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CUDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;device_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_device_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# e.g., "NVIDIA A100-SXM-80GB"
&lt;/span&gt;
&lt;span class="c1"&gt;# Level 2: System commands
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rocm-smi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--showproductname&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                                &lt;span class="n"&gt;capture_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;returncode&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ROCM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;FileNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nvidia-smi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--query-gpu=name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--format=csv,noheader&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                                &lt;span class="n"&gt;capture_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;returncode&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CUDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;FileNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;

&lt;span class="c1"&gt;# Level 3: CPU fallback
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CPU&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This three-level detection ensures every skill works on any machine — whether you have an MI300X with 192GB HBM3, an RTX 4090, or just a laptop CPU.&lt;/p&gt;

&lt;h2&gt;
  
  
  Industry Standard Compliance
&lt;/h2&gt;

&lt;p&gt;This isn't just a collection of scripts. It's built to industry standards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;&lt;a href="https://agentskills.io/specification" rel="noopener noreferrer"&gt;agentskills.io&lt;/a&gt; specification&lt;/strong&gt; — the canonical format for agent skills&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;&lt;a href="https://skills.sh" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt; registry&lt;/strong&gt; — auto-indexed, discoverable via &lt;code&gt;npx skills add&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;&lt;code&gt;skills.sh.json&lt;/code&gt;&lt;/strong&gt; — groupings for organized discovery (Core, Pipeline, Industrial)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;CONTRIBUTING.md&lt;/strong&gt; — quality checklist, naming conventions, PR process&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;CODE_OF_CONDUCT.md&lt;/strong&gt; — Contributor Covenant 2.1&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;AGENTS.md&lt;/strong&gt; — agent-facing overview&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Apache 2.0 license&lt;/strong&gt; — permissive, commercial-friendly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quality Checklist (from CONTRIBUTING.md)
&lt;/h3&gt;

&lt;p&gt;Before any skill is merged:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;code&gt;name&lt;/code&gt; field matches directory name (kebab-case)&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;description&lt;/code&gt; includes keywords for agent matching&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;description&lt;/code&gt; includes trigger phrases ("Use when...")&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;compatibility&lt;/code&gt; is a string, not a YAML list&lt;/li&gt;
&lt;li&gt;[ ] No Claude Code-specific fields (&lt;code&gt;context&lt;/code&gt;, &lt;code&gt;agent&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;hooks&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Scripts are executable (&lt;code&gt;chmod +x&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] No hardcoded secrets or API keys&lt;/li&gt;
&lt;li&gt;[ ] No references to specific projects (keep it agnostic)&lt;/li&gt;
&lt;li&gt;[ ] Related skills cross-referenced in &lt;code&gt;## Related Skills&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;[ ] SKILL.md under 1000 lines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Skills&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total lines of content&lt;/td&gt;
&lt;td&gt;~32,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scripts (Python + Bash)&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference documents&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compatible agents&lt;/td&gt;
&lt;td&gt;9+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU backends&lt;/td&gt;
&lt;td&gt;3 (ROCm + CUDA + CPU)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;References to specific projects&lt;/td&gt;
&lt;td&gt;0 (fully agnostic)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;The AI ecosystem has a GPU diversity problem. NVIDIA dominates not just hardware, but the entire software tooling stack — documentation, tutorials, community, and now agent skills. AMD's MI300X is a phenomenal chip (192GB HBM3, competitive with H100 for many workloads), but the developer experience gap is real.&lt;/p&gt;

&lt;p&gt;Agent skills are the newest frontier of this gap. When a developer asks Claude Code to "set up my AMD GPU for PyTorch", the agent should know how. Without a skill, it hallucinates or gives generic advice. With a skill, it follows a tested, verified workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 skills won't close a 428-skill gap.&lt;/strong&gt; But it's a start — and it's open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Want to add a skill? Here's how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fork&lt;/strong&gt; the repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create&lt;/strong&gt; &lt;code&gt;skills/your-skill-name/SKILL.md&lt;/code&gt; with frontmatter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add&lt;/strong&gt; &lt;code&gt;scripts/&lt;/code&gt; with executable Python/Bash&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add&lt;/strong&gt; &lt;code&gt;references/&lt;/code&gt; with technical docs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensure&lt;/strong&gt; multi-GPU support (ROCm + CUDA + CPU)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submit&lt;/strong&gt; a PR&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;See &lt;a href="https://github.com/yechua-silva/amd-rocm-skills/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; for the full guide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Skills I'd love to see contributed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;rocm-tuning&lt;/code&gt; — ROCm performance tuning (HIPBLAS, RCCL, MIOpen)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onnx-rocm&lt;/code&gt; — ONNX Runtime with ROCm execution provider&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fsdp-rocm&lt;/code&gt; — Fully Sharded Data Parallel on AMD GPU&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;triton-rocm&lt;/code&gt; — Triton kernels on ROCm&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;composable-kernel&lt;/code&gt; — AMD CK for custom kernels&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install Now
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add yechua-silva/amd-rocm-skills &lt;span class="nt"&gt;--list&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/yechua-silva/amd-rocm-skills" rel="noopener noreferrer"&gt;github.com/yechua-silva/amd-rocm-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;License:&lt;/strong&gt; Apache 2.0&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built during AMD Developer Hackathon Act II — Pista Unicornio. If you're using AMD GPUs with AI agents, I'd love to hear your feedback.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>rocm</category>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
    </item>
    <item>
      <title>ZyroCLI: An Orchestrator That Gives AI Agents a Memory — and a Conscience</title>
      <dc:creator>Yechua Silva</dc:creator>
      <pubDate>Tue, 30 Jun 2026 14:48:27 +0000</pubDate>
      <link>https://dev.to/yechuasilva/zyrocli-an-orchestrator-that-gives-ai-agents-a-memory-and-a-conscience-2i1n</link>
      <guid>https://dev.to/yechuasilva/zyrocli-an-orchestrator-that-gives-ai-agents-a-memory-and-a-conscience-2i1n</guid>
      <description>&lt;h2&gt;
  
  
  The Problem: Every AI Session Starts at Zero
&lt;/h2&gt;

&lt;p&gt;If you've used AI coding assistants, you know the loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You describe your project.&lt;/li&gt;
&lt;li&gt;The agent writes code.&lt;/li&gt;
&lt;li&gt;You close the session.&lt;/li&gt;
&lt;li&gt;Tomorrow, you start over.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent doesn't remember architectural decisions. It doesn't know why you chose PostgreSQL over MongoDB. It doesn't recall that &lt;code&gt;auth.go&lt;/code&gt; was refactored last week. Every conversation is stateless — and stateless agents produce inconsistent, repetitive, and often conflicting code.&lt;/p&gt;

&lt;p&gt;This isn't a tooling problem. It's a &lt;strong&gt;memory problem&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ZyroCLI Actually Does
&lt;/h2&gt;

&lt;p&gt;ZyroCLI is an orchestrator for &lt;a href="https://opencode.ai" rel="noopener noreferrer"&gt;OpenCode&lt;/a&gt; that runs a full software development pipeline (SDD) through specialized AI agents. It doesn't replace your IDE or your chat interface. It sits between you and the agent, enforcing structure, persistence, and safety.&lt;/p&gt;

&lt;p&gt;The pipeline has five macro-phases:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PRE-F0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alignment, domain modeling, architectural triage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;F0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Research: patterns, libraries, skills discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;F1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Specification: technical PRD with deep modules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;F2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Design: component breakdown into atomic tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;F3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Implementation: code + tests with verification loops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;F4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Closure: archive, lint, final build&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each phase is executed by a different agent skill, with its own LLM model, its own security policy, and its own memory context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Design Decisions Worth Understanding
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Causal Memory (Not Chat History)
&lt;/h3&gt;

&lt;p&gt;Most tools append messages to a context window and hope for the best. ZyroCLI stores decisions as &lt;strong&gt;facts in a causal graph&lt;/strong&gt; (HelixDB, graph + vector database).&lt;/p&gt;

&lt;p&gt;Each fact is a node. Relationships like &lt;code&gt;CAUSED&lt;/code&gt;, &lt;code&gt;PRECEDES&lt;/code&gt;, and &lt;code&gt;CONTRADICTS&lt;/code&gt; are edges. Before every phase, the orchestrator queries the graph for relevant context. After every phase, it extracts new facts and resolves contradictions.&lt;/p&gt;

&lt;p&gt;Why a graph? Because "we chose JWT over session cookies" is a decision that causes downstream constraints. A vector search finds semantically similar facts. A graph traversal finds &lt;em&gt;causally&lt;/em&gt; related ones. You need both.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Agent-as-Validator (Separation of Opinion and Execution)
&lt;/h3&gt;

&lt;p&gt;The Python agent &lt;strong&gt;never writes to the database&lt;/strong&gt;. It returns a &lt;code&gt;AgentDecision&lt;/code&gt; (validated by Pydantic), and the Go orchestrator decides whether to execute it.&lt;/p&gt;

&lt;p&gt;This matters because unconstrained agents hallucinate tools, skip phases, and corrupt state. Separating "what the agent thinks" from "what actually runs" is the same pattern we use in human code review — but automated and enforced.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Security by Phase (Boundari)
&lt;/h3&gt;

&lt;p&gt;Not every phase needs the same permissions. The research agent (F0) gets read-only access. The implementation agent (F3) gets write access but requires approval for dangerous commands. Policies are YAML-defined and loaded dynamically.&lt;/p&gt;

&lt;p&gt;This is the principle of least privilege applied to AI agents. An agent researching libraries shouldn't be able to &lt;code&gt;rm -rf&lt;/code&gt; your repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Hybrid Search with Local Embeddings
&lt;/h3&gt;

&lt;p&gt;Memory queries use vector ANN + BM25 + RRF fusion. Embeddings run locally via Ollama (&lt;code&gt;nomic-embed-text&lt;/code&gt;, 768d, GPU via Vulkan). If Ollama isn't available, it degrades gracefully to BM25.&lt;/p&gt;

&lt;p&gt;Local embeddings mean your project context never leaves your machine. For teams working with proprietary code, this isn't optional.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Boomerang Cycle: Micro-Execution Inside Each Phase
&lt;/h2&gt;

&lt;p&gt;Each macro-phase runs an internal 6-step cycle (Memory → Think → Delegate → Git Check → Quality → Save). But not all phases need all steps.&lt;/p&gt;

&lt;p&gt;ZyroCLI v3.1.0 implements a &lt;strong&gt;Phase Skip Matrix&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;           MEMORY  THINK  DELEGATE  GIT CHECK  QUALITY  SAVE
PRE-F0  │   ✅      ✅      ✅        —          —       ✅
F0      │   ✅      ✅      ✅        —          —       ✅
F1      │   ✅      ✅      ✅        —          —       ✅
F2      │   ✅      ✅      ✅        —          —       ✅
F3      │   ✅      ✅      ✅        ✅         ✅      ✅
F4      │   ✅      —       ✅        ✅         —       ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;F0-F2 are research/design — no git validation needed. F3 is implementation — needs tests and quality gates. F4 is closure — archive only. This cuts ~40% of overhead versus running all six steps unconditionally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks: The Honest Numbers
&lt;/h2&gt;

&lt;p&gt;We ran 24 completed sessions (3 incremental features × 3 iterations × 3 approaches) using DeepSeek V4 Flash via OpenCode Zen (free tier).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Plain OpenCode&lt;/th&gt;
&lt;th&gt;gentle-ai&lt;/th&gt;
&lt;th&gt;ZyroCLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tokens Input&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;199,817&lt;/td&gt;
&lt;td&gt;262,069&lt;/td&gt;
&lt;td&gt;213,391&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tests Generated&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;27-66% coverage&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Modularity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 file&lt;/td&gt;
&lt;td&gt;1 file&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2-3 files&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Avg Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;34s&lt;/td&gt;
&lt;td&gt;41s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;121s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What this means:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ZyroCLI uses fewer input tokens than gentle-ai (-35%) because causal memory injects filtered context instead of dumping the entire chat history.&lt;/li&gt;
&lt;li&gt;It's the only approach that generates tests automatically and refactors into multiple files.&lt;/li&gt;
&lt;li&gt;It's 2.5× slower. The Boomerang cycle has real overhead. For quick one-off tasks, plain OpenCode is faster.&lt;/li&gt;
&lt;li&gt;For multi-file features where consistency matters, the tradeoff is worth it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture at a Glance
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human ──→ ZyroCLI (Go) ──→ OpenCode (AI Agents)
              │                     │
              ├── HelixDB (graphs)  ├── PydanticAI (validation)
              ├── Boundari (security) ├── Boomerang (execution cycle)
              └── Causal Memory     └── Skills (16 specialized agents)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Go orchestrator handles scheduling, security, and persistence. The Python agents handle reasoning, planning, and code generation. The boundary between them is strict by design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;p&gt;ZyroCLI is not for everyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're building features that span multiple files and sessions.&lt;/li&gt;
&lt;li&gt;You need architectural consistency across AI-generated code.&lt;/li&gt;
&lt;li&gt;You want automated tests and quality gates without manual prompting.&lt;/li&gt;
&lt;li&gt;You work with proprietary code and need local embeddings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Don't use it if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need a quick one-file script. The overhead isn't worth it.&lt;/li&gt;
&lt;li&gt;You prefer manual control over every line of AI-generated code.&lt;/li&gt;
&lt;li&gt;You're on hardware that can't run Ollama locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Helped Build Real Projects
&lt;/h2&gt;

&lt;p&gt;ZyroCLI was dogfooded to develop two other projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/yechua-silva/cadence" rel="noopener noreferrer"&gt;Cadence&lt;/a&gt;&lt;/strong&gt;: An autonomous job search agent with multi-agent debate (Advocate + Critic + Judge), semantic caching, and zero-cost architecture. The SDD pipeline ensured the LangGraph orchestrator, PydanticAI agents, and browser automation layers stayed consistent across 20+ nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/AIvoraLabs/agenttrail" rel="noopener noreferrer"&gt;AgentTrail&lt;/a&gt;&lt;/strong&gt;: A cryptographic audit trail SDK for EU AI Act compliance. The F1-F2 phases generated the technical specification for SHA-256 chaining and Ed25519 signatures before any code was written.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In both cases, the pipeline prevented the "agent amnesia" that usually hits after session 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://github.com/yechua-silva/zyrocli/releases/latest/download/install.sh | bash
zyrocli &lt;span class="nb"&gt;install
&lt;/span&gt;zyrocli doctor

&lt;span class="c"&gt;# Create a handoff&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; handoff.yaml &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
project:
  name: my-api
  description: REST API with JWT auth
  technologies: [Go, PostgreSQL, JWT]
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;&lt;span class="c"&gt;# Run the pipeline&lt;/span&gt;
zyrocli init handoff.yaml
zyrocli run &lt;span class="nt"&gt;--phase&lt;/span&gt; F0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The TUI (&lt;code&gt;zyrocli&lt;/code&gt; without args) walks you through model selection, GPU detection, and per-agent LLM routing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;AI-assisted development in 2026 is shifting from "generate code faster" to "generate &lt;em&gt;consistent&lt;/em&gt; code across sessions." The bottleneck isn't typing speed — it's &lt;strong&gt;context management&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;ZyroCLI treats this as an infrastructure problem. Memory, security, and execution control are first-class concerns, not afterthoughts. The result is an agent that remembers why it built things the way it did — and can explain it to the next agent, or to you, six months later.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/yechua-silva/zyrocli" rel="noopener noreferrer"&gt;github.com/yechua-silva/zyrocli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://linkedin.com/in/yechua-silva" rel="noopener noreferrer"&gt;linkedin.com/in/yechua-silva&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Related: &lt;a href="https://github.com/yechua-silva/cadence" rel="noopener noreferrer"&gt;Cadence&lt;/a&gt; · &lt;a href="https://github.com/AIvoraLabs/agenttrail" rel="noopener noreferrer"&gt;AgentTrail&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;MIT License. Contributions welcome.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>go</category>
      <category>python</category>
    </item>
  </channel>
</rss>
