https://github.com/cgaravitoq/my-opencode
OpenCode configuration with agents, skills, review guardrails, and a GitHub Issues workflow bundle.
https://github.com/cgaravitoq/my-opencode
ai-agents automation bun code-review coding-agent developer-tools github-issues opencode typescript
Last synced: about 17 hours ago
JSON representation
OpenCode configuration with agents, skills, review guardrails, and a GitHub Issues workflow bundle.
- Host: GitHub
- URL: https://github.com/cgaravitoq/my-opencode
- Owner: cgaravitoq
- License: mit
- Created: 2026-05-22T22:50:49.000Z (11 days ago)
- Default Branch: main
- Last Pushed: 2026-05-30T16:29:37.000Z (4 days ago)
- Last Synced: 2026-05-30T18:12:48.063Z (4 days ago)
- Topics: ai-agents, automation, bun, code-review, coding-agent, developer-tools, github-issues, opencode, typescript
- Language: TypeScript
- Homepage: https://github.com/cgaravitoq/my-opencode
- Size: 127 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# my-opencode
Public, versioned [OpenCode](https://opencode.ai) configuration for a multi-agent coding workflow: global agents, reusable skills, review guardrails, and a per-repo GitHub Issues bundle template. Clone it on any machine, run the installer, and your OpenCode setup is ready.
## What's inside
```
.
├── opencode.json # Main config: model, providers, MCP servers, permissions
├── AGENTS.md # Opinionated global rules loaded into every agent
├── package.json # OpenCode plugin dependencies
├── agents/ # Custom agents
│ ├── architect.md # Primary orchestrator (GitHub-Issues-aware + ad-hoc) — Opus 4.8 max
│ ├── coder.md # Primary fast-path agent for trivial changes — Opus 4.8 max
│ ├── exec.md # Subagent: implementer driven by pipeline-execution — GPT-5.5
│ ├── reviewer.md # Subagent: review-fix loop owner + PR opener — Opus 4.8 medium
│ ├── fixer.md # Subagent: applies blocker deltas from reviewer — GPT-5.5
│ └── reviewer-*.md # Four read-only swarm reviewers
├── skills/ # Global skills; also installable per repo with `bunx skills add ... --all`
│ ├── pipeline-execution/ # Generic exec → reviewer → fixer → PR pipeline (tracker-agnostic)
│ └── swarm-review/ # Multi-model parallel code review (used by `coder` fast path)
├── templates/
│ └── github-issues-skill/ # GitHub Issues bundle template — installed PER REPO via `bun run install-issues-bundle`
├── scripts/
│ └── cli.ts # Bun CLI: `setup`, `cleanup`, `install-skills`, `install-issues-bundle`
├── .opencode/
│ ├── plugins/ # Global OpenCode plugins symlinked into ~/.config/opencode/plugins/
│ │ └── review-guardrails.ts # Publish gate: blocks `git push` / `gh pr create` until review-state authorizes
│ └── tools/ # Global OpenCode tools symlinked into ~/.config/opencode/tools/
│ └── review-state.ts # Custom tool owning review-fix loop state (consumed by `agents/reviewer.md`)
└── .gitignore
```
## Setup on a new machine
### 1. Install OpenCode
```bash
curl -fsSL https://opencode.ai/install | bash
```
### 2. Clone this repo
```bash
git clone https://github.com/cgaravitoq/my-opencode.git ~/code/my-opencode
cd ~/code/my-opencode
```
### 3. Run the installer
```bash
bun run setup
```
This symlinks every file in this repo into `~/.config/opencode/`. Existing files are backed up to `.backup` before being replaced. Re-run any time you add new agents or skills to the repo (existing symlinks resolve through `git pull` automatically; only new files need re-linking).
### 4. Subscribe to OpenCode Go (optional, recommended)
The reviewer subagents use models from [OpenCode Go](https://opencode.ai/go) ($10/month). Subscribe and connect:
```bash
opencode
# in the TUI:
/connect
# select OpenCode Go and paste the API key
```
### 5. Verify
```bash
opencode
# in the TUI:
/agents # should list: architect, coder, exec, reviewer, fixer, reviewer-arch, reviewer-reasoning, reviewer-e2e, reviewer-quick
/models # should include anthropic/claude-opus-4-8, anthropic/claude-sonnet-4-6, openai/gpt-5.5, opencode-go/deepseek-v4-pro, opencode-go/deepseek-v4-flash
```
## Install skills into the current repo
Use this when OpenCode is already configured globally and you only want this repo's reusable skills in the project you're currently in:
```bash
cd /path/to/target-repo
bunx skills add cgaravitoq/my-opencode --all
```
That installs `pipeline-execution` and `swarm-review` into `.agents/skills/` and writes `skills-lock.json`. It does not install global agents, plugins, or tools; run `bun run setup` from this repo once for those.
From a local checkout of this repo, the equivalent target-repo installer is:
```bash
bun run install-skills /path/to/target-repo
```
## How it works
### Layers
**Global layer** (lives in `~/.config/opencode/`, symlinked from this repo):
- 5 + 4 agents (primaries + swarm).
- 2 skills: `pipeline-execution` (the code-shipping pipeline) and `swarm-review` (used by the `coder` fast path).
**Per-repo skills layer** (lives in each repo's `.agents/skills/`):
- Installed from the public repo with `bunx skills add cgaravitoq/my-opencode --all`.
- Adds the reusable skills to that repo without touching global OpenCode config.
**Per-repo GitHub Issues layer** (lives in each repo's `.agents/skills/github-issues/`):
- One GitHub Issues bundle per repo. Defines that repo's status-label flow, sub-skills, and shaping rules.
- Installed once per repo via `bun run install-issues-bundle /path/to/repo`. After install, you customize it for your label conventions.
- The architect auto-detects the bundle and uses it for issue-mode requests in that repo. No bundle = ad-hoc only.
### Agents
Two primary agents — switch with **Tab** in the TUI:
- `architect` — orchestrator. Auto-detects the per-repo GitHub Issues bundle if present, falls back to ad-hoc otherwise. All code work goes through the global `pipeline-execution` skill.
- `coder` — fast path for trivial changes (one-line fixes, renames, doc tweaks). Optionally delegates to the `reviewer-*` swarm via the `swarm-review` skill.
The pipeline subagents are invoked by `pipeline-execution` (not the architect directly):
- `exec` — implementer. Commits one task per call to the parent branch.
- `reviewer` — review-fix loop owner. Invokes swarm + fixer, runs final verify gate, opens the draft PR.
- `fixer` — applies blocker deltas. Surgical only.
| Agent | Mode | Model | Lab | Specialty |
|---|---|---|---|---|
| `architect` | primary | Claude Opus 4.8 (max) | Anthropic | Orchestrator. Per-repo GitHub Issues bundle aware. |
| `coder` | primary | Claude Sonnet 4.6 (medium) | Anthropic | Fast-path coder for trivial changes. |
| `exec` | subagent | GPT-5.5 (low) | OpenAI | Implementer (invoked via `pipeline-execution`). |
| `reviewer` | subagent | Claude Opus 4.8 (medium) | Anthropic | Review-fix loop owner + PR opener. |
| `fixer` | subagent | GPT-5.5 (medium) | OpenAI | Applies blocker deltas from reviewer. |
| `reviewer-quick` | subagent | DeepSeek V4 Flash | DeepSeek | Fast first-pass: typos, copy-paste errors. |
| `reviewer-arch` | subagent | DeepSeek V4 Pro | DeepSeek | Architecture, design patterns, abstractions. |
| `reviewer-reasoning` | subagent | DeepSeek V4 Pro | DeepSeek | Logic correctness, edge cases, error paths. |
| `reviewer-e2e` | subagent | DeepSeek V4 Pro (1M ctx) | DeepSeek | Cross-file impact, integration, breaking changes. |
### Pipeline (`skills/pipeline-execution/`)
The single shared implementation pipeline. Tracker-agnostic. Used by the architect (ad-hoc) and by per-repo GitHub Issues bundles (when their `*-to-execution` step needs to ship code).
```text
pipeline-execution (skill)
├─ task → exec (GPT-5.5) implement task on parent branch
└─ task → reviewer (Opus 4.8 medium)
├─ task → reviewer-* (swarm, parallel) audit
├─ task → fixer (GPT-5.5) ← loop ≤3
└─ push parent branch
└─ open draft PR with `hitl` | `hitl-blocked` label
```
Diversity by design: planner (Anthropic Opus), executor (OpenAI GPT-5.5), reviewer orchestrator (Anthropic Opus) + a DeepSeek swarm (V4 Flash for fast smoke checks, V4 Pro for architecture, deep reasoning, and 1M-context cross-file review). Three labs (Anthropic, OpenAI, DeepSeek) avoid shared blind spots while keeping costs low.
### Publish gate (`.opencode/plugins/` + `.opencode/tools/`)
The loop above is enforced by two global files symlinked into `~/.config/opencode/` by the installer. `.opencode/plugins/review-guardrails.ts` intercepts `git push` and `gh pr create` and blocks them until the branch has been authorized — that's why pushes can error with `publish gated by review-state for branch `. Authorization lives in `.opencode/tools/review-state.ts`, the custom tool the `reviewer` agent uses to track the review-fix loop and mark a branch ready to publish (see `agents/reviewer.md` "Loop State (hard gate)"). Add your own plugins or tools by dropping `.ts`/`.js` files into these directories and re-running `bun run setup`.
### Context window tuning
OpenCode does not expose an agent-level knob that shrinks or expands a model's usable context window. For built-in providers, OpenCode loads model limits from Models.dev automatically. For custom providers or custom model entries, configure `provider..models..limit.context` and `limit.output` so OpenCode knows the model's real capacity.
Use `compaction` for session behavior around that capacity:
```json
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": true,
"reserved": 10000
}
}
```
`reserved` leaves a token buffer before compaction. It does not increase the model's actual context window.
### GitHub Issues bundle (per repo)
Each repo that wants GitHub Issues integration installs its own bundle in `.agents/skills/github-issues/`:
```bash
# from this template repo
bun run install-issues-bundle /path/to/your/repo
# or from anywhere, pointing at the target
bun --cwd /path/to/template run install-issues-bundle /path/to/your/repo
```
Default template (under `templates/github-issues-skill/`) ships with an opinionated flow, encoded as `status:*` labels:
```
status:idea → status:draft → status:prd → status:running → status:hitl → status:ready
```
Exactly one `status:*` label is active per issue at any time. Transitions are always atomic: `gh issue edit --remove-label status:A --add-label status:B`.
Sub-skills:
- `idea-to-issue/` — capture a raw idea (single issue or parent issue + initial drafts via tasklist).
- `project-to-draft/` — split an existing parent issue into `status:draft` child slices.
- `draft-to-prd/` — three-phase guided interview to promote a draft to PRD.
- `prd-to-execution/` — GitHub Issues bookkeeping for executing a PRD. Code work is delegated to `pipeline-execution`.
After install, edit:
1. `/.agents/skills/github-issues/SKILL.md` — change `status:*` label names if you prefer different conventions (e.g. `status:prd` → `status:spec-ready`, `status:hitl` → `status:in-review`).
2. Sub-skill bodies — adjust shaping rules (e.g. always-parent-issue vs single-issue intake, more or fewer interview phases, etc.).
3. Seed the labels in the repo (see `references/status-mapping.md` "Seeding labels" — short bash loop using `gh label create`).
Different repos can have completely different label flows. The architect doesn't care — it reads each repo's bundle and adapts.
Trigger phrases for issue mode (Spanish or English):
- "tengo una idea" / "I have an idea"
- "captura esto" / "capture this"
- "trabajemos en #42" / "let's work on #42"
- "abordemos esta issue" / "execute owner/repo#42"
- "promote to PRD"
The architect routes by **current `status:*` label** as defined in the active repo's bundle, not by the verb you used.
### Swarm review skill (`skills/swarm-review/`)
Fallback path for the `coder` fast path. The full pipeline does not use this skill — `pipeline-execution`'s `reviewer` agent owns swarm orchestration directly.
Trigger phrases when invoked from `coder`:
- "audita el código" / "audit my code"
- "revisa mi implementación" / "review this"
- "second opinion"
- "qué se me escapó"
- "lanza el swarm"
Picks a subset of reviewers based on change size, runs them in parallel, consolidates findings into a prioritized summary.
Background subagents must be enabled for real wall-clock parallelism:
```bash
export OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true
export OPENCODE_REVIEW_SWARM_CAP=32
```
The swarm cap is a guardrail against runaway reviewer loops. `32` supports four full PR swarms (`4 PRs × 4 reviewers`) plus follow-up quick checks.
### Emergency bypass
If the `review-guardrails` plugin blocks a `git push` / `gh pr create` due to corrupted or stale loop state (e.g. an interrupted process that left `review-state` mid-write), set `OPENCODE_REVIEW_BYPASS=1` for the current process to skip the publish gate entirely:
```bash
OPENCODE_REVIEW_BYPASS=1 git push
```
Use it only as an escape hatch — bypassing the gate also disables the swarm-budget cap, so a runaway reviewer loop can keep spawning subagents past `OPENCODE_REVIEW_SWARM_CAP`. Prefer inspecting or deleting the offending state file first: `$XDG_STATE_HOME/opencode/review-state//.json` (defaults to `~/.local/state/opencode/review-state/...`).
## MCPs
The canonical `opencode.json` ships with only the MCP server used by the agents and skills in this template: `sequential-thinking`. GitHub Issues integration goes through the `gh` CLI directly — no MCP required.
### Optional MCPs you can plug in
Drop any of these into `opencode.json` under `"mcp"` if you want them. None are required by the template.
- **cloudflare** — Cloudflare Workers / DNS / KV management. Remote server, no install: `{ "type": "remote", "url": "https://mcp.cloudflare.com/mcp" }`.
- **tavily** — web search and content extraction. Remote server, requires a Tavily API key in the auth flow: `{ "type": "remote", "url": "https://mcp.tavily.com/mcp/" }`.
- **vercel** — Vercel projects, deployments, env vars. Remote server, no install: `{ "type": "remote", "url": "https://mcp.vercel.com" }`.
- **btca** — local MCP for users who have the `btca` CLI installed: `{ "type": "local", "command": ["bun", "x", "btca", "mcp"] }`.
## Working across repos
The architect adapts to whatever repo you're in:
- **Repo with `.agents/skills/github-issues/`** — architect loads that bundle and routes issue-mode requests through it. Each repo can have its own label names and flow (e.g. `status:prd` vs `status:spec-ready`, 6-state vs 11-state flow).
- **Repo without a bundle** — only ad-hoc mode is available. Architect asks if you want to install one (`bun run install-issues-bundle `) or proceed without issue tracking.
- **Trivial change** — invoke `coder` directly. Skips the pipeline.
Code work always goes through the global `pipeline-execution` skill — same `exec → reviewer → fixer → PR` everywhere. The per-repo bundle only handles GitHub Issues bookkeeping.
To install the GitHub Issues bundle in a new repo:
```bash
# from the template repo, pointing at the target
bun --cwd ~/code/my-opencode run install-issues-bundle /path/to/repo
# from inside the template repo, defaults to $(pwd)
bun run install-issues-bundle /path/to/repo
# overwrite an existing bundle (auto-backed-up)
bun run install-issues-bundle /path/to/repo --force
```
After install, edit `/.agents/skills/github-issues/SKILL.md` and the sub-skills to match your label conventions. Seed the labels with `gh label create` (see `references/status-mapping.md` in the bundle). Commit the bundle to the repo so the rest of the team (and your other machines) get the same setup.
## Updating the config
Edit files **in this repo** (not in `~/.config/opencode/` — those are symlinks). Commit and push. On other machines, `git pull` and changes apply immediately (symlinks resolve to the repo).
If you ever pull a version of this repo that removed a globally-symlinked file, the old symlink becomes a dangling pointer. Re-run `bun run cleanup && bun run setup` once to refresh.
## Uninstalling
```bash
bun run cleanup
```
Removes only the symlinks pointing into this repo; restores `.backup` files if they exist.
## Security
- **Never commit secrets.** `gh` CLI uses its own keyring-backed token (`gh auth login`) — no `.env` file or `{env:VAR_NAME}` references are required for anything shipped here. Remote MCPs added later (e.g. `vercel`, `cloudflare`) authenticate through OpenCode's `/connect` OAuth flow.
- The `.gitignore` excludes `.env` and `*.backup` so future env-var-backed integrations stay out of git.
- Rotate any token that ever ended up in a commit, even after deleting it — git history keeps everything.