░█▀█░█▀█░█▀▀░█▀█░█▀▀░█▀█░█▀▄░█▀▀ ░▟█▙░█▀▄░█░█░▟█▙░█▀█░█▀▀░█▀▀
░█░█░█▀▀░█▀▀░█░█░█░░░█░█░█░█░█▀▀ ░█▀█░█░█░▀▄▀░█▀█░█░█░█░░░█▀▀
░▀▀▀░▀░░░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀▀░░▀▀▀ ░█░█░▀▀░░░▀░░█░█░▀░▀░▀▀▀░▀▀▀
Rendered in terminal: OpenCode in ivory (#E8E6E3), ADVANCE in frosted indigo (#6C7AB8). The stylized ▟█▙ apex on each A references the flat-topped, angular-cut letterform of the Game Boy Advance wordmark. The ░ stipple characters create anti-aliased frosted-glass edges.
A declarative, reproducible OpenCode environment and workflow platform.
Status: Phases 1, 2, 3, and 3.5 are implemented on trunk. Phase 4 foundation (session/theme assets, oca session new/list) is in progress. First stable release remains v1.0.
OpenCode Advance (oca) is the configuration, installation, and client/session UX layer for OpenCode, paired with the Advance spec-driven workflow plugin.
The goal is simple:
- one source of truth:
stack.toml - one command to apply it:
oca apply - one command to verify it:
oca doctor
The MCP servers, plugins, instructions, providers, permissions, LSP config, watcher config, theme, and primary client behavior that make up an opinionated OpenCode environment are declared in a single file, rendered to the places OpenCode expects, and tracked for reproducibility.
The previous iteration of this project (open-chad) worked, but had structural limits:
- it only managed part of the real MCP/plugin stack
- it relied heavily on bash for logic that wants strong typing and tests
- it pulled dependencies at
latestwith weak reproducibility - it duplicated files that the Advance plugin also owned
- its branding and tone no longer matched the intended audience
OpenCode Advance is the clean rewrite:
- Go-first for parsing, validation, rendering, health checks, and orchestration
- declarative via
stack.toml - reproducible via pinning and explicit dependency metadata
- cleanly layered with Advance as a required dependency, not a tangled peer
- professional in tone with an obsidian / slate / graphite palette and frosted indigo accent
OpenCode Advance and Advance are paired, but separate.
| Project | Repo | Role |
|---|---|---|
| Advance | Sharper-Flow/Advance | Spec-driven workflow plugin: specs, changes, tasks, gates, TDD evidence |
| OpenCode Advance | Sharper-Flow/Opencode-Advance | Environment, installer, configuration, client/session UX, migration |
You can run Advance without OpenCode Advance.
You cannot run OpenCode Advance without Advance — Advance is a required dependency declared in stack.toml, cloned and wired by oca, with ADV-owned assets synced by Advance's own sync-global.sh.
This repository has Phase 1 + Phase 2 + Phase 3 + Phase 3.5 implementations in place.
- repo scaffolded
go.modinitialized- CI scaffold added
- design docs written
- implementation proposal written
- phase plan written
- ADV first-boot guide written
- compact canonical wordmark finalized
- shared runtime brand assets and Go renderer added
- minimal Cobra CLI added (
oca,oca version) stack.tomlparse / resolve / validate implemented for[meta]+[mcp]oca apply --target mcpshipped with atomic writes, backups, and lockingoca doctor --scope mcpshipped with Vision/version+/v1/serverschecksoca debug planandoca debug validateshipped- MCP render / health / concurrency / JSON-shape test coverage added
- shell brand helpers added (
lib/palette.sh,lib/wordmark.sh,lib/boot_splash.sh) - broader Go + shell verification wiring added
- typed
[plugins.*],[instructions], and reserved[temporal]sections instack.tomlwith 6-categoryprovidesenum - generic
internal/subprocessrunner with timeout / signal / env-merge semantics internal/pluginpackage: git clone/fetch/checkout/status with protocol hardening and ref allowlist, build-step runner, npm literal handler, clone-or-update orchestrator with symlink rejection and remote-URL drift detectioninternal/render.MergeArrayprimitive +.bak.<epoch>backup rotation with per-target suppressioninternal/sync.InvokeAdvancefor post-apply plugin sync with best-effort output redaction- pluggable health-check registry with
ResetForTesting()contract oca apply --target plugins --target instructions --target temporalextensionsoca pin [plugin...]— atomic stack.toml SHA capture under the apply lockoca update [plugin...]— fetch + checkout + build + sync (with--forceon pinned refs)oca doctor --scope pluginswith local-only default and--networkopt-in for remote probes- integration tests covering plugin apply end-to-end + backup rotation policy
- new
.adv/specs/plugin-apply/capability spec with 13 rq-* requirements OCA_PLUGIN_CHECKOUT_ROOTenv override documented inAGENTS.md- trust-boundary + secret-redaction docs in
docs/design/stack-toml-schema.md
- typed
[providers.*],[permissions],[watcher], and[lsp.*]sections instack.toml - validation for providers, permissions, watcher, and LSP config
- render modules for
.provider,.permission,.watcher.ignore, and.lsp - composed
oca applywith no--target oca diffwith target filtering and text/json output- NoRollback protection for composed apply
- integration tests for apply-all, diff, and render merge behavior
- docs/spec/example refresh removing agents from shipped Phase 3 scope
- typed
[skills],[formatters.*],[commands.*], and[opencode]sections instack.toml - validation for skills order, reserved
adv-*names, commands, formatters, and OpenCode toggles - render modules for
.command,.formatter, top-level OpenCode toggles, and OCA-owned skills asset copy oca apply --target skills|commands|formatters|togglesoca doctor --scope skills- canonical
assets/skills/inventory populated with OCA-owned skills - integration tests for composed apply and per-target parity
- Phase 3.5 spec + docs refresh shipped
- installer / migration / client-session lifecycle logic
- release packaging / distribution workflow
oca install,oca migrate, and interactiveoca add/oca removeflows- Phase 4 richness: status bar metrics, LLM fuel gauges, session attach/switch/killall/restart,
oca themecommands, boot splash animation
NEXT_STEPS.md— fastest path to continue from this repo laterSTATUS.md— current snapshot of what is done vs. not donedocs/proposals/first-boot.md— exact ADV startup flow in this repo
At v1.0, OpenCode Advance is intended to provide:
- declarative
stack.tomlparsing and validation (shipped Phase 1) - MCP server rendering into both OpenCode and Vision config (shipped Phase 1)
- plugin clone / build / pin / update workflows (shipped Phase 2)
- instruction, provider, permission, watcher, LSP, skill, command, formatter, and OpenCode-toggle rendering (instructions shipped Phase 2; providers/permissions/watcher/LSP shipped Phase 3; skills/commands/formatters/toggles shipped Phase 3.5; agents intentionally deferred)
- clean ownership boundaries between OCA-owned and Advance-owned assets
- migration from existing
open-chadstate intostack.toml - primary client/session lifecycle, theme, boot splash, and shell integration
- doctor / diff / debug flows to verify and explain rendered state
These commands describe the intended v1.0 UX. Some are already shipped; others remain design targets.
| Command | Purpose |
|---|---|
oca apply |
Render declared stack config into target files |
oca doctor |
Verify rendered environment health |
oca diff |
Show drift between stack.toml and rendered state |
oca pin |
Capture current plugin refs / SHAs for reproducibility |
oca update |
Update dependencies and re-apply |
oca migrate from-open-chad |
Import current open-chad-managed environment into stack.toml |
oca session |
Primary client/session lifecycle management |
oca debug |
Explain plans, validation, and rendered output |
This repo is built through the Advance spec-driven workflow.
Recommended flow:
- run
/adv-statusfirst and finish any already-active implementation change - use
phase0FoundationBrandas the archived reference baseline for future work - start the next phase change from
docs/proposals/phases.md(currently Phase 4: primary client UX + theme) - archive each phase before starting the next one
In other words:
- umbrella change = long-range tracking and proposal context when needed
- phase changes = actual implementation work
During development, OpenCode Advance must not modify your live OpenCode setup.
Always use isolated directories through environment overrides:
OCA_OPENCODE_CONFIG_DIROCA_VISION_CONFIG_DIROCA_PLUGIN_CHECKOUT_ROOTOCA_CACHE_DIR
The intent is that all development and testing happen in a disposable sandbox until v1.0 is ready.
cmd/oca/ Go CLI entry point (apply, doctor, diff, pin, update, session, debug)
internal/config/ stack.toml parser + validation
internal/render/ programmatic rendering + merge logic
internal/health/ MCP / plugin / skills health checks
internal/subprocess/ generic command runner with timeout/signal/exit classification
internal/plugin/ git clone/pull, build, pin, npm handler
internal/sync/ Advance sync-global.sh invocation
internal/session/ tmux session lifecycle (create/list/next-name)
internal/migrate/ open-chad import path
assets/ agent / instruction / skill / theme assets
templates/ Go templates (tmux managed-block wrapper)
lib/ shell/client UX helpers (palette, wordmark, boot splash, session lifecycle)
tests/ integration and shell-level tests
docs/design/ architecture, schema, brand, CLI, theme
docs/proposals/ v1 proposal, phase plan, first-boot guide
.adv/ ADV specs / changes / archive directories
Current intended target environment:
- Linux (Ubuntu / Debian primary target; others best-effort)
gittmux3.4+ (current planned primary session runtime; usesstatus 2,status-format[0],pane-border-lines)- OpenCode CLI
- internet access for initial plugin and MCP setup
visiondaemon available onPATH- Go 1.22+ for local development
Detailed installation guidance will land closer to v1.0 in INSTALL.md.
docs/design/brand.mddocs/design/wordmark.mddocs/design/palette.mddocs/design/theme.mddocs/design/architecture.mddocs/design/stack-toml-schema.mddocs/design/cli-surface.md
When you come back later and want to start or continue implementation:
cd ~/dev/opencodeadvance
opencodeThen:
/adv-status— check for any active changes to complete first- Use
phase0FoundationBrandas the shipped Phase 0 reference point - Start the next phase change from
docs/proposals/phases.md(currently Phase 4 richness — foundation in progress) - Use
NEXT_STEPS.mdfor the exact resume sequence and current state
While implementation is still early, the most meaningful contributions are:
- design clarification
- proposal refinement
- schema review
- roadmap decomposition
- testability review
Once implementation starts, keep commits atomic and use conventional commit messages:
feat:fix:docs:test:refactor:chore:
MIT — see LICENSE.