Installation
Via curl (macOS/Linux):
curl -fsSL https://ocx.kdco.dev/install.sh | bashVia npm (all platforms including Windows):
npm install -g ocxManual download:
Download the appropriate binary for your platform from the assets below.
Checksums
SHA256 checksums are provided for each binary. Verify with:
sha256sum -c SHA256SUMS.txt⚠️ Breaking Changes - Migration Required
OpenCode v1.1.29+ required. The profile system in OCX v1.4.0+ requires OpenCode v1.1.29 or higher. If you're using an older version of OpenCode, stay on OCX v1.3.3.
If upgrading from v1.3.x, you must run the migration command:
ocx ghost migrateWhat Changed
- Config file renamed:
ghost.jsonc→ocx.jsoncin all profiles - Profile symlink removed: The
profiles/currentsymlink is no longer used (profile is now selected via--profileflag orOCX_PROFILEenv var) - Local config moved: Local configs now live in
.opencode/directory
Migration Details
The ocx ghost migrate command will:
- Rename
ghost.jsonctoocx.jsoncin each profile - Remove the legacy
profiles/currentsymlink - Create backups during migration (deleted on success)
Preview changes first:
ocx ghost migrate --dry-run[1.4.0] - 2026-01-22
✨ Features
-
cli: Add --global flag for init and add commands by @kdcokenny(e957725)
-
ghost: [BREAKING] Replace symlink farm with native project discovery control by @kdcokenny(a467487)
-
ghost: Add OPENCODE_BIN env var for testing by @kdcokenny(34129bc)
-
ghost: Add bin config option for custom OpenCode binary by @kdcokenny(a55b7c7)
-
Add CI testing workflow with Codecov integration by @kdcokenny(8b3f223)
-
Move local config files to .opencode/ directory by @kdcokenny(b59e7f6)
-
cli: Add ghost migrate command for legacy config migration by @kdcokenny(7a7acac)
-
ci: Add Codecov Test Analytics support by @kdcokenny(1b211e3)
🐛 Bug Fixes
-
Delete obsolete symlink farm test file by @kdcokenny(c64e4f9)
-
ghost: Normalize patterns by stripping leading ./ by @kdcokenny(d0b6357)
-
Rename OPENCODE_DISABLE_PROJECT_DISCOVERY to OPENCODE_DISABLE_PROJECT_CONFIG by @kdcokenny(e1e854c)
-
Use CODECOV_TOKEN for protected branch upload by @kdcokenny(ca87696)
-
Distinguish initialization vs empty profiles state by @kdcokenny(6952db2)
-
Update schema URLs to canonical /schemas/ paths by @kdcokenny(12c9154)
-
Add missing index.ts by @kdcokenny(3a99d34)
-
ci: Use codecov-action@v5 for test results by @kdcokenny(e69fbea)
-
Remove legacy .js import extensions (#74) by @kdcokenny in #74(25c7cf5)
📚 Documentation
-
Update ghost mode documentation for new architecture by @kdcokenny(05b3a21)
-
Add bin config option to documentation by @kdcokenny(20c5aa0)
-
Add DeepWiki badge to README (#68) by @kdcokenny in #68(0fe19ae)
-
Add version and license badges to README (#69) by @kdcokenny in #69(050fbc7)
-
Update documentation for unified profile system by @kdcokenny(14ea3cf)
-
Update documentation for ghost migrate command by @kdcokenny(0c72b64)
-
Add version compatibility notice for profile system by @kdcokenny(e263e2c)
🔧 Refactor
-
[BREAKING] Replace ghost mode with unified profile system by @kdcokenny(b260332)
-
Unify config file naming to ocx.jsonc by @kdcokenny(da06bc9)
-
Rename schemas and fix documentation by @kdcokenny(d346ac4)
-
Extract ProfileManager.requireInitialized() by @kdcokenny(d68de1b)
-
Rename ConfigProvider.create() → requireInitialized() by @kdcokenny(8524648)
🧪 Testing
-
Add coverage for findLocalConfigDir and getGlobalConfig by @kdcokenny(af3c567)
-
Add unit tests for config path discovery functions by @kdcokenny(573685d)
🧹 Chores
- Update bun.lock by @kdcokenny(ca0a955)
Full Changelog: v1.3.3...v1.4.0