# Oh-My-OpenCode with OCX Profiles
This document describes the architecture of oh-my-opencode when used with OCX profiles and provides guidance on creating new profiles.
## Architecture Overview
### OCX and Profile System
OCX (OpenCode eXtensions) is a package manager for OpenCode that provides global profiles for portable, isolated configurations. Profiles allow you to work in any repository without modifying the project, using your own complete configuration.
```
┌─────────────────────────────────────────────────────────────────┐
│ Your Development Machine │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ~/.config/opencode/ │
│ ├── opencode.jsonc # Global base configuration │
│ └── profiles/ # Profile configurations │
│ ├── omooss/ # Your primary oh-my-opencode │
│ │ ├── ocx.jsonc # OCX isolation settings │
│ │ ├── opencode.jsonc # OpenCode config + plugin │
│ │ ├── oh-my-opencode.json # Agent definitions │
│ │ └── AGENTS.md # Profile instructions │
│ └── other-profile/ # Additional profiles │
│ ├── ocx.jsonc │
│ └── opencode.jsonc │
│ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Any Repository │
│ │
│ /home/user/oss/some-project/ │
│ ├── src/ │
│ ├── AGENTS.md # Isolated - not loaded by profile │
│ └── .opencode/ # Isolated - not loaded by profile │
│ │
│ When you run: ocx opencode -p omooss │
│ OpenCode launches HERE with your profile config │
└─────────────────────────────────────────────────────────────────┘
```
### Profile Resolution Priority
When launching OpenCode, the profile is resolved in this order:
1. `--profile <name>` / `-p <name>` flag (explicit override)
2. `OCX_PROFILE` environment variable
3. `default` profile (if it exists)
4. No profile (uses base configs only)
### Configuration Isolation Model
OCX implements a strict isolation model for security and portability:
**Registry Isolation:**
- Global registries (in `~/.config/opencode/ocx.jsonc`) - only for downloading profiles
- Profile registries (in profile's `ocx.jsonc`) - only available when using that profile
- Local registries (in project's `.opencode/ocx.jsonc`) - only for that project
This prevents global registries from injecting components into all projects.
**OpenCode Config Merging:**
- Profile's `opencode.jsonc` merges with local (if not excluded by patterns)
- Profile's exclude/include patterns control which project instruction files OpenCode can see
- Include patterns override exclude patterns (TypeScript/Vite style)
**Default Exclude Patterns:**
```jsonc
{
"exclude": [
"**/AGENTS.md", // Don't load project's AGENTS.md
"**/CLAUDE.md", // Don't load project's CLAUDE.md
"**/CONTEXT.md", // Don't load project's CONTEXT.md
"**/.opencode/**", // Don't load project's .opencode/
"**/opencode.jsonc", // Don't load project's opencode.jsonc
"**/opencode.json" // Don't load project's opencode.json
]
}
```
### Profile File Structure
Each profile contains these core files:
```
~/.config/opencode/profiles/<profile-name>/
├── ocx.jsonc # OCX-specific settings
├── opencode.jsonc # OpenCode configuration
├── oh-my-opencode.json # Oh-My-OpenCode agent definitions (optional)
└── AGENTS.md # Profile-specific instructions (optional)
```
#### ocx.jsonc
The OCX configuration file for the profile:
```jsonc
{
"$schema": "https://ocx.kdco.dev/schemas/ocx.json",
"registries": {}, // Profile-specific registries
"renameWindow": true, // Rename terminal window with profile info
"bin": "/path/to/opencode", // Custom OpenCode binary (optional)
"exclude": [...], // Exclude patterns for file discovery
"include": [], // Include patterns (override excludes)
"componentPath": ".opencode" // Where to install components
}
```
#### opencode.jsonc
The OpenCode configuration for the profile:
```jsonc
{
"model": "cliproxy/claude-sonnet-4-5-thinking",
"permission": { "question": "allow" },
"plugin": ["oh-my-opencode@latest"], // Load oh-my-opencode
"provider": { ... } // AI provider configuration
}
```
#### oh-my-opencode.json
The core configuration defining agents, categories, and skills with their models and behavior. This is a complex JSON structure that maps:
- **Agents**: Specialized AI agents (Sisyphus, Oracle, Librarian, Explore, etc.)
- **Categories**: Task categories (visual-engineering, ultrabrain, quick, etc.)
- **Skills**: Reusable task-specific instructions (playwright, git-master, etc.)
```jsonc
{
"agents": {
"sisyphus": {
"model": "cliproxyoss/minimaxai/minimax-m2.1",
"temperature": 0.1,
"prompt_append": "Additional instructions..."
},
"oracle": { ... },
"librarian": { ... }
},
"categories": {
"quick": { ... },
"visual-engineering": { ... }
},
"skills": {
"playwright": { ... },
"git-master": { ... }
}
}
```
## Creating Profiles
### Method 1: Create a Blank Profile
Create a new profile from scratch:
```bash
# Initialize global profiles first (one-time)
ocx init --global
# Create a new blank profile
ocx profile add myprofile
# Edit the profile configuration
ocx config edit -p myprofile
```
This creates:
```
~/.config/opencode/profiles/myprofile/
├── ocx.jsonc # With default settings
└── opencode.jsonc # Empty config
```
### Method 2: Clone from Existing Profile
Copy an existing profile as a starting point:
```bash
# Clone from your omooss profile
ocx profile add work --from omooss
# Customize it
ocx config edit -p work
```
### Method 3: Install from Registry
Use a pre-configured profile from a registry:
```bash
# Add a registry with profiles
ocx registry add https://registry.kdco.dev --name kdco --global
# Install a profile from the registry
ocx profile add minimal --from kdco/minimal
```
### Method 4: Manual Creation
Create a profile manually by creating the directory structure:
```bash
mkdir -p ~/.config/opencode/profiles/myprofile
```
Then create the required files manually (see File Structure Reference below).
## Profile Configuration Guide
### Setting Up AI Providers
In `~/.config/opencode/profiles/<name>/opencode.jsonc`:
```jsonc
{
"model": "cliproxy/claude-sonnet-4-5-thinking",
"permission": { "question": "allow" },
"plugin": ["oh-my-opencode@latest"],
"provider": {
"cliproxy": {
"name": "Cliproxy",
"npm": "@ai-sdk/cli",
"options": {
"baseURL": "http://localhost:8317/v1"
},
"models": {
"claude-sonnet-4-5-thinking": {
"name": "Claude Sonnet 4.5 Thinking"
}
}
}
}
}
```
### Configuring Oh-My-OpenCode Agents
In `~/.config/opencode/profiles/<name>/oh-my-opencode.json`:
```jsonc
{
"agents": {
"sisyphus": {
"model": "cliproxyoss/minimaxai/minimax-m2.1",
"temperature": 0.1,
"prompt_append": "Your custom instructions here"
},
"oracle": {
"model": "cliproxyoss/z-ai/glm4.7",
"temperature": 0.1
}
},
"categories": {
"quick": {
"model": "cliproxyoss/z-ai/glm4.7",
"temperature": 0.2
},
"ultrabrain": {
"model": "cliproxyoss/moonshotai/kimi-k2-thinking",
"temperature": 0.1
}
},
"skills": {
"playwright": {
"mcp": "playwright"
},
"git-master": {
"mcp": null
}
}
}
```
### Customizing File Visibility
Modify `exclude` and `include` patterns in `ocx.jsonc`:
```jsonc
{
"exclude": [
"**/AGENTS.md",
"**/CLAUDE.md",
"**/CONTEXT.md",
"**/.opencode/**",
"**/opencode.jsonc",
"**/opencode.json"
],
"include": [
"./docs/AGENTS.md",
".opencode/skills/**"
]
}
```
### Using Custom OpenCode Binary
```jsonc
{
"bin": "/usr/local/bin/opencode-dev"
}
```
### Adding Profile-Specific Instructions
Create or edit `~/.config/opencode/profiles/<name>/AGENTS.md`:
```markdown
# Profile-Specific Instructions
These instructions apply when using this profile.
## Project Context
- This profile is configured for [purpose]
- Uses [model] as primary model
## Special Instructions
- [Your custom instructions here]
```
## File Structure Reference
### Complete Profile Structure
```
~/.config/opencode/
├── opencode.jsonc # Global base config
└── profiles/
└── <profile-name>/ # Profile directory
├── ocx.jsonc # OCX settings
│ ├── registries # Profile-specific registries
│ ├── renameWindow # Terminal window naming
│ ├── bin # Custom OpenCode binary path
│ ├── componentPath # Component installation path
│ ├── exclude # File exclusion patterns
│ └── include # File inclusion patterns (override exclude)
│
├── opencode.jsonc # OpenCode configuration
│ ├── model # Default model
│ ├── permission # Permission settings
│ ├── plugin # npm plugins
│ └── provider # AI provider configuration
│
├── oh-my-opencode.json # Oh-My-OpenCode configuration
│ ├── agents # Agent definitions
│ ├── categories # Task category assignments
│ └── skills # Skill configurations
│
├── AGENTS.md # Profile-specific instructions
│
└── .opencode/ # Profile components (optional)
├── agent/ # Installed agents
├── skill/ # Installed skills
└── plugin/ # Installed plugins
```
### Your Current Setup (omooss)
```
~/.config/opencode/
├── opencode.jsonc # 4 AI providers via local proxy
└── profiles/
└── omooss/
├── ocx.jsonc # Empty registries, full isolation
├── opencode.jsonc # Includes oh-my-opencode plugin
├── oh-my-opencode.json # Complete agent/category/skill definitions
├── AGENTS.md # Custom instructions (empty)
└── node_modules/ # Dependencies (@opencode-ai, zod)
```
## Profile Management Commands
### Essential Commands
```bash
# List all profiles
ocx profile list
ocx p ls
# Create new profile
ocx profile add <name>
# Clone from existing profile
ocx profile add <name> --from <source-profile>
# Install from registry
ocx profile add <name> --from <registry>/<profile>
# Delete profile
ocx profile remove <name>
ocx p rm <name>
# Display profile contents
ocx profile show <name>
ocx p show <name>
# Edit profile config
ocx config edit -p <name>
# Launch with profile
ocx opencode -p <name>
```
### Configuration Commands
```bash
# Show current configuration
ocx config show
# Show config with source annotations
ocx config show --origin
# Edit global config
ocx config edit --global
# Edit local config (in current project)
ocx config edit
```
## Quick Start: Creating Your Own Profile
1. **Initialize global profiles:**
```bash
ocx init --global
```
2. **Create a new profile:**
```bash
ocx profile add myprofile
```
3. **Configure AI providers** in `opencode.jsonc`:
```bash
ocx config edit -p myprofile
```
4. **Add oh-my-opencode** plugin (optional):
```jsonc
{
"plugin": ["oh-my-opencode@latest"]
}
```
5. **Configure agents** in `oh-my-opencode.json` (create if needed):
```bash
cat > ~/.config/opencode/profiles/myprofile/oh-my-opencode.json << 'EOF'
{
"agents": {
"sisyphus": {
"model": "your-provider/your-model",
"temperature": 0.1
}
}
}
EOF
```
6. **Launch OpenCode:**
```bash
ocx opencode -p myprofile
```
7. **Set as default** (optional):
```bash
export OCX_PROFILE=myprofile
```