rcc
This skill empowers AI agents to expertly manage and automate Python-based self-contained automation packages using RCC (Repeatable, Contained Code), ensuring isolated environments and streamlined distribution.
About this skill
The RCC skill provides AI agents with the capability to interact with the `rcc` CLI tool, which is designed for creating, managing, and distributing self-contained Python automation packages. It handles the setup of isolated Python environments without requiring Python to be pre-installed on the target machine, bundling dependencies and work items for robust enterprise deployment. The skill's hooks (`SessionStart`, `PreToolUse`, `PostToolUse`) automatically manage the RCC environment, validating commands and performing post-execution cleanup. AI agents can leverage this skill to develop, deploy, and troubleshoot automation robots. This includes tasks like setting up new automation projects, importing existing `holotree` environments, running specific `rcc tasks`, managing dependencies within isolated Python environments, and ensuring that automation components are easily distributable and repeatable across different systems. Users would employ this skill to enable AI agents to build and maintain sophisticated, enterprise-grade automation solutions in Python. It simplifies the complexities of environment management and dependency isolation, allowing the AI to focus on the business logic of the automation. The `rcc` tool itself is valuable for its portability and reliability, and this skill makes that power accessible directly to an AI agent.
Best use case
This skill's primary use case is to enable AI agents to efficiently develop, deploy, and manage Python-based automation robots that require isolated environments and robust distribution. It benefits developers, DevOps engineers, and automation specialists who need their AI agents to interact with and orchestrate complex, self-contained automation workflows.
This skill empowers AI agents to expertly manage and automate Python-based self-contained automation packages using RCC (Repeatable, Contained Code), ensuring isolated environments and streamlined distribution.
Users should expect the AI agent to successfully create, manage, run, and distribute self-contained Python automation packages using the `rcc` tool within isolated environments.
Practical example
Example input
Create a new RCC robot project for data processing, set up its environment, and run a task to process a sample CSV file using a Pandas script.
Example output
RCC project 'data-processor' initialized. Environment imported successfully from hololib. Data processing task 'process_csv' executed, output written to 'processed_data.csv'.
When to use this skill
- When developing or managing Python automation packages with strict dependency isolation.
- When needing to distribute self-contained automation across various environments without pre-installing Python.
- When an AI agent needs to create, run, or troubleshoot `rcc` robots and tasks.
- When automating enterprise workflows that require repeatable and contained code execution.
When not to use this skill
- When working with simple Python scripts that don't require complex dependency management or isolation.
- When the automation logic is not Python-based or doesn't involve `rcc`.
- When the AI agent's task is solely focused on general code generation without deployment or environment management needs.
- When a lightweight, single-script execution is sufficient without the overhead of packaging.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/rcc/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How rcc Compares
| Feature / Agent | rcc | Standard Approach |
|---|---|---|
| Platform Support | Claude | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | easy | N/A |
Frequently Asked Questions
What does this skill do?
This skill empowers AI agents to expertly manage and automate Python-based self-contained automation packages using RCC (Repeatable, Contained Code), ensuring isolated environments and streamlined distribution.
Which AI agents support this skill?
This skill is designed for Claude.
How difficult is it to install?
The installation complexity is rated as easy. You can find the installation instructions above.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
Best AI Skills for Claude
Explore the best AI skills for Claude and Claude Code across coding, research, workflow automation, documentation, and agent operations.
ChatGPT vs Claude for Agent Skills
Compare ChatGPT and Claude for AI agent skills across coding, writing, research, and reusable workflow execution.
SKILL.md Source
# RCC Skill - Repeatable, Contained Code
## Skill Environment Setup
This skill includes a pre-built holotree environment (`hololib.zip`) for instant setup:
```bash
# Instant restore (~5 seconds) - RECOMMENDED
rcc ht import .claude/skills/rcc/hololib.zip --silent
# Or build from scratch (~5-10 minutes)
rcc ht vars -r .claude/skills/rcc/robot.yaml --silent
```
The skill's hooks run in this isolated environment via `rcc task script`.
---
**Repository:** https://github.com/joshyorko/rcc (Community Fork)
**Maintainer:** JoshYorko
**Homebrew Tap:** https://github.com/joshyorko/homebrew-tools
RCC is a Go CLI tool for creating, managing, and distributing Python-based self-contained automation packages. It provides isolated Python environments without requiring Python installation on target machines.
## Installation (Homebrew Recommended)
```bash
# macOS & Linux (recommended)
brew install --cask joshyorko/tools/rcc
# Also install Action Server for MCP/AI actions
brew install --cask joshyorko/tools/action-server
# Verify
rcc version
```
See `installation.md` for alternative methods (direct download, Docker, Windows).
## Quick Reference
| Command | Purpose |
|---------|---------|
| `rcc robot init -t <template> -d <dir>` | Create new robot |
| `rcc ht vars -r robot.yaml` | Build/verify environment |
| `rcc run --task "Task Name"` | Run specific task |
| `rcc task shell` | Interactive shell |
| `rcc configure diagnostics` | System check |
## Pro Tip: Use --silent Flag
**Add `--silent` to suppress RCC progress output** and only see task logs:
```bash
# Without --silent: Shows all RCC loading progress
rcc run --task Main
# #### Progress: 01/15 v18.16.0 ...
# #### Progress: 02/15 v18.16.0 ...
# (lots of output)
# With --silent: Clean output, only task logs
rcc run --task Main --silent
# Works with all commands
rcc ht vars --silent # Just env vars, no progress
rcc task script --silent -- cmd # Just command output
rcc configure diagnostics --silent # Just results
```
## Creating Robots
**IMPORTANT:** After creating a robot, ALWAYS run `rcc ht vars` to pre-build the environment.
```bash
# 1. List available templates
rcc robot init --json
# 2. Create robot with template
rcc robot init -t 01-python -d my-robot
# 3. Pre-build environment (REQUIRED)
rcc ht vars -r my-robot/robot.yaml
# 4. Run the robot
rcc run -r my-robot/robot.yaml
```
**Available Templates:**
- `01-python` - Python Minimal
- `02-python-browser` - Browser automation with Playwright
- `03-python-workitems` - Producer-Consumer pattern
- `04-python-assistant-ai` - Assistant AI Chat
## Best Practice: Always Use UV
**CRITICAL:** Always prefer `uv` over `pip` in conda.yaml for 10-100x faster builds:
```yaml
channels:
- conda-forge
dependencies:
- python=3.12.11
- uv=0.9.28 # Fast package installer
- pip:
- requests==2.32.5
```
## robot.yaml Configuration
```yaml
tasks:
Main:
shell: python main.py
Producer:
shell: python -m robocorp.tasks run tasks.py -t producer
Consumer:
shell: python -m robocorp.tasks run tasks.py -t consumer
devTasks:
Test:
shell: pytest tests/ -v
Setup:
shell: python scripts/setup.py
# Environment files (priority order - first match wins)
environmentConfigs:
- environment_linux_amd64_freeze.yaml
- environment_windows_amd64_freeze.yaml
- conda.yaml # Fallback
artifactsDir: output
PATH:
- .
- bin
PYTHONPATH:
- .
- libraries
ignoreFiles:
- .gitignore
# Pre-run scripts for secrets/private packages
preRunScripts:
- setup_linux.sh
- setup_windows.bat
```
## Environment Management
```bash
# Build/rebuild environment
rcc ht vars -r robot.yaml
# Get environment info as JSON
rcc ht vars -r robot.yaml --json
# List all holotree environments
rcc holotree list
# Delete specific space
rcc holotree delete --space my-space
# Interactive shell in environment
rcc task shell
# Run command in environment
rcc task script --silent -- python --version
rcc task script --silent -- pip list
```
## Environment Variables (Automatic)
RCC automatically injects these environment variables when running tasks:
| Variable | Description | Example |
|----------|-------------|---------|
| `ROBOT_ROOT` | Directory containing robot.yaml | `/home/user/my-robot` |
| `ROBOT_ARTIFACTS` | Artifact output directory | `/home/user/my-robot/output` |
**IMPORTANT:** All relative paths in robot.yaml (PATH, PYTHONPATH, artifactsDir) are resolved relative to `ROBOT_ROOT`.
```python
import os
from pathlib import Path
from robocorp.tasks import get_current_task, get_output_dir
def resolve_output_dir() -> Path:
output_dir = get_output_dir()
if output_dir is not None:
return output_dir.resolve()
# Fallback for code paths running outside robocorp.tasks runtime.
return Path(os.environ.get("ROBOT_ARTIFACTS", "output")).resolve()
def current_task_name() -> str:
current = get_current_task()
return current.name if current is not None else "<outside-task>"
robot_root = Path(os.environ.get("ROBOT_ROOT", ".")).resolve()
```
## Dependency Freezing for Production
**CRITICAL:** Freeze files are **automatically generated** to `ROBOT_ARTIFACTS` (output/) every time you run a robot. They are NOT meant to be committed to the repo.
```bash
# 1. Run robot - freeze file is generated automatically to output/
rcc run --silent
# 2. View the generated freeze file
ls output/environment_*_freeze.yaml
# Output: environment_linux_amd64_freeze.yaml (platform-specific)
# 3. OPTIONAL: Copy to project root ONLY if you want reproducible builds
cp output/environment_*_freeze.yaml .
# 4. Update robot.yaml to prefer freeze files (falls back to conda.yaml)
```
**Freeze File Behavior:**
- Generated automatically on **every** `rcc run` (since v10.3.0)
- Contains exact pinned versions of all dependencies
- Platform-specific (linux_amd64, windows_amd64, darwin_amd64)
- Used for reproducibility when placed in `environmentConfigs`
- **DO NOT** flag "missing freeze files" as an error - they're runtime artifacts
## Holotree: Content-Addressed Environment Storage
RCC uses **Holotree** - a deduplication system that stores Python environments efficiently:
**Key Concepts:**
- **Library (Hololib)**: Content-addressed file store organized by hash. Files are stored once, referenced by content hash (SipHash-128)
- **Catalog**: JSON manifests describing complete environments with byte offsets for path relocation
- **Spaces**: Live working environments populated from catalogs
**Benefits:**
- 50MB binary appearing in 20 environments occupies disk space **exactly once**
- Environment restoration from cache: ~2-10 seconds (vs 5-15 minutes fresh)
- Surgical path relocation - enables environments to work from any location
```bash
# List all holotree environments
rcc holotree list
# Delete specific space
rcc holotree delete --space my-space
# Enable shared holotree (multiple users, same machine)
sudo rcc holotree shared --enable # Linux/macOS
rcc holotree shared --enable # Windows (admin)
```
## Robocorp Python Libraries
### robocorp.tasks - Task Decorator + Runtime Helpers
```python
from pathlib import Path
import os
from robocorp.tasks import get_current_task, get_output_dir, task
def resolve_output_dir() -> Path:
output = get_output_dir()
if output is not None:
return output.resolve()
# Fallback for execution outside robocorp.tasks runtime.
return Path(os.environ.get("ROBOT_ARTIFACTS", "output")).resolve()
def current_task_name() -> str:
current = get_current_task()
return current.name if current is not None else "<outside-task>"
@task
def my_task():
"""Task entry point - discovered and run by RCC."""
output = resolve_output_dir()
output.mkdir(parents=True, exist_ok=True)
print(f"Running {current_task_name()} with artifacts in {output}")
process_data()
```
### robocorp.log - Structured Logging
```python
from robocorp import log
# Basic logging
log.info("Processing started")
log.warn("Rate limit approaching")
log.critical("Connection failed")
log.debug("Detailed info for debugging")
# Configure logging
log.setup_log(
max_value_repr_size="200k",
log_level="info", # Minimum for log.html
output_log_level="info", # Minimum for console
)
# Protect sensitive data (auto-redacted)
log.add_sensitive_variable_name("password")
log.add_sensitive_variable_name("secret")
log.add_sensitive_variable_name("api_key")
```
### robocorp.workitems - Producer-Consumer Pattern
```python
from robocorp import workitems
from robocorp.tasks import task
@task
def producer():
"""Create work items for processing."""
for data in get_data_to_process():
workitems.outputs.create(payload=data)
@task
def consumer():
"""Process work items with proper error handling."""
for item in workitems.inputs:
try:
process(item.payload)
item.done() # Mark successful
except BusinessError as e:
# Business error - don't retry
item.fail(exception_type="BUSINESS", message=str(e))
except Exception as e:
# Application error - may retry
item.fail(exception_type="APPLICATION", message=str(e))
```
**Work Item Methods:**
- `item.payload` - JSON payload data
- `item.files` - List of attached file paths
- `item.done()` - Mark as successfully processed
- `item.fail(exception_type, message)` - Mark as failed
- `workitems.outputs.create(payload, files)` - Create output item
## Self-Contained Bundles
Create single-file executables for distribution:
```bash
# Create bundle
rcc robot bundle --robot robot.yaml --output my-robot.py
# Run bundle on another machine
rcc robot run-from-bundle my-robot.py --task Main
```
## Debugging
```bash
# System diagnostics
rcc configure diagnostics --robot robot.yaml
# Debug output
rcc run --debug
# Trace output (very verbose)
rcc run --trace
# Timeline
rcc run --timeline
```
## Custom Endpoints (Air-Gapped Environments)
```bash
export RCC_ENDPOINT_PYPI="https://pypi.internal.com/simple/"
export RCC_ENDPOINT_CONDA="https://conda.internal.com/"
rcc run
```
## Files in This Skill
- `installation.md` - Installation guide (Homebrew, direct download, Docker)
- `reference.md` - Complete command reference
- `examples.md` - Practical recipes and patterns
- `actions.md` - Sema4ai Actions framework & MCP tools
- `deployment.md` - Docker, RCC Remote, CI/CD patterns
- `workitems.md` - Work items & custom adapters
- `hooks.md` - Claude Code hooks integration
- `templates/` - Reference conda.yaml configs
- `hooks/` - Ready-to-use hook scripts
- `scripts/` - Validation and health check utilities
## Examples
### Create a data processing robot
```
User: Create an RCC robot for data processing
Assistant: [runs: rcc robot init -t 01-python -d data-processor]
[runs: rcc ht vars -r data-processor/robot.yaml]
[environment ready]
```
### Debug environment issues
```
User: My RCC environment build is failing
Assistant: [runs: rcc configure diagnostics --robot robot.yaml]
[runs: rcc task script --silent -- pip list]
[checks conda.yaml for issues]
```
### Freeze dependencies for production
```
User: Prepare my robot for production
Assistant: [runs: rcc run to generate freeze file]
[copies environment_*_freeze.yaml to project]
[updates robot.yaml environmentConfigs]
```Related Skills
workspace-surface-audit
Audit the active repo, MCP servers, plugins, connectors, env surfaces, and harness setup, then recommend the highest-value ECC-native skills, hooks, agents, and operator workflows. Use when the user wants help setting up Claude Code or understanding what capabilities are actually available in their environment.
ui-demo
Record polished UI demo videos using Playwright. Use when the user asks to create a demo, walkthrough, screen recording, or tutorial video of a web application. Produces WebM videos with visible cursor, natural pacing, and professional feel.
token-budget-advisor
Offers the user an informed choice about how much response depth to consume before answering. Use this skill when the user explicitly wants to control response length, depth, or token budget. TRIGGER when: "token budget", "token count", "token usage", "token limit", "response length", "answer depth", "short version", "brief answer", "detailed answer", "exhaustive answer", "respuesta corta vs larga", "cuántos tokens", "ahorrar tokens", "responde al 50%", "dame la versión corta", "quiero controlar cuánto usas", or clear variants where the user is explicitly asking to control answer size or depth. DO NOT TRIGGER when: user has already specified a level in the current session (maintain it), the request is clearly a one-word answer, or "token" refers to auth/session/payment tokens rather than response size.
skill-comply
Visualize whether skills, rules, and agent definitions are actually followed — auto-generates scenarios at 3 prompt strictness levels, runs agents, classifies behavioral sequences, and reports compliance rates with full tool call timelines
santa-method
Multi-agent adversarial verification with convergence loop. Two independent review agents must both pass before output ships.
safety-guard
Use this skill to prevent destructive operations when working on production systems or running agents autonomously.
repo-scan
Cross-stack source code asset audit — classifies every file, detects embedded third-party libraries, and delivers actionable four-level verdicts per module with interactive HTML reports.
project-flow-ops
Operate execution flow across GitHub and Linear by triaging issues and pull requests, linking active work, and keeping GitHub public-facing while Linear remains the internal execution layer. Use when the user wants backlog control, PR triage, or GitHub-to-Linear coordination.
product-lens
Use this skill to validate the "why" before building, run product diagnostics, and pressure-test product direction before the request becomes an implementation contract.
openclaw-persona-forge
为 OpenClaw AI Agent 锻造完整的龙虾灵魂方案。根据用户偏好或随机抽卡, 输出身份定位、灵魂描述(SOUL.md)、角色化底线规则、名字和头像生图提示词。 如当前环境提供已审核的生图 skill,可自动生成统一风格头像图片。 当用户需要创建、设计或定制 OpenClaw 龙虾灵魂时使用。 不适用于:微调已有 SOUL.md、非 OpenClaw 平台的角色设计、纯工具型无性格 Agent。 触发词:龙虾灵魂、虾魂、OpenClaw 灵魂、养虾灵魂、龙虾角色、龙虾定位、 龙虾剧本杀角色、龙虾游戏角色、龙虾 NPC、龙虾性格、龙虾背景故事、 lobster soul、lobster character、抽卡、随机龙虾、龙虾 SOUL、gacha。
manim-video
Build reusable Manim explainers for technical concepts, graphs, system diagrams, and product walkthroughs, then hand off to the wider ECC video stack if needed. Use when the user wants a clean animated explainer rather than a generic talking-head script.
laravel-plugin-discovery
Discover and evaluate Laravel packages via LaraPlugins.io MCP. Use when the user wants to find plugins, check package health, or assess Laravel/PHP compatibility.